43

Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Embed Size (px)

Citation preview

Page 1: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:
Page 2: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Методы, направленные на проектирование качественного ПО ◦ Формальные спецификации

◦ Синтез ПО на основе спецификаций и моделей (MDD, etc)

◦ Контрактное программирование (Design by contracts)

◦ И т.п.

Методы, направленные на обеспечение качества существующего ПО

Ицыксон В.М. Технологии разработки ПО © 2012

Page 3: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Верификация - подтверждение на основе представления объективных свидетельств того, что установленные требования были выполнены

Валидация - подтверждение на основе представления объективных свидетельств того, что требования, предназначенные для конкретного использования или применения, выполнены, декларируемые свойства и характеристики подтверждаются, а поставленная цель (предназначение системы, комплекса, устройства и т. д.) достигнута.

Ицыксон В.М. Технологии разработки ПО © 2012

Спецификация требований

Программное обеспечение

Потребность заказчика Верификация Валидация

Page 4: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

По используемым формализмам ◦ Формальные методы ◦ Неформальные методы

По необходимости запуска анализируемой программы ◦ Динамические ◦ Статические ◦ Гибридные

По уровню автоматизации ◦ Ручные ◦ Автоматизированные ◦ Автоматические

Ицыксон В.М. Технологии разработки ПО © 2012

Page 5: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Динамические методы ◦ Тестирование ◦ Профилирование ◦ Динамический анализ

Мониторинг Анализ трасс исполнения Контрактное программирование

◦ …

Статические методы ◦ Формальная верификация

Дедуктивная верификация Model checking (методы проверки модели)

◦ Статический анализ ◦ Трансформации программ

Рефакторинги Модификации

◦ Аудит

Ицыксон В.М. Технологии разработки ПО © 2012

Page 6: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Верификация - подтверждение соответствия конечного продукта функциональной спецификации

Формальная верификация – доказательство корректности с помощью формальных методов

Используемые методы и мат. аппарат ◦ Пропозициональные логики ◦ Темпоральные логики ◦ Формальные семантики ◦ Формальные преобразования программ ◦ Формальные спецификации ◦ Логика Хоара ◦ Сепарационная логика (separation logic) ◦ И т.п.

Наиболее известные подходы: ◦ Верификация методом Хоара (на основе троек Хоара) ◦ Верификация по Флойду

Ицыксон В.М. Технологии разработки ПО © 2012

Page 7: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Достоинства: ◦ В случае успеха – в программе нет ошибок!

Недостатки: ◦ Формальные спецификации на порядок сложнее

программ ◦ Для большинства программ задача формального

доказательства корректности – очень трудоёмка ◦ Для некоторых случаев – задача формального

доказательства корректности – неразрешима В реальных системах при формальной верификации

рассматривают часть системы и частичные спецификации Редко применяется для обеспечения качества программных

систем общего назначения

Ицыксон В.М. Технологии разработки ПО © 2012

Page 8: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Проверка модели, проверка на модели, model checking

Метод формальной верификации для систем с конечным числом состояний

Позволяет проверить, удовлетворяет или нет система некоторому свойству (требованию)

Ицыксон В.М. Технологии разработки ПО © 2012

Page 9: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Исследуемая система приводится к модели с конечным числом состояний (например, модель Крипке)

Проверяемые свойства представляются формулами темпоральной логики (LTL, ALTL, CTL, CTL* и т.д.)

Проверка модели – формальная проверка выполнимости формулы на модели ◦ Результат проверки:

Формула выполняется Формула не выполняется. Контрпример.

◦ Существуют методы проверки систем с 10100-200 состояний

Ицыксон В.М. Технологии разработки ПО © 2012

Page 10: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Ицыксон В.М. Технологии разработки ПО © 2012

Page 11: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Ограничения ◦ Проверяются свойства, связанные только с

корректностью смены состояний ◦ Не все свойства представляются в виде

темпоральных формул ◦ В общем случае задача - NP-полная ◦ В общем случае неформализуется переход от

реальной системы к модели с конечным числом состояний

