Качество программного обеспечения и производительность
Производительность — критическая характеристика качества программного обеспечения. Согласно ISO 25010, эффективность производительности входит в число наиболее важных факторов. Пользователи ожидают быстрого отклика, и исследования подтверждают: длительное время загрузки напрямую приводит к оттоку посетителей.
В двух словах
- Производительность является характеристикой качества по ISO 25010.
- Performance Efficiency включает поведение по времени, использование ресурсов и пропускную способность.
- Производительность нужно планировать заранее и постоянно измерять.
- Тестирование производительности и мониторинг незаменимы.
Performance Efficiency по ISO 25010
Performance Efficiency в ISO 25010 разделена на три подкатегории, каждая охватывает различный аспект производительности.
Поведение по времени
Поведение по времени показывает, насколько быстро программа реагирует на действия пользователя и сколько запросов она может обработать за определённый период. Ключевые метрики: время отклика, пропускная способность и время обработки. Веб-страница, которая загружается менее чем за три секунды, воспринимается пользователями намного лучше, чем медленная страница.
Использование ресурсов
Это измеряет потребление CPU, оперативной памяти, пропускной способности сети, энергии и дискового пространства. Эффективное ПО выполняет задачи, расходуя минимум ресурсов. Это особенно критично для мобильных устройств, облачных сервисов и экологичности.
Пропускная способность
Пропускная способность описывает максимальную нагрузку, которую система может выдержать, прежде чем производительность упадёт. Это касается одновременных пользователей, объёма данных, транзакций в секунду или ограничений памяти. Масштабируемость тесно связана с пропускной способностью.
Лучшие практики для хорошей производительности
Эффективные алгоритмы и структуры данных
Выбор правильного алгоритма и подходящей структуры данных часто оказывает наибольшее влияние на производительность. Плохой алгоритм невозможно достаточно ускорить даже на быстром железе.
Оптимизация базы данных
Индексы, оптимизированные запросы, отсутствие N+1-селектов и продуманное проектирование схемы значительно ускоряют обращение к БД. Медленные базы данных остаются одним из самых частых узких мест.
Стратегии кэширования
Кэширование сохраняет часто используемые данные или вычисленные результаты, чтобы ускорить повторные обращения. Кэш браузера, кэш сервера, CDN и кэш БД — распространённые варианты.
Асинхронная обработка
Задачи, которые не нужно выполнять немедленно, могут обрабатываться асинхронно в фоне. Это улучшает время отклика для пользователя и снижает нагрузку на основное приложение.
Пагинация для больших объёмов данных
Вместо одновременной загрузки всех записей они разбиваются на меньшие страницы. Пагинация сокращает время загрузки, потребление памяти и нагрузку на сеть.
Мониторинг и алерты
Постоянный мониторинг в production выявляет узкие места производительности заранее. Правильно настроенные алерты помогают обнаружить проблемы до того, как их заметят пользователи.
Практический пример
Страница товара в e-commerce идеально демонстрирует оптимизацию производительности, так как содержит множество типичных узких мест одновременно: запросы к БД, изображения, внешние API и статический контент. Этот пример показывает, как различные практики работают вместе для улучшения как временного поведения, так и использования ресурсов.
Страница товара в e-commerce:
- Оптимизация запросов БД с индексами
- Ленивая загрузка изображений товаров
- Пагинация результатов
- Кэширование ответов API
- CDN для статических ресурсов
Почему эти меры?
- Оптимизация запросов БД с индексами: Уменьшает время выполнения запроса и нагрузку на CPU базы данных.
- Ленивая загрузка изображений товаров: Загружает изображения только когда они появляются в видимой области экрана. Сокращает начальное время загрузки.
- Пагинация: Ограничивает количество одновременно загруженных товаров, экономит память и полосу пропускания.
- Кэширование ответов API: Избегает повторных вычислений и снижает нагрузку на backend-сервисы.
- CDN для статических ресурсов: Распределяет изображения, CSS и JavaScript на серверы рядом с пользователем, улучшая время загрузки по всему миру.
Эта комбинация показывает, что оптимизация производительности должна охватывать несколько слоёв приложения, а не ограничиваться одной мерой.
Преимущества и недостатки
| Преимущества | Недостатки |
|---|---|
| Лучший пользовательский опыт | Оптимизация повышает сложность |
| Выше показатели конверсии | Требуются ранние требования к производительности |
| Ниже стоимость инфраструктуры | Измерение и мониторинг требуют затрат |
| Лучше масштабируемость | Риск избыточной оптимизации |
| Меньше время загрузки | Требуется специализированное знание |
| Конкурентное преимущество | Тесты нужны в реалистичных окружениях |
Ключевые моменты для подготовки
- Performance Efficiency: Характеристика ISO 25010, состоящая из поведения по времени, использования ресурсов и пропускной способности.
- Поведение по времени: Время отклика, пропускная способность и время обработки — центральные метрики.
- Использование ресурсов: CPU, память, сеть, энергия и хранилище должны использоваться эффективно.
- Пропускная способность: Максимальная нагрузка пользователей, объём данных или транзакции в секунду.
- Масштабируемость: Способность справляться с большей нагрузкой при увеличении ресурсов.
- Кэширование: Промежуточное сохранение данных для снижения времени доступа.
- Пагинация: Разделение больших наборов данных на меньшие страницы.
- Ленивая загрузка: Загрузка ресурсов только при необходимости.
- Оптимизация БД: Индексы, оптимизированные запросы и предотвращение N+1-селектов.
- Асинхронная обработка: Перемещение некритичных задач в фон.
- CDN: Сеть доставки контента для распределения статического контента.
- Performance Testing: Нагрузочные, стресс-тесты и тесты производительности.
- Мониторинг: Постоянное измерение производительности в production.
- Performance Engineering: Комплексный подход к производительности помимо тестирования.
Основные источники
- https://iso25000.com
- https://web.dev/performance-scoring/
- https://en.wikipedia.org/wiki/Software_performance_testing
Часто задаваемые вопросы
Является ли производительность характеристикой качества по ISO 25010?
Да, согласно ISO 25010 Performance Efficiency входит в восемь основных характеристик качества программного обеспечения.
Что такое Performance Efficiency?
Performance Efficiency — характеристика ISO 25010, описывающая, насколько хорошо программа использует время, ресурсы и пропускную способность. Состоит из поведения по времени, использования ресурсов и пропускной способности.
Что такое поведение по времени?
Поведение по времени описывает время отклика, пропускную способность и время обработки. Показывает, насколько быстро программа реагирует на пользователя и сколько запросов она может обработать.
Что такое использование ресурсов?
Использование ресурсов описывает потребление CPU, оперативной памяти, пропускной способности сети, энергии и дискового пространства. Эффективное ПО использует эти ресурсы экономно.
Что такое пропускная способность?
Пропускная способность описывает максимальную нагрузку, которую может выдержать система, например количество одновременных пользователей, объём данных или транзакции в секунду.
Назовите важную метрику производительности.
Важные метрики включают время отклика, пропускную способность, использование CPU, потребление памяти и показатель ошибок.
Что такое кэширование?
Кэширование промежуточно сохраняет часто используемые данные или результаты для ускорения повторных обращений и снижения нагрузки на сервер.
Что такое пагинация?
Пагинация разделяет большие наборы данных на меньшие страницы, сокращая время загрузки, потребление памяти и нагрузку на сеть.
Что такое ленивая загрузка?
Ленивая загрузка загружает ресурсы вроде изображений или модулей только когда они действительно нужны. Сокращает начальное время загрузки.
Что такое узкое место производительности?
Узкое место производительности — это компонент, ограничивающий общую скорость приложения, например медленная БД или неоптимизированный алгоритм.
Что такое мониторинг производительности?
Мониторинг производительности — это постоянное измерение производительности в production для раннего выявления узких мест.
Что такое масштабируемость?
Масштабируемость — это способность системы справляться с большей нагрузкой при увеличении ресурсов без потери качества.
Что такое CDN?
CDN — это сеть доставки контента, которая быстрее раздаёт статический контент через географически распределённые серверы.
Почему производительность важна?
Долгое время загрузки отпугивает пользователей, снижает показатели конверсии и повышает затраты на инфраструктуру.
Что такое Performance Engineering?
Performance Engineering — это комплексный подход к производительности помимо тестирования, включающий проектирование и архитектуру.
Что такое асинхронная обработка?
Асинхронная обработка выполняет задачи в фоне, чтобы улучшить время отклика для пользователя.
Что такое индекс базы данных?
Индекс ускоряет запросы к таблицам БД, подобно оглавлению в книге.
Что такое Load Testing?
Load Testing проверяет поведение приложения при ожидаемой или повышенной нагрузке пользователей.
В чём разница между горизонтальным и вертикальным масштабированием?
Вертикальное масштабирование увеличивает ресурсы одного сервера, горизонтальное добавляет дополнительные серверы.
Что такое N+1-селект?
N+1-селект выполняет дополнительный запрос к БД для каждого элемента данных и является частым узким местом производительности.
Продолжение пути обучения по качеству ПО
Следующая статья в пути обучения по качеству ПО рассматривает качество ПО и покрытие тестами — как покрытие тестами обеспечивает качество.



