Übersicht über die Funktionen von PVS-Studio Version 7.07

Bild 30

Der Zweck dieses Artikels ist eine Übersicht über die Funktionen des statischen Analysators PVS-Studio. Der einfachste und visuellste Weg, dies zu tun, besteht darin, die Funktionsweise des Werkzeugs anhand von Beispielen zu zeigen. Die Überprüfung des Projekts wird mithilfe des Plug-Ins für Visual Studio angezeigt. Starten Sie den Analyzer im Linux-Betriebssystem und importieren Sie die Analyseergebnisse in SonarQube.

allgemeine Informationen


PVS-Studio ist ein statischer Code-Analysator, der in C, C ++, C # und Java geschrieben ist. PVS-Studio führt eine Vielzahl von Codeprüfungen durch, ist jedoch am leistungsfähigsten beim Auffinden von Tippfehlern und den Folgen eines fehlgeschlagenen Kopiereinfügens (Beispiele: eins , zwei , drei , vier ). Die statische Analyse ist eine gute Ergänzung zu einer der ältesten und zuverlässigsten Methoden zur Erkennung von Fehlern - der Codeüberprüfung. Einige Fehler sind bei einer gemeinsamen Überprüfung des Codes schwer zu finden (z. B. dieselben Tippfehler). Zum Beispiel:

int trans_rest(transcoder_settings *trans)
{
  ....
  for(i=0; i<16; i++);
  {
    trans->eq.eq.preamp[i]   = 0.0;
    for(j=0; j<32; j++)
    {
      trans->eq.eq.boost[i][j] = 0.0;
    }
  }
}

Für diejenigen, die es nicht bemerkt haben, achten Sie auf das Semikolon nach dem ersten für . Oder:

private class ObjectArrayComparer : IEqualityComparer<object[]>
{
  public bool Equals(object[] x, object[] y)
  {
    ....
    for (int i = 0; i < x.Length; i++)
    {
      if (!object.Equals(x[0], y[0])) 
      {
        return false;
      }
    }
    return true;
  }
  ....
}

Es werden immer die gleichen Elemente verglichen. Um Ihre Zeit nicht mit der Suche nach solchen Fehlern zu verschwenden, sollten Sie lediglich einen statischen Analysator einführen. Sie können PVS-Studio unter diesem Link herunterladen und ausprobieren .

Plugin für Visual Studio


PVS-Studio verfügt über ein Plugin für Visual Studio 2010-2019. Bevor wir direkt mit der Überprüfung fortfahren, werde ich die Funktionen des Plugins demonstrieren. Lassen Sie uns einige Punkte durchgehen, die Fragen im Sinne von "Worum geht es?"

Bild 13


Ich werde auf das Element "Nachrichten unterdrücken" aufmerksam machen, das ein Fenster zum Arbeiten mit unterdrückten Warnungen des Analysators öffnet, und jetzt werde ich erklären, was dieses Element ist. Tatsache ist, dass PVS-Studio Warnungen unterdrücken kann, was es einfach macht, den Analysator auch in einem großen Projekt zu verwenden. Auf diese Weise können Sie schnell und einfach einen statischen Analysator in den Entwicklungsprozess integrieren.

Wenn Ihr Projekt klein ist, ist die Implementierung des Analysators recht einfach. Wenn das Projekt jedoch „mit Geschichte“ ist, haben Sie wahrscheinlich Zweifel: Wer wird an der Verarbeitung und Filterung der Ergebnisse beteiligt sein, wie viel Zeit müssen Sie dafür aufwenden usw. Ich werde versuchen, sie zu zerstreuen.

Die ideale Verwendung des Analysators ist in diesem Fall wie folgt. Sie führen es in Ihrem Projekt aus und sehen eine Reihe von Analysatormeldungen. Weisen Sie PVS-Studio dann mithilfe des Mechanismus zur Unterdrückung von Warnungen an, diese Meldungen nicht anzuzeigen. weil Da sich Ihr Projekt schon lange entwickelt hat, enthält der Analysatorbericht mit ziemlicher Sicherheit nur wenige Warnungen in Bezug auf einige kritische Fehler. Während des Entwicklungsprozesses sehen Sie und Ihre Kollegen nur die Fehler, die sich auf den geänderten oder neuen Code beziehen. Die unterdrückten Warnungen sind jetzt Ihre technische Pflicht, auf die Sie schrittweise zurückgreifen können. Der Mechanismus zur Unterdrückung von Warnungen wird hier ausführlicher beschrieben .

