Viele unserer Artikel konzentrieren sich auf alles, aber nicht auf das PVS-Studio-Tool selbst. Wir tun viel, um die Verwendung für Entwickler zu vereinfachen. Trotzdem sind unsere Bemühungen oft hinter den Kulissen verborgen. Ich habe beschlossen, diese Situation zu beheben und Ihnen über das PVS-Studio-Plugin für Visual Studio zu berichten. Wenn Sie Visual Studio verwenden, ist dieser Artikel für Sie.
Was ist statische Code-Analyse und warum brauchen wir sie?
Bei der statischen Code-Analyse werden Fehler und Mängel im Quellcode von Programmen erkannt. Die statische Analyse kann als ein Prozess der automatisierten Codeüberprüfung betrachtet werden. Die gemeinsame
Überprüfung des Codes ist eine wunderbare Methode. Es hat jedoch einen erheblichen Nachteil - hohe Kosten. Es ist notwendig, mehrere Programmierer zu sammeln, um neu geschriebenen oder neu geschriebenen Code nach den darin vorgenommenen Änderungen zu überprüfen.
Einerseits möchten wir den Code regelmäßig überprüfen. Andererseits ist es zu teuer. Die Kompromisslösung sind statische Analysewerkzeuge. Sie analysieren ernsthaft den Quellcode von Programmen und geben Programmierern Empfehlungen zur Überprüfung bestimmter Codefragmente. Natürlich ersetzt ein Programm keine vollständige Codeüberprüfung durch ein Entwicklerteam. Das Verhältnis Preis / Nutzen macht die statische Analyse jedoch zu einer nützlichen Praxis, die von vielen Unternehmen angewendet wird. Wenn der Leser an genauen Zahlen interessiert ist, empfehle ich Ihnen, den Artikel "
PVS-Studio ROI " zu lesen.
Es gibt viele kommerzielle und kostenlose statische Code-Analysatoren. Eine große Liste statischer Analysatoren ist auf Wikipedia verfügbar:
Liste der Tools für die statische Code-Analyse . Die Liste der Sprachen, für die es statische Code-Analysatoren gibt, ist ziemlich groß (C, C ++, C #, Java, Ada, Fortran, Perl, Ruby, ...). Selbstverständlich werden wir Sie über den PVS-Studio-
Analysator informieren .
Der Hauptvorteil der statischen Codeanalyse besteht in der Möglichkeit, die Kosten für die Beseitigung von Fehlern in einem Programm erheblich zu senken. Je früher ein Fehler erkannt wird, desto kostengünstiger ist die Korrektur. Laut dem Buch „Code Complete“ von McConnell ist die Fehlererkennung in der Code-Testphase zehnmal teurer als in der Phase des Code-Entwurfs (Codierung):
Abbildung 1. Durchschnittliche Kosten für die Korrektur von Fehlern in Abhängigkeit vom Zeitpunkt ihres Auftretens und der Erkennung im Code (die Daten in der Tabelle stammen aus dem Buch 'Code Complete' von S. McConnell).Statische Analysewerkzeuge ermöglichen das Erkennen einer großen Anzahl von Fehlern, die für die Phase des Code-Entwurfs typisch sind, wodurch die Kosten für die gesamte Projektentwicklung erheblich gesenkt werden. Beispielsweise kann der statische Code-Analysator PVS-Studio direkt nach der Kompilierung in einem Hintergrundmodus ausgeführt werden und benachrichtigt einen Programmierer, wenn potenzielle Fehler gefunden werden. Mehr zu diesem Modus erfahren Sie weiter unten.
PVS-Studio Static Code Analyzer
PVS-Studio ist ein statischer Analysator, der Fehler und potenzielle Schwachstellen im Quellcode von Anwendungen in C, C ++ (andere unterstützte Erweiterungen:
C ++ / CLI und
C ++ / CX ), C # und Java auf Windows-, Linux- und MacOS-Plattformen erkennt. Der Analysator ist hervorragend in die IDEs Visual Studio 2010 - 2019 und IntelliJ IDEA integriert. In diesem Artikel werden wir uns PVS-Studio genauer ansehen und den Code in den Sprachen C, C ++ und C # überprüfen. Hier erfahren Sie, wie Sie mit PVS-Studio Java-Code in IntelliJ IDEA überprüfen.
Nach der Installation von PVS-Studio und seiner Integration in Visual Studio erhalten Benutzer einen zusätzlichen Eintrag "PVS-Studio" im Hauptmenü und im Fenster zum Arbeiten mit Fehlermeldungen:
Abbildung 2. Die wichtigsten Elemente, die der PVS-Studio-Analysator bei der Integration in Visual Studio hinzufügt.Grundeinstellungen
Der Analysator ist sofort nach der Installation betriebsbereit. In den meisten Fällen müssen Sie für den ersten Lauf nichts konfigurieren. Das einzige Setup, das Sie am Anfang möglicherweise benötigen, ist der Ausschluss von Bibliotheken von Drittanbietern. Sie werden nichts in den Originaldateien reparieren, zum Beispiel in der JPEG-Bibliothek, sodass Sie es nicht überprüfen müssen. Darüber hinaus beschleunigt das Ausschließen unnötiger Ordner die Projektanalyse. Die Ausnahmen des Verzeichnisses werden hier festgelegt: PVS-Studio> Optionen ...> Dateien nicht überprüfen> PathMasks (siehe Abbildung 3).
Abbildung 3. Bearbeiten einer Liste von Verzeichnissen, die der Analysator nicht überprüft.Wenn der vollständige Dateiname einen der angegebenen Namen enthält, wird die Analyse für diese Datei nicht durchgeführt. Standardmäßig sind die Namen einiger Verzeichnisse bereits in der Liste enthalten. In Ihrem Projekt kann das Verzeichnis mit der ZLib-Bibliothek jedoch nicht "zlib", sondern beispielsweise "zip_lib" genannt werden. Daher sollte diese Liste bearbeitet werden. Um mit der Bearbeitung zu beginnen, müssen Sie auf eine Schaltfläche mit drei Punkten klicken.
Beispiele für akzeptable Masken für die PathMasks-Liste:
- c: \ Libs \ - Alle Dateien in diesem Verzeichnis und seinen Unterverzeichnissen werden ausgeschlossen.
- \ Libs \ oder * \ Libs \ * - Alle Dateien in den Verzeichnissen, deren Pfad das Unterverzeichnis "Libs" enthält, werden ausgeschlossen. Wenn die Symbole "*" nicht angegeben sind, werden sie trotzdem automatisch hinzugefügt, sodass beide Optionen gleich sind.
- Libs oder * Libs * - alle Dateien, deren Pfad das Unterverzeichnis enthält, dessen Name gleich oder 'Libs' ist. Auch in diesem Fall werden alle Dateien ausgeschlossen, deren Namen Libs enthalten, z. B. c: \ project \ mylibs.cpp. Um Verwirrung zu vermeiden, empfehlen wir, immer Schrägstriche zu verwenden.
Sie können nicht nur ganze Verzeichnisse ausschließen, sondern auch Masken festlegen, um einzelne Dateien auszuschließen. Dazu gibt es die Einstellung FileNameMasks. Weitere Informationen zum Arbeiten mit Ausnahmelisten finden Sie in der Dokumentation:
Einstellungen: Dateien nicht prüfen .
Projektprüfung
Wenn Sie die Grundeinstellungen vorgenommen haben, können Sie das Projekt überprüfen. PVS-Studio für Visual Studio unterstützt die Überprüfung von C ++ (.vcxproj) und C # (.csproj) Projekten. Sie können auch sofort versuchen, die gesamte Lösung zu überprüfen, die Projekte dieser Art enthält. Wählen Sie dazu den Menüpunkt Erweiterungen Erweiterungen> PVS-Studio> Prüfen> Lösung (siehe Abbildung 4).
Abbildung 4. Überprüfung einer Lösung mit dem PVS-Studio-Analysegerät.Wenn bei der Prüfung Schwierigkeiten auftreten, empfehlen wir den Abschnitt "
PVS-Studio: Fehlerbehebung " auf unserer Website. Dies sind keine dummen Empfehlungen im Sinne von "Überprüfen Sie, ob der Stecker in die Steckdose gesteckt ist". Der Abschnitt beschreibt typische Situationen von Benutzeranforderungen und schlägt Optionen vor.
Arbeiten mit einer Liste von Diagnosemeldungen
Nach der Überprüfung werden alle Diagnosemeldungen in einem speziellen Fenster angezeigt. Das Fenster enthält viele Steuerungskomponenten. Alle dienen dazu, genau die Diagnosemeldungen anzuzeigen, die für den Benutzer interessant sind. Im ersten Moment mag das Fenster jedoch kompliziert erscheinen. Schauen wir uns alle Steuerungskomponenten an (siehe Abbildung 5).
Abbildung 5. Ein Fenster mit Diagnosemeldungen.- Hier ist das PVS-Studio-Fenster.
- Zusätzliches Menü. Ermöglicht den Zugriff auf Optionen wie das Markieren von Warnungen als falsch, das Ausblenden von Nachrichten und das Hinzufügen von Dateien zu Ausnahmen (lesen Sie dazu weiter unten).
- Die Schaltfläche aktiviert die Meldung "Es ist ein Fehler aufgetreten". Beispielsweise kann eine der Dateien nicht vorverarbeitet werden.
- Gehen Sie zur vorherigen / nächsten Nachricht. Dies öffnet die entsprechende Datei und der Cursor wird mit einem möglichen Fehler auf die Zeile gesetzt. Sie können auch jederzeit mit einem Doppelklick eine Diagnose aus der Liste auswählen. Sie können Hotkeys für Übergänge zur vorherigen / nächsten Nachricht festlegen . Standardmäßig ist es Alt + '[' und Alt + ']'.
- Schaltflächen mit Warnungen auf verschiedenen Ebenen. Die ersten beiden Diagnoseebenen sind jetzt aktiviert. Gleichzeitig werden im Fenster 90 Warnungen der ersten Ebene und 6700 Warnungen der zweiten Ebene angezeigt. Die Nachrichtenebene wird auf der linken Seite des Fensters als Streifen angezeigt, der der Streifenfarbe auf der Schaltfläche für die entsprechende Ebene entspricht. Warum gibt es so viele Auslösungen? Warum 6700 Warnungen? Um die Fähigkeiten der Schnittstelle zu demonstrieren, ist eine Reihe von MISRA- Regeln aktiviert, die für reguläre Anwendungen ungeeignet sind :).
- Aktive Diagnoseregelsätze. Allgemein - Allgemeine Diagnose, Optimierung - Mikrooptimierung, 64-Bit- - 64-Bit-Diagnose, MISRA - MISRA C- und MISRA C ++ - Standarddiagnose. Alle Arten von Warnungen werden jetzt im Fenster angezeigt.
- Die Anzeige zeigt die Anzahl der Warnungen an, die als falsch markiert sind (Fehlalarme). Sie können die Anzeige markierter Meldungen in den Einstellungen aktivieren / deaktivieren - PVS-Studio> Optionen ...> Spezifische Analyzer-Einstellungen> Fehlalarme anzeigen.
- Schnelle Filter. Sie können die Liste beispielsweise auf Nachrichten mit V501-Code und auf Nachrichten im XYZ-Projekt kürzen.
- Einige Diagnosen empfehlen, nicht auf eine, sondern auf mehrere Zeilen zu achten. In diesem Fall erscheinen Punkte neben der Zeilennummer. Wenn Sie darauf klicken, können Sie die Liste der Zeilen anzeigen und eine davon auswählen.
Die Tabelle mit Diagnosemeldungen ist in folgende Spalten unterteilt:
- Level Die Sicherheitsstufe, die anzeigt, dass ein Fehler und kein Codegeruch gefunden wurde. Stufe 1 (rot) zeigt die verdächtigsten Orte. Stufe 3 (gelb) ist wahrscheinlich eine nicht wesentliche Ungenauigkeit im Code.
- Stern Es hat keinen bestimmten Zweck. Benutzer können es nach Belieben interpretieren. Beispielsweise kann ein Benutzer die interessantesten Warnungen für eine weitere sorgfältige Analyse markieren. Die Analogie ist das Sternchen von E-Mails in E-Mail-Clients wie Thunderbird oder Outlook.
- ID Eindeutige Nachrichtennummer. Dies kann nützlich sein, wenn Sie mit einer großen Liste arbeiten. Sie können beispielsweise zu einer Nachricht mit einer bestimmten Nummer wechseln (siehe "Navigieren zu ID ..." im Kontextmenü ).
- Code Nachrichtencode. Wenn Sie darauf klicken, wird eine Seite geöffnet, auf der die Warnung beschrieben wird.
- CWE. Ermöglicht das Identifizieren einer Warnung anhand des CWE-Codes (Common Weakness Enumeration). Wenn Sie auf den Link klicken, wird im Netzwerk eine Beschreibung dieses CWE angezeigt.
- Misra. Wie oben, jedoch für den MISRA-Standard .
- Nachricht Der Text der Diagnosemeldung.
- Projekt Projektname (Sie können diese Spalte über ein Kontextmenü deaktivieren).
- Datei Dateiname.
- Linie Zeilennummer. Wichtig! Beachten Sie, dass einige Zeilen mit Punkten enden. Beispiel: "123 (...)". Wenn Sie auf diese Nummer klicken, erhalten Sie eine Liste aller Codezeilen, die sich auf diese Nachricht beziehen. Gleichzeitig können Sie zu jeder Zeile in der Liste wechseln.
Ja, es war anstrengend, alles zu lesen. Ich versichere Ihnen jedoch, dass Sie sich schnell an das Tool gewöhnen werden, wenn Sie damit begonnen haben. Und Sie werden selten auf etwas klicken, um es einzurichten.
Kontextmenü
Durch Doppelklicken auf die Nachricht gelangen Sie zum entsprechenden Code. Durch Klicken mit der rechten Maustaste wird das Kontextmenü geöffnet.
Das Menü ist recht einfach und ich werde den Artikel nicht mit der Beschreibung jedes Artikels überladen. Wenn etwas nicht klar ist, können Sie in die Dokumentation schauen.
Trotzdem möchte ich auf eine sehr nützliche Funktion eingehen. Denken Sie daran, dass Sie in den Einstellungen Ordner / Dateien hinzufügen können, die ausgeschlossen werden sollen? Die Sache ist, dass das Hinzufügen von etwas viel einfacher ist, als es scheint!
Achten Sie auf die Menüoption "Dateien nicht überprüfen und alle Nachrichten vor ... verbergen". Wenn Sie darauf klicken, erhalten Sie eine Liste der Pfade, die Sie zu den Ausnahmen hinzufügen können (siehe Abbildung 6).
Abbildung 6. Dateien von der Prüfung ausschließenSie können eine separate Datei oder eines der Verzeichnisse auswählen. Das Bild zeigt, dass der Ordner "SDL2-2.0.9 \ src \ haptic \ windows" ausgewählt ist. Dies bedeutet, dass alle Dateien in diesem Ordner und alle Unterordner von der Analyse ausgeschlossen werden. Darüber hinaus werden alle Nachrichten zu diesen Dateien sofort aus der Liste entfernt. Sehr praktisch. Sie müssen die Analyse nicht neu starten, um alle Meldungen zu den Tests zu entfernen.
Inkrementeller Analysemodus
Die Einführung in PVS-Studio wird unvollständig sein, wenn wir eine der wichtigsten Funktionen verbergen - die
inkrementelle Code-Analyse .
Je früher ein Fehler erkannt wird, desto kostengünstiger ist die Beseitigung. Am besten markieren Sie Fehler im bearbeiteten Programmtext sofort. Es ist jedoch technisch schwierig und ressourcenintensiv. Aus diesem Grund wird PVS-Studio im Hintergrundmodus ausgeführt, wenn der feste Code erfolgreich kompiliert wurde. Dabei suchen Sie nach Fehlern im Code, der gerade geändert wurde. Das Symbol im Systembenachrichtigungsbereich zeigt an, dass die Analyse ausgeführt wird.
Wenn ein Fehler gefunden wird, wird ein Popup-Fenster angezeigt, das vor Gefahren warnt (siehe Abbildung 7).
Abbildung 7. Eine Popup-Nachricht, in der gemeldet wird, dass in bearbeiteten Dateien verdächtige Stellen gefunden wurden.Wenn Sie auf das Symbol klicken, öffnen Sie die IDE mit dem Ergebnis der Projektprüfung (siehe Abbildung 2) und können in verdächtige Codefragmente graben.
Tatsächlich ist es einfacher, in diesem Modus zu arbeiten, als ihn zu beschreiben. Sie schreiben den Code wie zuvor. Bei Bedarf stört Sie der Analysator. Probieren Sie es aus!
Wir verwenden diesen Modus ständig. Ja, manchmal machen wir auch Codierungsfehler. Die Möglichkeit, sie sofort zu beheben, verkürzt die Zeit für die Erkennung des Fehlers und den Versuch zu verstehen, warum sich das Programm nicht wie beabsichtigt verhält, erheblich. Es ist sehr ärgerlich, 15 bis 20 Minuten mit dem Debuggen zu verbringen, um schließlich einen Tippfehler im Index zu finden. Hier ist einer der Fälle, in denen PVS-Studio einen Fehler in PVS-Studio direkt nach dem Erscheinen im Code gefunden hat:
if (in[0] == '\\' && in[1] == '.' && in[1] == '\\') { in += 2; continue; }
Nun, das interessanteste kommt noch. Der PVS-Studio-Analysator kann manchmal viel nützlicher sein. Hier ist eine der Bewertungen zu unserem Analysegerät: "
Die Erfahrung eines Benutzers mit dem Analysegerät". Der Text lässt mich wundern.
Lassen Sie es mich zusammenfassen. Inkrementelle Analysen sollten Sie unbedingt ausprobieren. Sie werden es lieben, sobald Sie ein paar Fehler im neuen Code finden.
PVS-Studio-Funktionen
Lassen Sie uns kurz sein. Es ist unmöglich, alle in PVS-Studio verfügbaren Diagnosen kurz zu beschreiben. Eine vollständige Liste der Diagnosen und deren detaillierte Beschreibung finden Sie in der Dokumentation:
Beschreibung der erkannten Fehler . Lassen Sie uns die Tabelle festlegen, in der die Diagnose nach Typ gruppiert ist. Einige Diagnosen gehören zu mehr als einer Gruppe. Tatsache ist, dass die Klassifizierung recht formal ist. Beispielsweise kann ein Tippfehler zur Verwendung von nicht initialisiertem Speicher führen. Einige der Fehler passten im Gegenteil nicht zu einer der Gruppen, da sie zu spezifisch waren. Diese Tabelle gibt jedoch einen Einblick in die Funktionsweise des statischen Code-Analysators.
Abbildung 8. PVS-Studio-Funktionen.Wie Sie sehen, ist der Analysator besonders nützlich, wenn Sie nach Fehlern beim Kopieren und Einfügen suchen. Es ist großartig, um Probleme im Zusammenhang mit der Codesicherheit zu erkennen.
Sehen Sie sich die
Fehlerbasis an, um diese Diagnose in Aktion zu sehen. Wir sammeln alle gefundenen Fehler und überprüfen verschiedene Open Source-Projekte mit PVS-Studio.
SAST
PVS-Studio ist ein statisches Tool zum Testen der Anwendungssicherheit. Der Analysator kann potenzielle Schwachstellen im Projektcode erkennen und die entsprechende Fehlerkennung in einer bestimmten Klassifizierung anzeigen.
PVS-Studio unterstützt die folgenden Fehlerklassifizierungen:
- CWE
- SEI CERT
- Misra
Sie können die Anzeige von CWE-Codes über das Kontextmenü im Analysefenster unter dem Pfad Spalten anzeigen> CWE aktivieren
Abbildung 9. Kontextmenü und das Beispiel der CWE-Ausgabe.Oder im Hauptmenü (Erweiterungen> PVS-Studio> CWE-Codes im Ausgabefenster anzeigen)

