Чистый код
|
Контрольный пункт |
категория |
|
Используйте намеренно раскрывающие имена |
Значимые имена |
|
Выберите одно слово для концепции |
Значимые имена |
|
Используйте решение / проблемные доменные имена |
Значимые имена |
|
Занятия должны быть маленькими! |
Классы |
|
Функции должны быть маленькими! |
функции |
|
Сделать одну вещь |
функции |
|
Не повторяйте себя (избегайте дублирования) |
функции |
|
Объясните себя в коде |
Комментарии |
|
Убедитесь, что форматирование кода применяется |
Форматирование |
|
Используйте исключения, а не коды возврата |
Исключения |
|
Не возвращать ноль |
Исключения |
* Reference: http://techbus.safaribooksonline.com/book/software-engineering-and-development/agile-development/9780136083238
Безопасность
|
Контрольный пункт |
категория |
|
Сделать класс окончательным, если он не используется для наследования |
основы |
|
Избегайте дублирования кода |
основы |
|
Ограничение привилегий: приложение для запуска с режимом наименьших привилегий, необходимым для функционирования |
основы |
|
Минимизируйте доступность классов и участников |
основы |
|
Информация о безопасности документов |
основы |
|
Вход в систему должен быть проверен на допустимый размер данных и диапазон |
Отказ в обслуживании |
|
Избегайте чрезмерных журналов за необычное поведение |
Отказ в обслуживании |
|
Освободить ресурсы (потоки, соединения и т. Д.) Во всех случаях |
Отказ в обслуживании |
|
Очистить конфиденциальную информацию от исключений (раскрытие пути к файлу, внутренности системы, конфигурация) |
Конфиденциальная информация |
|
Не регистрируйте очень конфиденциальную информацию |
Конфиденциальная информация |
|
Подумайте об очистке памяти после использования |
Конфиденциальная информация |
|
Избегайте динамического SQL, используйте подготовленный оператор |
Инъекция Включение |
|
Ограничить доступность пакетов, классов, интерфейсов, методов и полей |
Доступность Расширяемость |
|
Ограничить расширяемость классов и методов (сделав ее окончательной) |
Доступность Расширяемость |
|
Проверка входных данных (для достоверных данных, размера, диапазона, граничных условий и т. Д.) |
Проверка входных данных |
|
Проверка вывода из ненадежных объектов в качестве ввода |
Проверка входных данных |
|
Определите обертки вокруг нативных методов (не объявляйте нативный метод public) |
Проверка входных данных |
|
Обрабатывать вывод ненадежного объекта как ввод |
переменчивость |
|
Сделать общедоступные статические поля окончательными (чтобы избежать изменения значения вызывающей стороной) |
переменчивость |
|
Избегайте разоблачения конструкторов чувствительных классов |
Строительство объекта |
|
Избегайте сериализации для чувствительных к безопасности классов |
Сериализация Десериализация |
|
Защита конфиденциальных данных во время сериализации |
Сериализация Десериализация |
|
Будьте внимательны при кешировании результатов потенциально привилегированных операций |
Сериализация Десериализация |
|
Используйте JNI только при необходимости |
Контроль доступа |
* Reference: http://www.oracle.com/technetwork/java/seccodeguide-139067.html
Производительность
|
Контрольный пункт |
категория |
|
Избегайте чрезмерной синхронизации |
совпадение |
|
Держите синхронизированные разделы маленькими |
совпадение |
|
Остерегайтесь производительности конкатенации строк |
Общее программирование |
|
Избегайте создания ненужных объектов |
Создание и уничтожение объектов |
* Reference: http://techbus.safaribooksonline.com/book/programming/java/9780137150021
Генеральная
|
категория |
Контрольный пункт |
|
Используйте проверенные исключения для восстанавливаемых условий и исключения времени выполнения для ошибок программирования |
Исключения |
|
Фаворит использования стандартных исключений |
Исключения |
|
Не игнорируйте исключения |
Исключения |
|
Проверьте параметры на достоверность |
методы |
|
Возвращать пустые массивы или коллекции, а не нули |
методы |
|
Минимизируйте доступность классов и участников |
Классы и Интерфейсы |
|
В открытых классах используйте методы доступа, а не открытые поля |
Классы и Интерфейсы |
|
Минимизируйте область действия локальных переменных |
Общее программирование |
|
Обращайтесь к объектам по их интерфейсам |
Общее программирование |
|
Придерживайтесь общепринятых соглашений об именах |
Общее программирование |
|
Избегайте финализаторов |
Создание и уничтожение объектов |
|
Всегда переопределять hashCode, когда вы переопределяете равно |
Общее программирование |
|
Всегда переопределять toString |
Общее программирование |
|
Используйте перечисления вместо констант int |
Перечисления и аннотации |
|
Используйте маркерные интерфейсы для определения типов |
Перечисления и аннотации |
|
Синхронизировать доступ к общим изменяемым данным |
совпадение |
|
Предпочитаю исполнителей задачам и темам |
совпадение |
|
Безопасность документов |
совпадение |
|
Действительные тестовые случаи JUnit / JBehave существуют |
тестирование |
* Reference: http://techbus.safaribooksonline.com/book/programming/java/9780137150021
Статический анализ кода
|
категория |
Контрольный пункт |
|
Проверьте отчет статического анализатора кода для добавленных / измененных классов |
Статический анализ кода |