Ура, немного теории тестирования в блоге о тестировании

Привет, охотники! 🏹

7 принципов тестирования:

1. Тестирование показывает наличие ошибок, а не их отсутствие

Тестирование может только определить наличие дефектов, но не может доказать, что ошибок в ПО нет совсем

Задача тестировщика - найти дефекты. Доказать, что их совсем нет - невозможно

2. Исчерпывающее тестирование невозможно

Невозможно протестировать приложение полностью. Кажется, что с этой формулировкой можно поспорить: я же проверил на калькуляторе всю функциональность, что еще надо?

А проверили ли вы сумму/вычитание для всех комбинаций чисел? А если одновременно с этим еще попытаться закрыть приложение? А если… таких “если” может быть очень много.

Слово “полностью” здесь про все возможные комбинации состояний и параметров приложения. Так вот протестировать это невозможно

3. Раннее тестирование

Раннее тестирование помогает сэкономить на разработке продукта. Оно начинается с анализа требований, и уже на этом этапе можно внести корректировки, которые при исправлении после разработки (а тем более после релиза) будут стоить дороже

4. Скопление дефектов

Этот принцип про то, что дефекты могут копиться вокруг небольшого количества модулей функциональности и часто, найдя баг, рядом вы найдете еще один.

Это может быть связано со сложностью логики модулей, качеством кода (легаси), плохой архитектурой или же просто недостаточным тестированием ранее

5. Парадокс пестицида

Если многократно использовать одни и те же тестовые данные для проверки функциональности, то в какой-то момент будет пропущен баг. Почему так?

Представьте, что мы проверяем все тот же калькулятор: складываем 2 и 3, получаем 5. И тут нам добавили возможность складывать отрицательные числа. Мы проверяем 2+3 = 5, сложение прекрасно работает. А на проде клиент получает ошибку -1 + 3 = -4.

Решение проблемы заключается в регулярном обновлении старых тест-кейсов и добавлении новых проверок

6. Тестирование зависит от контекста

Насколько критична ошибка в калькуляторе? А ошибка в оборудовании для лазерной коррекции зрения?

Тестирование и его тщательность зависят от контекста продукта. Даже в рамках одного приложения тестирование функциональности может происходить по-разному.

Возьмем сайт для покупки авиабилетов: добавление раздела “О себе” внутри блога путешественника будет тестироваться не так тщательно как интеграция с новой банковской системой для оплаты билетов

7. Отсутствие ошибок не гарантирует успех продукта

Если вы считаете, что все же смогли обойти первый и второй принципы (доказали отсутствие ошибок и провели исчерпывающее тестирование), то к сожалению это не гарантирует успех вашего приложения.

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

Принцип говорит о том, что полезным и успешным продукт становится, если приносит пользу, а не является “идеальным”