Программные средства: ◦ SPIN ◦ NuSMV ◦ …

Ицыксон В.М. Технологии разработки ПО © 2012

Page 12: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Ошибки ◦ Функциональные ошибки

◦ Нефункциональные ошибки (дефекты)

Проявление дефектов: ◦ Сбои ПО

◦ Зависания ПО

◦ Аварийное завершение ПО

◦ Уязвимости

◦ Отсутствие проявлений

◦ …

Ицыксон В.М. Технологии разработки ПО © 2012

Page 13: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Динамические методы: ◦ Тестирование

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

Статические методы: ◦ Статический анализ

◦ Верификация (частично)

Ицыксон В.М. Технологии разработки ПО © 2012

Page 14: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Использует исходный код ПО для анализа

Применяется для ◦ Форматирования программ

◦ Вычисления программных метрик

◦ Оптимизации программ

◦ Распараллеливания программ

◦ Преобразования программ

◦ Обфускации программ

◦ Деобфускации программ

◦ Обнаружения дефектов

◦ …

Ицыксон В.М. Технологии разработки ПО © 2012

Page 15: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Цель – обнаружение дефектов в программном коде

Использует исходный код ПО для анализа

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

Позволяет проанализировать все наборы входных данных

Может быть полностью автоматизирован

Позволяет обнаружить нефункциональные дефекты

Ицыксон В.М. Технологии разработки ПО © 2012

Page 16: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Основные виды дефектов: ◦ Неправильная работа с буферами:

Переполнение буферов Выход за границу массива …

◦ Неправильная работа с динамической памятью: Утечки памяти «Висячие» указатели Разыменование нулевого указателя …

◦ Использование неинициализированных переменных ◦ Ошибки работы с объектами ◦ Ошибки работы с библиотечными функциями ◦ Ошибки работы со строками ◦ Арифметические ошибки ◦ И т.п.

Ицыксон В.М. Технологии разработки ПО © 2012

Page 17: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Используемые методы ◦ Интервальный анализ

◦ Поиск достижимости

◦ Анализ указателей

◦ Ресурсный анализ

◦ Сигнатурный анализ

◦ …

Ицыксон В.М. Технологии разработки ПО © 2012

Page 18: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Ицыксон В.М. Технологии разработки ПО © 2012

Page 19: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Достоинства СА:

◦ Обнаружение дефектов на ранних стадиях

◦ Сокращение стоимости разработки, отладки, тестирования, сопровождения

Недостатки СА:

◦ Невозможность обнаруживать функциональные ошибки

◦ Недостаточность информации о путях выполнения -> наличие ложных обнаружений

◦ Невозможность обнаружить все ошибки статически

◦ Высокие требования к вычислительным ресурсам

Ицыксон В.М. Технологии разработки ПО © 2012

