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

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

Наличие дефектов
тестирование может показать наличие дефектов в программе, но не доказать их отсутствие.
Тем не менее, важно составлять тест-кейсы, которые будут находить как можно больше багов. Таким образом, при должном тестовом покрытии, тестирование позволяет снизить вероятность наличия дефектов в программном обеспечении. В то же время, даже если дефекты не были найдены в процессе тестирования, нельзя утверждать, что их нет.

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

Скопление дефектов
разные модули системы могут содержать разное количество дефектов – то есть, плотность скопления дефектов в разных элементах программы может отличаться.
Усилия по тестированию должны распределяться пропорционально фактической плотности дефектов. В основном, большую часть критических дефектов находят в ограниченном количестве модулей. Это проявление принципа Парето: 80% дефектов содержатся в 20% модулей.

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

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

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

Независимость от разработки
независимое тестирование соответствует независимой команде, которая участвует в тестировании, отличном от разработчика, чтобы избежать предвзятости автора и часто более эффективна в поиске дефектов и сбоев.