Wir freuen uns über thematische Diskussionen zum Thema Codequalität. Wir werden von Kunden, Studenten und anderen Benutzern aus dem gesamten Internet kontaktiert. Unabhängig von Land, Zeitzone oder Sprache. Natürlich gesprochene Sprache. Unter den Programmiersprachen sind wir immer noch an einem begrenzten Satz interessiert. Jetzt ist es C, C ++, C # und Java. Die Vorteile der Kommunikation sind vielfältig. Wir setzen einige Angebote von Nutzern sofort um, weil Sie sind wirklich hilfreich. Oft helfen wir einfach dem Projekt eines anderen und erklären die Warnungen des Analysators, die sich am Ende als Fehler herausstellen. Diese Notiz handelt von einem solchen Fall.
Über den Analysator
PVS-Studio ist ein Tool zum Erkennen von Fehlern und potenziellen Schwachstellen im Quellcode von Programmen, die in C, C ++, C # und Java geschrieben wurden. Es läuft unter Windows, Linux und MacOS.
Für die Kommunikation gibt es drei Arten von Rückmeldungen:
- Rückkopplung
- Testanfrage
- Preisanfrage
Donnerstagabend
Ein aktiver Benutzer, der den Analysator auf seinem Code aktiv ausprobierte, begann, falsche Warnungen zu senden. Bevor ich antworten konnte, sammelten sich 3 Buchstaben. Dies war das Ende des Arbeitstages und es blieb wenig Kraft übrig (zur Frage der Zuverlässigkeit der manuellen Codeüberprüfung). Unser Team bereitete sich aktiv auf die große Veröffentlichung vor, die einige Tage dauerte.
Ich beschloss, die Antwort auf Freitag oder sogar auf die nächste Woche zu verschieben:
Hallo Konstantin.Wir analysieren Warnungen. Nächste Woche werde ich verdächtige Orte kommentieren :-)Dies ist ein Hinweis darauf, dass die statische Code-Analyse sehr effizient ist und die manuelle Codeüberprüfung in vielen Fällen, insbesondere am Ende des Arbeitstages, der automatischen Überprüfung unterlegen ist.
Mit Erlaubnis des Benutzers werde ich Sie über die Korrespondenz informieren:
Buchstabe 1False Positives V712:uint32_t StartUpCounter = 0, HSEStatus = 0; RCC->CR |= ((uint32_t)RCC_CR_HSEON); { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
Buchstabe 2Es gibt eine falsch positive V715: {
Buchstabe 3Weihnachtsbaumstöcke, verzauberter Ort! Alles ist da, schwört (siehe Code aus früheren Briefen):V560 Ein Teil des bedingten Ausdrucks ist immer wahr: (StartUpCounter! = ((Uint16_t) 0x5000)). lpmode.cpp 356V776 Potenziell Endlosschleife. Die Variable in der Schleifenausgangsbedingung 'HSEStatus == 0' ändert ihren Wert zwischen den Iterationen nicht. lpmode.cpp 356Vielleicht verstehe ich etwas nicht? Aber in der Praxis funktioniert alles und wenn der Quarz nicht startet, verlassen wir diesen Abschnitt durch Timeout ;-)Buchstabe 4 (Antwort)Hallo Konstantin.Wir analysieren Warnungen. Nächste Woche werde ich verdächtige Orte kommentieren :-)Buchstabe 5Hölle Ich habe Ihren Code erst gesehen, nachdem Sie mit seitlicher Sicht geschrieben haben - die do-Anweisung wurde übersprungen ... Alles passte zusammen! Ein Auge verschwimmt%)mache {...} while (...);Fazit
Wie Sie vielleicht bemerkt haben, gab es 4 Warnungen am selben Ort, aber es dauerte noch einige Zeit, um den Benutzer von einem Fehler zu überzeugen. In einer solchen Situation hätte eine manuelle Überprüfung nicht einmal eine Chance.
Eine ähnliche Geschichte mit Happy End: "
Wie sich herausstellte, dass PVS-Studio aufmerksamer war als dreieinhalb Programmierer ."
Verwenden Sie in Ihrem Projekt statische Analysegeräte. Sie sind kein Ersatz für die Codeüberprüfung mit einem Kollegen, sondern eine nützliche Ergänzung zur Codequalitätskontrolle.

Wenn Sie diesen Artikel einem englischsprachigen Publikum zugänglich machen möchten, verwenden Sie bitte den Link zur Übersetzung: Svyatoslav Razmyslov.
Ein Tag vom PVS-Studio User Support .