1. Введение в тестирование: основные понятия, цели, QA vs QC и семь принципов тестирования
Введение в тестирование: основные понятия, цели, QA vs QC и семь принципов тестирования
Добро пожаловать в курс «Основы теории тестирования ПО». Если вы читаете эту статью, значит, вы решили погрузиться в увлекательный мир обеспечения качества. Возможно, вы хотите сменить профессию, улучшить свои навыки программирования или просто понять, почему приложения в вашем телефоне иногда «вылетают».
В этой первой статье мы разберем фундамент, на котором строится вся профессия. Мы узнаем, что такое тестирование на самом деле (спойлер: это не просто «тыканье кнопок»), чем оно отличается от QA, и какими законами руководствуется каждый профессиональный тестировщик.
Что такое тестирование ПО?
Многие новички представляют работу тестировщика так: сидит человек, хаотично нажимает на клавиши и ждет, пока программа сломается. Это миф.
Тестирование программного обеспечения — это процесс исследования программного продукта, имеющий своей целью проверку соответствия между реальным поведением программы и её ожидаемым поведением на основе набора тестов, выбранных определенным образом.
Проще говоря, тестирование — это сравнение того, что есть, с тем, что должно быть.
Откуда мы знаем, «как должно быть»?
Для этого существует документация, требования, макеты дизайна и здравый смысл. Если в калькуляторе вы складываете 2 и 2, а получаете 5 — это дефект, потому что мы знаем (ожидаем), что результат должен быть 4.
Основные цели тестирования
Зачем компании тратят огромные бюджеты на отделы тестирования? Неужели разработчики не могут сразу писать код без ошибок?
К сожалению, людям свойственно ошибаться. Разработчик часто не видит своих ошибок, потому что он сфокусирован на создании логики, а не на её разрушении.
Вот главные цели тестирования:
> Тестирование может показать наличие дефектов, но не может доказать их отсутствие. > — Эдсгер Дейкстра, ученый в области компьютерных наук
QA, QC и Тестирование: в чем разница?
В вакансиях вы часто можете встретить термины QA Engineer (Quality Assurance) и QC (Quality Control), которые используют как синонимы слова «тестировщик». Но с точки зрения теории это разные понятия, вложенные друг в друга.
!Схема, показывающая иерархию понятий: Тестирование является частью QC, а QC является частью QA.
Разберем эту иерархию подробнее:
1. Тестирование (Testing)
Это непосредственно процесс проверки продукта. * Что делаем: Пишем тест-кейсы, запускаем программу, ищем баги, документируем ошибки. * Фокус: На продукте и поиске ошибок.2. Контроль качества (QC — Quality Control)
Это набор действий, предназначенных для оценки качества продукта. Тестирование является частью QC. * Что делаем: Помимо самого тестирования, сюда входят анализ результатов тестирования, ревью кода, проверка готовности к релизу. * Фокус: На выявлении брака в готовом (или почти готовом) продукте.3. Обеспечение качества (QA — Quality Assurance)
Это совокупность активностей, направленных на обеспечение уверенности в том, что требования к качеству будут выполнены. Это управление процессами. * Что делаем: Выстраиваем процессы так, чтобы ошибки не появлялись. Обучение сотрудников, выбор инструментов, улучшение методологии разработки, анализ причин возникновения дефектов. * Фокус: На процессе и предотвращении брака.Аналогия с заводом автомобилей: * Тестирование: Рабочий проверяет, закрывается ли дверь у конкретной машины. * QC: Мастер проверяет партию машин и отбраковывает те, у которых двери не закрываются. * QA: Инженер анализирует, почему двери вообще выходят кривыми, и меняет настройки конвейера или поставщика металла, чтобы все будущие машины были качественными.
Семь принципов тестирования
Существует международная организация ISTQB (International Software Testing Qualifications Board), которая сформулировала 7 основополагающих принципов тестирования. Понимание этих принципов отличает профессионала от любителя.
Принцип 1: Тестирование демонстрирует наличие дефектов
Тестирование может показать, что дефекты есть, но не может доказать, что их нет. Даже если вы провели 1000 тестов и все они прошли успешно, это не гарантирует, что в программе нет 1001-го сценария, который все сломает. Тестирование снижает вероятность наличия ошибок, но не сводит её к нулю.Принцип 2: Исчерпывающее тестирование невозможно
Проверить все возможные комбинации входных данных и сценариев невозможно (за исключением тривиальных случаев).Представьте поле ввода пароля, принимающее от 1 до 10 символов. Вариантов комбинаций — миллиарды. Если мы будем проверять каждый вариант, на тестирование уйдут годы. Вместо этого мы используем анализ рисков и техники тест-дизайна, чтобы выбрать небольшое количество тестов, которые с высокой вероятностью найдут ошибки.
Принцип 3: Раннее тестирование
Чем раньше мы начнем тестировать, тем дешевле будет исправление ошибок.* Ошибка, найденная в требованиях (на бумаге), стоит копейки — нужно просто переписать текст. * Ошибка, найденная в коде, требует времени разработчика. * Ошибка, найденная после релиза, может стоить компании репутации и миллионов долларов.
Принцип 4: Скопление дефектов (Кластеризация дефектов)
Обычно большая часть дефектов содержится в небольшом количестве модулей. Это похоже на принцип Парето: 80% проблем скрыты в 20% функционала. Если вы нашли много багов в модуле «Корзина», скорее всего, там есть еще. Тестируйте такие места тщательнее.Принцип 5: Парадокс пестицида
Если прогонять одни и те же тесты снова и снова, рано или поздно они перестанут находить новые дефекты. Программа меняется, разработчики исправляют старые ошибки, но могут вносить новые в других местах.Аналогия: Если травить насекомых одним и тем же ядом (пестицидом), у них вырабатывается иммунитет. Решение: Тесты нужно регулярно пересматривать, обновлять и дополнять новыми сценариями.
Принцип 6: Тестирование зависит от контекста
Тестирование банковского приложения для перевода миллионов долларов кардинально отличается от тестирования личного блога про котиков. * В банке критична безопасность и точность транзакций. * В блоге важна скорость загрузки и красота интерфейса.Нельзя применять одни и те же подходы и стандарты ко всем проектам бездумно.
Принцип 7: Заблуждение об отсутствии ошибок
Отсутствие найденных багов не означает, что продукт успешен. Вы можете создать идеально работающее приложение, в котором нет ни одной технической ошибки, но оно будет никому не нужно, потому что оно неудобное или не решает задачи пользователя.Проверка того, что система соответствует требованиям — это верификация. Проверка того, что система нужна и удобна пользователю — это валидация.
Заключение
Сегодня мы заложили первый камень в фундамент вашего образования в сфере QA. Мы выяснили, что тестирование — это не хаос, а структурированный процесс. Мы узнали, что QA — это про процесс, а QC — про продукт. И, наконец, мы разобрали 7 принципов, которые помогают тестировщикам эффективно планировать свою работу.
В следующей статье мы поговорим о том, как рождается программное обеспечение, и разберем жизненный цикл разработки ПО (SDLC).