- •Стратегии тестирования: структурный подход – методы «белого» ящика, функциональный подход – методы «черного» ящика.
- •Структурное тестирование (тестирование маршрутов) – критерии формирования тестовых наборов: покрытие операторов.
- •Структурное тестирование (тестирование маршрутов) – критерии формирования тестовых наборов: покрытие решений (переходов).
- •Структурное тестирование (тестирование маршрутов) – критерии формирования тестовых наборов: покрытие условий.
- •Структурное тестирование (тестирование маршрутов) – критерии формирования тестовых наборов: покрытие решений/условий.
- •Структурное тестирование (тестирование маршрутов) – критерии формирования тестовых наборов: комбинаторное покрытие условий.
- •Функциональное тестирование (тестирование с управлением по данным) – критерии формирования тестовых наборов: эквивалентное разбиение.
- •Функциональное тестирование (тестирование с управлением по данным) – критерии формирования тестовых наборов: анализ граничных значений.
- •Функциональное тестирование (тестирование с управлением по данным) – критерии формирования тестовых наборов: анализ причинно-следственных связей.
- •Функциональное тестирование (тестирование с управлением по данным) – критерии формирования тестовых наборов: предположение об ошибке.
- •Тестирование модулей: восходящие, нисходящие, комбинированное, модули-заглушки, тестирование специалистами-тесторами, документирование тестирования, регрессивное тестирование.
- •Комплексное тестирование, критерии завершения тестирования, оценочное-системное тестирование.
- •Отладка по – классификация ошибок: ошибки компиляции, компоновки, выполнения; причины ошибок выполнения.
- •Методы отладки по: ручное тестирование, индукции, дедукция, обратное прослеживание.
- •Методы и средства получения дополнительной информации об ошибке: отладочный вывод, интегрированные средства отладки, независимые отладчики.
- •Общая методика отладка по: изучение проявления ошибки, локализация ошибки, определение причины ошибки, исправление ошибки, повторное тестирование.
- •Сборочное программирование, повторное используемые компоненты, основы компонентной объектной модели (com).
- •Организация интерфейса com: идентификация интерфейса, описание интерфейса, реализация интерфейса.
- •Базовый интерфейс com-iUnknown, серверы com-объектов, преимущества com.
- •Работа с com-объектами: создание com-объектов, повторное использование com-объектов.
- •Работа с com-объектами: размещение com-объекта в других процессах – маршалинг и демаршалинг, описание com-объекта в библиотеке операционной системы – idl-описание и библиотека типа.
- •Case-технология, особенности жизненного цикла, состав, основные функции case-систем, средства автоматизации программирования.
- •Перспективы развития технологии программирования, технологическая зрелость организаций-разработчиков по, лицензирование организаций-разработчиков по.
Функциональное тестирование (тестирование с управлением по данным) – критерии формирования тестовых наборов: предположение об ошибке.
Предположение об ошибке. Часто программист с большим опытом находит ошибки, «не применяя никаких методов». На самом деле он подсознательно использует метод «предположение об ошибке».
Процедура метода предположения об ошибке в значительной степени основана на интуиции.
Основная его идея заключается в том, чтобы перечислить в некотором списке возможные ошибки или ситуации, в которых они могут появиться, а затем на основе этого списка составить тесты. Другими словами, требуется перечислить те особые случаи, которые могут быть не учтены при проектировании.
Тестирование модулей: восходящие, нисходящие, комбинированное, модули-заглушки, тестирование специалистами-тесторами, документирование тестирования, регрессивное тестирование.
При тестировании модулей программного обеспечения, так же, как при проектировании и кодировании возможно применение как восходящего, так и нисходящего подходов.
Восходящее тестирование. Восходящий подход предполагает, что каждый модуль тестируют отдельно на соответствие имеющимся спецификациям на него, затем собирают оттестированные модули в модули более высокой степени интеграции и тестируют их. При этом проверяют межмодульные интерфейсы, используемые для подключения модулей более низкого уровня иерархии. И так далее, пока не будет собран весь программный продукт (рис. 9.3).
Такой подход обеспечивает полностью автономное тестирование, для которого просто генерировать тестовые последовательности, которые передаются в модуль напрямую. Однако он имеет и существенные недостатки. Во-первых, при восходящем тестировании так же, как при восходящем проектировании, серьезные ошибки в спецификациях, алгоритмах и интерфейсе могут быть обнаружены только на завершающей стадии работы над проектом. Во-вторых, для того, чтобы тестировать модули нижних уровней, необходимо разработать специальные тестирующие программы, которые обеспечивают вызов интересующих нас модулей с необходимыми параметрами. Причем эти тестирующие программы также могут содержать ошибки.
Нисходящее тестирование. Нисходящее тестирование органически связано с нисходящим проектированием и разработкой; как только проектирование какого-либо модуля заканчивается, его кодируют и передают на тестирование.
В этом случае автономно тестируется только основной модуль. При его тестировании все вызываемые им модули заменяют модулями, которые в той или иной степени имитируют поведение вызываемых модулей (рис. 9.4). Такие модули принято называть «заглушками». В отличие от тестирующих программ заглушки очень просты, например, они могут просто фиксировать, что им передано управление. Часто заглушки просто возвращают какие-либо фиксированные данные.
Как только тестирование основного модуля завершено, к нему подключают модули, непосредственно им вызываемые, и необходимые заглушки, а затем проводят их совместное тестирование. Далее последовательно подключают следующие модули, пока не будет собрана
вся система.
Основной недостаток нисходящего тестирования - отсутствие автономного тестирования модулей. Поскольку модуль получает данные не непосредственно, а через вызывающий модуль, то гораздо сложнее обеспечить его «достаточное» тестирование.
Основным достоинством данного метода является ранняя проверка основных решений и качественное многократное тестирование сопряжения модулей в контексте программного обеспечения. При нисходящем тестировании есть возможность согласования с заказчиком внешнего вида (интерфейса) программного обеспечения.
Комбинированный подход. Чаще всего применяют комбинированный подход: модули верхних уровней тестируют нисходящим способом, а модули нижних уровней - восходящим. Этот способ позволяет с одной стороны начать с тестирования интерфейса, с другой - обеспечивает качественное автономное тестирование модулей низших уровней.
Тестирование программного обеспечения специалистами. Согласно основным принципам нежелательно тестирование программного обеспечения его автором, поэтому эту работу, как правило, выполняют другие программисты, желательно - специалисты в этой области. Задачей специалиста по тестированию является обнаружение максимального количества несоответствий тестируемого модуля и спецификаций на него. Для выполнения этой задачи специалист по тестированию формирует тесты, используя как структурный, так и функциональный подходы, обеспечивая всестороннее тестирование.
Каждое отклонение от спецификации обязательно документируют, заполняя специальный протокол (рис. 9.5). Наиболее интересными полями протокола являются тип проблемы и ее описание.
В поле тип проблемы указывают один из вариантов:
1 - ошибка кодирования - программа ведет себя не так, как следует из общепринятых представлений, например, 2 + 2 = 5 - на что разработчик может выдать резолюцию «соответствует проекту»;
2 - ошибка проектирования — программа ведет себя в соответствии с проектом, но специалист по тестированию не согласен с данным решением в проекте - на что разработчик может отреагировать, наложив резолюцию «не согласен с предложением»;
3 - предложение -предложение по улучшению проекта;
4 - расхождение с документацией - обнаружено, что программа ведет себя не так, как указано в документации;
5 - взаимодействие с аппаратурой - обнаружены проблемы при использовании определенного вида аппаратуры;
6 - вопрос - программа делает что-то не совсем понятное.
Описание проблемы должно быть коротким и понятным, например:
«Система не запоминает настройки принтера, выполняемые в окне настройки». Если программист исправляет ошибку, то тестирование повторяют сначала, так как при исправлении ошибки программист может внести в программу новые ошибки. Такое тестирование называют «регрессионным».