{"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\/da\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","title":{"rendered":"Statisk analyse \u2013 fra introduktion til integration","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tr\u00e6theden ved den uendelige code review eller debugging kan f\u00e5 en til at t\u00e6nke p\u00e5, hvordan man kan forenkle livet. Efter lidt s\u00f8gen, eller ved et tilf\u00e6lde, kan man st\u00f8de p\u00e5 den magiske s\u00e6tning: \"Statisk analyse\". Lad os se p\u00e5, hvad det er, og hvordan det kan interagere med dit projekt.<\/p>\n<p><img decoding=\"async\" alt=\"Statisk analyse \u2013 fra introduktion til integration\" src=\"\/wp-content\/uploads\/2020\/08\/7811b22510bdda6f3f774b8335cbeabe.png\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nFaktisk, hvis du skriver i et moderne programmeringssprog, s\u00e5 har du, uden at vide det, brugt en statisk analyserer. Det skyldes, at enhver moderne compiler tilbyder et lille, men v\u00e6sentligt set af advarsler om potentielle problemer i koden. For eksempel, n\u00e5r du kompilerer C++ kode i Visual Studio, kan du se f\u00f8lgende:<\/p>\n<p><img decoding=\"async\" alt=\"Statisk analyse \u2013 fra introduktion til integration\" src=\"\/wp-content\/uploads\/2020\/08\/a267e4e8a57c1a32e508e5e1983c5ff0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI denne output ser vi, at variablen <i>var<\/i> ikke blev brugt nogen steder i funktionen. S\u00e5 du har faktisk n\u00e6sten altid benyttet en simpel statisk kodeanalysator. Men i mods\u00e6tning til professionelle analyser som Coverity, Klocwork eller PVS-Studio, kan de advarsler, som compilers tilbyder, kun pege p\u00e5 en begr\u00e6nset r\u00e6kke af problemer.<\/p>\n<p>Hvis du ikke er helt sikker p\u00e5, hvad statisk analyse er, og hvordan man implementerer det, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0046\/\">. Datastore skal v\u00e6re ikke-lokal, s\u00e5 Kubernetes mere fleksibelt kan v\u00e6lge en ny node efter genstart eller relokation.<\/a><\/noindex>, for at l\u00e6re mere om denne metodologi. <\/p>\n<h2>Hvorfor er statisk analyse n\u00f8dvendig?<\/h2>\n<p>\nKort sagt: acceleration og forenkling. <\/p>\n<p>Statisk analyse g\u00f8r det muligt at finde mange forskellige problemer i koden: fra forkert brug af sprogkonstruktioner til tastefejl. For eksempel, i stedet for <\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.z;<\/code><\/pre>\n<p>\nskrev du f\u00f8lgende kode:<\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.x;<\/code><\/pre>\n<p>\nSom du kan se, er der en tastefejl i den sidste linje. For eksempel giver PVS-Studio f\u00f8lgende advarsel:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v537\/\">V537<\/a><\/noindex> Overvej at gennemg\u00e5 korrektheden af 'y' elementets brug.<\/p>\n<p>Hvis du \u00f8nsker at teste denne fejl manuelt, s\u00e5 pr\u00f8v det f\u00e6rdige eksempel p\u00e5 Compiler Explorer: *<noindex><a rel=\"nofollow\" href=\"https:\/\/godbolt.org\/z\/cd4WK7\">klik<\/a><\/noindex>*.<\/p>\n<p>Og som du forst\u00e5r, er det ikke altid muligt at l\u00e6gge m\u00e6rke til s\u00e5danne kodeomr\u00e5der med det samme, og derfor kan man ende med at sidde fast i debugging i lang tid, undrende over, hvorfor alt fungerer s\u00e5 m\u00e6rkeligt. <\/p>\n<p>Men det er en \u00e5benlys fejl. Hvad hvis udvikleren skrev suboptimal kode, fordi han glemte en nuance i sproget? Eller for\u00e5rsagede en <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>Det er netop i disse situationer, at statisk analyse blev introduceret. Det er en hj\u00e6lper for udvikleren, som vil p\u00e5pege forskellige problemer i koden og forklare i dokumentationen, hvorfor det ikke er n\u00f8dvendigt at skrive s\u00e5dan, hvilke konsekvenser det kan have, og hvordan man kan rette det. Her er et eksempel p\u00e5, hvordan det kan se ud: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v702\/\">klik<\/a><\/noindex>*.<\/p>\n<p>Flere interessante fejl, som analysatoren kan opdage, kan du finde i artiklerne:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0700\/\">Top 10 fejl i C++ projekter i 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Top 10 fejl i C# projekter i 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Top 10 fejl i Java projekter i 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nNu, efter at have l\u00e6st dette materiale og bekr\u00e6ftet fordelene ved statisk analyse, kan du have lyst til at pr\u00f8ve det i praksis. Men hvordan kommer man i gang? Hvordan integrerer man et nyt v\u00e6rkt\u00f8j i det nuv\u00e6rende projekt? Og hvordan introducerer man teamet for det? Du vil finde svarene p\u00e5 disse sp\u00f8rgsm\u00e5l nedenfor.<\/p>\n<p><b>Bem\u00e6rkning.<\/b> Statisk analyse erstatter ikke og annullerer ikke noget s\u00e5 nyttigt som kodegennemgange. Den supplerer denne proces ved at hj\u00e6lpe med at opdage og rette stavefejl, un\u00f8jagtigheder og farlige konstruktioner p\u00e5 forh\u00e5nd. Det er langt mere produktivt at fokusere p\u00e5 algoritmer og kodeforst\u00e5else under kodegennemgange, frem for at lede efter forkert placerede parenteser eller <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">at l\u00e6se kedelige sammenligningsfunktioner<\/a><\/noindex>.<\/p>\n<h2>0. Introduktion til v\u00e6rkt\u00f8jet<\/h2>\n<p>\nDet hele starter med en pr\u00f8veversion. Det er i sandhed sv\u00e6rt at tage skridtet til at implementere noget i udviklingsprocessen, hvis man aldrig har set v\u00e6rkt\u00f8jet i aktion f\u00f8r. S\u00e5 det f\u00f8rste skridt er at downloade <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/?promo=mscas\">en pr\u00f8veversion<\/a><\/noindex>.<\/p>\n<p><b>Hvad du vil l\u00e6re p\u00e5 dette trin:<\/b><\/p>\n<ul>\n<li>Hvilke m\u00e5der der er til interaktion med analysatoren;<\/li>\n<li>Om analysatoren er kompatibel med dit udviklingsmilj\u00f8;<\/li>\n<li>Hvilke problemer der i \u00f8jeblikket er i dine projekter.<\/li>\n<\/ul>\n<p>\nN\u00e5r du har installeret alt det n\u00f8dvendige, s\u00e5 er det f\u00f8rste skridt at k\u00f8re analysen af hele projektet (<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>). I tilf\u00e6lde af PVS-Studio i Visual Studio vil du se et lignende billede (klikbart):<\/p>\n<p><img decoding=\"async\" alt=\"Statisk analyse \u2013 fra introduktion til integration\" src=\"\/wp-content\/uploads\/2020\/08\/865b2dfa10661e4999238cdccf8860dc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nProblemet er, at statiske analysatorer normalt viser et enormt antal advarsler for projekter med store kodebaser. Det er ikke n\u00f8dvendigt at rette dem alle, da dit projekt allerede fungerer, og derfor er disse problemer ikke kritiske. Men du <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">kan se p\u00e5 de mest interessante advarsler<\/a><\/noindex> og filtrere output og efterlade kun de mest p\u00e5lidelige meddelelser. I PVS-Studio-plugin'et til Visual Studio g\u00f8res dette ved at filtrere efter niveauer og fejltyper. For det mest pr\u00e6cise output skal du kun holde f\u00f8lgende aktiveret <i>H\u00f8j<\/i> og <i>Generelt<\/i> (ogs\u00e5 klikbart):<\/p>\n<p><img decoding=\"async\" alt=\"Statisk analyse \u2013 fra introduktion til integration\" src=\"\/wp-content\/uploads\/2020\/08\/400b90713f67b531e4ed513ea9d340a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVirkelig, det er meget lettere at gennemg\u00e5 178 advarsler end flere tusinde...<\/p>\n<p>Under fanerne <i>Medium<\/i> og <i>Lav<\/i> findes der ofte gode advarsler, men i disse kategorier er der also diagnosticeringer, som har lavere n\u00f8jagtighed (p\u00e5lidelighed). Du kan l\u00e6se mere om advarselsniveauer og arbejdsmetoder under Windows her: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">klik<\/a><\/noindex>*.<\/p>\n<p>N\u00e5r du har gennemg\u00e5et de mest interessante fejl (og succesfuldt rettet dem), er det tid til <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0032\/\">at undertrykke de resterende advarsler<\/a><\/noindex>. Dette er n\u00f8dvendigt, s\u00e5 nye advarsler ikke g\u00e5r tabt blandt de gamle. Desuden er en statisk analyser bare en hj\u00e6lp til programm\u00f8ren, ikke en liste over fejl. \ud83d\ude42<\/p>\n<h2>1. Automatisering<\/h2>\n<p>\nEfter introduktionen er det tid til at konfigurere plugins og integrere i CI. Dette skal g\u00f8res, inden programm\u00f8rerne begynder at bruge den statiske analyser. Problemet er, at programm\u00f8ren kan glemme at aktivere analysen eller simpelthen ikke \u00f8nsker det. Derfor er det n\u00f8dvendigt at gennemf\u00f8re en sidste kontrol af alt, s\u00e5 ikke-godkendt kode ikke kan komme ind i den f\u00e6lles udviklingsgren.<\/p>\n<p><b>Hvad du vil l\u00e6re p\u00e5 dette trin:<\/b><\/p>\n<ul>\n<li>Hvilke automatiseringsmuligheder v\u00e6rkt\u00f8jet tilbyder;<\/li>\n<li>Om analysatoren er kompatibel med dit buildsystem.<\/li>\n<\/ul>\n<p>\nDa der ikke findes nogen perfekt dokumentation, m\u00e5 vi nogle gange skrive til <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">support<\/a><\/noindex>. Det er helt normalt, og vi er glade for at hj\u00e6lpe. \ud83d\ude42<\/p>\n<p>Og nu lad os se p\u00e5 tjenester til kontinuerlig integration (CI). Enhver analyser kan implementeres i dem uden alvorlige problemer. Dette kr\u00e6ver, at der oprettes et separat trin i pipeline, som normalt er efter build og unit-tests. Dette g\u00f8res ved hj\u00e6lp af forskellige konsolv\u00e6rkt\u00f8jer. For eksempel tilbyder PVS-Studio f\u00f8lgende v\u00e6rkt\u00f8jer:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\">PVS-Studio_Cmd.exe<\/a><\/noindex> (analyse af l\u00f8sninger, C#, C++ projekter p\u00e5 Windows)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0031\/\">CLMonitor.exe<\/a><\/noindex> (kompileringsmonitor)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">pvs-studio-analyzer<\/a><\/noindex> (analyse af C++ projekter p\u00e5 Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\/\">pvs-studio-dotnet<\/a><\/noindex> (analyse af l\u00f8sninger, C# projekter p\u00e5 Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">pvs-studio.jar<\/a><\/noindex> (analyse af Java projekter)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">PlogConverter<\/a><\/noindex> (filkonverteringsv\u00e6rkt\u00f8j til rapporter)<\/li>\n<\/ul>\n<p>\nFor at integrere analysen i CI skal tre ting g\u00f8res:<\/p>\n<ul>\n<li>Installere analyseren;<\/li>\n<li>K\u00f8re analysen;<\/li>\n<li>Lever resultatet.<\/li>\n<\/ul>\n<p>\nFor eksempel, for at installere PVS-Studio p\u00e5 Linux (Debian-baseret) skal du k\u00f8re f\u00f8lgende kommandoer:<\/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>\nI Windows-systemer er der ikke mulighed for at installere analysatoren fra pakkestyringssystemet, men der er mulighed for at implementere analysatoren fra kommandolinjen:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nDu kan l\u00e6se mere om implementering af PVS-Studio i Windows-systemer *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">her<\/a><\/noindex>*.<\/p>\n<p>Efter installationen skal du starte selve analysen. Det anbefales dog at g\u00f8re det f\u00f8rst, efter at kompileringen og testene er gennemf\u00f8rt. Dette skyldes, at statisk analyse typisk kr\u00e6ver dobbelt s\u00e5 lang tid som kompilering.<\/p>\n<p>Da m\u00e5den at starte afh\u00e6nger af platformen og projektets egenskaber, vil jeg vise et eksempel for C++ (Linux):<\/p>\n<pre><code class=\"bash\">pvs-studio-analyzer analyze -j8 \n                            -o PVS-Studio.log\nplog-converter -t errorfile PVS-Studio.log --cerr -w<\/code><\/pre>\n<p>\nDen f\u00f8rste kommando udf\u00f8rer analysen, mens den anden <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">konverterer<\/a><\/noindex>rapporten til tekstformat, viser den p\u00e5 sk\u00e6rmen og returnerer en kode forskellig fra 0 i tilf\u00e6lde af advarsler. Denne mekanisme er praktisk at bruge til at blokere byggeriet, n\u00e5r der er fejlmeddelelser. Du kan dog altid fjerne flaget <i>-w<\/i> og ikke blokere byggeriet, der indeholder advarsler.<\/p>\n<p><b>Bem\u00e6rkning.<\/b> Tekstformatet er ikke bekvemt. Det gives blot som et eksempel. V\u00e6r opm\u00e6rksom p\u00e5 det mere interessante rapportformat - FullHtml. Det giver mulighed for at navigere i koden.<\/p>\n<p>Du kan l\u00e6se mere om, hvordan man konfigurerer analysen i CI i artiklen \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0005\">PVS-Studio og Continuous Integration<\/a><\/noindex>\" (Windows) eller \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0661\/\">Hvordan man indstiller PVS-Studio i Travis CI<\/a><\/noindex>\" (Linux).<\/p>\n<p>Fint, du har konfigureret analysatoren til at k\u00f8re p\u00e5 build-serveren. Nu, hvis nogen har uploadet uafpr\u00f8vet kode, vil byggechecken fejle, og du vil kunne opdage problemet. Dog er det ikke helt praktisk, da det er mere effektivt at tjekke projektet inden sammenl\u00e6gning af grene, nemlig under pull requesten.<\/p>\n<p>Generelt er ops\u00e6tningen af analysen p\u00e5 pull requests ikke meget anderledes end at k\u00f8re analysen i CI. Undtaget er behovet for at f\u00e5 listen over \u00e6ndrede filer. Normalt kan de f\u00e5s ved at anmode om forskellen mellem grenene med git:<\/p>\n<pre><code class=\"bash\">git diff --name-only HEAD origin\/$MERGE_BASE &gt; .pvs-pr.list<\/code><\/pre>\n<p>\nNu skal vi give denne fil liste til analysatoren. For eksempel er dette implementeret i PVS-Studio ved hj\u00e6lp af flaget <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>\nDu kan l\u00e6re mere om analysen af pull requests *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0679\/\">her<\/a><\/noindex>*. Selvom din CI ikke er p\u00e5 listen over n\u00e6vnte tjenester i artiklen, vil du finde den generelle sektion om teorien bag denne type analyse nyttig.<\/p>\n<p>Ved at konfigurere analysen af pull requests kan du blokere commits, der indeholder advarsler, og dermed skabe en gr\u00e6nse, som uafpr\u00f8vet kode ikke kan krydse.<\/p>\n<p>Dette er alt sammen godt, men man ville gerne have muligheden for at se alle advarsler \u00e9t sted. Ikke kun fra statiske analysetools, men ogs\u00e5 fra unit tests eller dynamiske analysev\u00e6rkt\u00f8jer. Til dette findes der forskellige tjenester og plugins. PVS-Studio har for eksempel en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0037\/\">plugin til integration i SonarQube<\/a><\/noindex>.<\/p>\n<h2>2. Integration p\u00e5 udvikler-maskiner<\/h2>\n<p>\nNu er det tid til at installere og konfigurere analysatoren til hverdagsbrug under udviklingen. P\u00e5 dette tidspunkt har du allerede l\u00e6rt det meste af arbejdsmetoderne, s\u00e5 dette kan kaldes den nemmeste del.<\/p>\n<p>Som den nemmeste mulighed kan udviklerne selv installere den n\u00f8dvendige analyser. Men det vil tage meget tid og aflede dem fra udviklingen, s\u00e5 du kan automatisere denne proces ved hj\u00e6lp af en installer og de n\u00f8dvendige flags. For PVS-Studio er der forskellige <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">flags til automatiseret installation<\/a><\/noindex>. I \u00f8vrigt er der altid pakkemanagere, som for eksempel Chocolatey (Windows), Homebrew (macOS) eller dusinvis af muligheder for Linux.<\/p>\n<p>F\u00f8rst skal du installere de n\u00f8dvendige plugins, for eksempel til <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. Dagligt brug<\/h2>\n<p>\nP\u00e5 dette stadium er det tid til at sige et par ord om m\u00e5der at fremskynde analyserens arbejdsproces p\u00e5 i daglig brug. En fuld analyse af hele projektet tager meget lang tid, men hvor ofte \u00e6ndrer vi koden i hele projektet p\u00e5 \u00e9n gang? Der findes n\u00e6ppe et s\u00e5 stort refaktor, der straks p\u00e5virker hele kodebasen. Antallet af filer, der \u00e6ndres ad gangen, overstiger sj\u00e6ldent et dusin, s\u00e5 det giver mening at analysere dem. Der findes en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">tilstand for inkrementel analyse<\/a><\/noindex>. Bare ikke v\u00e6r bange, det er ikke et endnu et v\u00e6rkt\u00f8j. Det er en specialtilstand, der tillader at analysere kun de \u00e6ndrede filer og deres afh\u00e6ngigheder, og dette sker automatisk efter bygning, hvis du arbejder i en IDE med den installerede plugin. <\/p>\n<p>I tilf\u00e6lde af, at analysatoren opdager problemer i den nyligt \u00e6ndrede kode, vil den informere dig selv. For eksempel vil PVS-Studio fort\u00e6lle dig dette via en notifikation:<\/p>\n<p><img decoding=\"async\" alt=\"Statisk analyse \u2013 fra introduktion til integration\" src=\"\/wp-content\/uploads\/2020\/08\/20456a6652f0bd4f62d9aea5f1dda5cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet er ikke nok bare at sige til udviklerne at bruge v\u00e6rkt\u00f8jet. Man skal p\u00e5 en eller anden m\u00e5de fort\u00e6lle dem, hvad det er, og hvordan det fungerer. Her er for eksempel artikler om hurtig start for PVS-Studio, men du kan finde s\u00e5danne tutorials for ethvert af de v\u00e6rkt\u00f8jer, du foretr\u00e6kker:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/\">S\u00e5dan k\u00f8rer du PVS-Studio i Windows (C, C++, C#)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">S\u00e5dan k\u00f8rer du PVS-Studio i Linux og macOS (C, C++)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">S\u00e5dan k\u00f8rer du PVS-Studio Java<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nS\u00e5danne artikler giver al den n\u00f8dvendige information til daglig brug og tager ikke meget tid. \ud83d\ude42<\/p>\n<p>Allerede i begyndelsen af bekendtskabet med v\u00e6rkt\u00f8jet har vi undertrykt mange advarsler under en af de f\u00f8rste opstarter. Desv\u00e6rre er statiske analysatorer ikke perfekte, s\u00e5 de giver nogle gange falske positiver. At undertrykke dem er normalt let, for eksempel i PVS-Studio plugin til Visual Studio beh\u00f8ver du bare at trykke p\u00e5 en knap:<\/p>\n<p><img decoding=\"async\" alt=\"Statisk analyse \u2013 fra introduktion til integration\" src=\"\/wp-content\/uploads\/2020\/08\/ed5382f468d21b7e711caba73b439fda.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMen du kan ikke kun undertrykke dem. For eksempel kan du rapportere til supporten om, at der er et problem. Hvis den falske positiv kan rettes, kan du i fremtidige opdateringer bem\u00e6rke, at der bliver f\u00e6rre og f\u00e6rre specifikke falske positiver for din kodebase.<\/p>\n<h2>Efter integrationen<\/h2>\n<p>\nVi har nu gennemg\u00e5et alle trin til at integrere statisk analyse i udviklingsprocessen. P\u00e5 trods af vigtigheden af at konfigurere s\u00e5danne v\u00e6rkt\u00f8jer i CI, er det vigtigste sted for opstart faktisk computerens udvikler. For en statisk analysator er ikke en dommer, der siger et eller andet sted langt v\u00e6k, at koden ikke er god nok. Nej, det er en hj\u00e6lper, der skulle vejlede dig, hvis du er tr\u00e6t og minder dig om, hvis du har glemt noget.<\/p>\n<p>Sandhedens er det uden regelm\u00e6ssig brug, at statisk analyse n\u00e6ppe vil forenkle udviklingen betydeligt. For udvikleren ligger den st\u00f8rste fordel ikke s\u00e5 meget i at finde komplekse og tvivlsomme dele af koden, men i at opdage dem tidligt. Enig, det er ikke kun ubehageligt, men ogs\u00e5 meget tidskr\u00e6vende at opdage problemer, n\u00e5r \u00e6ndringerne er sendt til test. Statisk analyse, n\u00e5r den bruges regelm\u00e6ssigt, gennemg\u00e5r hver \u00e6ndring direkte p\u00e5 din computer og giver besked om mist\u00e6nkelige steder under arbejdet med koden.<\/p>\n<p>Og hvis du eller dine kolleger stadig er usikre p\u00e5, om det er v\u00e6rd at implementere analysatoren, s\u00e5 foresl\u00e5r jeg, at du nu l\u00e6ser artiklen \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0687\/\">\u00c5rsager til at implementere statisk kodeanalyse i udviklingsprocessen med PVS-Studio<\/a><\/noindex>\". Den tager fat p\u00e5 almindelige bekymringer blandt udviklere om, at statisk analyse vil tage deres tid og s\u00e5 videre.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\"><img decoding=\"async\" alt=\"Statisk analyse \u2013 fra introduktion til integration\" src=\"\/wp-content\/uploads\/2020\/08\/6372d668354f708cb0e08df27bb39bdd.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Hvis du \u00f8nsker at dele denne artikel med et engelsktalende publikum, bedes du bruge linket til overs\u00e6ttelsen: Maxim Zvyagintsev. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\">Statisk Analyse: Fra at komme i gang til integration<\/a><\/noindex>.<br \/>\n<br \/>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Statisk analyse \u2013 fra introduktion til integration | ProHoster","description":"Tr\u00e6t af det uendelige code review eller debugging, s\u00e5 t\u00e6nker man ind imellem p\u00e5, hvordan man kunne forenkle sit liv. Og efter lidt s\u00f8gen, eller ved et tilf\u00e6lde, kan man st\u00f8de p\u00e5 det magiske udtryk: \"Statisk analyse\".","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/91065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=91065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/91065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/91066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=91065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=91065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=91065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}