Bild 14


Fahren Sie als Nächstes mit dem Punkt „CWE-Codes im Ausgabefenster anzeigen“ fort. PVS-Studio ist ein Tool für statische Anwendungssicherheitstests (Static Application Security Testing, SAST). PVS-Studio-Warnungen können gemäß Common Weakness Enumeration (CWE) klassifiziert werden. Um mehr über die Klassifizierung von PVS-Studio-Warnungen nach CWE zu erfahren, warum CWE benötigt wird, was es ist und so weiter, empfehle ich Ihnen, die folgenden Links zu lesen:


Fahren wir mit der Registerkarte "Optionen" fort.

Bild 6

Im Abschnitt "Erkennbare Fehler (C, C ++)" können wir die Anzeige der Analysator-Nachrichtentypen steuern. Die Diagnosemeldungen, die aus irgendeinem Grund für dieses Projekt nicht relevant sind, können ausgeblendet oder deaktiviert werden. Beispielsweise ist es unwahrscheinlich, dass die MISRA-Diagnose andere als eingebettete Entwickler interessiert. Daher sind sie standardmäßig deaktiviert . Der Benutzer, der sich zuerst für die Verwendung des Analysegeräts entschieden hat, kann die Anzahl der MISRA-Warnungen abschrecken und in einen Stupor geraten. Der Teil der Benutzer, der den Analysator absichtlich gestartet hat, um sein Projekt auf Übereinstimmung mit den MISRA-Standards zu überprüfen, kann sie einfach in den Einstellungen aktivieren.

Bild 10

Hier können Sie Pfade / Masken eingeben, um einige Dateien oder Ordner von der Analyse auszuschließen. Sie können entweder eine Maske anhand des Pfads (Pfadmaske) oder eine Maske anhand des Dateinamens (Dateinamenmaske) auswählen. Sie werden benötigt, wenn Sie Bibliotheken von Drittanbietern, automatisch generierte Dateien usw. von der Analyse ausschließen möchten. Nach dem Festlegen von Ausschlussmasken verschwinden Nachrichten aus den entsprechenden Dateien aus dem PVS-Studio-Ausgabefenster und werden beim nächsten Scan nicht berücksichtigt. Somit kann der Ausschluss von Dateien und Verzeichnissen durch Masken die Gesamtanalysezeit des gesamten Projekts erheblich verkürzen.

Weitere Details hier .

Bild 8

Sie können die Ausgabe des Analysators auch nach dem darin enthaltenen Text filtern. In Ihrem Analysebericht sind beispielsweise Warnungen enthalten, in denen die Funktion my_super_function im Text erwähnt wird. Sie sind jedoch sicher, dass alle diese Warnungen falsch sind. Dann können Sie das Wort my_super_function in dieses Feld einfügen . Alle Warnungen, die dieses Wort enthielten, werden herausgefiltert. Für alle Fälle hinterlasse ich hier einen Link zum entsprechenden Abschnitt der Dokumentation .

Hinweis. In PVS-Studio gibt es andere Möglichkeiten, falsche Warnungen in Code oder Makros zu markieren. Sie werden in der Dokumentation im Abschnitt Unterdrücken von Fehlalarmen beschrieben .

Nachdem wir eine Übersicht über die Einstellungen erhalten haben, überprüfen wir das Projekt. Wie Sie vielleicht bemerkt haben, hatte der Artikel verschiedene Einstellungen in Bezug auf C ++ - Projekte, aber es gab keine Besonderheiten für C # und Java. Es gibt einfach mehr Einstellungen für C ++ als für C #, daher haben wir uns entschlossen, auf diese kurzen Überprüfungen einzugehen. Um die Geschichte zu ändern, überprüfen wir mithilfe des Plug-Ins für Visual Studio, ob es sich nicht um ein C ++ -, sondern um ein C # -Projekt handelt, und sehen Sie, wie der Analyzer-Bericht aussieht.

