{"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\/cs\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","title":{"rendered":"Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed po integraci","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Z v\u00fd\u010dtu nekone\u010dn\u00e9ho code review nebo lad\u011bn\u00ed se ob\u010das zam\u00fd\u0161l\u00edte, jak si usnadnit \u017eivot. A po kr\u00e1tk\u00e9m hled\u00e1n\u00ed, nebo n\u00e1hodn\u00e9m objeven\u00ed, m\u016f\u017eete narazit na kouzeln\u00e9 slovn\u00ed spojen\u00ed: \"Statick\u00e1 anal\u00fdza\". Pod\u00edvejme se, co to vlastn\u011b je a jak m\u016f\u017ee interagovat s va\u0161\u00edm projektem.<\/p>\n<p><img decoding=\"async\" alt=\"Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed po integraci\" src=\"\/wp-content\/uploads\/2020\/08\/7811b22510bdda6f3f774b8335cbeabe.png\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPokud p\u00ed\u0161ete v n\u011bjak\u00e9m modern\u00edm jazyce, pak si z\u0159ejm\u011b ani neuv\u011bdomujete, \u017ee skrze statick\u00e9ho analyz\u00e1tora proch\u00e1z\u00edte. Fakt je, \u017ee ka\u017ed\u00fd modern\u00ed kompil\u00e1tor poskytuje alespo\u0148 minim\u00e1ln\u00ed sadu upozorn\u011bn\u00ed na potenci\u00e1ln\u00ed probl\u00e9my v k\u00f3du. Nap\u0159\u00edklad, p\u0159i kompilaci C++ k\u00f3du ve Visual Studio m\u016f\u017eete vid\u011bt n\u00e1sleduj\u00edc\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed po integraci\" src=\"\/wp-content\/uploads\/2020\/08\/a267e4e8a57c1a32e508e5e1983c5ff0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nV tomto v\u00fdstupu vid\u00edme, \u017ee prom\u011bnn\u00e1 <i>var<\/i> nikde ve funkci nebyla pou\u017eita. Tak\u017ee skute\u010dn\u011b jste t\u00e9m\u011b\u0159 v\u017edy pou\u017e\u00edvali jednoduch\u00fd n\u00e1stroj pro statickou anal\u00fdzu k\u00f3du. Nicm\u00e9n\u011b, na rozd\u00edl od profesion\u00e1ln\u00edch analyz\u00e1tor\u016f, jako jsou Coverity, Klocwork nebo PVS-Studio, varov\u00e1n\u00ed poskytovan\u00e1 kompil\u00e1torem mohou nazna\u010dovat pouze mal\u00fd rozsah probl\u00e9m\u016f.<\/p>\n<p>Pokud p\u0159esn\u011b nev\u00edte, co je statick\u00e1 anal\u00fdza a jak ji implementovat, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0046\/\">si p\u0159e\u010dt\u011bte tento \u010dl\u00e1nek<\/a><\/noindex>, abyste se podrobn\u011bji sezn\u00e1mili s touto metodikou. <\/p>\n<h2>Pro\u010d je statick\u00e1 anal\u00fdza pot\u0159ebn\u00e1?<\/h2>\n<p>\nVe zkratce: urychlen\u00ed a zjednodu\u0161en\u00ed. <\/p>\n<p>Statick\u00e1 anal\u00fdza umo\u017e\u0148uje odhalit spoustu r\u016fzn\u00fdch probl\u00e9m\u016f v k\u00f3du: od nespr\u00e1vn\u00e9ho pou\u017e\u00edv\u00e1n\u00ed jazykov\u00fdch konstrukc\u00ed po p\u0159eklepy. Nap\u0159\u00edklad m\u00edsto <\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.z;<\/code><\/pre>\n<p>\njste napsali n\u00e1sleduj\u00edc\u00ed k\u00f3d:<\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.x;<\/code><\/pre>\n<p>\nJak vid\u00edte, v posledn\u00edm \u0159\u00e1dku se objevila chyba. Nap\u0159\u00edklad, PVS-Studio vyd\u00e1v\u00e1 n\u00e1sleduj\u00edc\u00ed varov\u00e1n\u00ed:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v537\/\">V537<\/a><\/noindex> Zva\u017ete kontrolu spr\u00e1vnosti pou\u017eit\u00ed polo\u017eky &#039;y&#039;.<\/p>\n<p>Pokud chcete experimentovat s touto chybou, zkuste p\u0159ipraven\u00fd p\u0159\u00edklad na Compiler Explorer: *<noindex><a rel=\"nofollow\" href=\"https:\/\/godbolt.org\/z\/cd4WK7\">klikn\u011bte<\/a><\/noindex>*.<\/p>\n<p>A jak v\u00edte, ne v\u017edy lze okam\u017eit\u011b v\u011bnovat pozornost takov\u00fdm \u010d\u00e1stem k\u00f3du, a kv\u016fli tomu se m\u016f\u017eete zaseknout v lad\u011bn\u00ed na dobr\u00e9 hodiny, ani\u017e byste ch\u00e1pali, pro\u010d to v\u0161e funguje tak podivn\u011b. <\/p>\n<p>Jedn\u00e1 se v\u0161ak o zjevnou chybu. A co kdy\u017e v\u00fdvoj\u00e1\u0159 napsal neoptim\u00e1ln\u00ed k\u00f3d, proto\u017ee zapomn\u011bl na n\u011bjakou jemnost jazyka? Nebo dokonce v k\u00f3du povolil <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>Pr\u00e1v\u011b pro takov\u00e9 situace vznikla statick\u00e1 anal\u00fdza. Je to pomocn\u00edk pro v\u00fdvoj\u00e1\u0159e, kter\u00fd mu uk\u00e1\u017ee r\u016fzn\u00e9 probl\u00e9my v k\u00f3du a vysv\u011btl\u00ed v dokumentaci, pro\u010d by tak nem\u011bl ps\u00e1t, k \u010demu to m\u016f\u017ee v\u00e9st a jak to opravit. Tady je p\u0159\u00edklad, jak to m\u016f\u017ee vypadat: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v702\/\">klikn\u011bte<\/a><\/noindex>*.<\/p>\n<p>V\u00edce zaj\u00edmav\u00fdch chyb, kter\u00e9 m\u016f\u017ee analyz\u00e1tor odhalit, najdete v \u010dl\u00e1nc\u00edch:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0700\/\">Top 10 chyb v projektech C++ za rok 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Top 10 chyb v projektech C# za rok 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Top 10 chyb v projektech Java za rok 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nNyn\u00ed, kdy\u017e jste si p\u0159e\u010detli tento materi\u00e1l a ujistili se o p\u0159\u00ednosu statick\u00e9 anal\u00fdzy, mohli byste cht\u00edt vyzkou\u0161et ji v praxi. Ale kde za\u010d\u00edt? Jak integrovat nov\u00fd n\u00e1stroj do aktu\u00e1ln\u00edho projektu? A jak se s n\u00edm sezn\u00e1mit t\u00fdm? Na tyto ot\u00e1zky naleznete odpov\u011bdi n\u00ed\u017ee.<\/p>\n<p><b>Pozn\u00e1mka.<\/b> Statick\u00e1 anal\u00fdza nenahrazuje a neanuluje tak u\u017eite\u010dnou v\u011bc, jako jsou p\u0159ehledy k\u00f3du. Dopln\u00ed tento proces a pom\u016f\u017ee p\u0159edem zaznamenat a opravit p\u0159eklepy, nep\u0159esnosti a nebezpe\u010dn\u00e9 konstrukce. Je mnohem produktivn\u011bj\u0161\u00ed soust\u0159edit se p\u0159i p\u0159ehledech k\u00f3du na algoritmy a srozumitelnost k\u00f3du, ne\u017e se zab\u00fdvat hled\u00e1n\u00edm \u0161patn\u011b um\u00edst\u011bn\u00e9 z\u00e1vorky nebo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">\u010dten\u00ed nudn\u00fdch funkc\u00ed porovn\u00e1n\u00ed<\/a><\/noindex>.<\/p>\n<h2>0. Sezn\u00e1men\u00ed s n\u00e1strojem<\/h2>\n<p>\nV\u0161echno za\u010d\u00edn\u00e1 zku\u0161ebn\u00ed verz\u00ed. Opravu se t\u011b\u017eko rozhoduje zav\u00e9st n\u011bco do procesu v\u00fdvoje, pokud jste nikdy p\u0159edt\u00edm nevid\u011bli n\u00e1stroj na\u017eivo. Proto je prvn\u00edm krokem st\u00e1hnout si <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/?promo=mscas\">zkou\u0161ebn\u00ed verzi<\/a><\/noindex>.<\/p>\n<p><b>Co se na t\u00e9to f\u00e1zi dozv\u00edte:<\/b><\/p>\n<ul>\n<li>Jak\u00e9 jsou zp\u016fsoby interakce s analyz\u00e1torem;<\/li>\n<li>Je analyz\u00e1tor kompatibiln\u00ed s va\u0161\u00edm v\u00fdvojov\u00fdm prost\u0159ed\u00edm;<\/li>\n<li>Jak\u00e9 probl\u00e9my jsou nyn\u00ed ve va\u0161ich projektech.<\/li>\n<\/ul>\n<p>\nJakmile si nainstalujete v\u0161e pot\u0159ebn\u00e9, je prvn\u00edm krokem spustit anal\u00fdzu cel\u00e9ho projektu (<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>). V p\u0159\u00edpad\u011b PVS-Studio ve Visual Studio uvid\u00edte podobn\u00fd obr\u00e1zek (kliknuteln\u00e9):<\/p>\n<p><img decoding=\"async\" alt=\"Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed po integraci\" src=\"\/wp-content\/uploads\/2020\/08\/865b2dfa10661e4999238cdccf8860dc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nFaktem je, \u017ee obvykle na projektech s velkou z\u00e1kladnou k\u00f3du statick\u00e9 analyz\u00e1tory generuj\u00ed obrovsk\u00e9 mno\u017estv\u00ed upozorn\u011bn\u00ed. Nen\u00ed pot\u0159eba opravovat je v\u0161echny, proto\u017ee v\u00e1\u0161 projekt ji\u017e funguje, co\u017e znamen\u00e1, \u017ee tyto probl\u00e9my nejsou kritick\u00e9. Nicm\u00e9n\u011b m\u016f\u017eete se pod\u00edvat na nejzaj\u00edmav\u011bj\u0161\u00ed upozorn\u011bn\u00ed. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">m\u016f\u017eete se pod\u00edvat na ta nejzaj\u00edmav\u011bj\u0161\u00ed upozorn\u011bn\u00ed.<\/a><\/noindex> a upravit je podle pot\u0159eby. K tomu je t\u0159eba filtrovat v\u00fdstup a ponechat pouze nejspolehliv\u011bj\u0161\u00ed ozn\u00e1men\u00ed. V pluginu PVS-Studio pro Visual Studio se to prov\u00e1d\u00ed filtrov\u00e1n\u00edm podle \u00farovn\u00ed a kategori\u00ed chyb. Pro co nejp\u0159esn\u011bj\u0161\u00ed v\u00fdstup nechte aktivn\u00ed pouze <i>High<\/i> a <i>Obecn\u00e9<\/i> (tak\u00e9 klikateln\u00e9):<\/p>\n<p><img decoding=\"async\" alt=\"Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed po integraci\" src=\"\/wp-content\/uploads\/2020\/08\/400b90713f67b531e4ed513ea9d340a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOpravdu, 178 varov\u00e1n\u00ed je mnohem snaz\u0161\u00ed prohl\u00e9dnout ne\u017e n\u011bkolik tis\u00edc\u2026<\/p>\n<p>V z\u00e1lo\u017ek\u00e1ch <i>Medium<\/i> a <i>Low<\/i> se \u010dasto objev\u00ed dobr\u00e1 varov\u00e1n\u00ed, av\u0161ak do t\u011bchto kategori\u00ed jsou za\u0159azeny diagnostiky, kter\u00e9 maj\u00ed ni\u017e\u0161\u00ed p\u0159esnost (spolehlivost). Podrobnosti o \u00farovn\u00edch varov\u00e1n\u00ed a mo\u017enostech pr\u00e1ce pod Windows si m\u016f\u017eete prohl\u00e9dnout zde: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">klikn\u011bte<\/a><\/noindex>*.<\/p>\n<p>\u00dasp\u011b\u0161n\u011b prozkoumat nejzaj\u00edmav\u011bj\u0161\u00ed chyby (a \u00fasp\u011b\u0161n\u011b je opravit) stoj\u00ed za to <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0032\/\">potla\u010dit zb\u00fdvaj\u00edc\u00ed varov\u00e1n\u00ed<\/a><\/noindex>. To je pot\u0159eba proto, aby nov\u00e1 varov\u00e1n\u00ed nezanikla mezi star\u00fdmi. Krom\u011b toho je statick\u00fd analyz\u00e1tor pomocn\u00edkem pro program\u00e1tora, nikoli seznamem pro bugy. \ud83d\ude42<\/p>\n<h2>1. Automatizace<\/h2>\n<p>\nPo sezn\u00e1men\u00ed nast\u00e1v\u00e1 \u010das na nastaven\u00ed plugin\u016f a integraci do CI. Je t\u0159eba to ud\u011blat d\u0159\u00edve, ne\u017e program\u00e1to\u0159i za\u010dnou pou\u017e\u00edvat statick\u00fd analyz\u00e1tor. Faktem je, \u017ee program\u00e1tor m\u016f\u017ee zapomenout zapnout anal\u00fdzu nebo ji v\u016fbec necht\u00edt. K tomu je pot\u0159eba prov\u00e9st ur\u010ditou kone\u010dnou kontrolu, aby nezkontrolovan\u00fd k\u00f3d nemohl proniknout do hlavn\u00ed v\u00fdvojov\u00e9 v\u011btve.<\/p>\n<p><b>Co se na t\u00e9to f\u00e1zi dozv\u00edte:<\/b><\/p>\n<ul>\n<li>Jak\u00e9 mo\u017enosti automatizace n\u00e1stroj nab\u00edz\u00ed;<\/li>\n<li>Je analyz\u00e1tor kompatibiln\u00ed s va\u0161\u00edm syst\u00e9mem sestaven\u00ed.<\/li>\n<\/ul>\n<p>\nJeliko\u017e neexistuje ide\u00e1ln\u00ed dokumentace, n\u011bkdy je t\u0159eba napsat na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">podporu<\/a><\/noindex>. Je to norm\u00e1ln\u00ed a r\u00e1di v\u00e1m pom\u016f\u017eeme. \ud83d\ude42<\/p>\n<p>A nyn\u00ed p\u0159ejdeme k slu\u017eb\u00e1m nep\u0159etr\u017eit\u00e9 integrace (CI). Jak\u00fdkoli analyz\u00e1tor lze do nich bez v\u00e1\u017en\u00fdch probl\u00e9m\u016f implementovat. K tomu je pot\u0159eba vytvo\u0159it samostatn\u00fd krok v pipeline, kter\u00fd se obvykle nach\u00e1z\u00ed po sestaven\u00ed a unit testech. D\u011bl\u00e1 se to pomoc\u00ed r\u016fzn\u00fdch konzolov\u00fdch utilit. Nap\u0159\u00edklad PVS-Studio poskytuje n\u00e1sleduj\u00edc\u00ed utility:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\">PVS-Studio_Cmd.exe<\/a><\/noindex> (anal\u00fdza \u0159e\u0161en\u00ed, C#, C++ projekt\u016f na Windows)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0031\/\">CLMonitor.exe<\/a><\/noindex> (monitorov\u00e1n\u00ed kompilace)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">pvs-studio-analyzer<\/a><\/noindex> (anal\u00fdza C++ projekt\u016f na Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\/\">pvs-studio-dotnet<\/a><\/noindex> (anal\u00fdza \u0159e\u0161en\u00ed, C# projekt\u016f na Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">pvs-studio.jar<\/a><\/noindex> (anal\u00fdza Java projekt\u016f)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">PlogConverter<\/a><\/noindex> (konvertor soubor\u016f zpr\u00e1vy)<\/li>\n<\/ul>\n<p>\nPro integraci anal\u00fdzy do CI je t\u0159eba ud\u011blat t\u0159i v\u011bci:<\/p>\n<ul>\n<li>Nainstalovat analyz\u00e1tor;<\/li>\n<li>Spustit anal\u00fdzu;<\/li>\n<li>Dodat v\u00fdsledky.<\/li>\n<\/ul>\n<p>\nNap\u0159\u00edklad pro instalaci PVS-Studio na Linux (Debian-based) je t\u0159eba prov\u00e9st n\u00e1sleduj\u00edc\u00ed p\u0159\u00edkazy:<\/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>\nV syst\u00e9mech \u0159\u00edzen\u00fdch Windows nen\u00ed mo\u017en\u00e9 nainstalovat analyz\u00e1tor pomoc\u00ed spr\u00e1vce bal\u00ed\u010dk\u016f, ale lze rozbalit analyz\u00e1tor z p\u0159\u00edkazov\u00e9ho \u0159\u00e1dku:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nV\u00edce o nasazen\u00ed PVS-Studio v syst\u00e9mech \u0159\u00edzen\u00fdch Windows si m\u016f\u017eete p\u0159e\u010d\u00edst *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">tady<\/a><\/noindex>*.<\/p>\n<p>Po instalaci je t\u0159eba spustit samotnou anal\u00fdzu. Nicm\u00e9n\u011b doporu\u010duje se to prov\u00e9st a\u017e po kompilaci a testech. To je d\u00e1no t\u00edm, \u017ee pro statickou anal\u00fdzu obvykle pot\u0159ebujete dvakr\u00e1t v\u00edce \u010dasu ne\u017e pro kompilaci.<\/p>\n<p>Jeliko\u017e zp\u016fsob spu\u0161t\u011bn\u00ed z\u00e1vis\u00ed na platform\u011b a charakteristik\u00e1ch projektu, uk\u00e1\u017eu variantu pro C++ (Linux) jako p\u0159\u00edklad:<\/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>\nPrvn\u00ed p\u0159\u00edkaz provede anal\u00fdzu a druh\u00fd <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">konvertuje<\/a><\/noindex>report do textov\u00e9ho form\u00e1tu, zobraz\u00ed ho na obrazovce a vr\u00e1t\u00ed nenulov\u00fd n\u00e1vratov\u00fd k\u00f3d v p\u0159\u00edpad\u011b, \u017ee existuj\u00ed varov\u00e1n\u00ed. Takov\u00fd mechanismus je pohodln\u00e9 pou\u017e\u00edvat k zablokov\u00e1n\u00ed sestaven\u00ed v p\u0159\u00edpad\u011b, \u017ee existuj\u00ed zpr\u00e1vy o chyb\u00e1ch. Nicm\u00e9n\u011b m\u016f\u017eete v\u017edy odstranit p\u0159\u00edznak <i>-w<\/i> a nezablokovat sestaven\u00ed obsahuj\u00edc\u00ed varov\u00e1n\u00ed.<\/p>\n<p><b>Pozn\u00e1mka.<\/b> Textov\u00fd form\u00e1t \u2013 to nen\u00ed pohodln\u00e9. Je uveden pouze jako p\u0159\u00edklad. V\u0161imn\u011bte si zaj\u00edmav\u011bj\u0161\u00edho form\u00e1tu zpr\u00e1vy \u2013 FullHtml. Umo\u017e\u0148uje prov\u00e1d\u011bt navigaci po k\u00f3du.<\/p>\n<p>V\u00edce o nastaven\u00ed anal\u00fdzy na CI se m\u016f\u017eete do\u010d\u00edst v \u010dl\u00e1nku \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0005\">PVS-Studio a Continuous Integration<\/a><\/noindex>\" (Windows) nebo \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0661\/\">Jak nastavit PVS-Studio v Travis CI<\/a><\/noindex>\" (Linux).<\/p>\n<p>Dob\u0159e, nastavili jste pr\u00e1ci analyz\u00e1toru na build serveru. Te\u010f, pokud n\u011bkdo nahr\u00e1l neov\u011b\u0159en\u00fd k\u00f3d, f\u00e1ze kontroly sel\u017ee a vy budete moci odhalit probl\u00e9m, av\u0161ak nen\u00ed to zcela pohodln\u00e9, proto\u017ee efektivn\u011bj\u0161\u00ed je kontrolovat projekt p\u0159ed slou\u010den\u00edm v\u011btv\u00ed, a to v okam\u017eiku pull requestu.<\/p>\n<p>Celkov\u011b se nastaven\u00ed anal\u00fdzy pull requestu p\u0159\u00edli\u0161 neli\u0161\u00ed od b\u011b\u017en\u00e9ho spu\u0161t\u011bn\u00ed anal\u00fdzy na CI. S v\u00fdjimkou nutnosti z\u00edskat seznam zm\u011bn\u011bn\u00fdch soubor\u016f. Obvykle je m\u016f\u017eete z\u00edskat dotazem na rozd\u00edl mezi v\u011btvemi pomoc\u00ed git:<\/p>\n<pre><code class=\"bash\">git diff --name-only HEAD origin\/$MERGE_BASE &gt; .pvs-pr.list<\/code><\/pre>\n<p>\nNyn\u00ed je t\u0159eba p\u0159edat analyz\u00e1toru tento seznam soubor\u016f. Nap\u0159\u00edklad v PVS-Studio je to realizov\u00e1no pomoc\u00ed p\u0159\u00edznaku. <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>\nV\u00edce o anal\u00fdze pull request\u016f se m\u016f\u017eete dozv\u011bd\u011bt *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0679\/\">tady<\/a><\/noindex>*. I kdy\u017e v\u00e1\u0161 CI nen\u00ed v seznamu uveden\u00fdch slu\u017eeb, bude pro v\u00e1s u\u017eite\u010dn\u00e1 obecn\u00e1 \u010d\u00e1st v\u011bnovan\u00e1 teorii tohoto typu anal\u00fdzy.<\/p>\n<p>Nastaven\u00edm anal\u00fdzy pull request\u016f budete moci blokovat commity, kter\u00e9 obsahuj\u00ed varov\u00e1n\u00ed, a t\u00edm vytvo\u0159\u00edte hranici, kterou neov\u011b\u0159en\u00fd k\u00f3d nem\u016f\u017ee p\u0159ekro\u010dit.<\/p>\n<p>To v\u0161echno je jist\u011b dobr\u00e9, ale r\u00e1d bych m\u011bl mo\u017enost vid\u011bt v\u0161echna upozorn\u011bn\u00ed na jednom m\u00edst\u011b. Nejen z statick\u00e9ho analyz\u00e1toru, ale i z unit test\u016f nebo z dynamick\u00e9ho analyz\u00e1toru. K tomu existuj\u00ed r\u016fzn\u00e9 slu\u017eby a pluginy. PVS-Studio nap\u0159\u00edklad m\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0037\/\">plugin pro integraci do SonarQube.<\/a><\/noindex>.<\/p>\n<h2>2. Integrace na stroje v\u00fdvoj\u00e1\u0159\u016f<\/h2>\n<p>\nNyn\u00ed je \u010das nainstalovat a nakonfigurovat analyz\u00e1tor pro ka\u017edodenn\u00ed pou\u017eit\u00ed p\u0159i v\u00fdvoji. V tomto okam\u017eiku jste se u\u017e sezn\u00e1mili s v\u011bt\u0161inou zp\u016fsob\u016f pr\u00e1ce, tak\u017ee to m\u016f\u017eeme nazvat tou nejjednodu\u0161\u0161\u00ed \u010d\u00e1st\u00ed.<\/p>\n<p>Nejjednodu\u0161\u0161\u00ed mo\u017enost\u00ed je, \u017ee si v\u00fdvoj\u00e1\u0159i mohou nainstalovat pot\u0159ebn\u00fd analyz\u00e1tor sami. To v\u0161ak zabere hodn\u011b \u010dasu a odvede je to od v\u00fdvoje, proto m\u016f\u017eete tento proces automatizovat pomoc\u00ed instal\u00e1toru a pot\u0159ebn\u00fdch p\u0159\u00edznak\u016f. Pro PVS-Studio existuj\u00ed r\u016fzn\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">p\u0159\u00edznaky pro automatizovanou instalaci.<\/a><\/noindex>. Nicm\u00e9n\u011b existuj\u00ed v\u017edy bal\u00ed\u010dkov\u00e9 mana\u017eery, nap\u0159\u00edklad Chocolatey (Windows), Homebrew (macOS) nebo des\u00edtky variant pro Linux.<\/p>\n<p>Pot\u00e9 je pot\u0159eba nainstalovat pot\u0159ebn\u00e9 pluginy, nap\u0159\u00edklad pro <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> atd.<\/p>\n<h2>3. Ka\u017edodenn\u00ed pou\u017e\u00edv\u00e1n\u00ed<\/h2>\n<p>\nV t\u00e9to f\u00e1zi je na \u010dase \u0159\u00edct p\u00e1r slov o zp\u016fsobech, jak urychlit pr\u00e1ci analyz\u00e1toru p\u0159i ka\u017edodenn\u00edm pou\u017e\u00edv\u00e1n\u00ed. Kompletn\u00ed anal\u00fdza cel\u00e9ho projektu zabere hodn\u011b \u010dasu, ale jak \u010dasto m\u011bn\u00edme k\u00f3d najednou v cel\u00e9m projektu? Obt\u00ed\u017en\u011b existuje tak rozs\u00e1hl\u00e1 refaktorizace, kter\u00e1 by najednou zas\u00e1hla celou k\u00f3dovou z\u00e1kladnu. Po\u010det m\u011bn\u011bn\u00fdch soubor\u016f najednou z\u0159\u00eddka p\u0159es\u00e1hne deset, tak\u017ee je smyslupln\u00e9 je analyzovat. Pro takovou situaci existuje <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">re\u017eim inkrement\u00e1ln\u00ed anal\u00fdzy.<\/a><\/noindex>. Jen se nelekejte, to nen\u00ed dal\u0161\u00ed n\u00e1stroj. Je to speci\u00e1ln\u00ed re\u017eim, kter\u00fd umo\u017e\u0148uje analyzovat pouze zm\u011bn\u011bn\u00e9 soubory a jejich z\u00e1vislosti, a to automaticky po sestaven\u00ed, pokud pracujete v IDE s nainstalovan\u00fdm pluginem. <\/p>\n<p>Pokud analyz\u00e1tor objev\u00ed probl\u00e9my v ned\u00e1vno zm\u011bn\u011bn\u00e9m k\u00f3du, upozorn\u00ed v\u00e1s na to s\u00e1m. Nap\u0159\u00edklad PVS-Studio v\u00e1m o tom d\u00e1 v\u011bd\u011bt pomoc\u00ed upozorn\u011bn\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed po integraci\" src=\"\/wp-content\/uploads\/2020\/08\/20456a6652f0bd4f62d9aea5f1dda5cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSamoz\u0159ejm\u011b nesta\u010d\u00ed \u0159\u00edct v\u00fdvoj\u00e1\u0159\u016fm, aby n\u00e1stroj pou\u017e\u00edvali. Je t\u0159eba jim n\u011bjak vysv\u011btlit, co to vlastn\u011b je a jak to funguje. Nap\u0159\u00edklad zde jsou \u010dl\u00e1nky o rychl\u00e9m startu pro PVS-Studio, ale podobn\u00e9 tutori\u00e1ly naleznete pro jak\u00fdkoli v\u00e1mi preferovan\u00fd n\u00e1stroj:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/\">Jak spustit PVS-Studio ve Windows (C, C++, C#)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">Jak spustit PVS-Studio v Linuxu a macOS (C, C++)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">Jak spustit PVS-Studio pro Java<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nPodobn\u00e9 \u010dl\u00e1nky poskytuj\u00ed v\u0161e pot\u0159ebn\u00e9 informace pro ka\u017edodenn\u00ed pou\u017e\u00edv\u00e1n\u00ed a nezab\u00edraj\u00ed p\u0159\u00edli\u0161 \u010dasu. \ud83d\ude42<\/p>\n<p>U\u017e p\u0159i seznamov\u00e1n\u00ed se s n\u00e1strojem jsme potla\u010dili spoustu upozorn\u011bn\u00ed b\u011bhem jednoho z prvn\u00edch spu\u0161t\u011bn\u00ed. Bohu\u017eel, statick\u00e9 analyz\u00e1tory nejsou dokonal\u00e9, a proto ob\u010das d\u00e1vaj\u00ed fale\u0161n\u00e9 alarmy. Obvykle je snadn\u00e9 je potla\u010dit, nap\u0159\u00edklad v pluginu PVS-Studio pro Visual Studio sta\u010d\u00ed stisknout jedno tla\u010d\u00edtko:<\/p>\n<p><img decoding=\"async\" alt=\"Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed po integraci\" src=\"\/wp-content\/uploads\/2020\/08\/ed5382f468d21b7e711caba73b439fda.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAle m\u016f\u017eete je nejen potla\u010dovat. Nap\u0159\u00edklad m\u016f\u017eete podm\u00ednit podporu o p\u0159\u00edtomnosti probl\u00e9mu. Pokud fale\u0161n\u00fd alarm lze opravit, pak ve budouc\u00edch aktualizac\u00edch m\u016f\u017eete zaznamenat, \u017ee se s ka\u017ed\u00fdm dal\u0161\u00edm spu\u0161t\u011bn\u00edm st\u00e1v\u00e1 st\u00e1le m\u00e9n\u011b a m\u00e9n\u011b specifick\u00fdch fale\u0161n\u00fdch alarm\u016f pro va\u0161i k\u00f3dovou z\u00e1kladnu.<\/p>\n<h2>Po integraci<\/h2>\n<p>\nA jsme na konci v\u0161ech etap integrace statick\u00e9 anal\u00fdzy do v\u00fdvojov\u00e9ho procesu. Navzdory d\u016fle\u017eitosti nastaven\u00ed takov\u00fdch n\u00e1stroj\u016f v CI, hlavn\u00edm m\u00edstem spu\u0161t\u011bn\u00ed je po\u010d\u00edta\u010d v\u00fdvoj\u00e1\u0159e. Koneckonc\u016f, statick\u00fd analyz\u00e1tor nen\u00ed soudce, kter\u00fd kdesi daleko \u0159\u00edk\u00e1, \u017ee k\u00f3d nikam nepat\u0159\u00ed. Naopak, je to asistent, kter\u00fd v\u00e1m nazna\u010duje, pokud jste unaven\u00ed, a p\u0159ipom\u00edn\u00e1, pokud na n\u011bco zapomenete.<\/p>\n<p>Pravda, bez pravideln\u00e9ho pou\u017e\u00edv\u00e1n\u00ed, statick\u00e1 anal\u00fdza pravd\u011bpodobn\u011b v\u00fdznamn\u011b neuleh\u010d\u00ed v\u00fdvoj. V\u017edy\u0165 jej\u00ed nejv\u011bt\u0161\u00ed v\u00fdhoda pro v\u00fdvoj\u00e1\u0159e spo\u010d\u00edv\u00e1 nejen v hled\u00e1n\u00ed slo\u017eit\u00fdch a sporn\u00fdch \u010d\u00e1st\u00ed k\u00f3du, ale tak\u00e9 v jejich v\u010dasn\u00e9m odhalen\u00ed. Souhlas\u00edte, \u017ee zjistit probl\u00e9m, kdy\u017e opravy u\u017e byly odesl\u00e1ny na testov\u00e1n\u00ed, nen\u00ed jen nep\u0159\u00edjemn\u00e9, ale tak\u00e9 velmi zdlouhav\u00e9. Statick\u00e1 anal\u00fdza v\u0161ak p\u0159i pravideln\u00e9m pou\u017e\u00edv\u00e1n\u00ed kontroluje ka\u017edou zm\u011bnu p\u0159\u00edmo na va\u0161em po\u010d\u00edta\u010di a informuje v\u00e1s o podez\u0159el\u00fdch m\u00edstech b\u011bhem pr\u00e1ce na k\u00f3du.<\/p>\n<p>A pokud si vy nebo va\u0161i kolegov\u00e9 st\u00e1le nejste jisti, zda byste m\u011bli implementovat analyz\u00e1tor, doporu\u010duji nyn\u00ed p\u0159ej\u00edt k p\u0159e\u010dten\u00ed \u010dl\u00e1nku \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0687\/\">D\u016fvody, pro\u010d implementovat statick\u00fd analyz\u00e1tor k\u00f3du PVS-Studio do v\u00fdvojov\u00e9ho procesu<\/a><\/noindex>\". Ten se zab\u00fdv\u00e1 typick\u00fdmi obavami v\u00fdvoj\u00e1\u0159\u016f, \u017ee statick\u00e1 anal\u00fdza bude ub\u00edrat jejich \u010das a podobn\u011b.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\"><img decoding=\"async\" alt=\"Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed po integraci\" src=\"\/wp-content\/uploads\/2020\/08\/6372d668354f708cb0e08df27bb39bdd.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Pokud chcete sd\u00edlet tento \u010dl\u00e1nek s anglicky mluv\u00edc\u00edm publikem, pros\u00edm pou\u017eijte odkaz na p\u0159eklad: Maxim Zvyagintsev. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\">Statick\u00e1 anal\u00fdza: Od za\u010d\u00e1tku a\u017e po integraci<\/a><\/noindex>.<br \/>\n<br \/>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47Statick\u00e1 anal\u00fdza \u2013 od sezn\u00e1men\u00ed a\u017e po integraci | ProHoster","description":"Znechucen od nekone\u010dn\u00e9ho code review nebo lad\u011bn\u00ed, ob\u010das p\u0159em\u00fd\u0161l\u00edte, jak si usnadnit \u017eivot. A po tro\u0161e hled\u00e1n\u00ed, nebo n\u00e1hodou naraz\u00edte na kouzeln\u00e9 spojen\u00ed: \"Statick\u00e1 anal\u00fdza\".","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/91065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=91065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/91065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/91066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=91065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=91065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=91065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}