Андрей Уразов - Методы раннего обнаружения ошибок

1,063 views

Published on

Доклад на SQA Days-9, Казань, 22-23 апреля 2011

Published in: Education, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,063
On SlideShare
0
From Embeds
0
Number of Embeds
69
Actions
Shares
0
Downloads
28
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Андрей Уразов - Методы раннего обнаружения ошибок

  1. 1. Методы раннего обнаружения ошибок Андрей Уразов – 2011
  2. 2. Ход доклада Введение: жизненные примеры Методы обнаружения:  Модульное и функциональное тестирование  Динамический и статический анализ  Обзоры кода Сравнение Внедрение в производственный процесс
  3. 3. Насколько страшны ошибки Отзывы автомобилей, электроники с рынка из- за ошибок ПО (миллионы USD) Ариан 5 ($370 млн.) Терак-25 (3 человеческих жизни) По оценке NIST программные ошибки стоят экономике США $60 млрд ежегодно
  4. 4. Кто мог это написать? wake_up(&sb->s_wait_unfrozen); if (sb) deactivate_locked_super(sb); Ошибка обнаружена инструментом Parasoft C++test в коде ОС Android для смартфона HTC Incredible Подумайте, что можно найти в нашем с вами коде!
  5. 5. Модульное тестирование  Проверка правильности отдельных программных единиц  Уровень функции, метода или класса  Автоматизированное создание тестов
  6. 6. Модульное тестирование: как это работает?  Определяем:  Входные данные  Ожидаемый результат  Заглушки для связанных сущностей  Как выглядят ошибки:  Функция вернула 0, ожидаемый результат – 15  Произошло деление на 0 в строке 15
  7. 7. Функциональное тестирование  Проверка правильности работы приложения в целом  Тестируется взаимодействие компонентов  Возможна автоматизация
  8. 8. Функциональное тестирование: как это работает  Определяем входные данные, последовательность действий  Исполняем  Отслеживаем результат и сверяем с ожидаемым  Как выглядят ошибки:  Должна отобразиться картинка А, но отобразилась картинка B  Произведена недопустимая операция в файле X на строке Y
  9. 9. Динамический анализ  Отслеживание свойств программы во время исполнения  Определяемые ошибки:  Критические (деление на ноль и др.)  Проблемы безопасности  Проблемы с памятью  Уязвимости безопасности  Проблемы многопоточности
  10. 10. Динамический анализ: как это работает?  Инструментируем приложение  Исполняем его по определенным сценариям  Как выглядят ошибки:  Утечка памяти в файле X на строке L, соответствующая выделению памяти в файле X1 на строке L1
  11. 11. Статический анализ  Автоматизированный анализ исходного кода программы без его исполнения  Виды анализа:  Синтаксический (простые ошибки, стиль написания)  Потоковый (ошибки динамической природы)  Метрики
  12. 12. Статический анализ: как это работает?Parasoft Jtestнаходит ошибкув коде Apache-Ant-1.7.0beta1(ClassNotFound-Exception необрабатываетсядолжнымобразом иприводит к NPE)
  13. 13. Обзоры кода  Просмотр кода участниками проекта  Как выглядят ошибки:  Вася, на этой строке кода у тебя может возникнуть целочисленное переполнение  А здесь, в критически важном месте, у тебя неэффективный SQL-запрос
  14. 14. Сравнение  Классы обнаруживаемых ошибок  Локализация ошибок  Применимость на разных стадиях проекта  Требуемые временные вложения  Точность:  Ложно положительные  Ложно отрицательные
  15. 15. Особенности: модульное тестирование  Обнаружение: несоответствие реального поведения ожидаемому  Локализация: внутримодульная  Применимость: от начала проекта  Временные вложения: высокие  Ложно положительные: редко  Ложно отрицательные: часто (зависит от покрытия)
  16. 16. Особенности: функциональное тестирование  Обнаружение: несоответствие реального поведения ожидаемому  Локализация: внутри- и межмодульная  Применимость: при наличии прототипа приложения  Временные вложения: высокие  Ложно положительные: крайне редко  Ложно отрицательные: часто
  17. 17. Особенности: динамический анализ  Обнаружение: уязвимости, ошибки времени исполнения  Локализация: внутри- и межмодульная  Применимость: при наличии прототипа приложения  Временные вложения: от низких до высоких  Ложно положительные: крайне редко  Ложно отрицательные: часто
  18. 18. Особенности: статический анализ  Обнаружение: уязвимости, ошибки времени исполнения, логические ошибки, архитектурные просчеты и др.  Локализация: внутри- и межмодульная  Применимость: от начала проекта  Временные вложения: низкие  Ложно положительные: зависит от инструмента  Ложно отрицательные: зависит от инструмента
  19. 19. Особенности: обзоры кода  Обнаружение: любые виды ошибок  Локализация: внутри- и межмодульная  Применимость: от начала проекта  Временные вложения: высокие  Ложно положительные: редко  Ложно отрицательные: часто
  20. 20. Что сделать для эффективного обнаружения  Сделать обнаружение ошибок НЕПРЕРЫВНОЙ частью процесса  АВТОМАТИЗИРОВАТЬ обнаружение настолько, насколько это возможно
  21. 21. Построение процесса обеспечения качества  Использование системы контроля кода  Определение политики качества, используемых практик обнаружения ошибок  Автоматизированное тестирование каждую ночь  Каждое утро участники проекта получают набор обнаруженных ошибок  Список видов автоматически определяемых ошибок расширяется по необходимости
  22. 22. Благодарность Спасибо за внимание :-)
  23. 23. Вопросы Сколько стоят ошибки в проекте, над которым я работаю? Что бы мы могли сделать для более эффективного обнаружения ошибок?

×