Вот 3 качественных метрики кода.

Нам нужны метрики кода, чтобы определить неприятный запах. Мы все знаем плохой код, когда видим его. Тем не менее, иногда это проскальзывает.

Плохой код находится в больших базах кода, куда приходят и уходят разработчики.

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

Вам нужны ценные метрики кода для борьбы с плохим кодом.

Даже если вы видите, что члены команды пишут плохой код, вам нужно указать на это. Рано или поздно он окажется у вас на тарелке.

1. Что такое перемешивание кода?

Отток - это показатель того, как часто файл изменяется. Файлы, которые изменяются больше, имеют более высокий отток. - Санди Мец

Сложный код с наибольшим количеством изменений находится в правом верхнем углу. Это ваш Util класс. Это ваш Manager класс. Здесь находится ваша основная логика, поэтому никто не хочет ее трогать.

В любом случае вы вносите изменения, попутно вызывая ошибки и технический долг.

Майкл Фезерс говорит об этой кодовой метрике. Он даже разработал программное обеспечение для поиска этих сброшенных файлов. Это лучшие кандидаты на рефакторинг.

Когда мы можем использовать эту метрику? Используйте его в своих сеансах технического ухода. Определите, какой класс больше всего оттока, оцените технический долг и начните рефакторинг.

Большинство измерений качества программного обеспечения статичны. Sonarqube, строки кода и другие показатели качества кода. Показатель оттока кода добавляет еще одно измерение с контролем версий.

Перемешивание кода выполняется в больших классах. Мы втягиваемся в него, как говорит Сэнди, у него есть собственная гравитационная сила.

Зачем добавлять небольшой вспомогательный класс, когда вы добавляете логику в класс из 500 строк? Мы все виноваты в таком поведении. Необходимость выполнять итерацию быстрее приводит к большему оттоку кода.

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



2. Что такое метрика ABC?

Первое упоминание об этой метрике было в статье Джерри Фицпатрика. Это расширение цикломатической сложности.

Не только C условия составляют этот показатель, но также A контракты и B ранчо. Отсюда и название метрики Назначения, отделения, условия.

ABC - это мера сложности. - Санди Мец

Метрика ABC больше рассказывает о сложности кода. Если оценка высока, ваш код сложен.

Ради этой статьи я опубликую формулу. Для математиков-ботаников, вот формула. Есть несколько инструментов, которые рассчитывают эту метрику, и вы можете найти их в пустыне.

|ABC| = sqrt((A*A)+(B*B)+(C*C)) - calculating ABC score

Я разработчик Java. Как я могу посчитать As, Bs и C в Java?

Зачем нам нужна эта метрика? Какая от этого польза?

Люди делают ошибки, а показатели - нет. Вы не можете управлять тем, что не можете измерить. Используйте показатели для улучшения. Метрики не лгут.

3. Что такое цикломатическая сложность

Алгоритм, который подсчитывает количество уникальных путей выполнения в основной части исходного кода. - Томас Дж. МакКейб

Вы видели код с множеством блоков if-else. Пример плохой цикломатической сложности или высокой цикломатической сложности.

Написание объектно-ориентированных программ снижает цикломатическую сложность. Выделите условную логику в отдельные классы. Затем введите его в свой класс.

Подробнее о том, как уменьшить эту метрику, я писал здесь. Соблюдение принципов объектно-ориентированного подхода значительно снижает этот показатель.

Когда вы сталкиваетесь с кодом с цикломатической сложностью 10, вам следует провести рефакторинг.

МакКейб утверждает, что разработчики, которые знали структурированное программирование, написали оптимальный код. Еще до того, как он изобрел метрику. О разработке структурированных программ я писал здесь.

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

Санди Метц указывает обратный способ использования этой метрики. Используйте его, чтобы узнать, достаточно ли вы написали тестов. Например, у вас есть код со степенью сложности 40, но всего 20 тестов. Вам нужно больше тестов, чтобы охватить все пути.

Заключение

Метрики кода используются для навигации по проекту. Они говорят нам, где живет эта вонючая часть кода. Где нам нужно навести порядок.

Никто не говорит, что они вам нужны. Для вашего хобби-проекта, местного спортзала или MVP они могут оказаться бесполезными.

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

Я использую метрики, по крайней мере, цикломатическую сложность, чтобы разбить свой код. Это приводит к тестируемому коду и разумным фрагментам кода.

Вы должны убрать хотя бы одну метрику и внедрить ее сегодня.

Пасхальное яйцо: эффект кобры

Не создавайте работу на основе показателей кода. Не создавайте для этого извращенных стимулов.

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

Чему может научить эта история? Не используйте показатели для увеличения объема работы. Используйте их проактивно, чтобы работать лучше. Реактивное использование метрик приводит к «эффекту кобры». Выполняет работу, которая не нужна бизнесу, но может увеличить ваше время на проекте.

Присоединяйтесь к Medium сегодня!

Почему вам следует подписаться? Сначала отказаться от режима инкогнито в Chrome. Во-вторых, вы услышите множество замечательных историй. Вы можете прочитать около 100 книг с книжной полки прагматичного программиста. Вы можете увидеть препятствия, чрезвычайно полезные советы и отличные советы от команды Pinterest. Вы можете прочитать о последних разработках Google Cloud.

Это то, что вы получаете за 5 долларов (2 чашки кофе) в месяц. Вы получаете всю библиотеку Pragmatic Programmer для чтения за 5 долларов.

Отказ от ответственности: 2 доллара из 5 долларов напрямую поддержат меня и предоставят вам отличные темы.

Ресурсы