На работе предложили прочитать отчет по теме разработки. Так ! Тогда я скажу вам:
-
Что такое проверка кода?
-
Почему это необходимо?
-
Что мы проверяем?
-
Общие проблемы и решения
-
ОСНОВНОЙ!!! Посмотреть результаты опроса: Как вы проверяете код?
Презентация доступна связь.
Contents
- 1 Что такое проверка кода?
- 2 Зачем нужен код-ревью?
- 3 Что мы проверяем на код-ревью?
- 4 Общие проблемы и решения
- 5 Код с душой
- 6 2. Ароматный дизайн
- 7 3. Рефакторинг
- 8 4. Антипатры
- 9 5. Шаблоны проектирования (модели)
- 10 6. Принцип SOLID, DRY, KISS, YAGNI, BDUF, APO, Бритва Оккама
- 11 7. Уязвимости в коде
- 12 8. Кодовая гниль: причины
- 13 9. Темные узоры
- 14 10. Статический анализ кода
- 15 ОСНОВНОЙ!!! Посмотреть результаты опроса: Как вы проверяете код?
Что такое проверка кода?
Код-ревью внезапно превратился в код-ревью. Разработчики пишут код, затем делают MR (мерж-реквест), другие проверяют его, исправляют комментарии и загружают код для разработки. Можно, в принципе, скачать сразу для разработки, но желательно, чтобы кто-то посмотрел вашу работу до этого.
https://en.wikipedia.org/wiki/Code_review
https://en.wikipedia.org/wiki/Software_review
Зачем нужен код-ревью?
Основы, о которых обычно упоминают разработчики:
-
улучшить качество кода (стиль, понятность, ремонтопригодность)
-
найти ошибки
-
передавать знания
-
повысить взаимную ответственность
-
предложить лучшее решение
-
проверить соответствие инструкции
Из доступной статистики я погуглил отчет “Обзор статуса кода 2017 г.(ссылка под VPN):

Что мы проверяем на код-ревью?