Abbildung 10. Menü der Erweiterung.Die MISRA-Diagnose wird in den Einstellungen separat aktiviert:

Abbildung 11. Eine Liste der erkannten Fehler.Weitere Informationen zu diesen Klassifikationen finden Sie
hier .
Überprüfen von Projekten über die Befehlszeile
PVS-Studio_Cmd.exe - ein Dienstprogramm zum Überprüfen von C ++ / C # Visual Studio-Projekten (.vcxproj / .csproj) und .sln-Lösungen über die Befehlszeile. Es kann nützlich sein, die Analyse zu automatisieren. Das Programm befindet sich in dem Verzeichnis, in dem die Installation durchgeführt wurde. Standardmäßig lautet es "C: \ Programme (x86) \ PVS-Studio".
Das Programm hat viele
Parameter , aber zuerst brauchen wir nur 3 davon:
- --target: Projekt- oder Lösungsdatei, die überprüft werden muss.
- --output: Plog-Datei, in die der Bericht geschrieben werden muss.
- --progress: Zeigt den Fortschritt einer Prüfung an.
So wird der Lauf aussehen:

Abbildung 12. Ausgabe des Programms PVS-Studio_Cmd.exe.Nach dem Ausführen erhalten wir eine Plog-Datei mit einem Bericht, einen Pfad, zu dem wir in den Ausführungsoptionen angegeben haben. Sie können diesen Bericht mit dem Dienstprogramm PlogConverter.exe in andere Formate konvertieren. Doppelklicken Sie im Finder auf eine Plog-Datei, um den Bericht in IDE anzuzeigen.
Sie können die Berichtsdatei auch im Erweiterungsmenü über den Pfad Erweiterungen> PVS-Studio> Öffnen / Speichern> Analysebericht öffnen ... öffnen.
Detaillierte Informationen zum Dienstprogramm und seinen Parametern finden Sie in der
Dokumentation .
Unterdrückung falsch positiver Ergebnisse
Einige vom Analysator ausgegebene Meldungen sind unweigerlich falsch. Wir können nichts dagegen tun. Ein statischer Analysator ist nur ein Programm ohne künstliche Intelligenz und kann nicht genau bestimmen, ob es sich um einen echten Fehler handelt oder nicht.
Um False Positives zu bekämpfen, bietet der Analysator eine Reihe verschiedener Mechanismen. Sie werden in den folgenden Abschnitten der Dokumentation beschrieben:
- Feinabstimmung .
- Eine grobe Methode, mit der Sie nur mit Warnungen arbeiten können, die sich auf neuen oder geänderten Code beziehen.
Fazit
Natürlich haben wir Ihnen nicht alles über das Tool erzählt. Wenn ich Ihnen alles erzähle, wird der Artikel zur Dokumentation. Ziel war es zu zeigen, wie einfach es ist, mit dem Tool in der Visual Studio-Umgebung zu arbeiten. Weitere Umgebungen und Arbeitsweisen finden Sie in der Dokumentation und in anderen Artikeln auf unserer
Website . Es gibt übrigens viele interessante Dinge für Programmierer. Komm und bleib dran.
Es ist erwähnenswert, dass PVS-Studio nicht nur in einer Microsoft-Umgebung funktioniert. Wir unterstützen auch die Java-Sprache, können unter Linux und MacOS arbeiten, in CMake integrieren und vieles mehr. Weitere Informationen finden Sie in der
Dokumentation .
Ich wünsche Ihnen fehlerfreien, schlechten Code und hoffe, dass Ihnen PVS-Studio gefällt. Bei Fragen helfen wir Ihnen gerne weiter.
Schreiben Sie uns .
Zusätzliche Links:
- Codeüberprüfung .
- Statische Code-Analyse .
- Tools zur statischen Code-Analyse .
- SAST .
- Im PVS-Studio-Analysegerät verwendete Technologien .
- Laden Sie PVS-Studio herunter und probieren Sie es aus.
- Visual Studio 2019-Unterstützung .
- Besprechen Sie den Preis des PVS-Studio-Analysators für Ihr Team und wie Sie ihn kaufen können: Kaufen Sie PVS-Studio .
- Beispiel für die Verwendung eines statischen Analysators .
- Antworten auf Fragen, die häufig auf Konferenzen gestellt werden.
- So führen Sie PVS-Studio Java aus
- So führen Sie PVS-Studio unter Linux und MacOS aus