📑Приципы тестирования

Разработка правильных и эффективных тестов – достаточно непростое занятие. Принципы тестирования были разработаны в последние 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