QA (Quality Assurance), QC (Quality Control), Верификация (Verification) и валидация (Validation) – все эти термины связаны с процессом обеспечения качества продукта. Но в чем разница между ними и как они связаны друг с другом? Давайте разберемся вместе.
Тестирование - это процесс анализа программного средства и сопутствующей документации с целью выявления дефектов и повышения качества продукта.
Тестирование начинается не с того момента, когда вам предоставили рабочее приложение, а намного раньше - как только приняли решение, что команда будет работать над проектом, можно считать, что вы уже приступили. После получения первых спецификаций, необходимо приступить к написанию тест плана, начать разрабатывать тест кейсы, провести оценку необходимости использования автоматизации, причем как автоматизации функционального тестирования, так и нагрузочного.
- Планирование и управление
- Анализ и проектирование
- Внедрение и реализация
- Оценка критериев выхода и создание отчетов
- Действия по завершению тестов
QA (Quality Assurance) - это процесс, который гарантирует, что продукт соответствует требованиям и спецификациям, которые были определены на этапе проектирования и разработки. QA включает в себя тестирование, анализ и контроль качества продукта на всех этапах его создания.
QC (Quality Control) - это контроль качества уже готового продукта. QC включает в себя проверку качества сборки, упаковки, маркировки и других аспектов, связанных с производством продукта.
Отличие QC и QA:
Основная разница что QA больше процессно-ориентированный подход который включает в себя превентивные меры, а QC больше продуктно-ориентированный подход который включает в себя корректирующие меры. Также можно сказать что QA более обширное понятие чем QC и включает в себя комплекс мер обеспечения качества на всех этапах разработки, в отличии от QC.
Верификация (Verification) - это проверка того, что продукт соответствует своим спецификациям и требованиям. Верификация может быть проведена на любом этапе разработки или производства продукта.
Различные мероприятия процесса верификации:
- Анализ различных аспектов тестирования (сроки, ресурсы, персонал, стоимость, инструменты тестирования и т.д.);
- Покрытие операторов – процентное отношение операторов, исполняемых набором тестов, к их общему количеству;
- Покрытие условий – процент исходов условий, которые были проверены набором тестов. 100% покрытие условий требует, чтобы каждое отдельное условие в каждом выражении решения было проверено как истина и ложь;
- Покрытие альтернатив – процент результатов альтернативы, который был проверен набором тестов. Стопроцентное покрытие решений подразумевает стопроцентное покрытие ветвей и стопроцентное покрытие операторов;
- Рецензирование – это оценка состояния продукта или проекта с целью установления расхождений с запланированными результатами и для выдвижения предложений по улучшению. Примерами рецензирования могут служить: управленческое рецензирование, неформальное рецензирование, технический анализ, инспекция и разбор;
- Разбор – это пошаговый разбор, проводимый автором документа для сбора информации и обеспечения одинакового понимания содержания документа;
- Инспекция – это тип равноправного анализа, основанный на визуальной проверке документов для поиска ошибок. Например, нарушение стандартов разработки и несоответствие документации более высокого уровня. Наиболее формальная методика рецензирования и поэтому всегда основывается на документированной процедуре.
Примеры верификации в зависимости от уровней тестирования:
- Модульное тестирование (unit testing): проверка осуществления проектирования программного обеспечения.
- Интеграционное тестирование (integration testing): тестирование на интеграцию между всеми соответствующими компонентами до того как ПО перейдет к следующему уровню (system).
- Системное тестирование (system testing): обеспечение соответствия системы предопределенным требованиям и спецификации.
- Приёмочное тестирование (acceptance testing): убедитесь, что система отвечает требованиям клиента.
Валидация (Validation) - это процесс проверки того, что продукт удовлетворяет потребности и ожидания пользователей. Валидация проводится после завершения разработки и перед началом производства продукта.
С помощью валидации вы можете быть уверенным в том, что создали «правильный» продукт. Продукт, который полностью удовлетворяет заказчика.
Теперь, когда мы знаем, что такое QA, QC, Верификация и Валидация, давайте рассмотрим 7 принципов тестирования:
1. Тестирование показывает наличие дефектов - Тестирование может показать наличие дефектов в программе, но не доказать их отсутствие.
2. Исчерпывающее тестирование недостижимо - Невозможно провести исчерпывающее тестирование, которое бы покрывало все комбинации пользовательского ввода и состояний системы, за исключениям совсем уж примитивных случаев.
3. Раннее тестирование - Тестирование должно начинаться как можно раньше в жизненном цикле разработки программного обеспечения и его усилия должны быть сконцентрированы на определенных целях. Чем раньше обнаруживается дефект, тем проще и дешевле его исправить.
4. Скопление дефектов - Разные модули системы могут содержать разное количество дефектов, то есть плотность скопления дефектов в разных элементах программы может отличаться. В основном, большую часть критических дефектов находят в ограниченном количестве модулей. Это проявление принципа Парето: 80% проблем содержатся в 20% модулей.
5. Парадокс пестицида - Прогоняя одни и те же тесты вновь и вновь, вы столкнетесь с тем, что они находят все меньше новых ошибок. Поскольку система эволюционирует, многие из ранее найденных дефектов исправляют и старые тест-кейсы больше не срабатывают.
6. Тестирование зависит от контекста - Выбор методологии, техники и типа тестирования будет напрямую зависеть от природы самой программы. Например, программное обеспечение для медицинских нужд требует гораздо более строгой и тщательной проверки. Из тех же соображений, сайт с большой посещаемостью должен пройти через серьезное тестирование производительности, чтобы показать возможность работы в условиях высокой нагрузки.
7. Заблуждение об отсутствии ошибок - Тот факт, что тестирование не обнаружило дефектов, еще не значит, что программа готова к релизу. Нахождение и исправление дефектов будет не важным, если система окажется неудобной в использовании и не будет удовлетворять ожиданиям и потребностям пользователя.