Vor kurzem haben wir unsere Präsenz auf verschiedenen spezialisierten IT-Konferenzen in Russland und im Ausland verstärkt. Bei den meisten Veranstaltungen versuchen wir, mit einem Stand zu stehen, bei einigen halten wir Präsentationen. Mit Konferenzen können wir nicht nur die Wiedererkennung unseres Produkts (statischer Code-Analysator PVS-Studio) verbessern, sondern vor allem potenzielle und aktuelle Benutzer besser kennenlernen. In der Kommunikation mit den Besuchern am Stand beantworten unsere Mitarbeiter häufig dieselben Fragen, die manchmal sehr neugierig sind. In diesem Artikel werde ich versuchen, die am häufigsten gestellten Fragen der Besucher zur statischen Analyse im Allgemeinen und zu PVS-Studio im Besonderen zu beantworten.
Zunächst ein bisschen Humor zum Thema „Erwartung und Wirklichkeit“. Wir schreiben viele Artikel und glauben naiv, dass Menschen, die sie bereits lesen, zumindest allgemein über unser Produkt und seine Funktionen Bescheid wissen. Dies ist leider nicht immer der Fall. Hier ist ein Beispiel für eine echte Kommunikation mit einem Besucher einer kürzlich abgehaltenen Konferenz. Der Besucher: "Wir lesen Ihre Artikel über Habré. Interessant. Schade, dass Ihr Analysegerät überhaupt nicht zu uns passt. Wir haben alle Quellcodes geheim, wir können sie nicht versenden. Aber dort
funktioniert alles
in der Cloud für Sie. “
Unsere Marketingabteilung hat wahrscheinlich etwas zu tun.
Als nächstes werde ich andere häufig gestellte Fragen des durchschnittlichen Besuchers unseres Messestandes sowie die Antworten auf diese Fragen in einem spontanen Dialogformat geben.
F: Ich habe etwas über dich gehört. Woher kommst du, was machst du und wie kannst du mehr über dich erfahren?
A: Wir sind ein kleines unabhängiges Team von Tula. Wir entwickeln PVS-Studio - einen statischen Code-Analysator für die Sprachen C, C ++, C # und Java. Weitere Informationen zu uns finden Sie auf
der PVS-Studio-Website . Wir schreiben auch Artikel und veröffentlichen sie in
unserem Blog , auf
Habré und anderen Ressourcen.
F: Welche Art von statischer Analyse? Unser Team verfügt über genügend Compiler-Warnungen und gemeinsame Codeüberprüfungen.
A: Der Compiler kann nur grobe und ziemlich offensichtliche Fehler aufzeigen. Zum Beispiel nicht erreichbarer Code oder die Verwendung nicht initialisierter Variablen. Die Fehlererkennung für den Compiler ist eine Nebenaufgabe. Ja, Compiler sind in letzter Zeit ziemlich intelligent geworden. Jedes spezielle Tool zum Auffinden von Fehlern im Code ist dem Compiler jedoch deutlich überlegen. So können Sie eine detaillierte Analyse des Codes durchführen und Tippfehler, logische Fehler, die mögliche Verwendung von Nullzeigern / Links usw. identifizieren.
Gemeinsame Codeüberprüfungen sind eine gute, bewährte Technologie. Es hat aber auch Nachteile, die mit der Notwendigkeit verbunden sind, zusätzliche Mitarbeiter für die Arbeit am Code anderer Personen zu gewinnen. Dies erhöht die Entwicklungskosten, während die Wahrscheinlichkeit, einen Fehler zu überspringen oder einen neuen hinzuzufügen, bestehen bleibt, da es die menschliche Natur ist, Fehler zu machen.
Statische Analyse ist die Überprüfung des Quellcodes eines Programms, ohne dass dessen Ausführung erforderlich ist. Wir empfehlen die Verwendung statischer Code-Analyse-Tools als
zusätzliche Fehlerbarriere.
F: Analysiert PVS-Studio ausführbare Dateien oder direkten Quellcode?
A: Wenn wir über die Suche nach Schwachstellen sprechen, ähnelt die Analyse des ausführbaren Codes eher der Funktionsweise des Antivirenprogramms, indem nach Signaturen in einem Binärcode aus einer bestimmten Datenbank gesucht wird.
PVS-Studio analysiert den
Quellcode . Auf diese Weise können Sie einen viel größeren Bereich von Fehlern und potenziellen Schwachstellen identifizieren, die Arbeitsgeschwindigkeit erhöhen und zuverlässigere Ergebnisse erzielen.
Ja, natürlich können Sie versuchen, den Code zu zerlegen und den Fehler im Algorithmus zu finden. Sie müssen jedoch verstehen, dass im Binärcode viele Informationen verloren gehen. Beispielsweise wird die wahre Bedingung beim Kompilieren des Codes immer einfach gelöscht, und es gibt keine Möglichkeit herauszufinden, dass mit dieser Bedingung etwas nicht stimmt.
F: Und welche Integrationsoptionen gibt es? Haben Sie Plugins für eine IDE?
A: Derzeit wird PVS-Studio als Plugin in Visual Studio 2010-2017 integriert. Es gibt ein Java-Plugin für IntelliJ IDEA. Dank eines speziellen Moduls können Sie CMake-Projekte auch in Qt Creator und CLion verwalten.
Der Analysator wird ständig weiterentwickelt, sodass Sie auf
unserer Website die aktuellsten Informationen zu den Produktfunktionen erhalten.
F: Wir verwenden SonarQube.
A: Gute Wahl. Mit dem PVS-Studio-Plugin für SonarQube können Sie Analyseergebnisse in SonarQube importieren und wie gewohnt damit arbeiten.
F: Nun, ich muss die Analyse irgendwie in unser Build-System integrieren.
A: PVS-Studio kann über die Befehlszeile verwendet werden. Der Analysator enthält eine Vielzahl von Einstellungen zur Lösung einer Vielzahl von Aufgaben. Unabhängig vom Nutzungsszenario bieten wir unseren Kunden Unterstützung während der Implementierungsphase des Analysators und technischen Support während des gesamten Lizenzzeitraums.
F: Wie probiere ich meinen Analysator aus?
A: Verwenden Sie
die Download-Seite , laden Sie das erforderliche Distributionskit herunter und arbeiten Sie mit PVS-Studio im Testmodus. Wenn Sie zusätzliche Zeit benötigen, um unser Produkt zu bewerten, oder mit den Einschränkungen der Demoversion nicht zufrieden sind,
kontaktieren Sie uns .
Auch auf Ausstellungen können unsere Besucher einen Enterprise-Schlüssel erhalten, dessen Gültigkeit einen Monat beträgt. Kommen Sie dazu einfach mit einem Einhorn an unseren Stand. Darüber hinaus können Sie Mitglied der Lotterie werden und einen Preis von PVS-Studio erhalten.
F: Ich bin Student. Ist es möglich, PVS-Studio kostenlos zu nutzen?
A: Dies ist möglich, wenn Sie Ihrem Quellcode Kommentare besonderer Art hinzufügen. Auf diese Weise markierte Dateien werden ohne Einschränkungen auf Fehler überprüft. Weitere Informationen zu dieser Betriebsart finden Sie im Artikel "
Kostenlose Verwendung von PVS-Studio ".
F: Wer sind Ihre Kunden?
A: Derzeit sind weltweit mehr als 200 Unternehmen zu unseren Kunden geworden. Der Umfang ihrer Aktivitäten ist sehr vielfältig. Eine Liste der bestehenden Kunden finden Sie auf
unserer Website .
F: Haben Sie also eine lokale Betriebsart oder nicht?
A: Der PVS-Studio-Analysator ist lokal auf einem oder mehreren dedizierten Computern installiert und kann vollständig isoliert arbeiten. Eine Internetverbindung ist erforderlich, um Updates sowie Quicklinks zur Dokumentation (Beschreibung der Diagnose usw.) von den Plugins zu erhalten. Wir denken derzeit über Optionen für das Durcharbeiten der „Cloud“ nach, dies wird jedoch eine Ergänzung zur Standardbetriebsart sein.
F: Und was genau können Sie beispielsweise besser mit Coverity Analyzer?
A: Es ist unmöglich, eine einfache und umfassende Antwort auf diese Frage zu geben. Alle unsere Versuche, mit anderen Analysegeräten zu vergleichen, sind fehlgeschlagen. Wir wurden der Voreingenommenheit beschuldigt, die Ergebnisse mit einer speziell vorbereiteten Testbasis und anderen Todsünden „abgewickelt“ zu haben. Darüber hinaus können Analysatoren nicht einfach „frontal“ verglichen werden. Jedes Werkzeug ist einzigartig und hat seine eigenen Stärken und Schwächen. Einige Tools konzentrieren sich auf die Leistung, andere darauf, „Gerüche“ im Code zu finden und das Styling zu verbessern. Wir suchen nach Fehlern und potenziellen Schwachstellen.
Wenn Sie einen Wunsch und eine geeignete Methodik haben, können Sie eine Studie durchführen, unseren Analysator mit anderen vergleichen und dann einen Artikel darüber schreiben. Zu diesem Zweck stellen wir Ihnen sogar einen temporären Lizenzschlüssel ohne Einschränkungen aus. Aber seien Sie auf Kritik vorbereitet.
F: Ich verstehe nicht, also suchen Sie nach Fehlern nur in nicht kompiliertem Code? Das heißt, das Programm hat die Compilerprüfung nicht einmal bestanden?
A: Das ist nicht so. PVS-Studio sucht und findet Fehler nur in kompilierten Programmen. In realen Anwendungen. Diese Programme werden nicht nur fehlerfrei kompiliert, sondern auch von anderen Analysatoren überprüft. Und trotzdem suchen wir dort nach Fehlern. Darüber schreiben wir häufig
Artikel in unserem Blog und überprüfen Open-Source-Projekte.
F: Und welche Fehler kann PVS-Studio in unserem Projekt erkennen? Nur Tippfehler?
A: Tippfehler gehören natürlich zur Klasse der klassischen Fehler, die durch statische Analyse erkannt werden. Darüber hinaus kann PVS-Studio möglicherweise
mehrere hundert weitere Fehlermuster erkennen . Beispiele: Dereferenzieren eines Nullzeigers, Teilen durch Null, die Bedingung ist immer falsch oder wahr, falsche Operationen mit dem Index, Überschreiten der Grenzen des Arrays und viele andere. Eine vollständige Liste der Fehler finden Sie auf der
Dokumentationsseite .
F: Kann ich nach Rücksprache mit Ihrem Analysegerät sicher sein, dass das Programm keine Fehler enthält?
A: Nein. PVS-Studio ist kein Werkzeug zum Nachweis der Richtigkeit von Programmen. Dies ist eine separate Klasse von Werkzeugen. Die Aufgabe unseres Analysators ist es, schnell und zuverlässig einen
möglichen Fehler im Code
anzuzeigen . Die Entscheidung über die Fehlbarkeit eines bestimmten Entwurfs trifft der Entwickler immer im Kontext des Auftretens des Fehlers und seiner Kenntnis des Projekts. Der Analysator hilft dem Entwickler, indem er möglicherweise die Anzahl der Fehlalarme minimiert und zusätzliche Funktionen für die Verarbeitung der Liste der empfangenen Warnungen bereitstellt.
F: Wie genau funktioniert PVS-Studio? Welche Art von Fehlersuchmechanismen? Sie verwenden wahrscheinlich reguläre Ausdrücke.
A: Die Verwendung regulärer Ausdrücke ist äußerst ineffizient. Sie können damit nur die primitivsten Fehler finden, z. B. unter Bedingungen (vergleichen Sie zwei identische Unterausdrücke):
if ((a+b+) == (a+b+)) {....}
Gleichzeitig wird eine kleine Änderung des Codes (ohne die Arbeitslogik zu ändern) einen solchen Analysator höchstwahrscheinlich in eine Sackgasse führen:
if ((a+b+) == (b+a+)) {....}
Der PVS-Studio-Analysator ist viel intelligenter und verwendet die folgenden Mechanismen:
- Mustervergleich basierend auf einem abstrakten Syntaxbaum.
- Erstellen eines semantischen Modells mit anschließender Typinferenz.
- Symbolische Ausführung, mit der Sie die Werte von Variablen berechnen können, die zu Fehlern führen können, sowie Wertebereiche prüfen (Bereichsprüfung).
- Analyse des Datenflusses (Datenflussanalyse).
- Methodenanmerkungen
All dies wurde von meinem Kollegen Andrei Karpov in einem kürzlich erschienenen Artikel „
Technologien, die im PVS-Studio Code Analyzer zum Auffinden von Fehlern und potenziellen Sicherheitslücken verwendet werden “ ausführlicher beschrieben.
F: Nun, wir haben ein C / C ++ - Projekt, 15 Jahre Entwicklung und fünf Millionen Codezeilen. Können wir jetzt wirklich mit PVS-Studio beginnen?
A: Ja. In der Implementierungsphase muss Ihr Projekt einmal vollständig überprüft werden. Dann können alle Warnungen (wahrscheinlich werden es viele sein) als uninteressant eingestuft werden (vorübergehend ihre Schlussfolgerung unterdrücken), um später auf diese technische Schuld zurückzukommen. Danach können Sie mit PVS-Studio regelmäßig nur neuen Code überprüfen. Weitere Informationen zu dieser und anderen Analysatorfunktionen finden Sie auf
der Dokumentationsseite .
F: Wie oft muss ich einen Test durchführen? Und was, überprüfen Sie jedes Mal die gesamte Codebasis?
A: Um statische Analysen am effizientesten nutzen zu können, muss der neue Code so oft wie möglich überprüft werden. Hierzu ist der inkrementelle Analysemodus in PVS-Studio implementiert. Dateien, die seit dem letzten Build des Projekts geändert wurden, werden zur Überprüfung eingereicht. Es gibt andere Betriebsarten. Auf diese Weise können Sie Fehler bereits in der Entwicklungsphase identifizieren, wodurch das Risiko verringert wird, dass sie in die Version aufgenommen werden.
F: Wir verwenden PVS-Studio. Der Analysator findet Fehler, aber viele davon befinden sich in nicht verwendetem Code oder Tests. Es ist in Ordnung?
A: Es ist ganz normal. Eines der Merkmale der statischen Analyse ist im Gegensatz zur dynamischen Analyse die Überprüfung der
gesamten Codebasis und nicht nur der Ausführung beim Ausführen des Codes. Angenommen, Sie haben viel Zeit und Mühe damit verbracht, den Programmcode zu debuggen, und alles funktioniert stabil. Es gibt jedoch eine Funktion, die nur selten oder gar nicht verwendet wird. Die Wahrscheinlichkeit, einen Fehler in einer solchen Funktion zu finden, ist hoch. Und wenn sie irgendwann anfangen, die Funktion zu verwenden, kann etwas schief gehen. Die Verwendung einer statischen Analyse minimiert die Risiken einer solchen Situation.
Außerdem kann der Code offensichtlich falsche Konstruktionen enthalten (dies geschieht normalerweise in Tests). Daher ist es häufig sinnvoll, diese über die PVS-Studio-Einstellungen vom Scan auszuschließen (durch Angabe von Projekten oder Pfaden). Manchmal enthalten die Tests selbst jedoch Fehler. Solche Situationen sind schwer zu identifizieren, und in diesem Fall muss die Entscheidung vom Entwickler getroffen werden.
F: Was ist mit der Suche nach Schwachstellen?
A: PVS-Studio Analyzer ist ein SAST-Tool (Static Application Security Testing), mit dem Sie
potenzielle Schwachstellen identifizieren können, die gemäß
CWE (Common Weakness Enumeration) klassifiziert wurden. CWE-Warnungen überschneiden sich weitgehend mit klassischen PVS-Studio-Warnungen. Weitere Informationen zu SAST finden Sie in der
Dokumentation . Es ist wichtig zu verstehen, dass
potenzielle Schwachstellen nicht unbedingt zu echten Schwachstellen führen, die von einem Hacker ausgenutzt werden können. Identifizierte Schwachstellen werden nach
CVE (Common Vulnerabilities and Exposures) klassifiziert. Die Beseitigung
potenzieller Schwachstellen trägt jedoch eindeutig zur Verbesserung der Sicherheit des Programms bei und minimiert das Risiko, künftig echte Schwachstellen zu identifizieren.
F: Ich leite das Entwicklungsteam. Wie genau hilft mir PVS-Studio?
A: Die Implementierung von PVS-Studio verbessert nicht nur die Qualität und Zuverlässigkeit des Codes, sondern ermöglicht auch die Lösung von rein administrativen Aufgaben, die beispielsweise mit der Aufteilung von Verantwortlichkeiten zusammenhängen. Das Analysepaket enthält das Dienstprogramm BlameNotifier, mit dem Sie automatisch Mitarbeiter identifizieren können, die einen fehlerhaften Code an das Versionskontrollsystem gesendet haben. Gleichzeitig werden E-Mail-Benachrichtigungen sowohl an den Auftragnehmer als auch an seinen Manager gesendet.
Sie können auch die Konvertierung von Fehlerberichten in ein für Sie geeignetes Formular konfigurieren, einschließlich eines detaillierten HTML-Berichts, der für den Kopf geeignet ist.
Wenn SonarQube verwendet wird, können Sie alle Vorteile dieses Tools nutzen, um eine kontinuierliche Kontrolle der Codequalität sicherzustellen, indem Sie die Ergebnisse der Projektüberprüfung mithilfe des PVS-Studio-Analysators mithilfe eines speziellen Plug-Ins in den SonarQube hochladen.
F: Maschinelles Lernen nutzen oder planen?
A: Dies ist ein großes und interessantes Thema. Wir planen, einen kritischen Artikel darüber zu schreiben. Jetzt werde ich nur noch ein paar kurze Gedanken äußern.
Es ist nicht erforderlich, einen Taschenrechner mit maschinellem Lernen zu erstellen. Es gibt eine bestimmte Regel (Formel), die auf den Code angewendet werden muss, um eine Schlussfolgerung zu ziehen. Es ist nicht klar, warum das neuronale Netzwerk so konfiguriert werden muss, dass ein neues Fehlermuster erkannt wird, wenn diese Muster bereits vorhanden sind, und Sie müssen sie nur korrekt anwenden. Und vor allem ist nicht klar, wo man die Basis für ein solches Training bekommt. Wo ist diese Stichprobe von Hunderttausenden von Projekten mit schriftlichen Fehlern, aus denen Sie lernen können?
Der einzige Ort, an dem unserer Meinung nach die Verwendung von Algorithmen für maschinelles Lernen sinnvoll sein könnte, ist das Herausfiltern von Fehlalarmen.
F: Überprüfen Sie den PVS-Studio-Code mit PVS-Studio?
A: Natürlich! Darüber hinaus wird im Fehlerfall die Liste der Täter mit ihrer anschließenden Exkommunikation aus dem Kühlschrank mit Eis veröffentlicht. Im Ernst, wir glauben, dass es sehr nützlich ist, ein eigenes Werkzeug zu verwenden. Auf diese Weise können Sie das Produkt aus Sicht des Benutzers betrachten und einige Nachteile feststellen.
F: Wie erhalten Sie Ihren wunderbaren Status für den Desktop und die Markenkappe mit Ohrenklappen?
A: Kommen Sie mit einem Einhorn zu unserem Stand auf der nächsten Ausstellung, wo wir mit einem Stand anwesend sein werden. Wir werden uns etwas einfallen lassen :)
Ich hoffe, ich konnte die beliebtesten Fragen der Besucher unserer Stände auf Ausstellungen beantworten. Natürlich gibt es komplexere Fragen, für deren Beantwortung möglicherweise ein separater Artikel geschrieben werden muss.
Bei der Kommunikation mit Besuchern versuchen wir, die Hauptidee zu vermitteln: Eine statische Analyse ist kein Allheilmittel für alle Krankheiten, aber ihre Verwendung ist sehr nützlich für die Gesundheit (Ihre Programme). Benutze PVS-Studio und werde nicht krank!
Abschließend werde ich noch einmal einige nützliche Links geben:

Wenn Sie diesen Artikel einem englischsprachigen Publikum zugänglich machen möchten, verwenden Sie bitte den Link zur Übersetzung: Sergey Khrenov.
Alles, was Sie über PVS-Studio wissen wollten und zu fragen wagten