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

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

  • Upload
    sqalab

  • View
    872

  • Download
    1

Embed Size (px)

DESCRIPTION

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

Citation preview

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

Методы раннего обнаруженияМетоды раннего обнаруженияошибокошибок

Андрей Уразов – 2011Андрей Уразов – 2011

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

Ход доклада

Введение: жизненные примеры Методы обнаружения:

Модульное и функциональное тестирование Динамический и статический анализ Обзоры кода

Сравнение Внедрение в производственный процесс

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

Насколько страшны ошибки

Отзывы автомобилей, электроники с рынка из-за ошибок ПО (миллионы USD)

Ариан 5 ($370 млн.) Терак-25 (3 человеческих жизни) По оценке NIST программные ошибки стоят

экономике США $60 млрд ежегодно

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

Кто мог это написать?

Ошибка обнаружена инструментом Parasoft C++test в коде ОС Android для смартфона HTC Incredible

Подумайте, что можно найти в нашем с вами коде!

wake_up(&sb->s_wait_unfrozen);if (sb) deactivate_locked_super(sb);

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

Модульное тестирование

Проверка правильности отдельных программных единиц

Уровень функции, метода или класса Автоматизированное создание тестов

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

Модульное тестирование: как это работает?

Определяем: Входные данные Ожидаемый результат Заглушки для связанных сущностей

Как выглядят ошибки: Функция вернула 0, ожидаемый результат – 15 Произошло деление на 0 в строке 15

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

Функциональное тестирование

Проверка правильности работы приложения в целом

Тестируется взаимодействие компонентов Возможна автоматизация

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

Функциональное тестирование: как это работает

Определяем входные данные, последовательность действий

Исполняем Отслеживаем результат и сверяем с ожидаемым Как выглядят ошибки:

Должна отобразиться картинка А, но отобразилась картинка B

Произведена недопустимая операция в файле X на строке Y

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

Динамический анализ

Отслеживание свойств программы во время исполнения

Определяемые ошибки: Критические (деление на ноль и др.) Проблемы безопасности Проблемы с памятью Уязвимости безопасности Проблемы многопоточности

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

Динамический анализ: как это работает?

Инструментируем приложение Исполняем его по определенным сценариям Как выглядят ошибки:

Утечка памяти в файле X на строке L, соответствующая выделению памяти в файле X1 на строке L1

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

Статический анализ

Автоматизированный анализ исходного кода программы без его исполнения

Виды анализа: Синтаксический (простые ошибки, стиль написания) Потоковый (ошибки динамической природы) Метрики

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

Статический анализ: как это работает?

Parasoft Jtest находит ошибку в коде Apache-Ant-1.7.0beta1 (ClassNotFound-Exception не обрабатывается должным образом и приводит к NPE)

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

Обзоры кода

Просмотр кода участниками проекта Как выглядят ошибки:

Вася, на этой строке кода у тебя может возникнуть целочисленное переполнение

А здесь, в критически важном месте, у тебя неэффективный SQL-запрос

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

Сравнение

Классы обнаруживаемых ошибок Локализация ошибок Применимость на разных стадиях проекта Требуемые временные вложения Точность:

Ложно положительные Ложно отрицательные

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

Особенности: модульное тестирование

Обнаружение: несоответствие реального поведения ожидаемому

Локализация: внутримодульная Применимость: от начала проекта Временные вложения: высокие Ложно положительные: редко Ложно отрицательные: часто (зависит от

покрытия)

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

Особенности: функциональное тестирование

Обнаружение: несоответствие реального поведения ожидаемому

Локализация: внутри- и межмодульная Применимость: при наличии прототипа

приложения Временные вложения: высокие Ложно положительные: крайне редко Ложно отрицательные: часто

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

Особенности: динамический анализ

Обнаружение: уязвимости, ошибки времени исполнения

Локализация: внутри- и межмодульная Применимость: при наличии прототипа

приложения Временные вложения: от низких до высоких Ложно положительные: крайне редко Ложно отрицательные: часто

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

Особенности: статический анализ

Обнаружение: уязвимости, ошибки времени исполнения, логические ошибки, архитектурные просчеты и др.

Локализация: внутри- и межмодульная Применимость: от начала проекта Временные вложения: низкие Ложно положительные: зависит от инструмента Ложно отрицательные: зависит от инструмента

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

Особенности: обзоры кода

Обнаружение: любые виды ошибок Локализация: внутри- и межмодульная Применимость: от начала проекта Временные вложения: высокие Ложно положительные: редко Ложно отрицательные: часто

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

Что сделать для эффективного обнаружения

Сделать обнаружение ошибок НЕПРЕРЫВНОЙ частью процесса

АВТОМАТИЗИРОВАТЬ обнаружение настолько, насколько это возможно

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

Построение процесса обеспечения качества

Использование системы контроля кода Определение политики качества, используемых

практик обнаружения ошибок Автоматизированное тестирование каждую ночь Каждое утро участники проекта получают

набор обнаруженных ошибок Список видов автоматически определяемых

ошибок расширяется по необходимости

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

Благодарность

Спасибо за внимание :-)

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

Вопросы

Сколько стоят ошибки в проекте, над которым я работаю?

Что бы мы могли сделать для более эффективного обнаружения ошибок?