В компьютерном программировании запах кода — это любая характеристика в исходном коде программы , которая может указывать на более глубокую проблему. [1] [2] Определение того, что является запахом кода, а что нет, является субъективным и зависит от языка , разработчика и методологии разработки.
Термин был популяризирован Кентом Беком на WardsWiki в конце 1990-х годов. [3] Использование термина возросло после того, как он был представлен в книге 1999 года «Рефакторинг: улучшение дизайна существующего кода» Мартина Фаулера . [4] Этот термин также используется гибкими программистами. [5]
Один из способов взглянуть на запахи — с точки зрения принципов и качества: «Запахи — это определенные структуры в коде, которые указывают на нарушение фундаментальных принципов проектирования и негативно влияют на качество проектирования». [6] Запахи кода обычно не являются ошибками ; они не являются технически неверными и не мешают программе функционировать. Вместо этого они указывают на слабые места в дизайне, которые могут замедлить разработку или увеличить риск ошибок или сбоев в будущем. Запахи плохого кода могут быть индикатором факторов, которые способствуют техническому долгу . [1] Роберт С. Мартин называет список запахов кода «системой ценностей» для мастерства в разработке программного обеспечения. [7]
Вопреки этим строгим толкованиям, первоначальное определение Каннингема состояло в том, что запах — это предположение о том, что что-то может быть не так, а не доказательство того, что проблема уже существует. [3]
Часто более глубокая проблема, на которую намекает запах кода, может быть обнаружена, когда код подвергается короткому циклу обратной связи , где он рефакторится небольшими контролируемыми шагами, и полученный дизайн проверяется на предмет наличия дальнейших запахов кода, которые, в свою очередь, указывают на необходимость большего рефакторинга. С точки зрения программиста, которому поручено выполнение рефакторинга, запахи кода являются эвристикой, указывающей, когда проводить рефакторинг и какие конкретные методы рефакторинга использовать. Таким образом, запах кода является драйвером для рефакторинга.
Такие факторы, как понятность кода, простота его модификации, простота его улучшения для поддержки функциональных изменений, возможность повторного использования кода в различных условиях, возможность тестирования кода и надежность кода, являются факторами, которые можно использовать для выявления кода с запахом. [8]
Исследование 2015 года [1], в котором использовался автоматизированный анализ полумиллиона коммитов исходного кода и ручная проверка 9164 коммитов, в которых были выявлены «кодовые запахи», показало, что:
Такие инструменты, как Checkstyle , PMD , FindBugs и SonarQube , могут автоматически определять подозрительный код.