Столпы качественного кода: руководство по улучшению код-ревью

Как наставник по коду и член команды разработчиков программного обеспечения, я являюсь субъектом проверки кода и провожу ее. Однако я заметил, что много раз люди, делающие обзор, не имеют четкого представления о том, что искать. Это приводит к обсуждению таких вещей, как стиль и микрооптимизация. Поскольку я сам был там, я хотел бы предложить некоторые идеи о вещах, которые вы могли бы искать, делая обзор кода. Хочу поделиться своим личным стандартом качества. Для меня качество кода измеряется тремя аспектами: понятностью, пластичностью и правильностью.

Понятность

Понятность измеряет, насколько легко нам что-то понять. С одной стороны, у нас есть простота, то есть вещи, которые легко понять. С другой стороны, у нас есть сложности или вещи, которые трудно понять.

Качественный код прост. Важно отметить, что существует существенная сложность (присущая проблеме сложность) и случайная сложность (сложность решения). Я имею в виду последнее. Стремитесь к тому, чтобы ваши решения были простыми. Я обнаружил, что общение здесь является основной идеей: кратко ли код передает идеи?

При просмотре я ищу код, который плохо инкапсулирован или именован. Также обратите внимание на семантическую дистанцию ​​между концептом и символом в коде, который его представляет, это может выявить утечку абстракций.

Пластичность

Из Маленькая библиотека Тюдоранса:

Свойство быть физически податливым; свойство чего-либо, что можно обрабатывать, ковать или формовать, не ломая

Говоря метафорически, мы имеем в виду, насколько гибок, насколько легко изменить наш код. Это отличается от того, насколько легко понять. Один из них — умственное действие, а другой — физическое действие. Мы можем думать о податливости как о континууме с гибкостью на одном конце и жесткостью на другом.

Жесткий код лучше объясняет дядя Боб:

Жесткость — это склонность программного обеспечения к тому, что его трудно изменить даже простыми способами. Проект является жестким, если одно изменение вызывает каскад последующих изменений в зависимых модулях. Чем больше модулей необходимо изменить, тем жестче будет конструкция.

Я часто ищу ссылки, которые связывают модули, объекты и проекты без необходимости.

Правильность

Под этим я подразумеваю максимальное отсутствие ошибок.

Обычно мы имеем дело с 3 типами ошибок: синтаксическими, семантическими и ошибками времени выполнения.
Поскольку компилятор обычно обрабатывает синтаксические ошибки, давайте сосредоточимся на семантических ошибках и ошибках времени выполнения.

Семантические ошибки связаны с бизнес-логикой. Это подвижная цель, поскольку правила, которые программное обеспечение пытается смоделировать, со временем меняются (по крайней мере, это верно для бизнес-приложений). Обычно мы обнаруживаем их с помощью модульного тестирования и приемочного/функционального тестирования.

Ошибки выполнения обычно связаны с ресурсами, используемыми приложением. Вы можете обнаружить их с помощью интеграционных, нагрузочных и любых других тестов, использующих ресурсы приложения.

Если тесты, относящиеся к анализируемому фрагменту кода, отсутствуют, я прошу их предоставить у разработчика.

Заключительные мысли

Итак, вот оно. Я хотел бы сказать, что порядок, в котором они появляются, является для меня порядком приоритета, т.е. я обнаружил, что если я начну пытаться создать гибкую кодовую базу, то, как правило, получу какой-то сложный код. Я подозреваю, что это явление часто достигается за счет косвенности, что делает код трудным для понимания (сложным). Итак, сосредоточившись в первую очередь на простоте, я могу начать вводить гибкость по мере необходимости и при этом иметь кодовую базу, которую новый разработчик может довольно быстро освоить. И если у вас есть код, который легко понять и легко изменить, вы можете легко его исправить.

Кстати, TDD продвигает простой, гибкий и правильный код, но об этом в другой раз 😉

Итак, на что вы обращаете внимание, проводя код-ревью? оставляйте свои комментарии ниже

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *