Экономия за счет тестирования
По отчету NIST недостаточное тестирование программного обеспечения приносит экономике США около 50 млрд убытков в год (данные на 2002 г. (https://www.stickyminds.com/article/real-money-poor-software-testing-practices-cost-us-companies-59-billion)). На сегодняшний день, я думаю, цифра выросла еще более значительно. И многие компании и команды понимают это. Большая часть компаний уже внедрили практики тестирования программного обеспечения перед релизом. В некоторых сформированы целые отделы QA (Quality Assurance, обеспечение качества).
Как растет стоимость исправления дефекта
Одно из свойств разработки программного обеспечения — чем позже найден дефект, тем больше сил и времени уходит на его исправление. Это подтвержденный исследованиями факт, что исправление ошибок на этапе сопровождения существенно, иногда даже в несколько порядков увеличивает затраты по сравнению с более ранними этапами разработки. К тому же, помимо затрат на исправление ошибок, очень часто компании несут репутационные, материальные потери, а иногда и человеческие жизни (ошибка в ПО Boeing 737 Max стоила 346 человеческих жизней).
Около 30% ошибок рождаются в требованиях
Исследования показывают, что около трети всех ошибок допускаются в требованиях. Если такие ошибки будут найдены на этапе сопровождения, то их исправление будет стоить колоссальных усилий. Поэтому стоит находить ошибки еще до того, как они пойдут в разработку.
Shift Left
Многие компании внедряют у себя shift-left подход к тестированию. Суть этого подхода — тестирование на более ранних этапах жизненного цикла разработки. Вместо тестирования после написания кода, его начинают уже на этапе требований и проектирования. Этот подход позволяет значительно снизить затраты, связанные с исправлением дефектов.
Как экономить:
- Внедрение тестирования требований — QA инженеры проверяют требования на полноту, непротиворечивость и тестируемость.
- Внедрение практики 3 Amigos, что снизит недопонимание между требованиями и реализацией, что в конечном итоге приводит к уменьшению числа ошибок.
- Автоматизация тестирования — писать модульные и интеграционные тесты параллельно с кодом и/или внедрить практику TDD. Здесь важно гнаться не за процентом покрытия кода тестами, а за их качеством.
- Привлечение QA к ревью кода и тестов и к написанию модульных/автотестов.
- Внедрение статического анализа кода.
- Внедрение прогона тестов на этапе CI, это позволит сразу же выявлять проблемы.
- Обучение всей команды, не только QA инженеров, пониманию принципов качественного тестирования.
Чем раньше обнаруживается и исправляется дефект, тем дешевле он обходится компании.
Подпишиcь на мой telegram-канал