Основы качества программного обеспечения
Качество программного обеспечения это не просто отсутствие ошибок. Оно описывает, насколько хорошо программа удовлетворяет требованиям пользователей и как эффективно её можно поддерживать на протяжении всего жизненного цикла. В этой статье я объясню основы качества ПО и покажу, как реализовать его на практике в повседневной разработке.
В эпоху Vibecoding код пишется так быстро, что часто теряется из виду контроль над качеством.
AP1 и AP2 это темы, которые требуют знания ISO 25010 уже на этапе AP1, а позже, когда проект стартует, нужно понимать функциональные и нефункциональные требования. Обычно это можно хорошо выучить и применять на практике. Важен и различие между ISO 9126 и ISO 25010, то есть между старым и новым стандартом. По сути, это просто расширение.
Вкратце: качество программного обеспечения в разработке приложений
- Качество ПО охватывает функциональные и нефункциональные требования.
- ISO 25010 определяет восемь основных характеристик: Functional Suitability, Performance Efficiency, Compatibility, Usability, Reliability, Security, Maintainability, Portability.
- Высокое качество снижает затраты на исправление ошибок, ускоряет разработку и повышает удовлетворённость пользователей.
- Качество достигается через тестирование, Clean Code, чёткую архитектуру, code review и непрерывный мониторинг метрик.
Качество программного обеспечения измеряет, делает ли программа то, что от неё ожидается, и как хорошо она это делает. Это не бинарное состояние, а совокупность свойств, которые получают разный вес в зависимости от контекста. Например, медицинское приложение требует высокой надёжности и безопасности, а платформа потокового воспроизведения в первую очередь нуждается в производительности и масштабируемости.
Главные аспекты разбиваются на три группы:
- Функциональное качество: корректность, полнота, адекватность функций.
- Нефункциональное качество: производительность, безопасность, надёжность, удобство использования.
- Структурное качество: поддерживаемость, тестируемость, расширяемость, качество кода.
Основные компоненты качества ПО
- Функциональная корректность: программа безошибочно выполняет указанные требования.
- Надёжность: система остаётся стабильной под нагрузкой и при сбоях.
- Производительность: время отклика, пропускная способность и эффективность ресурсов находятся в целевых диапазонах.
- Безопасность: защита от несанкционированного доступа, утечек данных и манипуляций.
- Поддерживаемость: код читаем, модульный и легко изменяемый.
- Тестируемость: компоненты можно тестировать изолированно и автоматизировано.
- Удобство использования: пользователи могут интуитивно и эффективно работать с программой.
- Совместимость: взаимодействие с другими системами, браузерами и устройствами.
Практический пример: цели качества для Web-API
Задача: заказной API для интернет-магазина
Functional Suitability:
- Все необходимые endpoint'ы для use case'ов присутствуют и правильно документированы.
- Цена, налог и скидка рассчитываются корректно в 100% случаев.
Performance Efficiency:
- 95-й перцентиль времени отклика ниже 200 миллисекунд при 100 одновременных пользователях.
- Пропускная способность минимум 500 запросов в секунду без нарушения SLA.
Reliability:
- Доступность 99,9% ежемесячно.
- MTTR менее 30 минут при перебоях.
Security:
- Шифрование передачи через TLS 1.3.
- Аутентификация через OIDC с MFA для администраторов.
- Неизменяемый audit log для всех критических изменений.
Maintainability:
- Покрытие кода unit-тестами не менее 70%.
- Отсутствие циклических зависимостей между модулями.
- Feature flags для контролируемых развёртываний.
Преимущества и недостатки
Преимущества
- Более низкие общие затраты: обнаружение ошибок на ранних стадиях намного дешевле, чем исправления в production.
- Более высокая скорость разработки: чистый код и хорошее покрытие тестами позволяют быстрее итерировать.
- Лучшая удовлетворённость пользователей: стабильное, быстрое и интуитивное ПО используется охотнее.
- Снижение рисков: уязвимости безопасности и перебои можно минимизировать на этапе разработки.
Недостатки
- Больше времени на входе: тестирование, review и метрики требуют времени в начале проекта.
- Противоречия целей: максимальная безопасность может снизить производительность, максимальная гибкость может увеличить сложность.
- Затраты на измерение: качество нужно определить, измерить и контролировать, чтобы оно приносило результаты.
Ключевые моменты к экзамену
- Определение качества ПО по ISO 25010.
- Различие между функциональными и нефункциональными требованиями.
- Восемь основных характеристик ISO 25010 и их значение.
- Связь между качеством, тестированием и поддерживаемостью.
- Стоимость исправления ошибок на различных этапах жизненного цикла.
- Значение Clean Code, code review и статического анализа.
Типичные экзаменационные вопросы (с краткими ответами)
-
Что такое качество программного обеспечения? Мера того, в какой степени ПО удовлетворяет установленные и неявные требования.
-
Назовите три нефункциональных характеристики качества. Производительность, безопасность, надёжность.
-
Что означает поддерживаемость? Способность модифицировать ПО, исправлять и расширять его с приемлемыми затратами.
-
Почему тестируемость важна? Она позволяет проводить автоматизированные повторяемые тесты и выявлять ошибки на ранних этапах.
-
В чём различие между ISO 9126 и ISO 25010? ISO 25010 расширяет шесть характеристик ISO 9126 до восьми и добавляет безопасность и совместимость.
Продолжение пути обучения качеству ПО
Следующая статья в пути обучения качеству ПО посвящена качеству программного обеспечения и ISO 25010 восьми характеристикам качества по международному стандарту.
Основные источники
- https://iso25000.com
- https://www.iso.org/standard/35733.html
- https://en.wikipedia.org/wiki/ISO/IEC_25010



