Со времён первых программных систем, разработанных для нужд министерств обороны и научных институтов в середине XX века, испытанию продукта уделялось особое внимание. Этот процесс был направлен на оценку и подтверждение корректности работы программного обеспечения – так называемое «обеспечение качества» или «Quality Assurance». Спустя десятки лет специальность QA Engineer не просто сохранилась в обиходе, но стала значительно более востребованной, ведь сегодня фактически любая отрасль так или иначе связана со сферой программного обеспечения. В нашей статье мы расскажем вам о специфике профессии тестировщика и её месте в сфере IT.
С точки зрения программного обеспечения QA – это система контроля, направленная на своевременное выявление ошибок и предотвращение их появления на любом этапе разработки. Задача специалиста в данной сфере заключается в использовании ряда методик для оценки жизнеспособности программы, а также её соответствия требованиям заказчика и ожиданиям пользователей. Методики оценки могут основываться как на ручном, так и на автоматическом тестировании ПО. Специализированные курсы QA предлагают будущим тестировщикам освоить самые популярные алгоритмы, а также научиться не просто находить ошибки, но формировать грамотные отчёты, которые направят разработчиков в нужное русло. В контексте деятельности команды процесс обеспечения качества базируется на так называемом цикле Деминга или цикле PDCA (plan – do – check – act). Другими словами, разработчики и тестировщики должны работать сообща, установив совместные ожидания от проекта, распланировав все детали процесса для достижения установленных целей. Выполнение текущих задач, анализ результата на предмет отклонений, поиск причин отклонений и работа над ошибками являются полноправными этапами процесса.
Нередко за качеством продукта следят сами разработчики, однако такой подход не всегда позволяет обнаружить баги и прочие недостатки кода. QA-инженер располагает знаниями и навыками, которые позволяют ему не просто найти ошибки, но систематизировать их и докопаться до причин их появления. Такая подача информации поможет разработчикам более эффективно вносить исправления в структуру ПО. Кроме того, процедуры QA подразумевают проведение моделирования различных сценариев, в том числе и тех, которые могут возникнуть в процессе эксплуатации готового продукта. Таким образом, они позволяют разработчикам взглянуть на проект с точки зрения потребителя. Благодаря системной проработке возможных отклонений от запланированного результата тестировщик может предвидеть потенциальные проблемы и удостовериться, что готовый продукт будет соответствовать как требованиям индустрии, так и ожиданиям пользователей.
Как мы упоминали ранее, тестирование продукта может быть ручным или автоматическим. Оба подхода имеют свои достоинства и недостатки. При ручном тестировании QA-инженер напрямую использует ПО, в реальных условиях оценивая удобство взаимодействия с интерфейсом, сравнивая фактический результат с ожидаемым. Хотя возможность получить «живой» фидбек чрезвычайно ценна для разработчиков, недостатком такого подхода является низкое быстродействие, потому он наиболее применим для тестирования небольших проектов. К тому же при ручном тестировании невозможно исключить человеческий фактор, ведь некоторые ошибки могут попросту ускользнуть от внимания специалиста: вероятность такого сценария увеличивается по мере роста масштаба проекта. Путём автоматизации тестирования эксперт может многократно ускорить процесс поиска ошибок. Суть данного подхода заключается в написании кода для имитации пользовательского поведения. За счёт многократного прогона автоматического тестирования алгоритм 100% выявит ошибки, предусмотренные его сценарием. В этом кроется и недостаток автоматизации процесса: тест «пройдёт мимо» нетипичных отклонений. Потому наиболее оптимальным способом «обеспечения качества» является комбинация ручных и автоматических алгоритмов.
В зависимости от масштаба проекта, выполнение QA-процедур может лежать на плечах одного человека или целой команды. Так или иначе, каждый продукт рассматривается с точки зрения ключевых аспектов, способных повлиять на удовлетворённость клиента: безопасности, надёжности, юзабилити, а также способности к масштабированию и локализации. Как и к любой другой профессии, индустрия выдвигает к QA-инженерам определённые требования, которые охватывают как его профессиональные навыки, так и soft skills. В частности, прежде всего специалист должен уметь пользоваться языками программирования (Java, Python, JS, C# и пр.) как для оценки готового кода, так и для написания автоматических тестов. Кроме того, среди важнейших навыков в данном направлении стоит выделить:
- способность к аналитическому мышлению,
- умение создавать чёткие планы и следовать им,
- внимание к деталям,
- умение ясно и структурировано излагать свои мысли.
Сочетание специальных знаний с данными навыками поможет QA-инженеру идентифицировать риски, выбрать соответствующие ожидаемому результату стратегию и инструменты тестирования, выявить отклонения и чётко изложить их суть разработчикам для наиболее эффективного исправления.