Статьи

Контрольный список проверки кода Java

Чистый код

Контрольный пункт

категория

Используйте намеренно раскрывающие имена

Значимые имена

Выберите одно слово для концепции

Значимые имена

Используйте решение / проблемные доменные имена

Значимые имена

Занятия должны быть маленькими!

Классы

Функции должны быть маленькими!

функции

Сделать одну вещь

функции

Не повторяйте себя (избегайте дублирования)

функции

Объясните себя в коде

Комментарии

Убедитесь, что форматирование кода применяется

Форматирование

Используйте исключения, а не коды возврата

Исключения

Не возвращать ноль

Исключения

* 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

Статический анализ кода

категория

Контрольный пункт

Проверьте отчет статического анализатора кода для добавленных / измененных классов

Статический анализ кода