Нам известны 7 принципов тестирования и сейчас мы их подробно разберём. Итак, приступим:  Исчерпывающее тестирование невозможно Тестирование демонстрирует наличие дефектов, а не их отсутствие Заблуждение об отсутствии ошибок Раннее тестирование сохраняет время и деньги Принцип скопления или кластеризация дефектов Тестирование зависит от контекста Парадокс пестицида  Зачем вообще они нужны и как могут помочь в понимании процесса тестирования? Это хороший вопрос. И если тщательно разобраться и следовать этим принципам, то можно избежать многих ошибок, недоразумений и неожиданных ситуаций в будущем. В переводе с латинского При́нцип - это основа, начало, первоначало, и можно сказать, что принципы тестирования — это основы тестирования. Давайте начнём так. Допустим, есть некий сайт. На этом сайте присутствует форма с полем для ввода какого-либо значения. Возникает вопрос: а сколько различных комбинаций, их общее количество нам доступно для использования? И если нет каких-то конкретных требований, то вводить туда мы можем всё что угодно: любые буквы разных алфавитов, числа, символы, эмоджи, соответственно текст любой длины…  И, конечно, ответ будет: ∞ Ну давайте предположим, что максимально в поле мы можем ввести только 3 символа. Даже и в этом случае количество комбинаций, если брать во внимание, что UTF-8 поддерживает 2,164,864 доступных символа, будет равно: Х = 2,164,864³ =10 145 929 857 329 004 544 Сколько же комбинаций выйдет, если в поле для ввода текста мы можем ввести 100 символов? А 1000 или с N количеством нулей? Насколько бы тщательным тестирование не было, нельзя учесть все возможные сценарии и предвидеть все возможные ошибки.  Тестирование может выявить тот момент, что ошибки присутствуют, но не может доказать в полной мере, что дефектов нет.  Каким образом мы сможем утверждать, что багов в продукте нет? Этого, к сожалению, сделать нельзя, потому как, выявить любую проблему можно только сделав какие-то действия, произведя какую-либо проверку.  Это так же, как нельзя, например, по вешнему виду определить состояние автомобиля. Допустим, снаружи он выглядит хорошо, нет ни потертостей, ни царапин на кузове, – но это не означает, что у него нет каких-нибудь проблем внутри, в двигателе или в механике.  Констатировать о том, что ошибки отсутствуют, в данном случает, будет неверным. Даже сделав возможные проверки, и не найдя глобальных поломок, мы не можем сказать, что дефектов нет. Потому как, в автомобиле в незаметном месте может быть открутился винтик, не влияющий особо на функциональность, расхлябалась маленькая незначительная деталь и т.д. А вот как раз наличие дефектов и может продемонстрировать тестирование. Начиная проверять систему, мы выявляем те или иные баги.  Можно сколько угодно находить ошибки, и даже, казалось бы, не обнаруживая их больше, нет гарантии того, что ошибки найдены все и продукт полностью качественный и готовый. Надо помнить такую аксиому – не существует какого-либо продукта без багов или ошибок. Даже готовый и хорошо протестированный продукт может оказаться не идеален, так как под каждого человека индивидуально его не подстроить. Например, одному человеку с его потребностями и возможностями будет подходить такое представление продукта, а другому, с его индивидуальными особенностями – это будет не совсем приемлемо. Будет эта ситуация багом, дефектом или нет? Точного ответа нет, но можно сказать с полной уверенностью, что для одного будет нормой, – то для другого - ошибкой в программе или продукте.  Дефекты однозначно будут. Но в тестировании и нет такой задачи, чтобы выявить 100% багов, т.к. мы уже знаем, что это невозможно, исходя из первых трёх принципов. Главное здесь – найти наиболее критичные ошибки. Присутствует в тестировании и такой парадокс – не все ошибки нужно исправлять). Но это отдельная тема. Это принцип говорит о том, что чем раньше выявится та или иная проблема – тем меньше средств и трудозатрат потребуется для её устранения. Соответственно, если баг попадёт в «прод» или ещё хуже, если его найдёт пользователь – исправление такого дефекта обойдётся немалой кровью для всей команды. Помимо того, что удаление его будет стоить бо́льших денег, нежели на начальной стадии разработки, может получиться так, что этот дефект затронет другой функционал. И тогда проблемы начнут накапливаться как снежный ком. Сколько кода потребуется переписать разработчикам? Сколько времени уйдет на исправление и тестирование? Тут вам и сорванные сроки релизов, рассерженное руководство, потеря нервных клеток и т.д. Сюда же добавим недовольство или даже потерю клиентов, ну и все остальные вытекающие… Принято считать, что тестирование необходимо начинать на самых ранних стадиях в жизненном цикле разработки, например, ещё на уровне написания требований или на этапе оформления дизайна. Существует такое определение – наибо́льшее количество дефектов обычно содержится в небольшо́м количестве модулей. Простыми словами кластеризация – это группировка (на кластеры) множества объектов, схожих между собой по каким-либо параметрам. Представим полки и витрины в магазине – товары подразделены на хлебобулочные, молочные, мясные, напитки и др. Это и есть кластеризация. Давайте проведём параллель с багами. Ошибки скапливаются в определённых местах, например, там, где код наиболее сложный или некорректно написан. Любой продукт состоит из модулей – кластеров в нашем случае. Если в каком-то модуле нашлось несколько багов, - это сигнал к тому, чтобы ещё внимательнее протестировать или даже перелопатить его с особой тщательностью на наличие скрытых дефектов.  Для разного софта будут применяться разные подходы к его тестированию. К примеру, способ тестирования мобильного приложения будет отличаться от того, которым тестируется коммерческий сайт.  По каким характеристикам различать контекст: по типу продукта – web, desktop, мобильное приложение, сервис и др.; по цели продукта – обеспечение безопасности, Game, продажа товаров и др.; по проектной команде – специализация, количество человек, опыт и т.д.; по доступным инструментам – что присутствует на проекте, для успешной реализации; по срокам – как построен рабочий процесс, как часто выходят релизы, время между ними на подготовку; по ожидаемому уровню качества – чем выше требования, тем тщательнее нужно тестировать. Опытные QA-engineer знают, что перед любым тестированием нужно провести анализ и сформировать план и стратегию проверок. Ну и затем приступать к составлению тестовой документации. Почему именно так назван этот принцип? Здесь всё просто. Википедия говорит нам, что Пестици́д (лат. pestis «зараза» + caedo «убивать») – ядовитое вещество, используемое для уничтожения вредителей и различных паразитов. Возьмём пример из жизни. Если использовать один и тот же пестицид на протяжении долгого времени, например, для истребления тараканов, то со временем его эффективность упадёт, так как у этих насекомых выработается устойчивость к одному и тому же препарату. То же самое относится и к багам и процессу тестирования. Если к какому-либо функционалу применять постоянно повторяющийся набор тестов – то эти проверки в скором времени будут неэффективны в нахождении новых дефектов. Поэтому тест-кейсы должны постоянно обновляться и видоизменяться. Важно пользоваться такими рекомендациями: добавлять новые тесты; просматривать и изменять существующие; применять разные виды и техники тестирования; осуществлять тестирование новыми сотрудниками и др.  В целом посмотреть на продукт под другим углом. Можно отметить здесь ещё тот факт, что в наибольшей степени парадокс пестицида может проявляться в регрессе и автотестах.  В этой статье мы разобрали 7 принципов тестирования. Понимание сути данных постулатов и умение применять их на практике отличает опытного QA-engineer от новичка. Однозначно, знание этих основ тестирования помогает формировать грамотную стратегию тестирования, совершать в итоге меньше ошибок в процессе работы с продуктом, сокращать время и упрощать некоторые процессы проводимых проверок.