Quality Gates
Hohe Code-Standards mit Quality Gates in CppDepend aufrechterhalten
Einführung
Ein Quality Gate ist eine Prüfung eines Codequalitäts-Faktums, das muss vor dem Release und gegebenenfalls vor dem Einchecken in die Quellcodeverwaltung durchgesetzt. Ein Quality Gate kann als PASS/FAIL-Maßstab für Softwarequalität betrachtet werden.
CppDepend bietet ein Dutzend Standard-Quality-Gates zu Messgrößen wie Umfang der technischen Schuld, Codeabdeckung oder Anzahl der Probleme mit bestimmtem Schweregrad.
Beachten Sie, dass spezielle rote / gelbe / grüne Rautensymbole zeigt den Quality-Gates-Status: Fehler / Warnung / OK.

Videotour
Quality Gates und Build-Fehlschlag
Quality Gates können verwendet werden, um den Build fehlschlagen lassen wenn bestimmte Maßstäbe nicht erfüllt sind.
Wenn mindestens ein Quality Gate fehlschlägt, CppDepend.Console.exe gibt einen Wert ungleich null zurück, mit dem der Build fehlschlagen kann.

Erstellen und Anpassen von Quality Gates
Was CppDepend einzigartig macht: Ein Quality Gate ist eine C#-LINQ-Abfrage, die leicht erstellt, bearbeitet und angepasst werden kann. Wenn Sie zum Beispiel eine bestimmte Codeabdeckung über ein Quality Gate durchsetzen möchten, schreiben Sie einfach:
1// <QualityGate Name="Percentage Code Coverage" Unit="%" />23failif value < 70%45warnif value < 80%67codeBase.PercentageCoverage
Beachten Sie auch die speziellen Klauseln failif (obligatorische Klausel) und warnif (optionale Klausel), die spezifisch für CppDepend CQLinq sind. codebase.PercentageCoverage ist eigentlich eine C#-Anweisung, die CppDepend auswertet.
Beachten Sie den speziellen Header-Kommentar, der den Namen und die Einheit des Quality Gates definiert. Die Einheit ist hier der String "%". Sie kann optional nach den Schwellenwerten zur besseren Lesbarkeit wiederholt werden.
Ein Quality Gate kann auch eine Maßnahme basierend auf dem Diff seit der Baseline bestimmen. Das Quality Gate unten stellt beispielsweise sicher, dass die gesamten technischen Schulden seit der Baseline bestimmte Schwellenwerte nicht überschreiten.
Beachten Sie, dass ein
1// <QualityGate Name="New Debt since Baseline" Unit="man-days" />23failif value > 2 man-days45warnif value > 0 man-days67let debt = Issues.Sum(i => i.Debt)89let debtInBaseline = IssuesInBaseline.Sum(i => i.Debt)1011select (debt - debtInBaseline).ToManDay()1213//<Description>1415// This Quality Gate fails if the estimated effort to fix new or worsened1617// issues (what is called the *New Debt since Baseline*) is higher1819// than 2 man-days.2021//2223// This Quality Gate warns if this estimated effort is positive.2425//2627// Debt documentation: http://www.CppDepend.com/docs/technical-debt#Debt2829//</Description>
Beachten Sie schließlich, dass beim Definieren eines Quality-Gate-Schwellenwerts das Schlüsselwort Wert muss durch das Schlüsselwort ersetzt werden count ob die LINQ-Abfrage Zeilen statt eines Skalars zurückgibt.
Dies ist nützlich, um das Quality-Gate-Ergebnis aussagekräftiger zu machen, wo es sinnvoll ist.

Erkunden des Quality-Gates-Status
Die Menge der Quality-Gate-Stati kann über C#-LINQ-Abfragen abgefragt werden.
Das Dashboard fasst den Status der Quality Gates zusammen. Ein einziger Klick generiert eine LINQ-Abfrage, die den detaillierten Status für jedes Quality Gate anzeigt. Quality-Gate-Status werden auch im HTML+js-Bericht bereitgestellt.

Priorisierung von Issue-Fixes und die Breaking-Point-Metrik
Der Breaking Point eines Problems oder einer Gruppe von Problemen ist der Zeitpunkt ab jetzt, an dem die geschätzten Kosten zur Behebung des Problems/der Probleme die geschätzten Kosten erreichen, das Problem/die Probleme unbehoben zu lassen.
Der Breaking Point ist der Schuld geteilt durch die jährlichen Zinsen. Wenn beispielsweise die geschätzten Kosten zur Behebung der Schuld 10 Personentage betragen und die geschätzten jährlichen Zinsen 2 Personentage pro Jahr betragen, liegt der Break-even-Punkt in 5 Jahren ab jetzt.
Beachten Sie, dass ein Breaking Point, der niedriger als pro Jahr bedeutet, dass es in den nächsten 12 Monaten geschätzt günstiger ist, die Schuld zu beheben, als sie nicht zu beheben.
Beachten Sie auch, dass ein Break-even-Punkt nicht in Personenzeit wie Schulden oder jährliche Zinsen gemessen wird (Personenmonat oder Personenjahr), sondern in regulärer Dauer (Monate oder Jahre). Break-even-Werte werden als TimeSpan typisiert.
Wenn es um Priorisieren der zuerst zu behebenden Problemeist der Schweregrad des Problems ein wichtiger Parameter. Zur Erinnerung: Der Schweregrad ist das diskrete Maß der jährlichen Zinsen. Je höher also die jährlichen Zinsen, desto wichtiger ist die Behebung.
Bei einem bestimmten Schweregrad sind jedoch nicht alle Probleme gleich. Einige erfordern mehr Aufwand zur Behebung. Dies wird durch die Technical-Debt-Messung geschätzt. Um daher die Return on Investment (ROI) einer Problembehebung ist es sinnvoll, die Schulden geteilt durch die jährlichen Zinsen zu schätzen. Diese Schätzung ist der Break-even-Punkt, bei dem gilt: je niedriger der Wert, desto höher der ROI.
Präzisieren wir, dass im Satz der Standardregeln Issues, die sich auf neue Probleme seit der Baseline beziehen, wie etwa API-Breaking-Changes, Qualität der Codeelemente, die noch schlechter wird, neue, nicht getestete Codeelemente... sind Issues, die höhere jährliche Zinsen und damit einen höheren Schweregrad erzeugen als die anderen Issues. Dies entspricht die bewährte Methode, kürzlich eingeführte Issues zuerst zu beheben.

Testen Sie CppDepend noch heute
Starten Sie Ihre 14-tägige kostenlose Testversion mit vollem Zugriff auf alle Dokumentationsfunktionen. Keine Kreditkarte erforderlich.
