Закоулки мозга

Входит в Код ревью Код ревью

Общие

  • Реализована ли в методе защита от некорректных входных данных?
  • Используете ли вы утверждения для документирования допущений, включая пред- и постусловия?
  • Используются ли утверждения для документирования только тех условий, которые никогда не должны происходить?
  • Определены ли в архитектуре или высокоуровневом проекте системы технологии обработки ошибок?
  • Указано ли в архитектуре или высокоуровневом проекте системы, чему будет отдаваться предпочтение при обработке ошибок: устойчивости или корректности?
  • Построены ли баррикады для изоляции разрушительного эффекта ошибок и уменьшения объема кода, занятого в обработке ошибок?
  • Установлены ли отладочные средства таким образом, что их можно активизировать и деактивировать без особых проблем?
  • Хватает ли защитного кода: не слишком много и не слишком мало?
  • Использованы ли технологии наступательного программирования, чтобы затруднить пропуск ошибок на стадии разработки?

Исключения

  • Определен ли в проекте стандартизованный подход к обработке исключений?
  • Рассмотрены ли альтернативы использованию исключений?
  • Обрабатывается ли ошибка по возможности локально или генерируется нелокальное исключение?
  • Возможны ли исключения в конструкторах и деструкторах?
  • Генерируются ли исключения в методах на подходящих уровнях абстракции?
  • Содержит ли каждое исключение все относящиеся к нему исходные данные?
  • Свободен ли код от пустых блоков catch? (Или, если блок catch действительно допустим, задокументировано ли это?)

Вопросы безопасности

  • Действительно ли код, проверяющий некорректные входные данные, контролирует попытки переполнения буфера, внедрения SQL- и HTML-кода, переполнения целых чисел и других злонамеренных действий?
  • Все ли ошибочные коды возврата проверяются?
  • Все ли исключения перехватываются?
  • Не содержат ли сообщения об ошибках информацию, которая может помочь злоумышленнику взломать систему?

Ключевые моменты

  • Промышленный код должен обрабатывать ошибки более изощренно, чем по принципу “мусор на входе — мусор на выходе”.
  • С помощью технологии защитного программирования ошибки легче находить, легче исправлять, и они наносят меньше вреда промышленному коду.
  • Утверждения позволяют обнаружить ошибки на ранней стадии, особенно в больших системах, системах повышенной надежности и в системах с часто изменяемым кодом.
  • Выбор способа обработки некорректных входных данных — это ключевое решение обработки ошибок, принимаемое на этапе высокоуровневого проектирования.
  • Исключения предоставляют возможность обработки ошибок в измерении, отличном от нормального хода алгоритма. Если они используются с осторожностью, то являются важным дополнением в интеллектуальном инструментальном наборе программиста. Применять их следует после сравнения с другими технологиями обработки ошибок.
  • Ограничения, применяемые к промышленной версии системы, не обязательно должны относиться и ко времени разработки. Пользуясь этим преимуществом, вы можете добавлять в отладочную версию любой код, помогающий быстро выявлять ошибки.