Das Add-on Quality Check & CtrlPPCheck von SloopTools beschäftigt sich mit dem Thema Code Quality. Die Code Qualität ist für die Softwarequalität insgesamt wichtig. Und Qualität beeinflusst, wie sicher und zuverlässig Ihre Codebasis ist. Hohe Qualität ist heute für viele Entwicklungsteams von entscheidender Bedeutung. Besonders wichtig ist dies für diejenigen, die sicherheitskritische Applikationen, also SCADA oder HMI, entwickeln.
Das Add-on teilt sich in zwei große Teile:
Das Ziel der SloopTools Quality Checks ist es die Code Qualität von WinCC OA Projekten zu verbessern und ein umfangreiches Service zu bieten. Dazu war uns die nahtlose Integration in die Entwicklungsumgebung von WinCC OA (GEDI) sehr wichtig. Die Integration in den GEDI wurde an folgenden Stellen durchgeführt:
Drop-Down Menü in der GEDI Menüleiste - Dock-Modul für den GEDI mit Ergebnissen
Skript-Check über Button im Skript-Editor
Mit den Quality Checks stellt SloopTools nun das Quality Gate (Qualitätskontrolle der Add-ons), welchen den Providern im SloopTools Store zur Verfügung steht, allen zur Verfügung. Einfach und übersichtlich dargestellt, um den Benutzern eine schnelle und einfache Möglichkeit zu geben um den Code zu prüfen.
Die einzelnen Checks sind wie folgt zu verwenden:
Nachdem ein Check durchgelaufen ist (Die Dauer variert je nach Skriptlänge oder Dateianzahl), werden die Ergebnisse im jeweiligen Tab des Dock-Moduls aufgelistet oder diese sind über das Drop-Down Menü "Öffne Ergebnisse" zu finden. Die Ergebnisse werden in einem Tree übersichtlich für das gesamte Projekt ausgelistet. Der Tree repräsentiert die Ordnerstruktur des geprüften Projektes.
Diese Checks sind mit dem kostenlosen Add-on für jedes Projekt sofort verwendbar.
Mehr Details zu den einzelnen Checks im Kapitel Quality Gate
Um diese Checks durchführen zu können, muss das Software python installiert sein. Benötigt wird die Version 3.6 oder höher.
Um einen Schritt weiter in der statischen Code-Analyse zu gehen, hat SloopTools den bekannten cppCheck modifiziert um die WinCC OA Scriptsprache CTRL & CTRL++ "anzulernen". Jetzt können Sie mit cppCheck in der WinCC OA-Entwicklungsumgebung eine statische Code-Analyse durchführen.
Der CtrlPPCheck ist wie folgt zu verwenden:
Folgende 3 Stufen der Lizenzierung stehen den für den SloopTools Quality Check zu verfügung:
Es ist ebenfalls möglich den CtrlPPCheck über Kommandozeile zu starten um z.B. diesen Check in ihre Build-Umgebung einzubinden. Mehr dazu unter CtrlPPCheck - command line.
Die möglichen Severities für Nachrichten sind:
Severity | Beschreibung |
---|---|
error | Wird verwendet, wenn Fehler gefunden werden |
warning | Vorschläge zur defensiven Programmierung, um Fehler zu vermeiden |
style | Stilprobleme im Zusammenhang mit der Codebereinigung (nicht verwendete Funktionen, redundanter Code, Konstanz usw.) |
performance | Vorschläge zur Beschleunigung des Codes. Diese Vorschläge basieren nur auf allgemein bekanntem Wissen. Es ist nicht sicher, ob Sie einen messbaren Geschwindigkeitsunterschied erzielen, wenn Sie diese Meldungen korrigieren. |
portability | Portabilitätswarnungen. 64-Bit-Portabilität. Der Code kann auf verschiedenen Compilern unterschiedlich funktionieren. usw. |
information | Konfigurationsprobleme. Es wird empfohlen, diese nur während der Konfiguration zu aktivieren. |
Falls das gemeldete Problem aus eine bestimmten Grund in dieser Konstellation kein Problem ist, kann die Meldung unterdrückt werden. Aktivieren Sie diese Funktionalität über Settings - Inline Suppression.
Sie können festlegen, dass die Unterdrückung nur für ein bestimmtes Symbol gilt:
// ctrlppcheck-suppress undefinedVariable
unknownVar = 3;
Sie können den Grund für die Unterdrückung mit einem Kommentar beschreiben. Hierfür kann ein Semikolon (;) oder zwei Slashes (//) zur Trennung verwendet werden.
// ctrlppcheck-suppress undefinedVariable ; some comment
// ctrlppcheck-suppress undefinedVariable // some comment
SloopTools hat für den CtrlPPCheck weitere Updates geplant. Folgende Features oder Erweiterungen sind für die Zukunft angedacht (siehe ChangeLog):
int functionA()
{
if (something)
{ //do something
return "something"; // Wrong return type int
}
else
{ //do something
return 1; // Right
}
}
float st;
int i;
string rs = functionB(f,i) // Wrong return value type for rs (Casting not 100%)
int functionB(float f, int i)
{
//do something
}
string st;
int i;
int ri = functionB(st,i) // Wrong parameter type st
int functionB(float f, int i)
{
//do something
}