{"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>Ein Ende des endlosen Code-Reviews oder Debuggens w\u00fcnscht man sich manchmal, und w\u00e4hrend man dar\u00fcber nachdenkt, wie man sich das Leben erleichtern kann, st\u00f6\u00dft man vielleicht auf den magischen Ausdruck: \"statische Analyse\". Schauen wir uns an, 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 \/>\nWenn Sie also in einer modernen Programmiersprache schreiben, dann haben Sie, ohne es zu wissen, Ihren Code durch einen statischen Analyzer laufen lassen. Jeder moderne Compiler liefert zwar nur eine kleine Menge an Warnungen \u00fcber potenzielle Probleme im Code. Zum Beispiel, wenn Sie C++-Code in Visual Studio kompilieren, k\u00f6nnten Sie Folgendes sehen:<\/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-Analyzer genutzt. Allerdings k\u00f6nnen die vom Compiler gelieferten Warnungen nur auf einen kleinen Bereich von Problemen hinweisen, im Gegensatz zu professionellen Analyzern wie Coverity, Klocwork oder PVS-Studio.<\/p>\n<p>Wenn Sie nicht genau wissen, 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 detaillierter mit dieser Methodik vertraut zu werden. <\/p>\n<h2>Warum ist statische Analyse notwendig?<\/h2>\n<p>\nKurz gesagt: Beschleunigung und Vereinfachung. <\/p>\n<p>Statische Analyse hilft dabei, eine Vielzahl von Problemen im Code zu finden: von falscher Nutzung 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, gab es in der letzten Zeile einen Tippfehler. Zum Beispiel gibt PVS-Studio 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 Richtigkeit der Verwendung des Items &#039;y&#039;.<\/p>\n<p>Wenn Sie m\u00f6chten, k\u00f6nnen Sie dieses Fehlerbeispiel selbst ausprobieren: *<noindex><a rel=\"nofollow\" href=\"https:\/\/godbolt.org\/z\/cd4WK7\">klicken<\/a><\/noindex>*.<\/p>\n<p>Und wie Sie verstehen, kann man nicht immer sofort auf solche Codeabschnitte achten, weshalb man beim Debuggen leicht einige Stunden in Anspruch nehmen kann, ohne zu verstehen, warum alles so seltsam funktioniert. <\/p>\n<p>Das ist jedoch ein klarer Fehler. Was ist, wenn der Entwickler aufgrund einer vergessenen Nuance der Sprache suboptimalen Code geschrieben hat? Oder wenn 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>verursacht hat? Genau f\u00fcr solche Situationen wurde die statische Analyse entwickelt. Sie ist ein Helfer f\u00fcr den Entwickler, der auf verschiedene Probleme im Code hinweist und in der Dokumentation erkl\u00e4rt, warum es nicht so geschrieben werden sollte, welche Folgen das haben kann und wie man es beheben kann. So k\u00f6nnte das aussehen: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v702\/\">klicken<\/a><\/noindex>*.<\/p>\n<p>Weitere interessante Fehler, die der Analyzer finden 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 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Top 10 Fehler in C#-Projekten 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Top 10 Fehler in Java-Projekten 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nJetzt, wo Sie dieses Material gelesen haben und von den Vorteilen der statischen Analyse \u00fcberzeugt sind, m\u00f6chten Sie vielleicht herausfinden, wie man sie in der Praxis anwendet. Aber wo f\u00e4ngt man an? Wie integriert man ein neues Tool in ein bestehendes Projekt? Und wie macht man das Team damit vertraut? Auf diese Fragen finden Sie weiter unten Antworten.<\/p>\n<p><b>Hinweis.<\/b> Statische Analyse ersetzt und annulliert nicht den so n\u00fctzlichen Prozess der Code-Reviews. Sie erg\u00e4nzt diesen Prozess, indem sie hilft, Tippfehler, Ungenauigkeiten und gef\u00e4hrliche Konstrukte im Voraus zu erkennen und zu korrigieren. Es ist wesentlich produktiver, sich in Code-Reviews auf Algorithmen und die Verst\u00e4ndlichkeit des Codes zu konzentrieren, anstatt nach einer falsch gesetzten Klammer 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, sich zu entscheiden, etwas in den Entwicklungsprozess zu integrieren, wenn man das Tool noch nie live gesehen hat. Deshalb sollten Sie als Erstes <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/?promo=mscas\">Testversion<\/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 momentan in Ihren Projekten bestehen.<\/li>\n<\/ul>\n<p>\nNachdem Sie alles Notwendige installiert haben, sollten Sie gleich zu Beginn eine Analyse des gesamten Projekts starten (<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>). Bei 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 bei Projekten mit einer gro\u00dfen Codebasis in der Regel eine enorme Anzahl von Warnungen ausgeben. Es ist nicht notwendig, sie alle zu beheben, da Ihr Projekt bereits funktioniert, was bedeutet, dass diese Probleme nicht kritisch sind. Sie k\u00f6nnen jedoch die interessantesten Warnungen betrachten <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">und sie bei Bedarf beheben. Dazu m\u00fcssen Sie die Ausgabe filtern und nur die zuverl\u00e4ssigsten Meldungen belassen. Im PVS-Studio-Plugin f\u00fcr Visual Studio geschieht dies durch Filterung nach Fehlerlevels und -kategorien. F\u00fcr die genauesten Ergebnisse lassen Sie nur die<\/a><\/noindex> ein, die ebenfalls klickbar sind: <i>Hoch<\/i> und <i>Allgemein<\/i> Tats\u00e4chlich ist es viel einfacher, 178 Warnungen zu pr\u00fcfen, als mehrere Tausend\u2026<\/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 \/>\nIn den Tabs<\/p>\n<p>In den Reitern <i>Medium<\/i> und <i>Niedrig<\/i> Es gibt oft gute Warnungen, aber in diese Kategorien fallen Diagnosen, die eine geringere Genauigkeit (Zuverl\u00e4ssigkeit) aufweisen. Mehr \u00fcber die Warnstufen und die Arbeitsm\u00f6glichkeiten unter Windows erfahren Sie hier: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">klicken<\/a><\/noindex>*.<\/p>\n<p>Nachdem Sie die interessantesten Fehler erfolgreich angesehen (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. Zudem soll der statischeAnalyzer ein Hilfsmittel f\u00fcr den Programmierer sein und keine Fehlerliste. \ud83d\ude42<\/p>\n<h2>1. Automatisierung<\/h2>\n<p>\nNach dem Kennenlernen folgt die Zeit f\u00fcr die Konfiguration von Plugins und die Integration in CI. Dies muss erfolgen, bevor die Programmierer mit dem statischen Analyzer arbeiten. Der Grund ist, dass ein Programmierer das Analysieren vergessen oder ganz darauf verzichten k\u00f6nnte. Dazu ist eine abschlie\u00dfende \u00dcberpr\u00fcfung erforderlich, um sicherzustellen, dass unverifiziertes Code nicht in den Hauptentwicklungszweig gelangt.<\/p>\n<p><b>Was Sie in dieser Phase lernen werden:<\/b><\/p>\n<ul>\n<li>Welche Automatisierungsoptionen das Werkzeug bietet;<\/li>\n<li>Ob der Analyzer mit Ihrem Build-System kompatibel ist.<\/li>\n<\/ul>\n<p>\nDa es keine ideale Dokumentation gibt, muss man manchmal nachfragen in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">Support<\/a><\/noindex>. Das ist in Ordnung, und wir sind froh, Ihnen helfen zu k\u00f6nnen. \ud83d\ude42<\/p>\n<p>Nun kommen wir zu den Continuous Integration (CI) Services. Jeder Analyzer kann problemlos integriert werden. Dazu muss eine separate Stufe im Pipeline erstellt werden, die in der Regel nach dem Build und den Unit-Tests liegt. Dies geschieht mit verschiedenen Konsolenwerkzeugen. Zum Beispiel bietet PVS-Studio folgende Werkzeuge an:<\/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 auf Windows)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0031\/\">CLMonitor.exe<\/a><\/noindex> (\u00dcberwachung des Builds)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">pvs-studio-analyzer<\/a><\/noindex> (Analyse von C++ Projekten auf 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 auf 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> (Bericht-Datei Konverter)<\/li>\n<\/ul>\n<p>\nF\u00fcr die Integration der Analyse in CI m\u00fcssen drei Dinge getan werden:<\/p>\n<ul>\n<li>Den Analyzer installieren;<\/li>\n<li>Die Analyse starten;<\/li>\n<li>Die Ergebnisse bereitstellen.<\/li>\n<\/ul>\n<p>\nZum Beispiel m\u00fcssen die folgenden Befehle ausgef\u00fchrt werden, um PVS-Studio auf Linux (Debian-basiert) zu installieren:<\/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-basierten Systemen gibt es keine M\u00f6glichkeit, den Analyzer \u00fcber einen Paketmanager zu installieren, aber es ist m\u00f6glich, den Analyzer \u00fcber die Befehlszeile zu entpacken:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nMehr \u00fcber die Bereitstellung von PVS-Studio in Windows-basierten Systemen k\u00f6nnen Sie hier lesen *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">hier<\/a><\/noindex>*.<\/p>\n<p>Nach der Installation muss die Analyse selbst gestartet werden. Es wird jedoch empfohlen, dies erst nach der Kompilierung und den Tests zu tun. Dies liegt daran, dass der 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 eine Variante f\u00fcr C++ (Linux) als Beispiel:<\/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 liefert einen R\u00fcckgabewert ungleich 0 zur\u00fcck, falls Warnungen vorhanden sind. Ein solches Verfahren ist praktisch, um das Build bei Fehlernachrichten zu blockieren. Sie k\u00f6nnen jedoch immer das Flag <i>-w<\/i> entfernen und das Build nicht blockieren, wenn es Warnungen enth\u00e4lt.<\/p>\n<p><b>Hinweis.<\/b> Das Textformat ist unpraktisch. Es wird nur als Beispiel genannt. Beachten Sie das interessantere Berichtformat \u2013 FullHtml. Es erm\u00f6glicht die Navigation im Code.<\/p>\n<p>Mehr \u00fcber die Einrichtung der Analyse im CI k\u00f6nnen Sie in dem 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 PVS-Studio in Travis CI zu konfigurieren<\/a><\/noindex>\" (Linux).<\/p>\n<p>Gut, Sie haben die Arbeit des Analysators auf dem Build-Server eingerichtet. Jetzt, wenn jemand ungetesteten Code hochl\u00e4dt, wird der Pr\u00fcfungsprozess fehlschlagen, und Sie k\u00f6nnen das Problem erkennen. Das ist jedoch nicht besonders praktisch, da es effektiver ist, das Projekt nicht nach dem Zusammenf\u00fchren von Branches, sondern davor, in der Pull-Request-Phase zu \u00fcberpr\u00fcfen.<\/p>\n<p>Insgesamt unterscheidet sich die Einrichtung der Analyse f\u00fcr Pull-Requests nicht wesentlich von der regul\u00e4ren Ausf\u00fchrung der Analyse im CI. Au\u00dfer der Notwendigkeit, die Liste der ge\u00e4nderten Dateien zu erhalten. Normalerweise kann man sie erhalten, indem man den Unterschied zwischen den Branches mit git abfragt:<\/p>\n<pre><code class=\"bash\">git diff --name-only HEAD origin\/$MERGE_BASE &gt; .pvs-pr.list<\/code><\/pre>\n<p>\nJetzt m\u00fcssen Sie dieser Liste von Dateien als Eingabe an den Analyzer \u00fcbergeben. Zum Beispiel wird dies in PVS-Studio mit dem Flag realisiert <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 erfahren Sie *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0679\/\">hier<\/a><\/noindex>*. Selbst wenn Ihr CI nicht in der Liste der genannten Dienste ist, wird Ihnen der allgemeine Abschnitt, der sich mit der Theorie dieser Art von Analyse besch\u00e4ftigt, n\u00fctzlich sein.<\/p>\n<p>Wenn Sie die Analyse von Pull-Requests eingerichtet haben, k\u00f6nnen Sie Commits, die Warnungen enthalten, blockieren und somit eine Grenze schaffen, die ungetesteter Code nicht \u00fcberschreiten kann.<\/p>\n<p>Das ist alles zweifellos gut, jedoch w\u00fcrde ich mir w\u00fcnschen, alle Warnungen an einem Ort sehen zu k\u00f6nnen. Nicht nur von dem statischen Analyzer, sondern auch von Unit-Tests oder dem dynamischen Analyzer. Daf\u00fcr gibt es verschiedene Dienste und Plugins. PVS-Studio hat beispielsweise <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0037\/\">ein Plugin zur Integration in SonarQube<\/a><\/noindex>.<\/p>\n<h2>2. Integration auf den Maschinen der Entwickler<\/h2>\n<p>\nJetzt ist es an der Zeit, den Analyzer f\u00fcr den regelm\u00e4\u00dfigen Einsatz bei der Entwicklung zu installieren und einzurichten. Zu diesem Zeitpunkt haben Sie bereits die meisten Arbeitsmethoden kennengelernt, sodass man dies als den einfachsten Teil bezeichnen kann.<\/p>\n<p>Als einfachste Variante k\u00f6nnen die Entwickler selbst den ben\u00f6tigten Analyzer installieren. Das kann jedoch viel Zeit in Anspruch nehmen und sie von der Entwicklung ablenken, weshalb Sie diesen Prozess automatisieren k\u00f6nnen, indem Sie einen Installer und die erforderlichen 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 zum Beispiel Chocolatey (Windows), Homebrew (macOS) oder dutzende Alternativen f\u00fcr Linux.<\/p>\n<p>Anschlie\u00dfend m\u00fcssen die erforderlichen Plugins installiert werden, beispielsweise 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> etc.<\/p>\n<h2>3. T\u00e4gliche Nutzung<\/h2>\n<p>\nAn diesem Punkt ist es an der Zeit, ein paar Worte \u00fcber M\u00f6glichkeiten zur Beschleunigung der Analysearbeit bei der t\u00e4glichen Nutzung zu sagen. Eine vollst\u00e4ndige Analyse des gesamten Projekts dauert sehr lange, allerdings \u00e4ndern wir nicht oft den Code im gesamten Projekt auf einmal. Es gibt kaum einen so umfassenden Refactoring-Prozess, der sofort die gesamte Code-Basis betrifft. Die Anzahl der gleichzeitig ge\u00e4nderten Dateien \u00fcbersteigt selten ein Dutzend, daher macht es Sinn, diese zu analysieren. F\u00fcr solche Situationen gibt es den <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">inkrementellen Analysemodus.<\/a><\/noindex>Keine Panik, das ist kein weiteres Tool. Dies ist ein spezieller Modus, der es erm\u00f6glicht, nur die ge\u00e4nderten Dateien und ihre Abh\u00e4ngigkeiten zu analysieren, und dies geschieht automatisch nach dem Build, wenn Sie in einer IDE mit dem installierten Plugin arbeiten. <\/p>\n<p>Wenn der Analyzer Probleme im k\u00fcrzlich ge\u00e4nderten Code feststellt, wird er dies selbstst\u00e4ndig melden. Beispielsweise wird PVS-Studio Sie mit einer Benachrichtigung dar\u00fcber informieren:<\/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 \/>\nNat\u00fcrlich ist es nicht genug, den Entwicklern zu sagen, sie sollen das Tool verwenden. Man muss ihnen erkl\u00e4ren, was es ist und wie es funktioniert. Hier sind beispielsweise Artikel f\u00fcr einen schnellen Einstieg in PVS-Studio, aber \u00e4hnliche Tutorials finden Sie 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#) startet<\/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++) startet<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">Wie man PVS-Studio f\u00fcr Java startet<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nSolche Artikel bieten alle notwendigen Informationen f\u00fcr die allt\u00e4gliche Nutzung und nehmen nicht viel Zeit in Anspruch. \ud83d\ude42<\/p>\n<p>Schon in der Anfangsphase, als wir das Tool kennenlernten, haben wir viele Warnungen w\u00e4hrend eines der ersten Starts unterdr\u00fcckt. Leider sind statische Analyzer nicht perfekt und geben hin und wieder Fehlalarme aus. Diese zu unterdr\u00fccken, ist in der Regel einfach, zum Beispiel muss man im PVS-Studio-Plugin f\u00fcr Visual Studio nur einen Knopf dr\u00fccken:<\/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 jedoch nicht nur die Warnungen unterdr\u00fccken. Beispielsweise k\u00f6nnen Sie den Support \u00fcber ein bestehendes Problem informieren. Wenn der Fehlalarm behoben werden kann, k\u00f6nnen Sie in zuk\u00fcnftigen Updates darauf achten, dass mit jeder neuen Version die f\u00fcr Ihre Code-Basis spezifischen Fehlalarme immer weniger werden.<\/p>\n<h2>Nach der Integration<\/h2>\n<p>\nSo, wir haben alle Schritte durchlaufen, um die statische Analyse in den Entwicklungsprozess zu integrieren. Trotz der Wichtigkeit solcher Werkzeuge in CI ist der wichtigste Ort f\u00fcr den Einsatz der Computer des Entwicklers. Denn der statische Analyzer ist kein Richter, der irgendwo weit entfernt erkl\u00e4rt, dass der Code nicht funktioniert. Vielmehr ist er ein Helfer, der Sie unterst\u00fctzt, wenn Sie m\u00fcde sind, und erinnert, wenn Sie etwas vergessen haben.<\/p>\n<p>Wahrlich, ohne regelm\u00e4\u00dfige Nutzung wird die statische Analyse kaum die Entwicklung erheblich erleichtern. Denn ihr gr\u00f6\u00dfter Nutzen f\u00fcr den Entwickler liegt nicht so sehr darin, schwierige und strittige Stellen im Code zu finden, sondern sie fr\u00fchzeitig zu erkennen. Sie stimmen zu, dass es unangenehm und langwierig ist, ein Problem zu entdecken, wenn die \u00c4nderungen bereits zur Testung geschickt wurden. Bei regelm\u00e4\u00dfiger Nutzung hingegen \u00fcberpr\u00fcft die statische Analyse jede Ver\u00e4nderung direkt auf Ihrem Computer und meldet verd\u00e4chtige Stellen w\u00e4hrend der Arbeit am Code.<\/p>\n<p>Und falls Sie oder Ihre Kollegen sich immer noch nicht sicher sind, ob Sie den Analysator einf\u00fchren sollten, 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-Analysetools wie PVS-Studio in den Entwicklungsprozess<\/a><\/noindex>\" zu lesen. Darin werden typische Bedenken von Entwicklern behandelt, dass die statische Analyse ihre Zeit kosten w\u00fcrde 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: Vom Einstieg 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.0.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.0.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 vom Einstieg bis zur Integration | ProHoster","description":"Die Sehnsucht nach endlosem Code-Review oder Debugging treibt einen manchmal dazu, dar\u00fcber nachzudenken, wie man sich das Leben einfacher machen k\u00f6nnte. Und nach ein wenig Suche, oder vielleicht einfach zuf\u00e4llig, st\u00f6\u00dft man auf die magische Phrase: \"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}]}}