{"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\/et\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","title":{"rendered":"Statiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>V\u00e4simus l\u00f5putust koodikontrollist v\u00f5i silumisest paneb teid m\u00f5tlema, kuidas elu endale lihtsamaks teha. Ja natuke otsides, v\u00f5i juhuslikult kokku puutudes, v\u00f5ite leida maagilise fraasi: &quot;staatiline anal\u00fc\u00fcs&quot;. Vaatame, mis see on ja kuidas see teie projektiga suhestub.<\/p>\n<p><img decoding=\"async\" alt=\"Statiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni\" src=\"\/wp-content\/uploads\/2020\/08\/7811b22510bdda6f3f774b8335cbeabe.png\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKui olete m\u00f5nes kaasaegses keeles koodi kirjutanud, siis isegi teadmata olete seda juba l\u00e4bi staatchanal\u00fcsaatori jooksutanud. T\u00f5siasi on see, et iga kaasaegne kompilaator annab v\u00e4ikese, kuid siiski hoiatuste kogumi v\u00f5imalike probleemide kohta koodis. N\u00e4iteks Visual Studios C++ koodi kompileerides v\u00f5ite n\u00e4ha j\u00e4rgmist:<\/p>\n<p><img decoding=\"async\" alt=\"Statiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni\" src=\"\/wp-content\/uploads\/2020\/08\/a267e4e8a57c1a32e508e5e1983c5ff0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSelles v\u00e4ljundis n\u00e4eme, et muutuja <i>var<\/i> ei olnud \u00fcldse funktsioonis kasutatud. Seega olete tegelikult peaaegu alati kasutanud lihtsat staatchanal\u00fcsaatorit. Erinevalt professionaalsetest anal\u00fcsaatoritest nagu Coverity, Klocwork v\u00f5i PVS-Studio, v\u00f5ivad kompilaatori hoiatused osutada ainult v\u00e4ikesele probleemide spektrile.<\/p>\n<p>Kui te ei tea kindlalt, mis on staatchanal\u00fc\u00fcs ja kuidas seda rakendada, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0046\/\">seda artiklit<\/a><\/noindex>, et soovite p\u00f5hjalikumalt tutvuda selle metoodikaga. <\/p>\n<h2>Miks on vajalik staatiline anal\u00fc\u00fcs?<\/h2>\n<p>\nL\u00fchidalt: kiirus ja lihtsus. <\/p>\n<p>Staatiline anal\u00fc\u00fcs v\u00f5imaldab leida mitmesuguseid probleemide koodis: alates keele konstruktsioonide vale kasutamisest kuni tr\u00fckivigadeni. N\u00e4iteks, mitte <\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.z;<\/code><\/pre>\n<p>\nTe kirjutasite j\u00e4rgmise koodi:<\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.x;<\/code><\/pre>\n<p>\nNagu n\u00e4ete, on viimasel real tr\u00fckiviga. N\u00e4iteks, PVS-Studio annab j\u00e4rgmise hoiatuse:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v537\/\">V537<\/a><\/noindex> Kaalutlege 'y' elemendi kasutuse \u00f5iguse \u00fclevaatamist.<\/p>\n<p>Kui soovite seda viga ise uurida, proovige valmis n\u00e4idet Compiler Exploreris: *<noindex><a rel=\"nofollow\" href=\"https:\/\/godbolt.org\/z\/cd4WK7\">klik<\/a><\/noindex>*.<\/p>\n<p>Ja nagu te aru saite, ei pruugi olla alati v\u00f5imalik kohe sellistele koodil\u00f5ikudele t\u00e4helepanu p\u00f6\u00f6rata, mis v\u00f5ib muuta veaotsingu v\u00e4ga ajamahukaks, tehes endale liiga, et miks k\u00f5ik t\u00f6\u00f6tab nii kummaliselt. <\/p>\n<p>Kuid see on ilmne viga. Ja kui arendaja kirjutas mitteoptimaalse koodi, kuna unustas m\u00f5ne keele n\u00fcansi? V\u00f5i lasi hoopis koodi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0066\/\">m\u00e4\u00e4ratlemata k\u00e4itumine<\/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>Just for such situations, static analysis came into existence. It is a developer's assistant that points out various issues in the code and explains in the documentation why certain practices should be avoided, what consequences they might lead to, and how to fix them. Here\u2019s an example of how it may look: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v702\/\">klik<\/a><\/noindex>*.<\/p>\n<p>You can find more interesting errors that the analyzer can detect in the articles:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0700\/\">Top 10 errors in C++ projects of 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Top 10 errors in C# projects of 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Top 10 errors in Java projects of 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nNow, having read this material and realized the benefits of static analysis, you might want to try it out. But where to start? How to integrate a new tool into the current project? And how to introduce it to the team? You will find answers to these questions below.<\/p>\n<p><b>M\u00e4rkus.<\/b> Static analysis does not replace or cancel such a useful practice as code reviews. It complements this process by helping to notice and correct typos, inaccuracies, and dangerous constructs in advance. It\u2019s much more productive to focus on algorithms and code clarity during code reviews, rather than searching for misplaced brackets or <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">reading boring comparison functions<\/a><\/noindex>.<\/p>\n<h2>0. Tutvumine t\u00f6\u00f6riistaga<\/h2>\n<p>\nK\u00f5ik algab prooviversioonist. T\u00f5epoolest, on raske otsustada, kas midagi arendusse inteerida, kui pole kunagi n\u00e4inud t\u00f6\u00f6riista reaalses elus. Seet\u00f5ttu tasub k\u00f5igepealt alla laadida <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/?promo=mscas\">katseaega<\/a><\/noindex>.<\/p>\n<p><b>Mida te selle etapi jooksul saate:<\/b><\/p>\n<ul>\n<li>Millised on suhtlemisviisid anal\u00fcsaatoriga;<\/li>\n<li>Kas anal\u00fcsaator on koosk\u00f5las teie arenduskeskkonnaga;<\/li>\n<li>Millised probleemid on praegu teie projektides.<\/li>\n<\/ul>\n<p>\nP\u00e4rast vajalike komponentide installimist tasub esimesena k\u00e4ivitada kogu projekti anal\u00fc\u00fcs (<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>). PVS-Studio puhul Visual Studios n\u00e4ete sarnast pilti (klikkimiseks):<\/p>\n<p><img decoding=\"async\" alt=\"Statiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni\" src=\"\/wp-content\/uploads\/2020\/08\/865b2dfa10661e4999238cdccf8860dc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAsja on selles, et tavaliselt annavad suured koodibaasid staatilised anal\u00fcsaatorid tohutult palju hoiatusteateid. Pole vajalik neid k\u00f5iki parandada, kuna teie projekt t\u00f6\u00f6tab juba, mist\u00f5ttu need probleemid ei ole kriitilised. Kuid te <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">v\u00f5ite vaadata k\u00f5ige huvitavamaid hoiatusteateid<\/a><\/noindex> ja vajadusel parandada. Selleks tuleb v\u00e4ljund filtreerida ja j\u00e4tta alles ainult k\u00f5ige usaldusv\u00e4\u00e4rsemad teated. PVS-Studio plugin Visual Studio jaoks v\u00f5imaldab filtreerida veateateid tasemete ja kategooriate j\u00e4rgi. T\u00e4psema v\u00e4ljundi saamiseks hoidke sisse l\u00fclitatuna ainult <i>K\u00f5rge<\/i> ja <i>General<\/i> (ka klikkitav):<\/p>\n<p><img decoding=\"async\" alt=\"Statiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni\" src=\"\/wp-content\/uploads\/2020\/08\/400b90713f67b531e4ed513ea9d340a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nT\u00f5epoolest, 178 hoiatust on kergem l\u00e4bida kui paar tuhat\u2026<\/p>\n<p>Vahekaartidel <i>Medium<\/i> ja <i>Madal<\/i> esineb sageli h\u00e4id hoiat ab, kuid need kategooriad sisaldavad diagnostikat, mille t\u00e4psus (usaldusv\u00e4\u00e4rsus) on madalam. T\u00e4iendav teave hoiatuste tasemete ja Windowsi all t\u00f6\u00f6tamise variantide kohta on saadaval siin: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">klik<\/a><\/noindex>*.<\/p>\n<p>Kui olete edukalt \u00fcle vaadanud k\u00f5ige huvitavamad vead (ja need edukalt parandanud), tuleks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0032\/\">k\u00fcsida \u00fclej\u00e4\u00e4nud hoiatused<\/a><\/noindex>. See on vajalik, et uued hoiat ab ei kaoks vanade hulka. Lisaks on staatiline anal\u00fcsaator programmist abimees, mitte viga nimekiri. \ud83d\ude42<\/p>\n<h2>1. Automaatika<\/h2>\n<p>\nP\u00e4rast tutvumist tuleb ajakohastada pluginaid ja integreerida need CI-sse. See tuleb teha enne, kui arendajad hakkavad kasutama staatilist anal\u00fcsaatorit. Asi on selles, et programmeerija v\u00f5ib unustada anal\u00fc\u00fcsi sissel\u00fclitamise v\u00f5i ei soovi seda \u00fcldse teha. Selleks on vajalik teostada teatud l\u00f5ppkontroll, et mitterakendatud kood ei satuks \u00fchisesse arendusoktaavi.<\/p>\n<p><b>Mida te sellel etapil \u00f5ppite:<\/b><\/p>\n<ul>\n<li>Milliseid automaatimisv\u00f5imalusi t\u00f6\u00f6riist pakub;<\/li>\n<li>Kas anal\u00fcsaator on \u00fchilduv teie ehituss\u00fcsteemiga.<\/li>\n<\/ul>\n<p>\nKuna ideaalset dokumentatsiooni ei eksisteeri, tuleb vahel kirjutada <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">toele<\/a><\/noindex>. See on t\u00e4iesti normaalne ja me oleme valmis teid aitama. \ud83d\ude42<\/p>\n<p>N\u00fc\u00fcd liikume edasi pideva integreerimise (CI) teenuste juurde. Iga anal\u00fcsaatorit saab neisse rakendada ilma t\u00f5siste probleemideta. Selle jaoks tuleb luua eraldi etapp pipeline'is, mis asub tavaliselt p\u00e4rast ehitamist ja \u00fcksuskatsetusi. Seda teostatakse erinevate k\u00e4surea utiliidiga. N\u00e4iteks pakub PVS-Studio j\u00e4rgmisi utiliite:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\">PVS-Studio_Cmd.exe<\/a><\/noindex> (lahenduste, C#, C++ projektide anal\u00fc\u00fcs Windowsis)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0031\/\">CLMonitor.exe<\/a><\/noindex> (kompileerimise j\u00e4lgimine)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">pvs-studio-analyzer<\/a><\/noindex> (C++ projektide anal\u00fc\u00fcs Linuxis \/ macOSis)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\/\">pvs-studio-dotnet<\/a><\/noindex> (lahenduste anal\u00fc\u00fcs, C# projektid Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">pvs-studio.jar<\/a><\/noindex> (Java projektide anal\u00fc\u00fcs)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">PlogConverter<\/a><\/noindex> (aruandefailide konverter)<\/li>\n<\/ul>\n<p>\nCI anal\u00fc\u00fcsi integreerimiseks on vajalik teha kolm asja:<\/p>\n<ul>\n<li>Anal\u00fcsaatori installimine;<\/li>\n<li>Anal\u00fc\u00fcsi k\u00e4ivitamine;<\/li>\n<li>Tulemuste kohaletoimetamine.<\/li>\n<\/ul>\n<p>\nN\u00e4iteks PVS-Studio installimiseks Linuxis (Debian-p\u00f5hine) tuleks k\u00e4ivitada j\u00e4rgmised k\u00e4sud:<\/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>\nWindowsi s\u00fcsteemides puudub v\u00f5imalus anal\u00fcsaatorit paketihaldurist installida, kuid anal\u00fcsaatori k\u00e4ivitamine k\u00e4surealt on v\u00f5imalik:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nPVS-Studio k\u00e4ivitamisest Windowsi s\u00fcsteemides saab lugeda *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">siin<\/a><\/noindex>*.<\/p>\n<p>P\u00e4rast installimist tuleb anal\u00fc\u00fcs otse k\u00e4ivitada. Kuid seda soovitatakse teha alles p\u00e4rast kompileerimist ja teste. See on tingitud asjaolust, et staatilise anal\u00fc\u00fcsi jaoks on tavaliselt vajalik kahekordselt rohkem aega kui kompileerimiseks.<\/p>\n<p>Kuna k\u00e4ivitamisviis s\u00f5ltub platvormist ja projekti omadustest, n\u00e4itan C++ (Linux) jaoks varianti n\u00e4itena:<\/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>\nEsimene k\u00e4sk anal\u00fc\u00fcsib, teine <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">muudab<\/a><\/noindex>aruande tekstiformaadiks, kuvab selle ekraanile ja tagastab mitte 0 v\u00e4ljakode koodid, kui hoiatuste olemasolu tuvastatakse. Seda mehhanismi on mugav kasutada, et blokeerida \u00fclesehitust, kui vigu leidub. Siiski, v\u00f5ite alati eemaldada lipu <i>-w<\/i> ja mitte blokeerida \u00fclesehitust, mis sisaldab hoiatusi.<\/p>\n<p><b>M\u00e4rkus.<\/b> Tekstiformaat on ebamugav. See toodi lihtsalt n\u00e4itena. P\u00f6\u00f6rake t\u00e4helepanu huvitavamale aruande vormingule \u2013 FullHtml. See v\u00f5imaldab koodi j\u00e4rgi navigeerida.<\/p>\n<p>CI seadistamise kohta anal\u00fc\u00fcsi kohta saate lugeda artiklist &quot;<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0005\">PVS-Studio ja Continuous Integration<\/a><\/noindex>&quot; (Windows) v\u00f5i &quot;<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0661\/\">Kuidas seadistada PVS-Studio Travis CI-s<\/a><\/noindex>&quot; (Linux).<\/p>\n<p>Nii, oled seadistanud anal\u00fcsaatori toimimise kogumiserveris. Kui keegi on \u00fcles laadinud kontrollimata koodi, eba\u00f5nnestub kontrollimise etapp ja saate probleemist teada, kuid see ei ole just k\u00f5ige mugavam, kuna t\u00f5husam on projekti kontrollida mitte p\u00e4rast harude liitumist, vaid enne seda, pull request'i etapis.<\/p>\n<p>\u00dcldiselt ei erine pull request\u2019i anal\u00fc\u00fcsi seadistamine eriti tavalisest anal\u00fc\u00fcsi k\u00e4ivitamisest CI-s. Ainus erand on vajadus saada muutunud failide loend. Selle saab tavaliselt k\u00e4tte, k\u00fcsides git'i abil harude vahekorra:<\/p>\n<pre><code class=\"bash\">git diff --name-only HEAD origin\/$MERGE_BASE &gt; .pvs-pr.list<\/code><\/pre>\n<p>\nN\u00fc\u00fcd tuleb edastada anal\u00fcsaatorile see failide nimekiri. N\u00e4iteks PVS-Studio's on see teostatud lipu abil <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>\nTutvuge rohkem pull request'ide anal\u00fc\u00fcsi kohta *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0679\/\">siin<\/a><\/noindex>*. Isegi kui teie CI ei ole artiklis loetletud teenuste seas, on \u00fcldine jaotis, mis k\u00e4sitleb selle anal\u00fc\u00fcsit\u00fc\u00fcbi teooriat, teile kindlasti kasulik.<\/p>\n<p>Seades pull request'ide anal\u00fc\u00fcsi, saate blokeerida hoiatusi sisaldavad commit'id, seel\u00e4bi luues piiri, mida kontrollimata kood ei saa \u00fcletada.<\/p>\n<p>Kuid oleks hea, kui saaks k\u00f5iki hoiatusi n\u00e4ha \u00fches kohas. Mitte ainult staatilisest anal\u00fcsaatorist, vaid ka \u00fchikutest testidest v\u00f5i d\u00fcnaamilisest anal\u00fcsaatorist. Selleks on olemas erinevad teenused ja pluginaid. N\u00e4iteks PVS-Studio'l on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0037\/\">plugin SonarQube'iga integreerimiseks<\/a><\/noindex>.<\/p>\n<h2>2. Integreerimine arendajate masinatesse<\/h2>\n<p>\nN\u00fc\u00fcd on aeg seadistada anal\u00fcsaator igap\u00e4evaselt kasutamiseks arenduses. Selleks ajaks olete juba tutvunud enamikuga t\u00f6\u00f6meetoditest, seega v\u00f5ib seda pidada k\u00f5ige lihtsamaks osaks.<\/p>\n<p>Lihtsaim variant on see, et arendajad saavad ise vajalikud anal\u00fcsaatorid installida. Kuid see v\u00f5tab palju aega ja v\u00f5ib arendust\u00f6\u00f6st k\u00f5rvale juhtida, seega saate selle protsessi automatiseerida, kasutades installijat ja vajalikke lippe. PVS-Studio jaoks on erinevad <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">lipud automatiseeritud installimiseks<\/a><\/noindex>. Kuid alati on olemas ka pakihaldurid, n\u00e4iteks Chocolatey (Windows), Homebrew (macOS) v\u00f5i k\u00fcmned variandid Linuxile.<\/p>\n<p>Seej\u00e4rel tuleb installida vajalikud pluginate, n\u00e4iteks <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> jne.<\/p>\n<h2>3. Igap\u00e4evane kasutamine<\/h2>\n<p>\nSelles etapis on aeg r\u00e4\u00e4kida m\u00f5ningatest viisidest anal\u00fc\u00fcsijate t\u00f6\u00f6 kiirendamiseks igap\u00e4evasel kasutamisel. Kogu projekti t\u00e4ielik anal\u00fc\u00fcs v\u00f5tab v\u00e4ga kaua aega, kuid kui sageli me muudame koodi korraga kogu projektis? Harva on olemas nii ulatuslik refaktor, mis kohe m\u00f5jutaks kogu koodibaasi. Muudetud failide arv korraga \u00fcletab harva tosinat, seega on m\u00f5tet anal\u00fc\u00fcsida just neid. Sellises olukorras on olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">inkrementsaanal\u00fc\u00fcsi re\u017eiim<\/a><\/noindex>. \u00c4ra muretse, see ei ole veel \u00fcks t\u00f6\u00f6riist. See on eriline re\u017eiim, mis v\u00f5imaldab anal\u00fc\u00fcsida ainult muudetud faile ja nende s\u00f5ltuvusi, ning see toimub automaatselt p\u00e4rast kompileerimist, kui t\u00f6\u00f6tad IDE-s, milles on installitud plugin. <\/p>\n<p>Kui anal\u00fcsaator tuvastab hiljuti muudetud koodis probleeme, siis teavitab ta sellest ise. N\u00e4iteks PVS-Studio \u00fctleb teile sellest teavitusega:<\/p>\n<p><img decoding=\"async\" alt=\"Statiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni\" src=\"\/wp-content\/uploads\/2020\/08\/20456a6652f0bd4f62d9aea5f1dda5cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLihtsalt ei piisa sellest, et arendajad kasutavad t\u00f6\u00f6riista. Peame neile kuidagi selgitama, mis see on ja kuidas seda kasutada. N\u00e4iteks on olemas artiklid PVS-Studio kiireks alustamiseks, kuid sarnaseid juhendeid leiate iga soovitud t\u00f6\u00f6riista jaoks:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/\">Kuidas k\u00e4ivitada PVS-Studio Windowsis (C, C++, C#)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">Kuidas k\u00e4ivitada PVS-Studio Linuxis ja macOS-is (C, C++)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">Kuidas k\u00e4ivitada PVS-Studio Java<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nSarnased artiklid annavad kogu igap\u00e4evaseks kasutamiseks vajaliku teabe ega v\u00f5ta palju aega. \ud83d\ude42<\/p>\n<p>T\u00f6\u00f6riistaga tutvumise etapis summutasime palju hoiatusi \u00fche esialgse k\u00e4ivituse ajal. Kahjuks ei ole staatilised anal\u00fcsaatorid ideaalsed ning seet\u00f5ttu annavad nad aeg-ajalt valeh\u00e4ireid. Need on tavaliselt kergesti summutatavad, n\u00e4iteks PVS-Studio plugina puhul Visual Studios piisab \u00fchest nupuvajutusest:<\/p>\n<p><img decoding=\"async\" alt=\"Statiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni\" src=\"\/wp-content\/uploads\/2020\/08\/ed5382f468d21b7e711caba73b439fda.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSiiski saate nende \u00fcle mitte ainult vaiki olla. N\u00e4iteks v\u00f5ite probleemist toetust teavitada. Kui valeh\u00e4ireid on v\u00f5imalik parandada, siis tulevastes uuendustes v\u00f5ite m\u00e4rgata, et teie koodibaasiga seotud valeh\u00e4ireid on iga korraga aina v\u00e4hem.<\/p>\n<h2>P\u00e4rast integreerimist<\/h2>\n<p>\nNii oleme l\u00e4binud k\u00f5ik etapid staatilise anal\u00fc\u00fcsi integreerimise protsessis arendusse. Kuigi sarnaste t\u00f6\u00f6riistade seadistamine CI-s on oluline, on k\u00f5ige t\u00e4htsam k\u00e4ivitamiskoht arendaja arvuti. L\u00f5ppude l\u00f5puks ei ole staatiline anal\u00fcsaator kohtunik, kes kaugel teist \u00fctleb, et kood ei sobi. Vastupidi, see on abiline, kes annab m\u00e4rku, kui te olete v\u00e4sinud ja meenutab, kui te millegi unustate.<\/p>\n<p>T\u00f5de on see, et regulaarne staatiline anal\u00fc\u00fcs ei lihtsusta arendust t\u00f5en\u00e4oliselt oluliselt. Selle peamine kasu arendajale ei seisne sugugi ainult keeruliste ja vaieldavate koodil\u00f5ikude leidmises, vaid probleemide varajases tuvastamises. Olge julged, m\u00f5elda, et probleemide v\u00e4lja selgitamine, kui muudatused on testimisse saadetud, on mitte ainult ebamugav, vaid ka aegan\u00f5udev. Regulaarne staatiline anal\u00fc\u00fcs vaatab iga muudatust otse teie arvutis ja annab m\u00e4rku kahtlastest kohtadest koodi kirjutamise ajal.<\/p>\n<p>Ja kui teie v\u00f5i teie kolleegid ei ole endiselt kindlad, kas anal\u00fcsaatori juurutamine on vajalik, soovitan teil n\u00fc\u00fcd lugeda artiklit &quot;<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0687\/\">P\u00f5hjused staatilise koodianal\u00fcsaatori PVS-Studio rakendamiseks arendusprotsessis<\/a><\/noindex>&quot;. Selles k\u00e4sitletakse arendajate t\u00fc\u00fcpilisi muresid, et staatiline anal\u00fc\u00fcs r\u00f6\u00f6vib nende aega ja nii edasi.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\"><img decoding=\"async\" alt=\"Statiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni\" src=\"\/wp-content\/uploads\/2020\/08\/6372d668354f708cb0e08df27bb39bdd.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Kui soovite seda artiklit jagada ingliskeelse publikuga, palun kasutage t\u00f5lke linki: Maxim Zvyagintsev. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\">Static Analysis: From Getting Started to Integration<\/a><\/noindex>.<br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47 Staatiline anal\u00fc\u00fcs \u2013 tutvumisest integreerimiseni | ProHoster","description":"L\u00f5putu koodide \u00fclevaatamise v\u00f5i t\u00f5rkeotsingu t\u00f5ttu m\u00f5tled vahel, kuidas elu endale lihtsamaks teha. Ja natuke otsides, v\u00f5i lihtsalt juhuslikult sellele sattudes, v\u00f5ib n\u00e4ha maagilist fraasi: \"Statiline anal\u00fc\u00fcs\".","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/91065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=91065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/91065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/91066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=91065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=91065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=91065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}