В «контрольном списке проверки кода» миллион пунктов: 1 2 3 4.
Главный критерий: код должен быть вам понятен. “Пишите код так, как будто он будет поддерживаться жестокий психопаткто знает, где ты живешь.
Во-первых, будьте осторожны: маленькие методы с простым кодом; удаление констант, форматирование (длина строки, имена), комментарии, освобождение ресурсов (использование, отписка), модификаторы доступа, правила оформления.
Хорошо, если вы знаете код и можете подсказать, как его улучшить. Например, кто-то написал метод, но вы знаете аналогичный код в другом классе, и общую функциональность лучше всего перенести в базовый класс или утилиту.
Существуют контрольные списки для разных языков, например, ссылка на питон.
https://en.wikipedia.org/wiki/Coding_best_practices
https://en.wikipedia.org/wiki/List_of_software_development_philosophies
Общие проблемы и решения
1. Кодирование душой |
6. ТВЕРДЫЙ, СУХОЙ, ПОЦЕЛУЙ, ЯГНИ, БДУФ, АПО, Бритва Оккама |
2. Ароматный дизайн |
7. Уязвимости в коде |
3. Рефакторинг |
8. Кодовая гниль |
4. Антипатры |
9. Темные узоры |
5. Шаблоны проектирования (модели) |
10. Статический анализ кода |
Ниже мы кратко рассмотрим каждый раздел без подробных комментариев. Более подробную информацию смотрите по ссылкам в начале раздела.
Код с душой
https://ru.wikipedia.org/wiki/Код_с_запашком
Дублирование кодов |
ленивый класс |
Длинный метод |
Теоретическая общность |
большой класс |
Временное поле |
Длинный список параметров |
Цепочка вызовов |
Расходящиеся поправки |
Посредник |
стрельба из дробовика |
Неуместная близость |
Функции жажды |
Альтернативные классы с разными интерфейсами |
Группы данных |
Неполнота библиотечного класса |
Одержимость элементальными типами |
Категории данных |
операторы переключения |
Отказ от поместья |
Иерархии параллельного наследования |
Комментарии |
2. Ароматный дизайн
https://en.wikipedia.org/wiki/Design_smell
Отсутствие абстракции |
Сломанная модуляризация |
Многогранная абстракция |
Отсутствие модульности |
Дублирующая абстракция |
круговая зависимость |
Недостаточная инкапсуляция |
Нефакторизованная иерархия |
Неиспользуемая инкапсуляция |
Сломанная иерархия |
3. Рефакторинг
https://ru.wikipedia.org/wiki/Рефакторинг
Изменить сигнатуру метода |
Обзор параметров |
Инкапсуляция поля |
Метод подъема |
Выбор класса |
Метод спуска |
Выбор интерфейса |
Переименование метода |
Назначение локальной переменной |
Способ передвижения |
Метод извлечения |
Замена условного оператора полиморфизмом |
Тип обобщения |
Замените наследование делегированием |
Интеграция |
Замена кода типа подклассами |
Презентация фабрики |
4. Антипатры
https://ru.wikipedia.org/wiki/Антипаттерн
разработка (в ООП, при написании кода, методическая, управление конфигурацией, разное) |
при повторном использовании кода |
архитектурный |
при взаимодействии человека с компьютером |
организационный |
Сервис-Ориентированная Архитектура |
среды |
для интеллектуальной информационной системы |
информационная безопасность |
Мои любимые антипаттерны:
-
Божественная цель: концентрация слишком большого количества функций в одной части системы (классе).
-
Ненужная сложность[en] (Случайная сложность): Добавление ненужной сложности к решению.
-
Преждевременная оптимизация: оптимизация сегмента кода на этапе проектирования, которая делает его более сложным или поврежденным.
-
Грех преждевременной оптимизации. лодочный якорь[en] (лодочный якорь)[13]: сохранить часть системы, которая больше не используется.
-
Магические числа: использование числовых констант без объяснения их значения.
-
Скопируйте и вставьте программирование[13]: Скопируйте (и немного измените) существующий код вместо создания универсальных решений.
-
Изобретать колесо[13]): Создавайте с нуля вместо использования хорошего готового решения.
-
Большой ком грязи: система с неузнаваемой структурой.
-
Паралич анализа[13]: неоправданно высокие затраты на анализ и проектирование. Часто приводит к закрытию проекта до начала его реализации.
-
Ползучие функции: добавление новых функций за счет общего качества системы.
-
Синдром вареной лягушки – постепенные негативные изменения замечаются, когда уже слишком поздно.
https://blogs.oracle.com/javamagazine/post/five-code-review-antipatterns
5. Шаблоны проектирования (модели)
https://en.wikipedia.org/wiki/Software_design_pattern
https://ru.wikipedia.org/wiki/Шаблон_проектирования
Главный: |
Гибкое объектное программирование |
Фундаментальный |
Выполнение задачи |
Генеративный * |
Системные архитектуры |
Структурная * |
Бизнес |
Поведенческий * |
Дизайн потоковой обработки |
Частный: |
Проектирование распределенных систем |
Параллельное программирование |
База данных |
Генерация объектов |
Три паттерна со звездочкой — это первая группа паттернов в книге «Банда четырех». А потом случилось остальное. Как минимум их полезно знать, т.к. по незнанию разработчики используют их в своем коде. Или предложите переделать код, чтобы он соответствовал шаблону. Хорошо бы знать эти шаблоны (полезно для собеседований): Singleton, Observer, Template method, Prototype, Adapter.
6. Принцип SOLID, DRY, KISS, YAGNI, BDUF, APO, Бритва Оккама
Отличная статья на хабре по принципам и на вики по принципу Камень (проект слишком сложен для понимания даже его разработчиками).
ЯГНИ: Вам это не понадобится |
ТВЕРДЫЙ: |
СУХОЙ: Не повторяйся |
С) Принцип единой ответственности |
ЦЕЛОВАТЬ: Будь проще, глупее / Будь проще |
О) Принцип открытия-закрытия |
БДУФ: Большой передний дизайн |
я) Принцип подстановки Лискова |
АПО: избегать преждевременной оптимизации |
я) Принцип разделения интерфейса |
бритва Оккама: не умножайте вещи без необходимости |
Д) Принцип инверсии зависимости |
7. Уязвимости в коде
Не менее отличная статья об уязвимостях на Хабре и базовая статья на вики.
Обычно аудиты безопасности выполняются профессионалами на готовом продукте, включая исходный код. Но даже при просмотре кода нужно опасаться, если значение текстового поля передается со страницы, из нее вставляется SQL и выполняется запрос напрямую в базе данных, а не используется параметризованный запрос.
SQL-инъекция |
Лечение опасного кода в HTML |
Открытый текст паролей |
Закладки в коде |
Незащищенность данных (html-код, файлы cookie, API) |
Отсутствие или слабое шифрование |
Авторизация и аутентификация |
Обработка журнала |
XSS-инъекция вредоносного кода |
Небезопасные файлы cookie |
Утечка информации |
8. Кодовая гниль: причины
https://en.wikipedia.org/wiki/Software_rot
Изменение окружающей среды |
Редко обновляемый код |
Одноразовый |
интернет-соединение |
Код не используется |
9. Темные узоры
https://ru.wikipedia.org/wiki/Тёмные_паттерны
https://en.wikipedia.org/wiki/Темный_шаблон
Это больше относится к дизайну UX/UI (вы не можете обмануть пользователя и выдать одно за другое). Но если вы заметили это в коде, вам нужно быть осторожным.
каверзные вопросы |
Скрытые платежи |
Метание товаров |
Торговая приманка |
Ловушка |
Акцент на вине |
Персональные данные Штукерберга |
Замаскированные баннеры |
Методы, которые не позволяют адекватно сравнивать цены |
Принудительно оформить подписку |
отвлечение |
Нежелательные друзья |
10. Статический анализ кода
https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
Существует множество инструментов анализа кода: [фронт]но для [C#]. Стандарт: Линтер для Javascript/Typescript; SonarQube, ReSharper, Visual Studio для C#.

ОСНОВНОЙ!!! Посмотреть результаты опроса: Как вы проверяете код?
Доступен опрос связь.
1 из 7: 5 основных преимуществ проверки кода? |
5 из 7: Как вы просматриваете код (как узнаете, делаете сразу или откладываете на вечер, как взаимодействуете с коммиттером, ваши хаки и подходы к жизни). |
2 из 7: Что вы проверяете в процессе проверки кода? |
6 из 7: Каковы ваши предложения по улучшению проверки кода? |
3 из 7: Сколько МР вы делаете в среднем в день? |
7 из 7: Оставить любую информацию (ваше имя, контакты и т.д.) – СКРЫТО |
4 из 7: Сколько времени в среднем вы тратите на проверку кода в день? |
Скриншоты с результатами опроса
Презентация доступна связь. Спасибо за внимание!