private static int CalculateMaintainabilityIndex(ComputationalComplexityMetrics computationalComplexityMetrics, int cyclomaticComplexity) { double computationalComplexityVolume = Math.Max(0.0, Math.Log(computationalComplexityMetrics.Volume)); //avoid Log(0) = -Infinity double logEffectiveLinesOfCode = Math.Max(0.0, Math.Log(computationalComplexityMetrics.EffectiveLinesOfCode)); //avoid Log(0) = -Infinity return(MetricsHelper.NormalizeAndRoundMaintainabilityIndex(171 - 5.2 * computationalComplexityVolume - 0.23 * cyclomaticComplexity - 16.2 * logEffectiveLinesOfCode)); }
private static int CalculateMaintainabilityIndex( ComputationalComplexityMetrics computationalComplexityMetrics, int cyclomaticComplexity, int effectiveChildrenCount) { double avgComputationalComplexityVolume = 1.0; double avgEffectiveLinesOfCode = 0.0; double avgCyclomaticComplexity = 0.0; if (effectiveChildrenCount > 0) { avgComputationalComplexityVolume = computationalComplexityMetrics.Volume / effectiveChildrenCount; avgEffectiveLinesOfCode = computationalComplexityMetrics.EffectiveLinesOfCode / effectiveChildrenCount; avgCyclomaticComplexity = cyclomaticComplexity / effectiveChildrenCount; } double logAvgComputationalComplexityVolume = Math.Max(0.0, Math.Log(avgComputationalComplexityVolume)); //avoid Log(0) = -Infinity double logAvgLinesOfCode = Math.Max(0.0, Math.Log(avgEffectiveLinesOfCode)); //avoid Log(0) = -Infinity return(MetricsHelper.NormalizeAndRoundMaintainabilityIndex(171 - 5.2 * logAvgComputationalComplexityVolume - 0.23 * avgCyclomaticComplexity - 16.2 * logAvgLinesOfCode)); }