Специальные метрики программного обеспечения для программ Clojure - PullRequest
14 голосов
/ 13 апреля 2011

Мы рассматриваем возможность написания статического анализатора для сбора метрик программного обеспечения для кода Clojure.Конечно, он будет обрабатывать такие очевидные вещи, как количество файлов, функций, параметров для каждой функции и т. Д. Интересно, есть ли какие-либо показатели, специфичные для кода Clojure.Есть идеи?

1 Ответ

13 голосов
/ 13 апреля 2011

В среднем - я думаю, что метрики программного обеспечения являются сомнительной идеей - они обычно отвлекают вас от действительно важного вопроса, а именно: «Какую ценность мы предоставляем клиенту?».

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

Итак, вот некоторые из них, которые могут относиться к Clojure.

  • Количество определений верхнего уровня (возможно, выраженное как отношение к общему количеству символов?)
  • Java-соединение:% символов, связанных с Java-взаимодействием (new, ClassName., .SomeMethod и т. Д.) - в идеале сохранить связьограничивается определенными модулями, отвечающими за взаимодействие Java, то есть должно быть очень низким% везде, кроме библиотек, которые управляют взаимодействием.
  • Средний максимальный уровень вложенности функций defns (я полагаю, 5 хорошо, 10+ плохо ??)
  • Плотность макроса:% форм, требующих расширения макроса
  • % функций с последовательностями документов
  • % символовПараметры ls или функции, определенные с помощью подсказок типа
  • Средний размер анонимных функций (вероятно, они должны быть небольшими!)
  • % функций в используемом clojure.core (дает некоторое представление о «словарном диапазоне»"и сложность кода)
  • (спасибо nickik!) количество созданных ref-типов (динамические переменные, atom, ref и agent) - важно, если вы хотите тщательно контролировать изменяемое состояние!

ps, если вы заработаете эту работу, было бы действительно интересно увидеть различия в результатах в разных проектах clojure с открытым исходным кодом!

...