📑Приципы тестирования
Разработка правильных и эффективных тестов – достаточно непростое занятие. Принципы тестирования были разработаны в последние 40 лет и являются общим руководством для тестирования в целом.
Тестирование демонстрирует наличие дефектов (Testing shows presence of defects).
Тестирование может показать наличие дефектов в программе, но не доказать их отсутствие. Тем не менее, важно составлять тест-кейсы, которые будут находить как можно больше багов. Тестирование снижает вероятность наличия дефектов в ПО. В то же время, даже если дефекты не были найдены в процессе тестирования, нельзя утверждать, что их нет.
Исчерпывающее тестирование невозможно (Exhaustive testing is impossible)
Полное тестирование с использованием всех комбинаций пользовательского ввода, состояний системы и предусловий физически невыполнимо, за исключением тривиальных случаев. Вместо исчерпывающего тестирования должны использоваться анализ рисков и расстановка приоритетов, чтобы правильнее распределить усилия.
Раннее тестирование (Early testing).
Тестирование должно начинаться как можно раньше в жизненном цикле разработки программного обеспечения и его усилия должны быть сконцентрированы на определенных целях.
Скопление дефектов (Defects clustering).
Разные модули системы могут содержать разное количество дефектов, то есть плотность скопления дефектов в разных элементах программы может отличаться. Усилия по тестированию должны распределяться пропорционально фактической плотности дефектов. Большая часть критических дефектов содержится в небольшом количестве модулей. Это проявление принципа Парето: 80% проблем содержатся в 20% модулей.
Парадокс пестицида (Pesticide paradox).
Если одни и те же тесты будут прогоняться много раз, в конечном счете этот набор тестовых сценариев перестанет находить новые дефекты. Поскольку система эволюционирует, многие из ранее найденных дефектов исправляют и старые тест-кейсы больше не срабатывают. Чтобы преодолеть этот парадокс, тестовые сценарии должны регулярно рецензироваться и корректироваться, новые тесты должны быть разносторонними, чтобы охватить все компоненты ПО или системы, и найти как можно больше дефектов.
Тестирование зависит от контекста (Testing is concept depending).
Выбор методологии, техники и типа тестирования будет напрямую зависеть от природы самой программы. Например, программное обеспечение для медицинских нужд требует гораздо более строгой и тщательной проверки, чем, скажем, компьютерная игра. Из тех же соображений сайт с большой посещаемостью должен пройти через серьезное тестирование производительности, чтобы показать возможность работы в условиях высокой нагрузки.
Отсутствие ошибок не означает, что система готова к использованию (Absence-of-errors fallacy - Заблуждение об отсутствии ошибок).
Обнаружение и исправление дефектов не помогут, если созданная система не подходит пользователю и не удовлетворяет его ожиданиям и потребностям.
Дополнительные принципы тестирования:
Дополнительные принципы тестирования
Необходимая часть любого теста - описание ожидаемых выходных данных или результатов
Программист должен избегать тестирования собственных программ
Компания-разработчик не должна тестировать собственное программное обеспечение
Любой процесс тестирования должен включать в себя детальное изучение результатов каждого теста
Готовьте тесты как для корректных и ожидаемых, так и для некорректных и непредсказуемых входных данных
Проверка, делает ли программа то, что должна, составляет лишь ползадачи; вторая половина задачи — выяснить, не делает ли программа того, чего не должна делать
Не выбрасывайте тесты, если только программа, для которой они предназначены, не является фактически одноразовой
Не приступайте к планированию тестов, заранее настраиваясь на то, что ошибки не будут обнаружены
Вероятность того, что в некоторой части программы остались необнаруженные ошибки, прямо пропорциональна количеству уже обнаруженных там ошибок
Тестирование — творческий процесс, требующий интеллектуальных усилий
Last updated