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