В среде разработки программного обеспечения мы часто сталкиваемся с путаницей в понятиях «обеспечение качества ПО» и «тестирование». Из-за этой путаницы руководители молодых компаний пытаются улучшить качество продукта, ограничиваясь внедрением тестирования. Попробуем разобраться и понять, в чем состоит существенная разница между тестированием ПО (Testing) и обеспечением его качества (QA).
Почему это важно
Когда-то я работала в стартапе среднего размера. В нем не было процессных менеджеров, сертифицированных консультантов и высококлассных управленцев. Но было другое – команда энтузиастов с горящими глазами, амбициозными планами, и зарядом позитива. Мы мечтали о создании потрясающего продукта, польза, новаторство и качество которого переплюнут все известные человечеству программные разработки. И мы потихоньку начали наступать на все грабли начинающего стартапа.
«Разработчики все безответственные… Этот тестировщик неквалифицированный… Я нахожу баги через минуту использования продукта… Да вы кроме чаепитий там вообще что-то делаете?!» – выслушивали мы от директора после каждого релиза. Дальше последовало решение руководства о наборе команды опытных тестировщиков вместе с руководителем отдела. Всё это сопровождалось многочисленными разговорами о том, каким должен быть качественный продукт.
Ребята-тестировщики оказались профессионалами: заводили понятные баги, которые было приятно читать, бесконечно разговаривали с менеджером проекта, выясняя нужные и важные детали поведения продукта. Разработчики стали тратить меньше времени на исправление ошибок, но руководитель компании так и не получил того, что ожидал от внедрения тестирования в процесс разработки. Примерно через полгода случился неприятный разговор с начальством, по итогам которого выяснилось, что качество нашего продукта совсем не улучшилось, хотя затраты на разработку возросли. Оказывается, от отдела тестирования ожидали влияния на качество продукта.
И это не единичный случай – многие мои знакомые работали в похожих компаниях. Этот пример наглядно демонстрирует нам распространенное в мире IT заблуждение: многие думают, что тестирование само по себе способно улучшить качество ПО.
Отличия тестирования и обеспечения качества
В соответствии с глоссарием ISTQB, Тестирование – это процесс, содержащий в себе все активности жизненного цикла, как динамические, так и статические, касающиеся планирования, подготовки и оценки программного продукта и связанных с этим результатов работ, с целью определить, что они соответствуют описанным требованиям, показать, что они подходят для заявленных целей и для определения дефектов. Только вдумайтесь! Оценка продукта и результатов работ… Разве может оценка улучшить качество? Качество же – это способность ПО при заданных условиях удовлетворять установленным или предполагаемым потребностям.
- исследует и анализирует продукт, после чего составляет модель или карту продукта;
- планирует необходимые активности для проверки соответствия продукта заявленным ожиданиям и характеристикам: проектирует тесты, организует подготовку тестовых данных и непосредственно проверки, собирает статистику по дефектам в продукте;
- помогает разработчикам быстрее и проще исправлять дефекты;
- помогает менеджеру проекта понимать результаты разработки в краткосрочном периоде;
- может использовать имеющиеся критерии качества продукта для оценки состояния протестированного функционала и для выводов о возможности его передачи заказчику или запуска в тираж.
Качество продукта улучшилось? Нет, конечно. В рамках процесса тестирования мы работаем с готовым продуктом – заботимся о том, чтобы вовремя найти и устранить критичные дефекты, снижая уровень риска. У нас появляется ценнейшая информация о работе продукта и его слабых местах, и мы можем передать ее заинтересованным лицам. Те, в свою очередь, смогут использовать ее как опорную точку для организации комплексных мероприятий, направленных на работу с процессами постановки задач, разработки, тестирования и анализа результатов.
Именно на специалистах по обеспечению качества лежит ответственность за разработку и внедрение процессов и стандартов для улучшения жизненного цикла производства, а также обеспечение уверенности в том, что эти процессы выполняются. Таким образом, если мы хотим улучшать качество продукта, мы нанимаем на работу не тестировщиков, а специалистов в области QA.
Что делает QA-специалист:
- формулирует и документирует показатели критериев качества, которые для проекта или для всей компании будут считаться эталонными;
- изучает требования к продукту и предлагает менеджеру проекта возможные варианты построения процесса разработки с включением необходимых активностей для обеспечения качества;
- следит за мотивированностью сотрудников, их квалификацией и критериями подбора нового персонала;
- помогает всем участникам проекта понять их сферу влияния и ответственности;
- выстраивает и осуществляет контроль проектного процесса, проводя регулярный анализ его влияния на качество ПО и вовремя внося корректировки (например, предотвращает появление некоторых багов, внедрив практику согласования требований до передачи их в разработку, или организует обучение тест-дизайнеров, обратив внимание на то, что написанные тесты не обеспечивают максимального покрытия кода, – все зависит от проблемы, повлиявшей в конечном итоге на продукт).
В идеальном мире с идеальными процессами тестировщики вообще не нужны! Специалисты QA примут превентивные меры, и на долю тестировщика останется так мало работы, и она будет настолько примитивная, что каждый участник процесса сможет отвечать за выполнение необходимых критериев на вверенном ему участке функционала. На тему современного обеспечения качества без бюрократии и простоев очень советую прочитать потрясающую книгу «Как тестируют в Google». Описанные в ней идеи просты и понятны, и в то же время от них веет масштабностью и результативностью.
Что могут сделать тестировщики для улучшения качества продукта
Многие ли компании могут позволить себе целый отдел обеспечения качества? Задумаемся: действительно ли тестировщики – такие ограниченные в правах, замкнутые в оковы регламентов и инструкций люди, которые не в состоянии повлиять на качество продукта? Чаще всего, это не так. Все, кто хочет изменить мир к лучшему, начинают с себя, со своей работы над продуктом. Например, руководители в тестировании – с работы своей команды, ведь качественная организация процесса позволяет повысить эффективность тестирования.
Основой для любых изменений служит оценка деятельности и анализ результатов. Оценка формируется на основании сбора статистики по конкретным метрикам. Выбор метрик осуществляется после определения целей проекта применительно к ожиданиям от тестирования и выявления главной проблемы проекта на текущий момент. Несомненно, ожидания формируются каждым участником цикла разработки: менеджером проекта, разработчиками, аналитиками, специалистами службы поддержки.
Например, если есть жалобы на пропускаемые дефекты, то мы начинаем их фиксировать для анализа причин пропуска. Допустим, после пары итераций станет понятно, что причина в недостаточном покрытии функционала тестами. Отлично! Начинаем фиксировать процент покрытия. Ага, у нас недостаточно тестов. Почему? Да потому, что сроки на подготовку и тестирование слишком сжатые, и мы не успеваем писать тесты в требуемом для полного покрытия объеме. Оценка сроков адекватная, только вот передача версии в тестирование происходит позже запланированной даты, а сроки релиза отодвигать нельзя. В чем проблема? Разработчики не успевают – их оценка на разработку всегда оказывается на 2-3 дня меньше фактического времени на реализацию. Почему? Допустим, менеджер подбрасывает незапланированные задачи в середине итерации. Зачем? Заказчик требует – он не видит разницы между разработкой сайта-каталога и сайта-магазина.
Всё, корень проблемы ясен, и можно действовать. Само собой, решение этой проблемы не ляжет на плечи отдела тестирования, а вот менеджеру проекта будет гораздо проще объяснить клиенту важность стабилизации задач версии, имея красивые таблички статистики и графики влияния незапланированных задач на качество продукта на выходе. За чашечкой чая заказчик и менеджер решат: либо стоит развивать продукт итеративно, стараясь соблюдать поставленные сроки – и тогда придется умерить желания заказчика; либо любое изменение в составе версии будет сопровождаться повторной оценкой и откладыванием срока релиза.
Пример не самый впечатляющий, зато из реального опыта. Самое важное правило внедрения улучшений: сначала формулируем цель и выявляем проблемы в ее достижении, а затем решаем, что нам надо замерять для оценки изменений. И, конечно, без сплоченности всех членов команды и без общей заинтересованности в успехе проекта сбор метрик совершенно бесполезен – собранные результаты не получится даже адекватно оценить, чтобы использовать их в дальнейшем.
Влияние процесса тестирования на качество ПО
Итак, тестирование не влияет на качество напрямую. Оно позволяет на протяжении всего жизненного цикла ПО оценивать и контролировать соответствие программных продуктов заданным параметрам качества. Контроль гарантируется через предоставление информации о состоянии продукта на любой стадии его жизненного цикла после выполнения соответствующих проверок. Наряду с такими мерами, как разработка планов обеспечения качества, внедрение стандартов в процессы и регулирование отношений между участниками проекта, тестирование позволяет обрести уверенность в том, что принимаемые меры эффективно или неэффективно влияют на качество разрабатываемого ПО.