Как управлять программными ошибками в проекте
Введение
Большая часть сложных систем организуется в клиент-серверной парадигме. Сегодня мы поговорим о том каким образом организовать процесс поиска и исправления ошибок в таких приложениях. Сегодня мы поговорим о следующем:
- Ошибки и качество проекта
- Основные типы ошибок: инфраструктурные, технические и ошибки бизнес-логики
- Предотвращение и поиск ошибок
- Логирование ошибок
- Кто должен реагировать на ошибки
- Тесты и два подхода к тестированию: поиск регрессий и докозательство корректности
Ошибки и качество проекта
Программная ошибка — означает ошибку в программе или в системе, из-за которой программа выдает неожиданное поведение и, как следствие, некорректный результат.
Что нужно знать про ошибки:
- ошибок нельзя избежать;
- в любой программе сколько угодно много ошибок;
- ошибка ошибке - рознь;
- устраняя одни ошибки, создаются другие;
- механизмы, созданные для поиска и устранения ошибок, могут создавать ошибки.
Качество программного обеспечения — способность программного продукта при заданных условиях удовлетворять установленным или предполагаемым потребностям
Проект считается качественным, если сответствует спецификации и не имеет заметных проблем и ошибок.
Виды ошибок
- логические;
- синтаксические;
- интеграционные;
- компиляционные;
- ресурсные;
- инфраструктурные (ошибки окружения).
Уровни критичности ошибок
- Критические ошибки - это те ошибки, при возникновении которых невозможно дальнейшее функционирование программного обеспечения;
- Важные ошибки - это те ошибки которые не приводят к прекращению функционирования ПО, но заметны пользователю и явно влияют на результат;
- Незначительные ошибки - это те ошибки, которые незаметны пользователю, но показывают отклонения от спецификации (предупреждения).
Технические и ошибки бизнес-логики
С практической точки зрения все ошибки удобно разделить на две группы:
- технические ошибки - это ошибки которые связаны с техническими аспектами работы программного обеспечения, они могут возникать как в разрабатываемом программном обеспечении, так и в инфраструктуре;
- ошибки бизнес-логики - это те ошибки, которые непосредственно касаются автоматизируемого бизнеса и могут быть сформулированы в терминах, понятных бизнес-заказчику.
Предотвращение и поиск ошибок
Тестирование
Основной способ доказательства корректности программного обеспечение выполянется через тестирование. Тестирование может буть ручным или автоматизированным. Считается, что если мы выполнили все тесты без ошбок, то программного обеспечение в достатоной мере соответствует спецификации.
Лучшие тестеры - пользователи. Если потребители системы выполняют свои функции и не жалуются, то можно считать, что ПО корректно.
Мониторинг
Для получения измеряемых характеристик качества программного обеспечения необходимо выявить технические метрики и отслеживать их состояние. Для этого служит мониторинг. Основная задача мониторинга состоит в том чтобы предотвращать ошибки или обноруживать их на ранних стадиях.
Мониторинг помогает отслеживать:
- ресурные проблемы;
- деградацию уровня сервиса;
- поиск корневой причины;
- уровень "здоровья" системы.
Логирование ошибок
Один из основных источников информации для систем мониторинга являются логи.
При разработке системы логирования нужно учитывать следующие моменты:
- Безопасность бизнес данных - логи часто могут быть источником утечки данных;
- Разделение технической и бизнес-информации
- Анонимизация данных и сквозное логирование
Кто должен реагировать на ошибки
Существует несколько уровне реакции на ошибки:
- Первая линия поддержки (операторы, консультанты и т.д.)
- Вторая линия поддержки (технические специалисты, девпосы и т.д.)
- Разработчики
Тесты и два подхода к тестированию: поиск регрессий и докозательство корректности
Корректность через тесты
Для того чтобы автоматизировать поиск ошибок с помощью тестов нужно выполнить покрытие кодовой базы в объеме достаточном для принятия решения о корреткности:
- code coverage
- branch coverage
Такие подходы часто вызывают проблемы.
Тесты для поиска регрессий
Регрессии - это ошибки, которые возникают в одной части программы, код которой был ранее протестирован, при внесении изменений в другие части программы.
При поиске регрессий с помощью тестов важно:
- покрывать только важные участки кода
- использовать e2e и интеграционные тесты
- придерживаться "пирамиды тестирования"
- использовать быстрые и надежные тесты, которые не будут хрупкими