1. Жизненный цикл ПО и теория тестирования
Жизненный цикл ПО и теория тестирования
Разработка программного обеспечения — это не хаотичный процесс написания кода, а строго структурированная инженерная дисциплина. Для инженера по автоматизации тестирования (QA Automation Engineer), особенно в сфере финансовых технологий (финтех), понимание того, как рождается, развивается и умирает программный продукт, является фундаментом. Невозможно эффективно автоматизировать проверку системы, если вы не понимаете, на каком этапе эта система находится и по каким правилам функционирует.
В финтехе цена ошибки колоссальна. Если в социальной сети не прогрузится картинка, пользователь просто обновит страницу. Если в банковском приложении из-за ошибки в логике транзакции со счета спишется двойная сумма, компания получит финансовые убытки, штрафы от регуляторов и репутационный крах. Именно поэтому процессы контроля качества здесь выстроены максимально жестко.
Жизненный цикл разработки ПО (SDLC)
Жизненный цикл разработки программного обеспечения (Software Development Life Cycle, SDLC) — это последовательность этапов, которые проходит программный продукт от момента появления идеи до снятия с эксплуатации. SDLC обеспечивает предсказуемость, управляемость и прозрачность процесса создания ПО.
Каждый продукт проходит через несколько базовых фаз, независимо от того, какую методологию использует команда.
1. Сбор и анализ требований
На этом этапе бизнес-аналитики и менеджеры продуктов общаются с заказчиками, чтобы понять, что именно нужно создать. Формируются бизнес-требования и технические спецификации.В финтехе этот этап критически важен из-за обилия юридических ограничений. Например, при создании функции перевода по номеру телефона (СБП) аналитики должны учесть лимиты Центрального банка, правила противодействия отмыванию денег (AML) и требования к шифрованию персональных данных.
2. Проектирование (Design)
Архитекторы и разработчики решают, как технически реализовать собранные требования. Выбираются языки программирования (например, Java или Kotlin), базы данных (PostgreSQL, Oracle), архитектурные паттерны (микросервисы или монолит) и протоколы взаимодействия (REST API, gRPC).3. Разработка (Implementation/Coding)
Программисты пишут исходный код продукта согласно проектной документации. Базы данных настраиваются, API-интерфейсы программируются, создается пользовательский интерфейс (UI).4. Тестирование (Testing)
Готовый код проверяется на соответствие изначальным требованиям. Именно здесь активно работают QA-инженеры. Выявляются дефекты, код возвращается на доработку, и цикл повторяется до достижения приемлемого уровня качества.5. Внедрение (Deployment)
Проверенный продукт переносится на «боевые» серверы (Production), где становится доступен реальным пользователям.6. Поддержка (Maintenance)
После релиза команда продолжает следить за продуктом: выпускает обновления, исправляет найденные пользователями ошибки и адаптирует систему под новые версии операционных систем.> Качество закладывается на этапе требований, а не на этапе тестирования. Если требование изначально ошибочно, разработчик напишет идеальный код, который будет делать абсолютно неправильные вещи. > > Лаборатория качества
Модели SDLC: Waterfall против Agile
Исторически первой моделью SDLC был Каскадный подход (Waterfall). В нем каждая следующая фаза начинается строго после завершения предыдущей. Вернуться на этап проектирования, если вы уже находитесь на этапе тестирования, практически невозможно без огромных финансовых потерь.
Сегодня в финтехе доминирует Agile (гибкие методологии, такие как Scrum или Kanban). Процесс разбивается на короткие итерации (спринты) длиной 2–4 недели. В конце каждого спринта команда выпускает рабочий кусочек продукта.
| Характеристика | Waterfall | Agile (Scrum) | | :--- | :--- | :--- | | Отношение к изменениям | Изменения вносить сложно и дорого | Изменения приветствуются на любом этапе | | Роль тестирования | Строго в конце разработки | Непрерывно, параллельно с разработкой | | Документация | Исчерпывающая, создается до написания кода | Минимально необходимая, обновляется на лету | | Риски для финтеха | Высокий риск выпустить устаревший продукт | Риск технического долга из-за спешки |
Жизненный цикл тестирования ПО (STLC)
Тестирование — это не просто хаотичное «прокликивание» кнопок в приложении. Это самостоятельный инженерный процесс, который имеет свой собственный жизненный цикл — Жизненный цикл тестирования ПО (Software Testing Life Cycle, STLC).
STLC тесно переплетается с SDLC. В современных Agile-командах они идут параллельно.
!Схема взаимодействия SDLC и STLC
Рассмотрим этапы STLC на практическом примере: команда разрабатывает API для расчета комиссии при переводе с кредитной карты на дебетовую.
1. Анализ требований (Requirement Analysis)
QA-инженер изучает документацию еще до того, как написана первая строчка кода. Цель — проверить сами требования на полноту, непротиворечивость и тестируемость.Пример из практики: в документации указано, что комиссия за перевод составляет 2%. QA-инженер задает вопросы: «А есть ли минимальная сумма комиссии? Что делать, если 2% составляют дробное число копеек — как мы округляем: математически или всегда в большую сторону?». Найдя эти пробелы до начала разработки, тестировщик экономит компании десятки часов работы программистов.
2. Планирование тестирования (Test Planning)
Определяется стратегия: что мы тестируем, как мы тестируем, какие инструменты используем. На этом этапе принимается решение об автоматизации.Для нашего API комиссии мы решаем: функциональное тестирование будет автоматизировано с использованием Kotlin и библиотеки REST Assured. Нагрузочное тестирование не требуется, так как ожидаемая нагрузка низкая.
3. Проектирование тестов (Test Design)
QA-инженер создает тест-кейсы (Test Cases) — пошаговые сценарии проверок. Применяются техники тест-дизайна (классы эквивалентности, граничные значения), чтобы минимизировать количество тестов, сохранив максимальное покрытие.Пример тестовых данных для комиссии:
4. Настройка тестовой среды (Environment Setup)
Тестировать на «боевой» базе данных с реальными деньгами клиентов категорически запрещено. Инженеры разворачивают тестовые стенды — изолированные копии системы. Настраиваются базы данных с фейковыми пользователями, поднимаются моки (заглушки) для сторонних сервисов (например, заглушка платежного шлюза Visa/Mastercard).5. Выполнение тестов (Test Execution)
Разработчики отдают готовый код. QA-инженер запускает написанные автотесты или проходит тест-кейсы вручную. Фактический результат работы программы сравнивается с ожидаемым.Если при переводе 10 000 руб. система списывает комиссию 200 руб. (как ожидалось) — тест пройден. Если списывается 2000 руб. — тест провален, заводится дефект.
6. Завершение тестирования (Test Closure)
Анализ результатов. Формируется отчет о качестве продукта (например, с помощью инструмента Allure). Команда принимает решение: можно ли выпускать продукт в релиз. Если критических багов нет — даем зеленый свет.Фундаментальные принципы тестирования
Международный совет по тестированию ПО (ISTQB) выделяет 7 базовых принципов, которые должен знать каждый инженер.
1. Тестирование демонстрирует наличие дефектов, а не их отсутствие. Тестирование снижает вероятность наличия скрытых дефектов, но даже если автотесты не нашли ни одной ошибки, это не доказывает, что программа идеальна. Вы лишь доказали, что программа работает корректно в рамках проверенных сценариев.
2. Исчерпывающее тестирование невозможно. Проверить все возможные комбинации входных данных нереально. Представьте поле ввода PIN-кода из 4 цифр. Это 10 000 комбинаций. А если полей 10? Вместо попыток проверить всё, QA-инженеры используют анализ рисков и техники тест-дизайна для выбора наиболее важных проверок.
3. Раннее тестирование экономит время и деньги. Этот принцип лежит в основе подхода Shift-Left Testing (сдвиг влево). Чем раньше найден баг, тем дешевле его исправить. Ошибка в требованиях, найденная на этапе анализа, стоит 0 рублей (нужно просто переписать текст). Та же ошибка, найденная в Production, может стоить миллионы.
4. Кластеризация дефектов. Работает принцип Парето (80/20): около 80% всех багов обычно сосредоточено в 20% модулей программы. В финтехе самыми «забагованными» часто оказываются модули интеграции с устаревшими банковскими системами (Legacy) или сложные калькуляторы процентов.
5. Парадокс пестицида. Если вы будете постоянно опрыскивать поле одним и тем же пестицидом, насекомые выработают к нему иммунитет. Точно так же, если вы будете гонять один и тот же набор автотестов из релиза в релиз, они перестанут находить новые баги. Тестовые сценарии нужно регулярно пересматривать и обновлять.
6. Тестирование зависит от контекста. Мобильное приложение для заказа пиццы и программное обеспечение для управления ядерным реактором (или банковским процессингом) тестируются абсолютно по-разному. В финтехе акцент всегда смещен на безопасность, транзакционную целостность и производительность.
7. Заблуждение об отсутствии ошибок. Создание системы, в которой нет багов, бесполезно, если эта система не отвечает потребностям бизнеса. Идеально работающий, но никому не нужный продукт — это провал.
QA, QC и Тестирование: в чем разница?
В индустрии часто путают эти три термина, используя их как синонимы. Однако это вложенные друг в друга понятия.
Обеспечение качества (Quality Assurance, QA) — это превентивный процесс. QA сфокусирован на улучшении процессов разработки, чтобы баги вообще не появлялись. QA-инженер анализирует требования, настраивает CI/CD пайплайны, внедряет стандарты написания кода.
Контроль качества (Quality Control, QC) — это реактивный процесс. Продукт уже написан, и задача QC — проверить его на соответствие требованиям.
Тестирование (Testing) — это технический процесс в рамках QC. Это непосредственно написание автотестов на Kotlin, выполнение SQL-запросов к базе данных для проверки целостности данных, отправка HTTP-запросов через Postman.
Жизненный цикл дефекта (Bug Lifecycle)
Когда автотест падает или ручной тестировщик находит аномалию, рождается дефект (баг). Баг — это несоответствие фактического результата работы программы ожидаемому результату.
Управление багами происходит в системах трекинга задач (например, Jira). Жизненный цикл бага состоит из нескольких статусов:
Анатомия идеального баг-репорта
Чтобы разработчик мог быстро исправить баг, QA Automation Engineer должен уметь грамотно его описать. Плохой баг-репорт: «Кнопка перевода не работает». Хороший баг-репорт содержит:
Экономика автоматизации тестирования
Зачем финтех-компании нанимают QA Automation инженеров и платят им высокие зарплаты? Ответ кроется в математике и скорости доставки продукта на рынок (Time-to-Market).
Ручное регрессионное тестирование (проверка того, что новый код не сломал старый функционал) крупного банковского приложения может занимать у команды из 5 человек целую неделю. В Agile релизы нужно делать каждые 2 недели. Тратить половину времени спринта на ручные проверки — непозволительная роскошь.
Автотесты, написанные на Java или Kotlin, могут выполнить ту же работу за 15 минут.
Оценить целесообразность автоматизации можно через показатель возврата инвестиций (ROI). Базовая формула выглядит так:
Где:
Автоматизация требует высоких стартовых инвестиций (), но на длинной дистанции, когда количество регрессионных прогонов исчисляется сотнями, многократно превышает затраты.
Однако автоматизировать всё подряд — антипаттерн. Не подлежат автоматизации:
Подготовка к практике
Теория тестирования и понимание SDLC/STLC — это компас, который не даст вам потеряться в мире кода. В следующих статьях мы перейдем к практической реализации этих концепций. Мы разберем архитектуру клиент-серверных приложений, погрузимся в протокол HTTP, научимся работать с командной строкой Bash и системой контроля версий Git, чтобы подготовить инфраструктуру для написания наших первых автотестов на Kotlin.