Небольшое вступление о том, что побудило написать эту статью.

  • Так сложилось, что за несколько лет довелось и собеседовать и общаться с довольно многими коллегами по цеху разработки ПО. На собеседованиях – чаще, в общении – меньше, но упоминался вопрос «В чем разница между QA и тестированием?», или его вариант «В чем разница между Quality Assurance и Quality Control?». Интересно, но очень немногие смогли объяснить разницу. Вы не подумайте, что я умничаю, несколько лет назад я и сам не смог бы внятно ответить:).
  • Еще один побуждающий фактор в том, что в большинстве случаев объявление вакансий на тестировщика звучит: «Требуется QA» или «QA Tester». Может показаться как придирка, но «QA Tester» это как? Тот, который тестирует того, кто делает QA?
  • Но главное, в большинстве случаев мы перекладываем ответственность за качество продукта на плечи тестировщиков (зачастую это хрупкие плечи девушек ИТ-шниц). Т.е. надеемся что (внимание, ключевые слова большими буквами) ОНИ, ПОТОМ, ЭТО протестируют и будет нам КАЧЕСТВО.
    • ОНИ – не мы все вместе, а кто-то другой.
    • ПОТОМ – реактивно, поздно. Аспекты качества не планируется изначально.
    • ЭТО – какие именно результаты поставки и критерии приемки?
    • КАЧЕСТВО – понятие растяжимое, может определяться по-разному к разным результатам поставки, к взаимодействию между участниками проекта, и у тех же участников ожидания по качеству разные.

Захотелось внести ясность. Скромно полагаю, что могу быть достаточно авторитетен, все-таки, ИТ-шного опыта 15 лет, серьезно участвовал во внедрении CMMI, интересуюсь разнообразными стандартами в области управления качеством различных объектов и систем, и т.п. В общем, некоторый опыт и знания имеются.

Для начала давайте посмотрим, что такое тестирование, или Quality Control (в дальнейшем QC). QC это применение техник контроля качества определенных артефактов. Это проверки соответствия того, что мы УЖЕ СДЕЛАЛИ некоторым ожиданиям. Например:

  • Проверка соответствия функционала спецификации.
  • Инспекция (review) документов относительно требований к их написанию, содержанию и формату. Документом может быть спецификация, календарный план проекта, тестовая документация и т.п.
  • Инспекция (review) кода относительно стандарта кодирования, архитектурной документации, требованиям безопасности и т.п.
  • Верификация проверяет артефакт на соответствие требованиям, описанным-оговоренным РАНЕЕ, т.е. смотрит в прошлое. Например, заказчик, читающий и утверждающий спецификацию, по которой уже были обсуждения делает верификацию.
  • Валидация же проверяет артефакт на возможность его ДАЛЬНЕЙШЕГО использования, т.е. смотрит в будущее. Например, тестировщик, «идущий» по тестовым сценариям, которые составлены на базе спецификации, делает верификацию. Но если ту же спецификацию инспектирует тестировщик на предмет тестируемости, а разработчик на предмет реализуемости, то это уже валидация.

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

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

Теперь давайте посмотрим на Quality Assurance (QA), оригинальные определения.

  • CMMI. Quality Assurance – planned and systematic means for assuring management that the defined standards, practices, procedures, and methods of the process are applied.
  • PMBOK. Perform Quality Assurance – The process of auditing the quality requirements and the results from quality control measurements to ensure appropriate quality standards and operational definitions are used.
  • Wikipedia. Software quality assurance (SQA) consists of a means of monitoring the software engineering processes and methods used to ensure quality. The methods by which this is accomplished are many and varied, and may include ensuring conformance to one or more standards, such as ISO 9000 or a model such as CMMI.