Page 20: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Программные средства анализа кода и поиска дефектов: ◦ IBM Rational Code Analyzer ◦ Coverity Prevent ◦ Fortify 360 ◦ Klocwork ◦ Flexlint/PCLint ◦ Splint ◦ Microsoft PREFix/PreFast ◦ ParaSoft C++Test ◦ Frama-C ◦ Aegis (http://digiteklabs.ru/aegis) ◦ …(более 20)

Ицыксон В.М. Технологии разработки ПО © 2012

Page 21: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Формальные трансформации программ: ◦ Эквивалентные трансформации –рефакторинг

◦ Неэквивалентные трансформации (модификации, эволюции)

Ицыксон В.М. Технологии разработки ПО © 2012

Page 22: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Рефакторинг – преобразование программной системы: ◦ изменяющее (улучшающее) внутреннюю структуру

программного

◦ не меняющее его видимое поведение

Цель рефакторинга – улучшить внутреннюю структуру программы, избавиться от неудачного, устаревшего или трудно поддерживаемого кода

Наиболее часто используется объектно-ориентрованный рефакторинг – рефакторинг ОО-систем

Рефакторинг – сложная рутинная операция, потенциально способная вносить дополнительные ошибки в программный код

Ицыксон В.М. Технологии разработки ПО © 2012

Page 23: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Автоматизированный рефакторинг – набор процедур, встроенных в среду разработки, позволяющих автоматизировано осуществлять преобразование программ с одновременным контролем корректности модификации

Автоматизированный рефакторинг реализован: ◦ MS Visual Studio ◦ Borland Developer Studio (Delphi, C++) ◦ NetBeans ◦ Idea ◦ Eclipse ◦ И т.п.

Перспективное направление – проведение рефакторинга на основе метрического покрытия программы

Ицыксон В.М. Технологии разработки ПО © 2012

Page 24: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Группа методов, направленных на улучшение отдельных свойств программы

Например: ◦ Внедрение защитного кода

◦ Интеграция инвариантов, предусловий и постусловий

◦ …

Ицыксон В.М. Технологии разработки ПО © 2012

Page 25: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Тестирование – процесс выполнения программы с целью выявления ошибок

Полная проверка программы – исчерпывающее тестирование. В реальности практически не осуществимо

Тестирование обеспечивает: ◦ Обнаружение ошибок ◦ Демонстрацию соответствия функций программы ее назначению ◦ Демонстрацию реализации требований к характеристикам программы ◦ Отображение надежности как одной из характеристик качества

Тестирование не может показать отсутствие ошибок! Тестирование может только показать наличие ошибок!

«Тестирование программ может служить для доказательства наличия

ошибок, но никогда не докажет их отсутствия!» Э.Дейкстра. Заметки по структурному программированию

Ицыксон В.М. Технологии разработки ПО © 2012

Page 26: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Виды тестирования ◦ Функциональное тестирование

Тестирование «черного ящика»

◦ Структурное тестирование

Тестирование «белого ящика»

◦ Смешанное тестирование

Тестирование «серого ящика»

Ицыксон В.М. Технологии разработки ПО © 2012

Page 27: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Тестирование «белого ящика»

Тестирование производится на основе знания внутренней структуры программы

Проверяется корректность построения элементов программы и их взаимодействие друг с другом

Ицыксон В.М. Технологии разработки ПО © 2012

Page 28: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Тестирование «черного ящика»

Проверка соответствия проверяемого объекта спецификации

Поведение программной системы оценивается путем подачи воздействий и анализа реакции

Желательно найти ◦ Набор входных данных, при которых система ведет себя

аномально ◦ Набор выходных данных, демонстрирующих дефекты

программы

Ицыксон В.М. Технологии разработки ПО © 2012

Page 29: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Основные составляющие процесса: ◦ Тестирование элементов

◦ Тестирование интеграции

◦ Системное тестирование

◦ Тестирование правильности

Ицыксон В.М. Технологии разработки ПО © 2012

Page 30: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Ицыксон В.М. Технологии разработки ПО © 2012

Page 31: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Тестирование модулей, unit-тестирование

Обычно проводится разработчиком

Основные подходы ◦ Тестирование «белого ящика»

◦ Тестирование «чёрного ящика»

Ицыксон В.М. Технологии разработки ПО © 2012

Page 32: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Тестированию должны быть подвергнуты ◦ Внутренние структуры данных

◦ Независимые траектории функционирования

◦ Циклы

◦ Ветвления

◦ Рекурсии

◦ Траектории обработки ошибочных ситуаций

◦ Граничные условия

◦ Интерфейс модуля

◦ И т.п.

Ицыксон В.М. Технологии разработки ПО © 2012

Page 33: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Необходимо обеспечить полное тестовое покрытие – каждый участок кода выполняется хотя бы одним тестовым случаем

Полное тестовое покрытие не гарантирует выполнение всех путей программы!

Разработка модульных тестов может: ◦ Вестись после кодирования ◦ Вместе с кодированием ◦ До кодирования (*)

Ицыксон В.М. Технологии разработки ПО © 2012

Page 34: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Цель – протестировать ошибки интерфейсов между компонентами ◦ Потеря данных между модулями

◦ Взаимное влияние модулей

◦ Невыполнение общей функции системы

◦ Накапливание ошибок при интеграции

◦ Несоблюдение протокола

◦ И т.п.

Используется тестирование «черного ящика»

Ицыксон В.М. Технологии разработки ПО © 2012

Page 35: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

При нисходящем тестировании модули объединяются в иерархию сверху вниз

◦ Иерархия модулей строится сверху вниз ◦ Вместо всех модулей кроме корневого используются

заглушки ◦ (*) Одна из заглушек заменяется реальным модулем

(поиск в ширину или глубину) ◦ Проводится серия тестов ◦ Переход к (*)

Основное достоинство – возможность раннего тестирования главных управляющих функций

Основной недостаток – необходимость наличия заглушек

Ицыксон В.М. Технологии разработки ПО © 2012

Page 36: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

При восходящем тестировании модули объединяются в иерархию снизу вверх

◦ Модули нижнего уровня объединяются в группы (кластеры) по функциональному признаку

◦ Разрабатывается тестовое окружение (драйвер) для тестирования кластера

◦ Группа тестируется ◦ Драйвер удаляется. Группы объединяются в структуру

движением вверх

Основное достоинство – упрощается разработка тестовых вариантов, нет заглушек

Основной недостаток – системы нет как таковой до момента добавления последнего модуля

Ицыксон В.М. Технологии разработки ПО © 2012

Page 37: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Тестирование системных функций

Тестирование нефункциональных требований ◦ Тестирование восстановления

◦ Тестирование безопасности

◦ Стресс-тестирование

◦ Тестирование производительности

Ицыксон В.М. Технологии разработки ПО © 2012

Page 38: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Цель – подтвердить выполнение спецификации требований

Используется тестирование «черного ящика»

Проверяются выполнение всех требований. Создается список несоответствий (недостатков)

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

Ицыксон В.М. Технологии разработки ПО © 2012

Page 39: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Альфа-тестирование ◦ Тестированию подвергается альфа-версия

программной системы

◦ Тестирование производится разработчиком при участии представителей заказчика

Бета-тестирование ◦ Тестированию подвергается бета-версия

программной системы

◦ Тестирование производится заказчиком или специально отобранными конечными пользователями

Ицыксон В.М. Технологии разработки ПО © 2012

Page 40: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Регрессионное тестирование – повторный запуск тестов для ситуации, в которой раньше была обнаружена ошибка

У ошибок есть свойство повторяться Причины повторения

◦ Не до конца исправлена ◦ Ошибочно появилась при работе с СКВ ◦ Код был переписан и ошибка повторена ◦ Проявилась при других внешних условиях ◦ И т.п.

Поэтому – тестовые случаи накапливаются и прогоняются при изменениях программы

Ицыксон В.М. Технологии разработки ПО © 2012

Page 41: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

HP Mercury

IBM Rational

Borland

Compuware

UniTesk

Ицыксон В.М. Технологии разработки ПО © 2012

Page 42: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Отладка (debugging) – процесс устранения ошибок, найденных при тестировании

Отладка и тестирование – итерационная последовательность, направленная на локализацию и устранение ошибки

Ицыксон В.М. Технологии разработки ПО © 2012

Page 43: Методы, направленные на проектированиеkspt.ftk.spbstu.ru/media/files/2012/course/se/SE2012_10_Quality... · Основные виды дефектов:

Х-ка качества Проблема Обеспечение качества

1 Функциональность Функциональные

ошибки, несоответствие

спецификации

Верификация

Тестирование

2 Надежность Низкая надежность

Наличие уязвимостей

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

Тестирование

3 Практичность Сложность использования Тестирование*

4 Эффективность Проблемы с

производительностью,

ресурсами

Тестирование

Профилирование

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

5 Сопровождаемость Сложность сопровождения,

модификации

Рефакторинг

Документирование

6 Мобильность Несоответствие стандартам,

Сложность адаптации

Аудит, рефакторинг

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

Ицыксон В.М. Технологии разработки ПО © 2012