Natürlich müssen Sie nach der ersten Überprüfung des Projekts zu den Einstellungen zurückkehren, um den Prozentsatz der Fehlalarme zu verringern. False Positives sind unvermeidlich, aber ihr Prozentsatz kann reduziert werden, indem ein akzeptabler Wert eingestellt wird. Siehe Artikel: " Eigenschaften des PVS-Studio-Analysators am Beispiel der EFL-Kernbibliotheken, 10-15% der falsch positiven Ergebnisse ."

Bild 1

Wählen Sie den Punkt „Lösung mit PVS-Studio analysieren“.

Bild 2

Ein Fenster mit einem Fortschrittsbalken wird angezeigt.

Bild 3

Und dann können wir den Analysatorbericht sehen.

Bild 11

Übrigens können Sie hier auch einige Warnungen herausfiltern. Sie können beispielsweise die erste Warnung in unserem Bericht ausblenden, indem Sie sie auswählen und auf das Element „Ausgewählte Nachrichten als Fehlalarme markieren“ klicken. Weitere Informationen finden Sie im Abschnitt Unterdrücken von Fehlalarmen .

Linux


Zuvor haben wir das C # -Projekt getestet. Versuchen wir nun, den in C ++ geschriebenen Code zu überprüfen. Um dem Artikel Abwechslung zu verleihen, werden wir ihn unter Linux testen. Übrigens können Sie unter Windows, Linux und macOS Projekte in jeder Sprache (C, C ++, C #, Java) überprüfen.

Bild 20

Wir klonen ein Repository.

Bild 18

Wir starten ein Konfigurationsskript für die Montage.

Bild 16

Wir starten PVS-Studio im Trace-Modus und stellen das Projekt zusammen. Ein installiertes Strace- Dienstprogramm ist erforderlich . Anstelle des Befehls make kann es in Ihrem Fall einen beliebigen Befehl geben, um das Projekt mit allen erforderlichen Parametern zu erstellen.

Bild 12

Wir analysieren die Dateien aus dem Projekt anhand der Ergebnisse des vorherigen Schritts. Mit der Option -a können Sie festlegen, welche Warnungen in den Bericht aufgenommen werden sollen.

Bild 4

Wir konvertieren das Protokoll in HTML und genießen die Ergebnisse.

Ich habe nur eine Option zum Überprüfen eines Projekts unter Linux und sehr formal beschrieben, ohne auf Details einzugehen. Es gibt andere Möglichkeiten, das Projekt zu überprüfen, indem Sie beispielsweise den Analysatoraufruf in das Makefile schreiben. Für eine detailliertere Überprüfung empfehle ich, auf die folgenden Links zu verweisen:

Sonarquube


SonarQube ist eine Open-Source-Plattform zur kontinuierlichen Analyse und Messung der Codequalität, die eine große Anzahl von Programmiersprachen unterstützt und es Ihnen ermöglicht, Berichte über Metriken wie Codeduplizierung, Einhaltung von Codierungsstandards, Testabdeckung, Codekomplexität, potenzielle Fehler usw. zu erhalten.

PVS-Studio verfügt über ein Plugin zum Importieren von Analyseergebnissen in SonarQube. Versuchen wir, es zu verwenden.

Bild 9

Zu Beginn erhalten wir den Analysebericht und die Konfigurationsdatei sonar-project.properties.

Bild 27

Als nächstes benötigen wir einen Scanner-Startbefehl.

Bild 28

Ergebnis :)

Bild 23

Die Konfigurationsdatei kann auch erstellt (oder bearbeitet) werden. Im obigen Screenshot haben wir beispielsweise das Hinzufügen der MISRA-Kennung zu den Warnungen des Analysators aktiviert. Ja, das heißt, standardmäßig ist MISRA hier deaktiviert. Wenn Sie Ihren Code auf MISRA-Konformität überprüfen müssen, fügen Sie Ihrer Konfigurationsdatei "active" hinzu, um ihn einzuschließen.

Bild 25

Auf der Registerkarte Kennzahlen stehen verschiedene Codemetriken und -diagramme zur Verfügung.

Bild 26

Sie können Diagramme auch im Abschnitt PVS-Studio erstellen. Weitere Informationen zur Integration der PVS-Studio-Analyseergebnisse in SonarQube finden Sie in diesem Abschnitt des Handbuchs.