Если сказать в двух словах, то QA отвечает за качество процессов , которые в свою очередь применяются для создания артефактов (продуктов). Инструментарий оценки качества процессов – аудит (см.

Но и это еще не все, на самом деле QA в свою очередь является элементом Управления Качеством (Quality Management — QM). Существуют немного отличающиеся определения о составе QM, приведу важнейшие из них:

  • Планирования качества – о качестве продукта, услуг начинают думать с самого начала. Определяются процессы, методологии, стандарты, критерии приемки, контрактные обязательства, целевая среда функционирования продукта и т.д.
  • Обеспечения качества – собственно отвечает за качество процессов и их применение
  • Контроль качества – техники контроля качества артефактов (продуктов)
  • Улучшения качества – постоянные, измеримые улучшения процессов с целью сокращения расходов (деньги, время, материалы), оптимизации работы, улучшения качества продукта и т.п.
  • Ответственность руководства (Management Commitment/Responsibility) по отношению к QM – причем это означает вполне конкретные действия, т.е. заинтересованность (лидирование, инициирование) элементов QM, выделение ресурсов (люди, время, деньги), обучение, внутреннее и внешнее «продвижение» отношения к качеству, контроль элементов QM.

Подробно все базовые определения и понятия тестирования, а также разновидности и классы тестирования будут разобраны на примерах в отдельном разделе. В этой же статье будут рассмотрены только основные моменты, на которые стоит обратить особое внимание и сфокусироваться при подготовке к собеседованию: "Что такое тестирование ПО?" "Чем тестированеие отличается от QA?" "Что такое валидация и верификация и какая между ними разница?" "Какие бывают виды и типы тестирования?"

1. В первую очередь от претендента на позицию тестировщика ждут, что он знает что-такое тестирование. Определений тестирования множество, например, оно может быть таким:

  • Тестирование ПО – это анализ и исследование программного продукта с целью выявления возможных ошибок, а также оценки и демонстрации того, что продукт соответствует требованиям заказчика

Или таким:

  • Тестирование ПО – проверка реального поведения программного продукта на соответствие заявленным требованиям

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

2. Многие интервьюеры интересуются, в чем отличие тестирования от QA. При ответе на этот вопрос лучше всего вспомнить и описать общую картину процесса обеспечения качества продукта. Есть 3 основных уровня:


Здесь также важно показать свой взгляд на этот вопрос и сформулировать различия своими словами

3. Часто на интервью встречаются вопросы про различие верификации и валидации продукта:

  • Верификация – это подтверждение, что были выполнены все требования предъявляемые к ПО.
  • Валидация – это проверка того, что ПО соответствует потребностям пользователей и его можно использовать в реальной жизни.

Другими словами: верификация показывает, что у нас есть все необходимые компоненты продукта, он соответствует всем заявленным требованиям, а валидация показывает, что продукт может быть применен в тех условиях и таким образом, как этого ожидал пользователь\заказчик.

4. Также важно представлять какие бывают классы, виды и типы тестов, зачем они необходимы. Это нужно знать, чтобы общаться с будущими коллегами по команде на одном языке и понимать какие проверки нужны в том или ином случае. Далее приведу некоторые основные виды тестирования, которые необходимо знать и различать:

  • По объекту тестирования: функциональное и нефункциональное:
    • Функциональное тестирование – проверка того, что продукт выполняет свое прямое назначение, предоставляет функции, требуемые заказчиком\пользователями.
    • Нефункциональное тестирование – это проверка качественных характеристик продукта: скорости работы, надежности, безопасности и т.п. Нефункциональное тестирование делиться на (приведу основные виды):
      • Тестирование производительности
      • Конфигурационное тестирование
      • Юзабилити-тестирование
      • Тестирование пользовательского интерфейса
      • Тестирование безопасности
      • Тестирование совместимости
  • По изолированности компонент: системное, интеграционное, модульное. Можно сказать, что это классификация по уровню, по масштабности тестирования:
    • Мы можем проверять работоспособность ПО на уровне одного отдельного программного модуля\блока – это модульное тестирование.
    • Можно проверять взаимодействие нескольких модулей друг с другом через какой-либо интерфейс – это интеграционное тестирование.
    • Самый большой масштаб, это системное тестирование – проверка работоспособности смей системы \ всего продукта в целом.
  • По версии функционала: тестирование новой функциональности и регрессионное тестирование:
    • С одной стороны мы можем проверять новые функции, которые включены в последнюю сборку продукта
    • С другой – проводить регрессионное тестирование, т.е. проверять что функционал из предыдущих версий не пострадал после внедрения нового. Понятие и цели регрессионного тестирования – являются важным и частым вопросом на интервью
  • По ожидаемому результату: позитивное и негативное тестирование:
    • Позитивное тестирование – проверки, цель которых получить положительный результат, правильную отработку системы
    • Негативное тестирование – проверка сценариев, когда действие не может быть выполнено системой, анализ того, как система реагирует на ошибки и некорректные запросы
  • По уровню знаний системы: тестирование методом черного, белого или серого ящика:
    • Метод тестирования черного ящика – это проверка ПО с точки зрения внешнего мира, когда внутреннее устройство продукта неизвестно. В данном случае мы сосредоточены на проверке функционалиности продукта
    • Метод тестирования белого ящика – проверка реализации ПО, когда мы представляем его внутреннюю структуру, имеем доступ к коду
    • Метод тестирования серого ящика – комбинация первых двух видов. При данном подходе мы концентрируемся на конечной функциональности ПО, но знаем его внутреннюю реализацию, что дает больше идей о том, как этот продукт тестировать
  • По степени автоматизации: ручное и автоматизированное тестирование:
    • Во первых, здесь нужно объяснить разницу между этими видами тестирования, что просто: ручное – выполняется вручную, автоматизированное – с использованием средств автоматизации, программных средств (т.е. одна программа тестирует другую)
    • Во вторых, часто требуется объяснить, когда выгодна, не выгодна автоматизация или невозможна автоматизация
  • По уровню планирования: тестирование по тестовым кейсам и исследовательское тестирование
    • В первом случае мы заранее планируем какие проверки будем выполнять и готовим их в виде тестовых кейсов\тестовых сценариев.
    • Во втором – мы исследуем продукт в «свободном плавании», выполняем те проверки и в той последовательности, которые кажутся необходимыми в данный момент времени.

В данном вопросе главное – суметь объяснить на примерах назначения и различия видов тестирования. Очень важно помнить и понимать, что все эти виды и типы тестирования не обязательно являются взаимоисключающими, их нельзя перечислить в один ряд через запятую. Это скорее взгляд с разных точек зрения на то, как тестировать и что тестировать. Поэтому, например, функциональное тестирование может быть: в рамках белого и черного ящика; можно проводить его вручную, а можно использовать автоматизацию; мы можем проверять позитивные или негативные функциональные сценарии; можно проверять функционал проходя по тестовым сценариям или без них и т.д. С остальными видами дело обстоит также.