Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дипломный проект Долгов.doc
Скачиваний:
4
Добавлен:
25.09.2019
Размер:
2.06 Mб
Скачать

2.2.6.2 Виды тестирования

Тестирование модуля, или автономное тестирование (module testing, unit testing) — контроль отдельного программного модуля, обычно в изолированной среде (т. е. изолированно от всех остальных модулей).

Тестирование сопряжении (integration testing) — контроль сопряжении между частями системы (модулями, компонентами, подсистемами).

Тестирование внешних функций (external function testing) — контроль внешнего поведения системы, определенного внешними спецификациями.

Тестирование приемлемости (acceptance testing) — проверка соответствия программы требованиям пользователя.

Комплексное тестирование (system testing) — контроль и/или испытание системы по отношению к исходным целям. Комплексное тестирование является процессом контроля, если оно выполняется в моделируемой среде, и процессом испытания, если выполняется в среде реальной, жизненной.

Тестирование настройки (installation testing) — проверка соответствия каждого конкретного варианта установки системы с целью выявить любые ошибки, возникшие в процессе настройки системы.

По объекту тестирования:

1)Функциональное тестирование (functional testing);

2)Нагрузочное тестирование;

3)Тестирование производительности (perfomance/stress testing);

4)Тестирование стабильности (stability/load testing);

5)Тестирование удобства использования (usability testing);

6)Тестирование интерфейса пользователя (UI testing);

7)Тестирование безопасности (security testing);

8)Тестирование локализации (localization testing);

9)Тестирование совместимости (compatibility testing).

По знанию системы:

1)Тестирование чёрного ящика (black box)

2)Тестирование белого ящика (white box)

3)Тестирование серого ящика (gray box).

По степени автоматизированности:

1)Ручное тестирование (manual testing);

2)Автоматизированное тестирование (automated testing).

3)Полуавтоматизированное тестирование (semiautomated testing).

По степени изолированности компонентов:

1)Компонентное (модульное) тестирование (component/unit testing);

2)Интеграционное тестирование (integration testing);

3)Системное тестирование (system/end-to-end testing).

По времени проведения тестирования:

1)Альфа тестирование (alpha testing);

2)Тестирование при приёмке (smoke testing);

3)Тестирование новых функциональностей (new feature testing);

4)Регрессионное тестирование (regression testing);

5)Тестирование при сдаче (acceptance testing);

6)Бета тестирование (beta testing).

По признаку позитивности сценариев:

1)Позитивное тестирование (positive testing);

2)Негативное тестирование (negative testing).

2.2.6.3 Методы тестирования

1. Существует два основных вида тестирования: функциональное и структурное. При функциональном тестировании программа рассматривается как “черный ящик” (то есть ее текст не используется). Происходит проверка соответствия поведения программы ее внешней спецификации.

Поскольку исчерпывающее функциональное тестирование невозможно, речь может идти о разработки методов, позволяющих подбирать тесты не “вслепую”, а с большой вероятностью обнаружения ошибок в программе.

2. При структурном тестировании программа рассматривается как “белый ящик” (т.е. ее текст открыт для пользования). Происходит проверка логики программы. Полным тестированием в этом случае будет такое, которое приведет к перебору всех возможных путей на графе передач управления программы (ее управляющем графе). Даже для средних по сложности программ числом таких путей может достигать десятков тысяч. Если ограничиться перебором только линейных не зависимых путей, то и в этом случае исчерпывающее структурное тестирование практически невозможно, т. к. неясно, как подбирать тесты , чтобы обеспечить “покрытие” всех таких путей.

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

3. Метод большого скачка

Вероятно, самый распространенный подход к интеграции модулей — метод “большого скачка”. В соответствии с этим методом каждый модуль тестируется автономно. По окончании тестирования модулей они интегрируются в систему все сразу.

Метод большого скачка по сравнению с другими подходами имеет много недостатков и мало достоинств. Заглушки и драйверы необходимы для каждого модуля. Модули не интегрируются до самого последнего момента, а это означает, что в течение долгого времени серьезные ошибки в сопряжениях могут остаться необнаруженными. Метод большого скачка значительно усложняет отладку.

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

4. Восходящее тестирование

При восходящем подходе программа собирается и тестируется снизу вверх. Только модули самого нижнего уровня (“терминальные” модули; модули, не вызывающие других модулей) тестируются изолированно, автономно. После того как тестирование этих модулей завершено, вызов их должен быть так же надежен, как вызов встроенной функции языка или оператор присваивания. Затем тестируются модули, непосредственно вызывающие уже проверенные. Эти модули более высокого уровня тестируются не автономно, а вместе с уже проверенными модулями более низкого уровня. Процесс повторяется до тех пор, пока не будет достигнута вершина. Здесь завершаются и тестирование модулей, и тестирование сопряжении программы.

При восходящем тестировании для каждого модуля необходим драйвер: нужно подавать тесты в соответствии с сопряжением тестируемого модуля. Одно из возможных решений — написать для каждого модуля небольшую ведущую программу. Тестовые данные представляются как “встроенные” непосредственно в эту программу переменные и структуры данных, и она многократно вызывает тестируемый модуль, с каждым вызовом передавая ему новые тестовые данные.

Имеется и лучшее решение: воспользоваться программой тестирования модулей — это инструмент тестирования, позволяющий описывать тесты на специальном языке и избавляющий от необходимости писать драйверы.