{"id":91065,"date":"2020-08-08T01:42:18","date_gmt":"2020-08-07T23:42:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii"},"modified":"2020-08-08T01:42:18","modified_gmt":"2020-08-07T23:42:18","slug":"staticheskij-analiz-ot-znakomstva-do-integraczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","title":{"rendered":"Statische Analyse \u2013 von der Einf\u00fchrung bis zur Integration","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Nach unendlich vielen Code-Reviews oder Debugging fragt man sich manchmal, wie man sich das Leben erleichtern kann. Ein wenig Recherche oder das zuf\u00e4llige Entdecken des magischen Begriffs: \"Statische Analyse\" kann helfen. Lassen Sie uns sehen, was das ist und wie es mit Ihrem Projekt interagieren kann.<\/p>\n<p><img decoding=\"async\" alt=\"Statische Analyse \u2013 von der Einf\u00fchrung bis zur Integration\" src=\"\/wp-content\/uploads\/2020\/08\/7811b22510bdda6f3f774b8335cbeabe.png\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEigentlich, wenn Sie in einer modernen Programmiersprache schreiben, dann haben Sie das unbewusst bereits durch einen statischen Analysator geleitet. Tatsache ist, dass jeder moderne Compiler zwar nur einen kleinen, aber feinen Satz an Warnungen \u00fcber potenzielle Probleme im Code bereitstellt. Wenn Sie zum Beispiel C++-Code in Visual Studio kompilieren, sehen Sie Folgendes:<\/p>\n<p><img decoding=\"async\" alt=\"Statische Analyse \u2013 von der Einf\u00fchrung bis zur Integration\" src=\"\/wp-content\/uploads\/2020\/08\/a267e4e8a57c1a32e508e5e1983c5ff0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn dieser Ausgabe sehen wir, dass die Variable <i>var<\/i> nirgendwo in der Funktion verwendet wurde. Tats\u00e4chlich haben Sie also fast immer einen einfachen statischen Code-Analysator verwendet. Im Gegensatz zu professionellen Analysatoren wie Coverity, Klocwork oder PVS-Studio k\u00f6nnen jedoch die vom Compiler bereitgestellten Warnungen nur auf einen kleinen Bereich von Problemen hinweisen.<\/p>\n<p>Wenn Sie sich nicht sicher sind, was statische Analyse ist und wie man sie implementiert, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0046\/\">diesen Artikel<\/a><\/noindex>, um mehr \u00fcber diese Methodik zu erfahren. <\/p>\n<h2>Warum ist statische Analyse notwendig?<\/h2>\n<p>\nKurz gesagt: Beschleunigung und Vereinfachung. <\/p>\n<p>Statische Analyse erm\u00f6glicht es, eine Vielzahl von Problemen im Code zu finden: von falscher Verwendung der Sprachkonstrukte bis hin zu Tippfehlern. Zum Beispiel, anstelle von <\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.z;<\/code><\/pre>\n<p>\nhaben Sie den folgenden Code geschrieben:<\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.x;<\/code><\/pre>\n<p>\nWie Sie sehen, gibt es in der letzten Zeile einen Tippfehler. Zum Beispiel gibt PVS-Studio die folgende Warnung aus:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v537\/\">V537<\/a><\/noindex> \u00dcberpr\u00fcfen Sie die Korrektheit der Verwendung des 'y'-Elements.<\/p>\n<p>Wenn Sie diesen Fehler manuell \u00fcberpr\u00fcfen m\u00f6chten, versuchen Sie ein Beispiel auf Compiler Explorer: *<noindex><a rel=\"nofollow\" href=\"https:\/\/godbolt.org\/z\/cd4WK7\">Klick<\/a><\/noindex>*.<\/p>\n<p>Und wie Sie verstehen, kann man nicht immer sofort auf solche Codestellen achten und dadurch kann man beim Debuggen eine Weile festh\u00e4ngen, ohne zu verstehen, warum alles so seltsam funktioniert. <\/p>\n<p>Das ist jedoch ein offensichtlicher Fehler. Und was ist, wenn der Entwickler schlechten Code geschrieben hat, weil er eine Nuance der Sprache vergessen hat? Oder vielleicht hat er sogar im Code <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0066\/\">undefined behavior<\/a><\/noindex>? \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0431\u044b\u0434\u0435\u043d\u043d\u044b \u0438 \u043b\u044c\u0432\u0438\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u043b\u0438 undefined behavior.<\/p>\n<p>Gerade f\u00fcr solche Situationen wurde die statische Analyse entwickelt. Sie ist ein Hilfsmittel f\u00fcr Entwickler, das auf verschiedene Probleme im Code hinweist und in der Dokumentation erkl\u00e4rt, warum man so nicht schreiben sollte, welche Folgen das haben kann und wie man es beheben kann. Hier ist ein Beispiel, wie das aussehen k\u00f6nnte: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v702\/\">Klick<\/a><\/noindex>*.<\/p>\n<p>Weitere interessante Fehler, die der Analyzer aufdecken kann, finden Sie in den Artikeln:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0700\/\">Top 10 Fehler in C++ Projekten im Jahr 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Top 10 Fehler in C# Projekten im Jahr 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Top 10 Fehler in Java Projekten im Jahr 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nNachdem Sie dieses Material gelesen und den Nutzen der statischen Analyse erkannt haben, m\u00f6chten Sie sie vielleicht in der Praxis ausprobieren. Aber wo f\u00e4ngt man an? Wie integriert man ein neues Tool in ein bestehendes Projekt? Und wie stellt man das Team darauf ein? Antworten auf diese Fragen finden Sie weiter unten.<\/p>\n<p><b>Hinweis.<\/b> Statische Analyse ersetzt nicht und annulliert nicht so etwas N\u00fctzliches wie Code-Reviews. Sie erg\u00e4nzt diesen Prozess, indem sie hilft, Tippfehler, Ungenauigkeiten und gef\u00e4hrliche Konstruktionen im Voraus zu erkennen und zu beheben. Es ist viel produktiver, sich bei Code-Reviews auf Algorithmen und die Verst\u00e4ndlichkeit des Codes zu konzentrieren, anstatt nach falsch gesetzten Klammern oder <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">langweiligen Vergleichsfunktionen zu suchen.<\/a><\/noindex>.<\/p>\n<h2>0. Einf\u00fchrung in das Tool<\/h2>\n<p>\nAlles beginnt mit einer Testversion. Es ist wirklich schwierig, irgendetwas in den Entwicklungsprozess einzuf\u00fchren, wenn man das Tool noch nie live gesehen hat. Daher ist es ratsam, zuerst die <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/?promo=mscas\">Testversion herunterzuladen.<\/a><\/noindex>.<\/p>\n<p><b>Was Sie in dieser Phase erfahren werden:<\/b><\/p>\n<ul>\n<li>Welche M\u00f6glichkeiten der Interaktion mit dem Analyzer bestehen;<\/li>\n<li>Ob der Analyzer mit Ihrer Entwicklungsumgebung kompatibel ist;<\/li>\n<li>Welche Probleme derzeit in Ihren Projekten bestehen.<\/li>\n<\/ul>\n<p>\nNachdem Sie alles Notwendige installiert haben, sollten Sie als Erstes eine Analyse des gesamten Projekts durchf\u00fchren (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0635\/\">Windows<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">Linux<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">macOS<\/a><\/noindex>). Im Fall von PVS-Studio in Visual Studio sehen Sie ein \u00e4hnliches Bild (klickbar):<\/p>\n<p><img decoding=\"async\" alt=\"Statische Analyse \u2013 von der Einf\u00fchrung bis zur Integration\" src=\"\/wp-content\/uploads\/2020\/08\/865b2dfa10661e4999238cdccf8860dc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDas Problem ist, dass statische Analyzer in der Regel eine enorme Menge an Warnungen f\u00fcr Projekte mit gro\u00dfen Codebasen ausgeben. Es ist nicht notwendig, sie alle zu beheben, da Ihr Projekt bereits funktioniert und diese Probleme daher nicht kritisch sind. Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">k\u00f6nnen jedoch die interessantesten Warnungen ansehen.<\/a><\/noindex> und sie bei Bedarf zu korrigieren. Dazu muss die Ausgabe gefiltert werden, um nur die zuverl\u00e4ssigsten Meldungen zu belassen. Im PVS-Studio-Plugin f\u00fcr Visual Studio erfolgt dies durch Filterung nach Schweregraden und Fehlerkategorien. F\u00fcr die genaueste Ausgabe lassen Sie nur die eingeschaltet, die <i>Hoch<\/i> und <i>Allgemein<\/i> (auch klickbar):<\/p>\n<p><img decoding=\"async\" alt=\"Statische Analyse \u2013 von der Einf\u00fchrung bis zur Integration\" src=\"\/wp-content\/uploads\/2020\/08\/400b90713f67b531e4ed513ea9d340a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTats\u00e4chlich ist es viel einfacher, 178 Warnungen zu \u00fcberpr\u00fcfen als mehrere Tausend\u2026<\/p>\n<p>In den Tabs <i>Mittel<\/i> und <i>Niedrig<\/i> kommen oft n\u00fctzliche Warnungen vor, jedoch enthalten diese Kategorien Diagnosen, die eine geringere Genauigkeit (Zuverl\u00e4ssigkeit) aufweisen. Weitere Informationen zu den Warnstufen und den Arbeitsm\u00f6glichkeiten unter Windows finden Sie hier: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">Klick<\/a><\/noindex>*.<\/p>\n<p>Nachdem Sie die interessantesten Fehler erfolgreich \u00fcberpr\u00fcft (und behoben) haben, sollten Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0032\/\">die verbleibenden Warnungen unterdr\u00fccken<\/a><\/noindex>. Dies ist notwendig, damit neue Warnungen nicht unter den alten verloren gehen. Au\u00dferdem ist der statische Analysator ein Helfer f\u00fcr den Programmierer und keine Fehlerliste. \ud83d\ude42<\/p>\n<h2>1. Automatisierung<\/h2>\n<p>\nNach der Einf\u00fchrung folgt die Zeit der Plugin-Einstellungen und der Integration in CI. Das muss erfolgen, bevor die Programmierer den statischen Analysator zu verwenden beginnen. Der Grund ist, dass der Programmierer vergessen kann, die Analyse zu aktivieren oder sie m\u00f6glicherweise ganz ablehnt. Daher ist eine abschlie\u00dfende \u00dcberpr\u00fcfung aller Dinge notwendig, damit ungepr\u00fcfter Code nicht in den Hauptentwicklungszweig gelangt.<\/p>\n<p><b>Was Sie in diesem Schritt lernen werden:<\/b><\/p>\n<ul>\n<li>Welche Automatisierungsoptionen das Tool bietet;<\/li>\n<li>Ob der Analysator mit Ihrem Build-System kompatibel ist.<\/li>\n<\/ul>\n<p>\nDa es keine perfekte Dokumentation gibt, muss man manchmal in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">Unterst\u00fctzung<\/a><\/noindex>schreiben. Das ist normal, und wir helfen Ihnen gerne. \ud83d\ude42<\/p>\n<p>Jetzt kommen wir zu den Continuous Integration (CI)-Diensten. Jeder Analysator kann ohne gr\u00f6\u00dfere Probleme integriert werden. Dazu muss ein eigener Schritt im Pipeline erstellt werden, der normalerweise nach dem Build und den Unit-Tests erfolgt. Dies geschieht mithilfe verschiedener Konsolenutilities. Zum Beispiel stellt PVS-Studio die folgenden Tools zur Verf\u00fcgung:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\">PVS-Studio_Cmd.exe<\/a><\/noindex> (Analyse von L\u00f6sungen, C#, C++-Projekten unter Windows)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0031\/\">CLMonitor.exe<\/a><\/noindex> (\u00dcberwachung der Kompilierung)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">pvs-studio-analyzer<\/a><\/noindex> (Analyse von C++-Projekten unter Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\/\">pvs-studio-dotnet<\/a><\/noindex> (Analyse von L\u00f6sungen, C#-Projekten unter Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">pvs-studio.jar<\/a><\/noindex> (Analyse von Java-Projekten)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">PlogConverter<\/a><\/noindex> (Berichtdateikonverter)<\/li>\n<\/ul>\n<p>\nF\u00fcr die Integration der Analyse in CI sind drei Dinge zu tun:<\/p>\n<ul>\n<li>Den Analysator installieren;<\/li>\n<li>Analyse starten;<\/li>\n<li>Ergebnisse liefern.<\/li>\n<\/ul>\n<p>\nUm PVS-Studio unter Linux (Debian-basiert) zu installieren, m\u00fcssen Sie die folgenden Befehle ausf\u00fchren:<\/p>\n<pre><code class=\"bash\">wget -q -O - https:\/\/files.viva64.com\/etc\/pubkey.txt \n    | sudo apt-key add -\nsudo wget -O \/etc\/apt\/sources.list.d\/viva64.list \n  https:\/\/files.viva64.com\/etc\/viva64.list\n  \nsudo apt-get update -qq\nsudo apt-get install -qq pvs-studio<\/code><\/pre>\n<p>\nIn Windows-Systemen gibt es keine M\u00f6glichkeit, den Analysator \u00fcber den Paketmanager zu installieren, jedoch kann der Analysator \u00fcber die Befehlszeile installiert werden:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nWeitere Informationen zur Bereitstellung von PVS-Studio auf Windows-Systemen finden Sie in *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">hier<\/a><\/noindex>*.<\/p>\n<p>Nach der Installation muss die eigentliche Analyse gestartet werden. Es wird jedoch empfohlen, dies nur durchzuf\u00fchren, nachdem die Kompilierung und die Tests abgeschlossen sind. Dies liegt daran, dass die statische Analyse in der Regel doppelt so viel Zeit wie die Kompilierung ben\u00f6tigt.<\/p>\n<p>Da die Art des Starts von der Plattform und den Besonderheiten des Projekts abh\u00e4ngt, zeige ich ein Beispiel f\u00fcr C++ (Linux):<\/p>\n<pre><code class=\"bash\">pvs-studio-analyzer analyze -j8 \n                            -o PVS-Studio.log\nplog-converter -t errorfile PVS-Studio.log --cerr -w<\/code><\/pre>\n<p>\nDer erste Befehl f\u00fchrt die Analyse durch, und der zweite <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">konvertiert<\/a><\/noindex>den Bericht in ein Textformat, gibt ihn auf dem Bildschirm aus und gibt einen R\u00fcckgabewert ungleich 0 zur\u00fcck, falls Warnungen vorliegen. Ein solches Verfahren ist n\u00fctzlich, um den Build bei Fehlernachrichten zu blockieren. Sie k\u00f6nnen jedoch jederzeit das Flag entfernen <i>-w<\/i> und den Build nicht blockieren, der Warnungen enth\u00e4lt.<\/p>\n<p><b>Hinweis.<\/b> Das Textformat ist unpraktisch. Es wird nur als Beispiel angegeben. Beachten Sie das interessantere Berichtformat \u2013 FullHtml. Es erm\u00f6glicht die Navigation im Code.<\/p>\n<p>Mehr \u00fcber die Konfiguration der Analyse in CI kann man im Artikel \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0005\">PVS-Studio und Continuous Integration<\/a><\/noindex>\" (Windows) oder \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0661\/\">Wie man PVS-Studio in Travis CI einrichtet<\/a><\/noindex>\" (Linux) nachlesen.<\/p>\n<p>Gut, Sie haben den Analyzer auf dem Build-Server eingerichtet. Jetzt, wenn jemand nicht getesteten Code hochl\u00e4dt, wird die Pr\u00fcfphase fehlschlagen und Sie k\u00f6nnen das Problem erkennen. Allerdings ist das nicht ganz ideal, denn es w\u00e4re effektiver, das Projekt nicht nach dem Merge der Branches, sondern davor, in der Pull-Request-Phase zu \u00fcberpr\u00fcfen.<\/p>\n<p>Insgesamt unterscheidet sich die Konfiguration der Analyse f\u00fcr Pull-Requests nicht wesentlich von einem normalen Analyse-Run in CI, au\u00dfer dass Sie die Liste der ge\u00e4nderten Dateien erhalten m\u00fcssen. Diese kann man normalerweise erhalten, indem man mit git den Unterschied zwischen den Branches anfordert:<\/p>\n<pre><code class=\"bash\">git diff --name-only HEAD origin\/$MERGE_BASE &gt; .pvs-pr.list<\/code><\/pre>\n<p>\nJetzt muss diese Liste von Dateien dem Analyzer \u00fcbergeben werden. Zum Beispiel wird dies in PVS-Studio mit der Option <i>-S<\/i>:<\/p>\n<pre><code class=\"bash\">pvs-studio-analyzer analyze -j8 \n                            -o PVS-Studio.log \n                            -S .pvs-pr.list<\/code><\/pre>\n<p>\nMehr \u00fcber die Analyse von Pull-Requests kann man *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0679\/\">hier<\/a><\/noindex>*. erfahren. Selbst wenn Ihr CI nicht in der Liste der in dem Artikel genannten Dienste enthalten ist, wird Ihnen der allgemeine Abschnitt, der sich mit der Theorie dieser Art der Analyse befasst, n\u00fctzlich sein.<\/p>\n<p>Mit der Konfiguration der Analyse von Pull-Requests k\u00f6nnen Sie Commits, die Warnungen enthalten, blockieren und damit eine Grenze schaffen, die nicht getesteter Code nicht \u00fcberschreiten kann.<\/p>\n<p>Das ist alles zweifellos gut, aber es w\u00e4re w\u00fcnschenswert, alle Warnungen an einem Ort sehen zu k\u00f6nnen. Nicht nur von dem statischen Analyzer, sondern auch von Unit-Tests oder vom dynamischen Analyzer. F\u00fcr dies gibt es verschiedene Dienste und Plugins. PVS-Studio hat zum Beispiel ein <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0037\/\">Plugin zur Integration in SonarQube<\/a><\/noindex>.<\/p>\n<h2>2. Integration auf den Maschinen der Entwickler<\/h2>\n<p>\nJetzt ist es Zeit, den Analyzer f\u00fcr den t\u00e4glichen Gebrauch bei der Entwicklung zu installieren und zu konfigurieren. Zu diesem Zeitpunkt haben Sie bereits die meisten Arbeitsmethoden kennengelernt, daher kann dieser Teil als der einfachste bezeichnet werden.<\/p>\n<p>Als einfachste Variante k\u00f6nnen die Entwickler den notwendigen Analyzer selbst installieren. Dies wird jedoch viel Zeit in Anspruch nehmen und sie von der Entwicklung ablenken, weshalb Sie diesen Prozess automatisieren k\u00f6nnen, indem Sie den Installer und die ben\u00f6tigten Flags verwenden. F\u00fcr PVS-Studio gibt es verschiedene <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">Flags f\u00fcr die automatisierte Installation<\/a><\/noindex>. Es gibt jedoch immer Paketmanager wie Chocolatey (Windows), Homebrew (macOS) oder Dutzende von Optionen f\u00fcr Linux.<\/p>\n<p>Dann m\u00fcssen die notwendigen Plugins installiert werden, zum Beispiel f\u00fcr <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0635\/\">Visual Studio<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/plugins.jetbrains.com\/plugin\/12263-pvs-studio-for-idea-and-android-studio\/\">IDEA<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0052\/\">Rider<\/a><\/noindex> usw.<\/p>\n<h2>3. T\u00e4glicher Gebrauch<\/h2>\n<p>\nAn diesem Punkt ist es an der Zeit, ein paar Worte \u00fcber M\u00f6glichkeiten zur Beschleunigung der Arbeit des Analyzers beim t\u00e4glichen Gebrauch zu verlieren. Eine vollst\u00e4ndige Analyse des gesamten Projekts dauert sehr lange, aber wie oft \u00e4ndern wir den Code auf einmal in dem gesamten Projekt? Es gibt kaum einen so umfassenden Refactoring-Vorgang, der den gesamten Code betreffen w\u00fcrde. Die Anzahl der gleichzeitig ge\u00e4nderten Dateien \u00fcbersteigt selten ein Dutzend, weshalb es sinnvoll ist, diese zu analysieren. F\u00fcr eine solche Situation gibt es den <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">Inkremental-Analysemodus<\/a><\/noindex>. Bitte keine Angst, das ist kein weiteres Tool. Dies ist ein spezieller Modus, der es erm\u00f6glicht, nur ge\u00e4nderte Dateien und deren Abh\u00e4ngigkeiten automatisch nach dem Bau zu analysieren, wenn Sie in einer IDE mit installiertem Plugin arbeiten. <\/p>\n<p>Falls der Analysator Probleme im k\u00fcrzlich ge\u00e4nderten Code findet, wird er Sie dar\u00fcber informieren. Zum Beispiel wird PVS-Studio Ihnen dar\u00fcber mit einer Benachrichtigung Bescheid geben:<\/p>\n<p><img decoding=\"async\" alt=\"Statische Analyse \u2013 von der Einf\u00fchrung bis zur Integration\" src=\"\/wp-content\/uploads\/2020\/08\/20456a6652f0bd4f62d9aea5f1dda5cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEs reicht jedoch nicht aus, den Entwicklern zu sagen, sie sollen das Tool verwenden. Man muss ihnen irgendwie erkl\u00e4ren, was das \u00fcberhaupt ist und wie es funktioniert. Hier sind beispielsweise Artikel f\u00fcr den schnellen Einstieg in PVS-Studio, \u00e4hnliche Tutorials finden Sie jedoch f\u00fcr jedes bevorzugte Tool:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/\">Wie man PVS-Studio unter Windows (C, C++, C#) ausf\u00fchrt<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">Wie man PVS-Studio unter Linux und macOS (C, C++) ausf\u00fchrt<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">Wie man PVS-Studio f\u00fcr Java ausf\u00fchrt<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nSolche Artikel bieten alle notwendigen Informationen f\u00fcr den t\u00e4glichen Gebrauch und nehmen nicht viel Zeit in Anspruch. \ud83d\ude42<\/p>\n<p>Schon beim Kennenlernen des Tools haben wir eine Menge Warnungen w\u00e4hrend eines der ersten Starts unterdr\u00fcckt. Leider sind statische Analysatoren nicht perfekt, weshalb sie gelegentlich falsche Alarme ausl\u00f6sen. Diese zu unterdr\u00fccken ist in der Regel einfach, im PVS-Studio Plugin f\u00fcr Visual Studio gen\u00fcgt ein Klick auf einen Button:<\/p>\n<p><img decoding=\"async\" alt=\"Statische Analyse \u2013 von der Einf\u00fchrung bis zur Integration\" src=\"\/wp-content\/uploads\/2020\/08\/ed5382f468d21b7e711caba73b439fda.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSie k\u00f6nnen sie jedoch nicht nur unterdr\u00fccken. Beispielsweise k\u00f6nnen Sie den Support \u00fcber das Vorhandensein eines Problems informieren. Wenn ein falscher Alarm behoben werden kann, k\u00f6nnen Sie in zuk\u00fcnftigen Updates feststellen, dass die Anzahl der spezifischen Fehlalarme f\u00fcr Ihre Codebasis immer weiter abnimmt.<\/p>\n<h2>Nach der Integration<\/h2>\n<p>\nJetzt haben wir alle Phasen zur Integration der statischen Analyse in den Entwicklungsprozess durchlaufen. Trotz der Bedeutung der Konfiguration solcher Tools im CI ist der wichtigste Ort des Starts der Computer des Entwicklers. Denn der statische Analysator ist kein Richter, der irgendwo weit von Ihnen entfernt sagt, dass der Code nicht taugt. Vielmehr ist er ein Helfer, der Sie unterst\u00fctzt, wenn Sie m\u00fcde sind, und Sie daran erinnert, wenn Sie etwas vergessen haben.<\/p>\n<p>Die Wahrheit ist, dass die regelm\u00e4\u00dfige Nutzung von statischer Analyse die Entwicklung wahrscheinlich nicht signifikant erleichtert. Denn der gr\u00f6\u00dfte Nutzen f\u00fcr den Entwickler liegt weniger im Auffinden komplexer und umstrittener Codestellen, sondern vielmehr in ihrer fr\u00fchzeitigen Entdeckung. Sie werden zustimmen, dass es unangenehm und zeitaufw\u00e4ndig ist, ein Problem zu erkennen, wenn die \u00c4nderungen bereits in der Testphase sind. Die statische Analyse hingegen \u00fcberpr\u00fcft bei regelm\u00e4\u00dfiger Nutzung jede \u00c4nderung direkt auf Ihrem Computer und meldet verd\u00e4chtige Stellen w\u00e4hrend der Arbeit am Code.<\/p>\n<p>Und wenn Sie oder Ihre Kollegen sich immer noch nicht sicher sind, ob es sinnvoll ist, den Analyzer zu implementieren, empfehle ich jetzt, den Artikel \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0687\/\">Gr\u00fcnde f\u00fcr die Einf\u00fchrung eines statischen Code-Analysewerkzeugs PVS-Studio in den Entwicklungsprozess<\/a><\/noindex>\" zu lesen. Darin werden typische Bedenken von Entwicklern er\u00f6rtert, dass die statische Analyse ihnen Zeit kosten k\u00f6nnte und so weiter.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\"><img decoding=\"async\" alt=\"Statische Analyse \u2013 von der Einf\u00fchrung bis zur Integration\" src=\"\/wp-content\/uploads\/2020\/08\/6372d668354f708cb0e08df27bb39bdd.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Wenn Sie diesen Artikel mit einem englischsprachigen Publikum teilen m\u00f6chten, verwenden Sie bitte den Link zur \u00dcbersetzung: Maxim Zvyagintsev. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\">Statische Analyse: Von den ersten Schritten bis zur Integration<\/a><\/noindex>.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/514124\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438 \u043a\u0430\u043a \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0432\u0430\u0448\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u043b\u0438\u0431\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u043e\u0433\u0434\u0430, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044f\u0441\u044c \u043e\u0431 \u044d\u0442\u043e\u043c, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u2013 \u043e\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0434\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-07T23:42:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-07T23:42:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Statische Analyse \u2013 von den Grundlagen bis zur Integration | ProHoster","description":"M\u00fcde von endlosen Code-Reviews oder Debugging denkt man manchmal dar\u00fcber nach, wie man sich das Leben erleichtern kann. Und nach ein wenig Suche, oder vielleicht zuf\u00e4llig, sieht man die magische Wortkombination: \"Statische Analyse\".","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u2013 \u043e\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0434\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 | ProHoster","og:description":"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-07T23:42:18+00:00","article:modified_time":"2020-08-07T23:42:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91065","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:35:24","updated":"2022-10-01 20:50:02","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=91065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/91066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=91065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=91065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=91065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}