Чистый код
Контрольный пункт |
категория |
Используйте намеренно раскрывающие имена |
Значимые имена |
Выберите одно слово для концепции |
Значимые имена |
Используйте решение / проблемные доменные имена |
Значимые имена |
Занятия должны быть маленькими! |
Классы |
Функции должны быть маленькими! |
функции |
Сделать одну вещь |
функции |
Не повторяйте себя (избегайте дублирования) |
функции |
Объясните себя в коде |
Комментарии |
Убедитесь, что форматирование кода применяется |
Форматирование |
Используйте исключения, а не коды возврата |
Исключения |
Не возвращать ноль |
Исключения |
* 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
Статический анализ кода
категория |
Контрольный пункт |
Проверьте отчет статического анализатора кода для добавленных / измененных классов |
Статический анализ кода |