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

Post on 05-Jul-2015

872 views 1 download

description

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

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

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

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

Ход доклада

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обзоры кода

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

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

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

Сравнение

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

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

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

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

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

покрытия)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вопросы

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

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