Как управлять программными ошибками в проекте

Чистая архитектура

Введение

Большая часть сложных систем организуется в клиент-серверной парадигме. Сегодня мы поговорим о том каким образом организовать процесс поиска и исправления ошибок в таких приложениях. Сегодня мы поговорим о следующем:

  • Ошибки и качество проекта
  • Основные типы ошибок: инфраструктурные, технические и ошибки бизнес-логики
  • Предотвращение и поиск ошибок
  • Логирование ошибок
  • Кто должен реагировать на ошибки
  • Тесты и два подхода к тестированию: поиск регрессий и докозательство корректности

Ошибки и качество проекта

Программная ошибка — означает ошибку в программе или в системе, из-за которой программа выдает неожиданное поведение и, как следствие, некорректный результат.

Что нужно знать про ошибки:

  • ошибок нельзя избежать;
  • в любой программе сколько угодно много ошибок;
  • ошибка ошибке - рознь;
  • устраняя одни ошибки, создаются другие;
  • механизмы, созданные для поиска и устранения ошибок, могут создавать ошибки.

Качество программного обеспечения — способность программного продукта при заданных условиях удовлетворять установленным или предполагаемым потребностям

Проект считается качественным, если сответствует спецификации и не имеет заметных проблем и ошибок.

Виды ошибок

  • логические;
  • синтаксические;
  • интеграционные;
  • компиляционные;
  • ресурсные;
  • инфраструктурные (ошибки окружения).

Уровни критичности ошибок

  • Критические ошибки - это те ошибки, при возникновении которых невозможно дальнейшее функционирование программного обеспечения;
  • Важные ошибки - это те ошибки которые не приводят к прекращению функционирования ПО, но заметны пользователю и явно влияют на результат;
  • Незначительные ошибки - это те ошибки, которые незаметны пользователю, но показывают отклонения от спецификации (предупреждения).

Технические и ошибки бизнес-логики

С практической точки зрения все ошибки удобно разделить на две группы:

  • технические ошибки - это ошибки которые связаны с техническими аспектами работы программного обеспечения, они могут возникать как в разрабатываемом программном обеспечении, так и в инфраструктуре;
  • ошибки бизнес-логики - это те ошибки, которые непосредственно касаются автоматизируемого бизнеса и могут быть сформулированы в терминах, понятных бизнес-заказчику.

Предотвращение и поиск ошибок

Тестирование

Основной способ доказательства корректности программного обеспечение выполянется через тестирование. Тестирование может буть ручным или автоматизированным. Считается, что если мы выполнили все тесты без ошбок, то программного обеспечение в достатоной мере соответствует спецификации.

Лучшие тестеры - пользователи. Если потребители системы выполняют свои функции и не жалуются, то можно считать, что ПО корректно.

Мониторинг

Для получения измеряемых характеристик качества программного обеспечения необходимо выявить технические метрики и отслеживать их состояние. Для этого служит мониторинг. Основная задача мониторинга состоит в том чтобы предотвращать ошибки или обноруживать их на ранних стадиях.

Мониторинг помогает отслеживать:

  • ресурные проблемы;
  • деградацию уровня сервиса;
  • поиск корневой причины;
  • уровень "здоровья" системы.

Логирование ошибок

Один из основных источников информации для систем мониторинга являются логи.

При разработке системы логирования нужно учитывать следующие моменты:

  • Безопасность бизнес данных - логи часто могут быть источником утечки данных;
  • Разделение технической и бизнес-информации
  • Анонимизация данных и сквозное логирование

Кто должен реагировать на ошибки

Существует несколько уровне реакции на ошибки:

  • Первая линия поддержки (операторы, консультанты и т.д.)
  • Вторая линия поддержки (технические специалисты, девпосы и т.д.)
  • Разработчики

Тесты и два подхода к тестированию: поиск регрессий и докозательство корректности

Корректность через тесты

Для того чтобы автоматизировать поиск ошибок с помощью тестов нужно выполнить покрытие кодовой базы в объеме достаточном для принятия решения о корреткности:

  • code coverage
  • branch coverage

Такие подходы часто вызывают проблемы.

Тесты для поиска регрессий

Регрессии - это ошибки, которые возникают в одной части программы, код которой был ранее протестирован, при внесении изменений в другие части программы.

При поиске регрессий с помощью тестов важно:

  • покрывать только важные участки кода
  • использовать e2e и интеграционные тесты
  • придерживаться "пирамиды тестирования"
  • использовать быстрые и надежные тесты, которые не будут хрупкими