Философия программиста и тестировщика противоположная.
Философия программиста – создать и не допустить ошибку.
Философия тестировщика – добиться ошибки.
Тестирование – это процесс выполнения программы с целью обнаружение в ней ошибок.
Существует два основных вида тестирования:
- Структурное тестирование - выполняется по принципу белого ящика. Т.е. текст открыт для проверки
- Функциональное тестирование – выполняется по принципу черного ящика. Т.е. текст не используется. Для полного тестирования нужно создать полный набор входных текстов всех возможных вариантов.
Структурное тестирование
В случае структурного тестирования происходит проверка логики программы. Полное тестирование – это такое тестирование, которое приведет к полному перебору всех возможных путей на графе передач управления программы.
Ни структурное, ни функциональное не может быть исчерпывающее. При тестировании программы комплексов можно выделить 4 этапа:
- Тестирование отдельных модулей.
- Совместное тестирование модулей.
- Тестирование функций программного комплекса. Т.е. поиск различий между разработанной программой и ее внешней спецификации.
- Тестирование всего комплекса в целом, т.е. поиск несоответствия созданного программного продукта, сформулированным ранее целям проектирования, которое отражено в техническом задании.
В первых 2-х этапах должны быть решены следующие задачи:
- Построение эффективного тестера
- Выбор способа комбинируемых модулей при создании тестируемого варианта программы.
Наиболее слабый критерий полноты структурного тестирования – это требование хотя бы однократного выполнение каждого оператора программы. Более сильный критерий – это требование, чтобы каждая ветвь алгоритма должен быть выполнен хотя бы один раз.
Для большинства программ покрытие операторов, подразумевает покрытие всех переходов.
Поэтому для такого тестирования является:
- Задача создания визуальных средств. Они позволяют накапливать информацию о покрытых и непокрытых ветвях всех используемых средств.
- Выделять разработчику еще непокрытые при тестировании участки программы.
- Поддерживать более мощный критерий полноты структурного тестирования.
Совместное тестирование модулей
Существует 2 подходя тестирование модулей:
При монолитном тестировании сначала тестируется каждый модуль отдельно, а затем все модули объединяются в один.
При пошаговом тестировании – каждый модуль для своего тестирования подключается к уже проверенным модулем.
Для монолитного тестирования. Для того чтобы протестировать автономно протестировать каждый модуль, необходим вспомогательный модуль имитирующий тестированный модуль, а также определенный модуль заглушек.
При пошаговом тестировании модули не проверяются в изолированном друг от другу. Поэтому требуется либо драйвер, либо заглушки.
Достоинство монолитного тестирования:
- Меньший расход машинного времени.
- Больше возможности для параллельной работы на начальном этапе тестировании.
Достоинство пошагового тестирования
- Меньшая трудоемкость.
- Более раннее обнаружение ошибок в более ранних интерфейсах.
- Легче производится отладка.
- Результаты тестирования более совершены. И мы можем осуществить проверку быстрее.
При пошаговом тестировании используются 2 стратегии тестирования:
- Нисходящее
- Восходящее
Нисходящая стратегия – тестирование начинается с главного модуля. Так как при этой стратегии процесс проверки может продолжаться по-разному, то следует придерживаться следующих правил:
Модули, содержащие операторы ввода вывода должны подключаться как можно раньше.
Критические модули должны подключаться в первую очередь.
Восходящая стратегия – тестирование начинается с второстепенного модуля и заканчивается главным модулем. В этом случае нужен драйвер, который выполняет проверку ( тестирование ).
Нет проблем подключение следующего модуля.
Достоинство восходящего тестирования:
- Так как нет промежуточных модулей, нет проблем для создания теста.
- Нет возможности совмещение проектирования с тестированием.
- Нет трудностей вызывающие желание перейти к тестировании следующего модуля, не закончив тестирование предыдущего модуля.
Недостаток:
- Проверка всей структуры получается только в конце. После завершения тестирования второстепенных модулей.
Третий этап: проверка функций выполняется в помощью функционального тестирования.