PVS-Studio Java


Wir haben uns jetzt die Einstellungen für C ++ - Projekte angesehen und das Projekt in C # getestet, aber Java ist irgendwie aus dem Artikel herausgefallen. Es ist notwendig, dies zu beheben und zu erklären, worum es beim PVS-Studio Java Analyzer geht. Der Analysator bietet verschiedene Möglichkeiten zur Integration in ein Projekt. Je nach Build-System können Sie das Plugin für Maven oder Gradle verwenden. Sie können den Analysatorkern auch direkt verwenden. Wenn Sie Gradle-, Maven- oder Kernel-Plugins direkt verwenden, können Sie problemlos mit Sonar Qube oder CI (Jenkins) arbeiten. Wenn Sie diese Plugins aktiviert haben, wird das Java-Projekt direkt während des Erstellungsprozesses durch statische Analyse überprüft. Als Ergebnis erhalten Sie nicht nur Ihr zusammengestelltes Projekt, sondern auch ein Protokoll vom PVS-Studio-Analysator.

Der PVS-Studio Java Analyzer kann auch als Plug-In für IntelliJ IDEA verwendet werden. In diesem Fall wird die Analyse der Projektstruktur mit dieser IDE durchgeführt, und das Plug-In bietet eine praktische grafische Oberfläche für die Arbeit mit dem Analysator.

Bild 40

Ich empfehle, den Abschnitt zum Starten von PVS-Studio Java ausführlicher zu lesen .

Durch Überprüfen eines Java-Projekts können Sie außerdem Analysatormeldungen unterdrücken, sodass die Integration in ein großes Projekt schnell und problemlos erfolgt.

In IntelliJ IDEA sieht es so aus.

Bild 42

In diesem Fenster sehen wir den Analysatorbericht.

Bild 43

Wenn Sie mit der rechten Maustaste auf die ausgewählte Nachricht klicken, wird ein solches Kontextmenü angezeigt. Darin können wir das hervorgehobene Element auswählen und die Meldung verschwindet aus der Analysatorausgabe.

Bild 44

Wir können auch alle Analysatormeldungen unterdrücken.

Führen Sie den folgenden Befehl aus, um die Warnungen des Analysators in Gradle zu unterdrücken:

./gradlew pvsSuppress "-Ppvsstudio.report=/path/to/report.json"
  "-Ppvsstudio.output=/path/to/suppress_base.json"

Führen Sie den folgenden Befehl aus, um die Warnungen des Analysators in Maven zu unterdrücken:
mvn pvsstudio:pvsSuppress "-Dpvsstudio.report=/path/to/report.json"
  "-Dpvsstudio.output=/path/to/suppress_base.json"

Lesen Sie mehr über den Unterdrückungsmechanismus hier .

Zusammenfassen


In diesem Artikel wurde gezeigt, wie der statische Analysator PVS-Studio funktioniert und wie er mit dem Plug-In für Visual Studio und Linux problemlos damit arbeiten kann. Dank der Möglichkeit zur Integration in die SonarQube-Plattform können Sie eine kontinuierliche Analyse und Qualitätsverwaltung Ihres Codes durchführen. Dies ist nur eine der vielen in der Dokumentation beschriebenen Funktionen .

Durch die Integration des statischen Analysators in das CI-System können Sie Fehler sofort nach dem Erstellen des Projekts erkennen. Dies reduziert die Kosten für das Auffinden und Korrigieren von Fehlern. Unten finden Sie Links zu Artikeln mit Integrationen mit den beliebtesten Cloud-Diensten:

  1. PVS-Studio geht in die Wolken: Travis CI
  2. PVS-Studio geht in die Cloud: Azure DevOps
  3. PVS-Studio geht in die Wolken: CircleCI
  4. PVS-Studio geht in die Cloud: GitLab CI / CD
  5. Starten Sie PVS-Studio in TeamCity


Wenn Sie diesen Artikel einem englischsprachigen Publikum zugänglich machen möchten, verwenden Sie bitte den Link zur Übersetzung: Ekaterina Nikiforova. PVS-Studio 7.07: Funktionsübersicht .

All Articles