private CodeQualityMeasurement CompareCodeQuality(CodeQualityMeasurementDto referenceMeasurement, CodeQualityMeasurementDto previousMeasurement) { if (referenceMeasurement == null || previousMeasurement == null || referenceMeasurement.HasNoValue() || previousMeasurement.HasNoValue()) { if (referenceMeasurement != null && !referenceMeasurement.HasNoValue()) { return(new CodeQualityMeasurement(0, referenceMeasurement.MeasurementDate, false)); } return(new CodeQualityMeasurement()); } var lineDiff = referenceMeasurement.Lines - previousMeasurement.Lines; var difference = referenceMeasurement.SqaleIndex - previousMeasurement.SqaleIndex; if (lineDiff < 0) { var dto = new CodeQualityMeasurement(referenceMeasurement.MeasurementDate); return(dto); } else if (difference > 0) { // 1/10 of the difference between measures taken in days and then transformed to minutes var limitTechnicalDebt = ((referenceMeasurement.MeasurementDate - previousMeasurement.MeasurementDate).TotalDays) * 0.1 * 60; var calc = (100 - ((difference * 100) / limitTechnicalDebt)) / 10; calc = calc < 0 ? 0 : calc; var hasLineDifference = referenceMeasurement.Lines != previousMeasurement.Lines; return(new CodeQualityMeasurement(calc, referenceMeasurement.MeasurementDate, hasLineDifference)); } else if (difference == 0) { var hasLineDifference = referenceMeasurement.Lines != previousMeasurement.Lines; return(new CodeQualityMeasurement(10, referenceMeasurement.MeasurementDate, hasLineDifference)); } else { var hasLineDifference = referenceMeasurement.Lines != previousMeasurement.Lines; return(new CodeQualityMeasurement(11, referenceMeasurement.MeasurementDate, hasLineDifference)); } }
public List <CodeQualityMeasurement> Calculate() { CodeQualityMeasurementDto lastMeasurement, oneBeforeTheLastMeasurement, twoBeforeTheLastMeasurement = null, threeBeforeTheLastMeasurement = null, fourBeforeTheLastMeasurement = null; lastMeasurement = _joinedMeansureament.Last(); oneBeforeTheLastMeasurement = this.GetLatestMeasurementBasedOnDate(_joinedMeansureament, lastMeasurement.MeasurementDate, 1); if (!oneBeforeTheLastMeasurement.HasNoValue()) { twoBeforeTheLastMeasurement = this.GetLatestMeasurementBasedOnDate(_joinedMeansureament, oneBeforeTheLastMeasurement.MeasurementDate, 2); if (!twoBeforeTheLastMeasurement.HasNoValue()) { threeBeforeTheLastMeasurement = this.GetLatestMeasurementBasedOnDate(_joinedMeansureament, twoBeforeTheLastMeasurement.MeasurementDate, 3); if (!threeBeforeTheLastMeasurement.HasNoValue()) { fourBeforeTheLastMeasurement = this.GetLatestMeasurementBasedOnDate(_joinedMeansureament, threeBeforeTheLastMeasurement.MeasurementDate, 4); } } } var lastMeasureCalculatedValue = this.CompareCodeQuality(lastMeasurement, oneBeforeTheLastMeasurement); var oneBeforeTheLastMeasureCalculatedValue = this.CompareCodeQuality(oneBeforeTheLastMeasurement, twoBeforeTheLastMeasurement); var twoBeforeTheLastMeasureCalculatedValue = this.CompareCodeQuality(twoBeforeTheLastMeasurement, threeBeforeTheLastMeasurement); var threeBeforeTheLastMeasureCalculatedValue = this.CompareCodeQuality(threeBeforeTheLastMeasurement, fourBeforeTheLastMeasurement); return(new List <CodeQualityMeasurement>() { lastMeasureCalculatedValue, oneBeforeTheLastMeasureCalculatedValue, twoBeforeTheLastMeasureCalculatedValue, threeBeforeTheLastMeasureCalculatedValue }); }