О метриках кода написаны целые книги, так что вам повезло, что вы задаете более конкретный вопрос. Для цикломатической сложности Java вы можете найти количество методов, которые превышают цикломатическую сложность 5 или 6 (вы выбираете число здесь). Если это число превышает определенный процент от вашего количества методов, то общая цикломатическая сложность неудовлетворительна. Хорошее число для процента полностью зависит от размера проекта, поэтому, возможно, вместо деления только на количество методов вы можете придать меньшее значение количеству методов в делении, заставив его медленно расти для больших чисел, таких как квадратный корень или логарифм, чтобы попытаться сделать его более стабильным по мере роста проекта.
Может быть, что-то вроде этого:
public double evaluateCyclomaticComplexity(List<MethodStat> methodStats) {
int bad = 0;
for (MethodStat methodStat : methodStats)
if (methodStat.getCyclomaticComplexity() >= 6)
bad++;
double denominator = Math.sqrt(methodStats.size());
return bad * 100.0 / denominator;
}
Чем меньше число вернулось сюда, тем лучше. Для действительно плохого проекта возвращается значение больше 100.
Функция знаменателя должна показывать, насколько быстро вы справляетесь с ростом сложности по мере роста базы кода. Как правило, вы хотите, чтобы CC для каждой функции был ниже по мере роста кода, чтобы его можно было поддерживать, поэтому лучше всего будет что-то, что растет медленнее по мере увеличения размера проекта.
Протестируйте его, настройте и т. д. В конечном счете, метрики кода трудно получить правильно, что я могу подтвердить после прочтения нескольких журнальных статей о программном обеспечении с открытым исходным кодом, в которых числа используются для представления «обслуживаемости». Все, что мы можем здесь придумать, может быть значительно улучшено, если на это будет потрачено достаточно времени.
person
Brian
schedule
26.11.2012