Входит в Код ревью Код ревью
Общие
- Реализована ли в методе защита от некорректных входных данных?
- Используете ли вы утверждения для документирования допущений, включая пред- и постусловия?
- Используются ли утверждения для документирования только тех условий, которые никогда не должны происходить?
- Определены ли в архитектуре или высокоуровневом проекте системы технологии обработки ошибок?
- Указано ли в архитектуре или высокоуровневом проекте системы, чему будет отдаваться предпочтение при обработке ошибок: устойчивости или корректности?
- Построены ли баррикады для изоляции разрушительного эффекта ошибок и уменьшения объема кода, занятого в обработке ошибок?
- Установлены ли отладочные средства таким образом, что их можно активизировать и деактивировать без особых проблем?
- Хватает ли защитного кода: не слишком много и не слишком мало?
- Использованы ли технологии наступательного программирования, чтобы затруднить пропуск ошибок на стадии разработки?
Исключения
- Определен ли в проекте стандартизованный подход к обработке исключений?
- Рассмотрены ли альтернативы использованию исключений?
- Обрабатывается ли ошибка по возможности локально или генерируется нелокальное исключение?
- Возможны ли исключения в конструкторах и деструкторах?
- Генерируются ли исключения в методах на подходящих уровнях абстракции?
- Содержит ли каждое исключение все относящиеся к нему исходные данные?
- Свободен ли код от пустых блоков catch? (Или, если блок catch действительно допустим, задокументировано ли это?)
Вопросы безопасности
- Действительно ли код, проверяющий некорректные входные данные, контролирует попытки переполнения буфера, внедрения SQL- и HTML-кода, переполнения целых чисел и других злонамеренных действий?
- Все ли ошибочные коды возврата проверяются?
- Все ли исключения перехватываются?
- Не содержат ли сообщения об ошибках информацию, которая может помочь злоумышленнику взломать систему?
Ключевые моменты
- Промышленный код должен обрабатывать ошибки более изощренно, чем по принципу “мусор на входе — мусор на выходе”.
- С помощью технологии защитного программирования ошибки легче находить, легче исправлять, и они наносят меньше вреда промышленному коду.
- Утверждения позволяют обнаружить ошибки на ранней стадии, особенно в больших системах, системах повышенной надежности и в системах с часто изменяемым кодом.
- Выбор способа обработки некорректных входных данных — это ключевое решение обработки ошибок, принимаемое на этапе высокоуровневого проектирования.
- Исключения предоставляют возможность обработки ошибок в измерении, отличном от нормального хода алгоритма. Если они используются с осторожностью, то являются важным дополнением в интеллектуальном инструментальном наборе программиста. Применять их следует после сравнения с другими технологиями обработки ошибок.
- Ограничения, применяемые к промышленной версии системы, не обязательно должны относиться и ко времени разработки. Пользуясь этим преимуществом, вы можете добавлять в отладочную версию любой код, помогающий быстро выявлять ошибки.