Как бы вы оценили "качество" кода в большом проекте?
Я работаю над довольно крупным проектом, несколько лет в разработке, в довольно крупной компании, и я беру на себя задачу продвижения к общему качеству кода.
Мне было интересно, какие метрики вы будете использовать для измерения качества и сложности в этом контексте. Я не ищу абсолютные меры, но ряд пунктов, которые могут быть улучшены с течением времени. Учитывая, что это несколько макрооперация для сотен проектов (я видел несколько вопросов о гораздо меньших проектах), я ищу что-то более автоматизированное и целостное.
Пока у меня есть список, который выглядит так:
- Процент покрытия кода во время полнофункциональных тестов
- Рецидив сбоев БВТ
- График зависимости / оценка, основанный на каком-либо инструменте, таком как nDepend
- Количество предупреждений о сборке
- Количество найденных / подавленных предупреждений FxCop/StyleCop
- Количество операторов "catch"
- Количество шагов ручного развертывания
- Количество проектов
- Процент кода / проектов, которые "мертвы", как и нигде, на которые не ссылаются
- Количество WTF во время проверки кода
- Всего строк кода, возможно, с разбивкой по уровням
5 ответов
Вы должны организовать свою работу вокруг шести основных характеристик качества программного обеспечения: функциональность, надежность, удобство использования, эффективность, удобство обслуживания и мобильность. Я поместил диаграмму онлайн, которая описывает эти характеристики. Затем для каждой характеристики определите наиболее важные метрики, которые вы хотите и сможете отслеживать. Например, некоторые показатели, такие как показатели Чидамбера и Кемерера, подходят для объектно-ориентированного программного обеспечения, другие, такие как цикломатическая сложность, являются более универсальными.
Может быть, вы найдете интересный или проницательный анализ: Повесть о четырех ядрах
Редактировать: схема и соответствующие запросы
Если вы взяли на себя задачу продвижения к лучшему общему качеству кода. Вы можете взглянуть на:
- Сколько открытых вопросов у вас есть в настоящее время и сколько времени они занимают их решение?
- Какой процесс у вас есть для сбора требований?
- Следуют ли ваши сотрудники передовой практике?
- У вас есть определенная цель для описания методологии программирования вашей компании.
Когда в большом проекте задействовано несколько разработчиков, у каждого свой способ программирования. Каждый стиль программирования решает проблему, но некоторые ответы могут быть менее эффективными, чем другие.
Как вы используете сотрудников при атаке на новую функцию или исправлении существующего кода. Наличие разработчиков, работающих в командах после программирования, заставляет каждого быть лучшим кодом.
Когда ваши люди работают более эффективно, следуя правилу, время разработки должно ускориться.
Вы можете получить все метрики, которые вы хотите, но я говорю, сначала вы должны посмотреть, как все делается:
Какие у вас практики разработки?
Не зная, как все в настоящее время делается, вы можете получить все метрики, которые вы хотите, но вы никогда не увидите никаких улучшений.
Цикломатическая сложность - достойный показатель качества. Я уверен, что разработчики могли бы найти способ "игры", если бы это был единственный показатель!:)
И затем есть показатель CRAP...
PS NDepend имеет около десяти миллиардов метрик, так что на это стоит обратить внимание. Смотрите также CodeMetrics для Reflector.
D'о! Я только что заметил, что вы уже упомянули NDepend.
Количество зарегистрированных ошибок тоже было бы интересно отследить...
Количество программного клонирования / дубликата кода, чем меньше, тем лучше. (Ссылка обсуждает клоны и различные методы их обнаружения / измерения.)