{"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\/it\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","title":{"rendered":"Analisi statica \u2013 dalla conoscenza all'integrazione","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Stanco di interminabili code review o debugging, a volte ti chiedi come semplificarti la vita. E dopo aver cercato un po\u2019, o inciampando casualmente, puoi imbattersi nella magica espressione: \"analisi statica\". Vediamo cosa sia e come pu\u00f2 interagire con il tuo progetto.<\/p>\n<p><img decoding=\"async\" alt=\"Analisi statica \u2013 dalla conoscenza all&#039;integrazione\" src=\"\/wp-content\/uploads\/2020\/08\/7811b22510bdda6f3f774b8335cbeabe.png\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nIn effetti, se scrivi in un linguaggio moderno, anche senza saperlo, hai gi\u00e0 passato il tuo codice attraverso un analizzatore statico. Ogni compilatore moderno fornisce, anche se in modo minimale, un insieme di avvisi su potenziali problemi nel codice. Ad esempio, compilando codice C++ in Visual Studio potresti vedere quanto segue:<\/p>\n<p><img decoding=\"async\" alt=\"Analisi statica \u2013 dalla conoscenza all&#039;integrazione\" src=\"\/wp-content\/uploads\/2020\/08\/a267e4e8a57c1a32e508e5e1983c5ff0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn questo output vediamo che la variabile <i>var<\/i> non \u00e8 stata utilizzata da nessuna parte nella funzione. Quindi, in realt\u00e0, hai quasi sempre utilizzato un semplice analizzatore statico di codice. Tuttavia, a differenza degli analizzatori professionali, come Coverity, Klocwork o PVS-Studio, gli avvisi forniti dal compilatore possono segnalare solo un numero limitato di problemi.<\/p>\n<p>Se non sei sicuro di cosa sia l'analisi statica e come implementarla, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0046\/\">leggi questo articolo<\/a><\/noindex>, per approfondire questa metodologie. <\/p>\n<h2>Perch\u00e9 \u00e8 necessario un'analisi statica?<\/h2>\n<p>\nIn poche parole: accelerare e semplificare. <\/p>\n<p>L'analisi statica consente di trovare numerosi problemi nel codice: dal cattivo utilizzo delle strutture del linguaggio fino a errori di battitura. Ad esempio, invece di <\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.z;<\/code><\/pre>\n<p>\nHai scritto il seguente codice:<\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.x;<\/code><\/pre>\n<p>\nCome puoi vedere, nell'ultima riga c'\u00e8 un errore di battitura. Ad esempio, PVS-Studio emette il seguente avviso:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v537\/\">V537<\/a><\/noindex> Considera di rivedere la correttezza dell'uso dell'elemento 'y'.<\/p>\n<p>Se vuoi testare questo errore manualmente, prova l'esempio su Compiler Explorer: *<noindex><a rel=\"nofollow\" href=\"https:\/\/godbolt.org\/z\/cd4WK7\">clicca<\/a><\/noindex>*.<\/p>\n<p>E come puoi capire, non sempre \u00e8 possibile prestare attenzione a segni simili nel codice immediatamente e per questo si pu\u00f2 rimanere bloccati nella debug per un bel po', domandandosi perch\u00e9 tutto funzioni in modo cos\u00ec strano. <\/p>\n<p>Tuttavia, questo \u00e8 un errore evidente. E se lo sviluppatore ha scritto codice non ottimale perch\u00e9 ha dimenticato un qualche dettaglio del linguaggio? Oppure ha addirittura introdotto nel codice <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0066\/\">un comportamento indefinito<\/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>\u00c8 proprio per queste situazioni che \u00e8 nato l'analisi statica. Si tratta di un'assistente per gli sviluppatori che segnala diverse problematiche nel codice, spiegando nella documentazione perch\u00e9 non si dovrebbe scrivere in quel modo, quali conseguenze potrebbero derivarne e come porvi rimedio. Ecco un esempio di come potrebbe apparire: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v702\/\">clicca<\/a><\/noindex>*.<\/p>\n<p>Puoi trovare ulteriori interessanti errori che l'analizzatore pu\u00f2 scoprire negli articoli:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0700\/\">Le 10 principali errori nei progetti C++ del 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Le 10 principali errori nei progetti C# del 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Le 10 principali errori nei progetti Java del 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nOra, dopo aver letto questo materiale e esserti convinto dei vantaggi dell'analisi statica, potresti volere provare a metterla in pratica. Ma da dove iniziare? Come integrare un nuovo strumento nel progetto attuale? E come far conoscere il tutto al team? Troverai le risposte a queste domande qui sotto.<\/p>\n<p><b>Nota.<\/b> L'analisi statica non sostituisce n\u00e9 annulla l'utilit\u00e0 delle revisioni del codice. Essa integra questo processo, aiutando a individuare e correggere in anticipo errori tipografici, imprecisioni e costrutti pericolosi. \u00c8 molto pi\u00f9 produttivo concentrarsi durante le revisioni del codice sugli algoritmi e sulla chiarezza del codice, piuttosto che cercare una parentesi messa male o <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">leggere funzioni di confronto noiose<\/a><\/noindex>.<\/p>\n<h2>0. Introduzione allo strumento<\/h2>\n<p>\nTutto inizia con una versione di prova. \u00c8 davvero difficile decidere di implementare qualcosa nel processo di sviluppo se non si \u00e8 mai visto lo strumento dal vivo. Pertanto, la prima cosa da fare \u00e8 scaricare <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/?promo=mscas\">la versione di prova<\/a><\/noindex>.<\/p>\n<p><b>Cosa imparerai in questo passaggio:<\/b><\/p>\n<ul>\n<li>Quali sono i metodi di interazione con l'analizzatore;<\/li>\n<li>Se l'analizzatore \u00e8 compatibile con il tuo ambiente di sviluppo;<\/li>\n<li>Quali problemi ci sono attualmente nei tuoi progetti.<\/li>\n<\/ul>\n<p>\nDopo aver installato tutto il necessario, la prima cosa da fare \u00e8 avviare l'analisi dell'intero progetto (<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>). Nel caso di PVS-Studio in Visual Studio vedrai un'immagine simile (cliccabile):<\/p>\n<p><img decoding=\"async\" alt=\"Analisi statica \u2013 dalla conoscenza all&#039;integrazione\" src=\"\/wp-content\/uploads\/2020\/08\/865b2dfa10661e4999238cdccf8860dc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIl fatto \u00e8 che solitamente per i progetti con una grande base di codice, gli analizzatori statici producono un'enorme quantit\u00e0 di avvisi. Non \u00e8 necessario correggerli tutti, poich\u00e9 il tuo progetto \u00e8 gi\u00e0 funzionante, il che significa che questi problemi non sono critici. Tuttavia, puoi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">dare un'occhiata ai avvisi pi\u00f9 interessanti<\/a><\/noindex> e correggerli se necessario. Per fare ci\u00f2, \u00e8 necessario filtrare l'output e mantenere solo i messaggi pi\u00f9 affidabili. Nel plugin PVS-Studio per Visual Studio, questo avviene filtrando per livelli e categorie di errori. Per un output pi\u00f9 accurato, mantenere attivate solo <i>Alto<\/i> e <i>Generale<\/i> (cliccabile anche):<\/p>\n<p><img decoding=\"async\" alt=\"Analisi statica \u2013 dalla conoscenza all&#039;integrazione\" src=\"\/wp-content\/uploads\/2020\/08\/400b90713f67b531e4ed513ea9d340a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nInfatti, rivedere 178 avvisi \u00e8 decisamente pi\u00f9 semplice che migliaia\u2026<\/p>\n<p>Nelle schede <i>Medium<\/i> e <i>Basso<\/i> spesso si trovano buoni avvisi, tuttavia in queste categorie sono inclusi anche quei diagnosticamenti che hanno una minore precisione (affidabilit\u00e0). Maggiori dettagli sui livelli di avvisi e sulle modalit\u00e0 di funzionamento su Windows possono essere consultati qui: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">clicca<\/a><\/noindex>*.<\/p>\n<p>Dopo aver esaminato con successo gli errori pi\u00f9 interessanti (e averli corretti con successo), \u00e8 utile <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0032\/\">sopprimere gli avvisi rimanenti<\/a><\/noindex>. Questo \u00e8 necessario affinch\u00e9 i nuovi avvisi non si perdano tra i vecchi. Inoltre, l'analizzatore statico \u00e8 un assistente per il programmatore, non un elenco di bug. \ud83d\ude42<\/p>\n<h2>1. Automazione<\/h2>\n<p>\nDopo il primo incontro, \u00e8 il momento di configurare i plugin e integrarli nel CI. Questo deve essere fatto prima che gli sviluppatori inizino a utilizzare l'analizzatore statico. Infatti, il programmatore potrebbe dimenticare di attivare l'analisi o semplicemente non volerlo fare. \u00c8 necessario eseguire un'ultima verifica per garantire che il codice non controllato non possa entrare nel ramo di sviluppo principale.<\/p>\n<p><b>Cosa imparerai in questa fase:<\/b><\/p>\n<ul>\n<li>Quali opzioni di automazione offre lo strumento;<\/li>\n<li>Se l'analizzatore \u00e8 compatibile con il tuo sistema di build.<\/li>\n<\/ul>\n<p>\nPoich\u00e9 la documentazione perfetta non esiste, a volte \u00e8 necessario scrivere a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">assistenza<\/a><\/noindex>. \u00c8 normale, e siamo felici di aiutarti. \ud83d\ude42<\/p>\n<p>Ora passiamo ai servizi di integrazione continua (CI). Qualunque analizzatore pu\u00f2 essere implementato in essi senza problemi significativi. \u00c8 necessario creare una fase separata nel pipeline, che di solito si trova dopo la compilazione e i test unitari. Questo si fa utilizzando diverse utilit\u00e0 da console. Ad esempio, PVS-Studio fornisce le seguenti utilit\u00e0:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\">PVS-Studio_Cmd.exe<\/a><\/noindex> (analisi di soluzioni, progetti C#, C++ su Windows)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0031\/\">CLMonitor.exe<\/a><\/noindex> (monitoraggio della compilazione)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">pvs-studio-analyzer<\/a><\/noindex> (analisi di progetti C++ su Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\/\">pvs-studio-dotnet<\/a><\/noindex> (analisi delle soluzioni, progetti C# su Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">pvs-studio.jar<\/a><\/noindex> (analisi dei progetti Java)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">PlogConverter<\/a><\/noindex> (convertitore di file di report)<\/li>\n<\/ul>\n<p>\nPer integrare l'analisi nel CI \u00e8 necessario seguire tre passaggi:<\/p>\n<ul>\n<li>Installare l'analizzatore;<\/li>\n<li>Eseguire l'analisi;<\/li>\n<li>Consegna dei risultati.<\/li>\n<\/ul>\n<p>\nAd esempio, per installare PVS-Studio su Linux (basato su Debian) \u00e8 necessario eseguire i seguenti comandi:<\/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>\nNei sistemi basati su Windows non \u00e8 possibile installare l'analizzatore tramite il gestore di pacchetti, ma \u00e8 possibile eseguire l'analizzatore tramite la riga di comando:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nPer ulteriori informazioni su come implementare PVS-Studio nei sistemi Windows, \u00e8 possibile leggere *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">qui<\/a><\/noindex>*.<\/p>\n<p>Dopo l'installazione, \u00e8 necessario avviare l'analisi. Tuttavia, si consiglia di farlo solo dopo che la compilazione e i test sono stati completati. Questo \u00e8 dovuto al fatto che l'analisi statica richiede generalmente il doppio del tempo rispetto alla compilazione.<\/p>\n<p>Poich\u00e9 il modo di avvio dipende dalla piattaforma e dalle specifiche del progetto, mostrer\u00f2 un esempio per 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>\nIl primo comando eseguir\u00e0 l'analisi, mentre il secondo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">conver<\/a><\/noindex>te il rapporto in formato testo, lo visualizzer\u00e0 a schermo e restituir\u00e0 un codice di uscita diverso da 0 in caso di avvisi. Un meccanismo simile \u00e8 utile per bloccare la build in presenza di messaggi di errore. Tuttavia, puoi sempre rimuovere il flag <i>-w<\/i> e non bloccare la build contenente avvisi.<\/p>\n<p><b>Nota.<\/b> Il formato testo \u00e8 scomodo. \u00c8 fornito solo come esempio. Nota un formato di rapporto pi\u00f9 interessante: FullHtml. Esso consente di navigare nel codice.<\/p>\n<p>Puoi leggere di pi\u00f9 sulla configurazione dell'analisi su CI nell'articolo \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0005\">PVS-Studio e Continuous Integration<\/a><\/noindex>\" (Windows) o \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0661\/\">Come configurare PVS-Studio in Travis CI<\/a><\/noindex>\" (Linux).<\/p>\n<p>Bene, hai configurato il funzionamento dell'analizzatore sul server di build. Ora, se qualcuno ha caricato codice non verificato, il passaggio di verifica fallir\u00e0 e potrai individuare il problema, ma non \u00e8 molto comodo, poich\u00e9 \u00e8 pi\u00f9 efficace controllare il progetto prima della fusione dei rami, durante la fase di pull request.<\/p>\n<p>In generale, la configurazione dell'analisi della pull request non \u00e8 molto diversa da quella di un'analisi normale su CI. A parte la necessit\u00e0 di ottenere l'elenco dei file modificati. Di solito, puoi ottenerli richiedendo la differenza tra i rami usando git:<\/p>\n<pre><code class=\"bash\">git diff --name-only HEAD origin\/$MERGE_BASE &gt; .pvs-pr.list<\/code><\/pre>\n<p>\nOra \u00e8 necessario passare questo elenco di file all'analizzatore. Ad esempio, in PVS-Studio ci\u00f2 \u00e8 realizzato tramite un flag <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>\nPuoi scoprire di pi\u00f9 sull'analisi delle pull request *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0679\/\">qui<\/a><\/noindex>*. Anche se il tuo CI non \u00e8 nell'elenco dei servizi indicati nell'articolo, ti sar\u00e0 utile la sezione generale dedicata alla teoria di questo tipo di analisi.<\/p>\n<p>Configurando l'analisi delle pull request, potrai bloccare i commit che contengono avvisi, creando cos\u00ec un confine che il codice non verificato non potr\u00e0 oltrepassare.<\/p>\n<p>Tutto ci\u00f2 \u00e8 sicuramente positivo, tuttavia sarebbe utile poter visualizzare tutti gli avvisi in un unico posto. Non solo da parte dell'analizzatore statico, ma anche da unit test o da analizzatori dinamici. A questo scopo esistono diversi servizi e plugin. PVS-Studio, ad esempio, ha <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0037\/\">un plugin per l'integrazione con SonarQube<\/a><\/noindex>.<\/p>\n<h2>2. Integrazione sui computer degli sviluppatori<\/h2>\n<p>\n\u00c8 giunto il momento di installare e configurare l'analizzatore per l'uso quotidiano durante lo sviluppo. A questo punto, hai gi\u00e0 familiarizzato con la maggior parte dei metodi di lavoro, quindi possiamo considerare questa la parte pi\u00f9 semplice.<\/p>\n<p>Come soluzione pi\u00f9 semplice, gli sviluppatori possono installare autonomamente l'analizzatore necessario. Tuttavia, questo richieder\u00e0 molto tempo e li allontaner\u00e0 dallo sviluppo. Puoi quindi automatizzare questo processo utilizzando l'installer e i flag necessari. Per PVS-Studio ci sono diversi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">flag per l'installazione automatizzata<\/a><\/noindex>. Tuttavia, ci sono sempre gestori di pacchetti, come Chocolatey (Windows), Homebrew (macOS) o decine di opzioni per Linux.<\/p>\n<p>Dopodich\u00e9, sar\u00e0 necessario installare i plugin richiesti, ad esempio per <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> ecc.<\/p>\n<h2>3. Uso quotidiano<\/h2>\n<p>\nA questo punto \u00e8 il momento di dire poche parole sui modi per accelerare il funzionamento dell'analizzatore durante l'uso quotidiano. L'analisi completa di un intero progetto richiede molto tempo, ma quanto spesso cambiamo il codice di tutto il progetto contemporaneamente? \u00c8 raro che ci sia una refattorizzazione cos\u00ec ampia da interessare immediatamente l'intera base di codice. Il numero di file modificati contemporaneamente raramente supera la decina, quindi ha senso analizzarli. In situazioni simili esiste <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">la modalit\u00e0 di analisi incrementale<\/a><\/noindex>. Ma non spaventatevi, non \u00e8 un altro strumento. \u00c8 una modalit\u00e0 speciale che permette di analizzare solo i file modificati e le loro dipendenze, il che avviene automaticamente dopo la compilazione, se si lavora in un IDE con il plugin installato. <\/p>\n<p>Nel caso in cui l'analizzatore rilevi problemi nel codice recentemente modificato, vi informer\u00e0 autonomamente. Ad esempio, PVS-Studio vi avviser\u00e0 con una notifica:<\/p>\n<p><img decoding=\"async\" alt=\"Analisi statica \u2013 dalla conoscenza all&#039;integrazione\" src=\"\/wp-content\/uploads\/2020\/08\/20456a6652f0bd4f62d9aea5f1dda5cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNon \u00e8 sufficiente dire agli sviluppatori di utilizzare lo strumento. \u00c8 necessario spiegare loro cosa sia e come si utilizzi. Ad esempio, ci sono articoli sul rapido avvio di PVS-Studio, ma tutorial simili possono essere trovati per qualsiasi altro strumento che preferite:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/\">Come avviare PVS-Studio in Windows (C, C++, C#)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">Come avviare PVS-Studio in Linux e macOS (C, C++)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">Come avviare PVS-Studio per Java<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nArticoli simili forniscono tutte le informazioni necessarie per un utilizzo quotidiano e non richiedono molto tempo. \ud83d\ude42<\/p>\n<p>Anche durante la fase iniziale di familiarizzazione con lo strumento, abbiamo disattivato molti avvisi durante uno dei primi avvii. Purtroppo, gli analizzatori statici non sono perfetti e ogni tanto generano falsi positivi. Di solito, disattivarli \u00e8 semplice; ad esempio, nel plugin PVS-Studio per Visual Studio \u00e8 sufficiente premere un pulsante:<\/p>\n<p><img decoding=\"async\" alt=\"Analisi statica \u2013 dalla conoscenza all&#039;integrazione\" src=\"\/wp-content\/uploads\/2020\/08\/ed5382f468d21b7e711caba73b439fda.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTuttavia, non \u00e8 necessario solo ignorarli. Ad esempio, puoi segnalare un problema al supporto. Se un falso positivo \u00e8 correggibile, nelle future aggiornamenti potresti notare che, col tempo, i falsi positivi specifici per il tuo codice diminuireanno sempre di pi\u00f9.<\/p>\n<h2>Dopo l'integrazione<\/h2>\n<p>\nSiamo giunti alla fine di tutti i passaggi per integrare l'analisi statica nel processo di sviluppo. Sebbene sia fondamentale configurare correttamente tali strumenti nel CI, il luogo principale in cui attivarlo \u00e8 il computer dello sviluppatore. Infatti, l'analizzatore statico non \u00e8 un giudice che ti dice da lontano che il tuo codice \u00e8 inaccettabile. Al contrario, \u00e8 un assistente che ti avverte se sei stanco e ti ricorda se hai dimenticato qualcosa.<\/p>\n<p>In verit\u00e0, senza un uso regolare, l'analisi statica probabilmente non semplificher\u00e0 significativamente lo sviluppo. La sua principale utilit\u00e0 per gli sviluppatori risiede non tanto nella ricerca di sezioni di codice complesse e controverse, quanto nella loro individuazione precoce. Concordate che scoprire un problema quando le modifiche sono gi\u00e0 in fase di test non \u00e8 solo fastidioso, ma anche molto lungo? L'analisi statica, se utilizzata regolarmente, esamina ogni variazione direttamente sul vostro computer e segnala i punti sospetti durante il lavoro sul codice.<\/p>\n<p>E se tu o i tuoi colleghi non siete ancora sicuri se implementare l'analizzatore, ti suggerisco di passare a leggere l'articolo \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0687\/\">Motivi per implementare un analizzatore di codice statico PVS-Studio nel processo di sviluppo<\/a><\/noindex>\". In esso vengono affrontate le preoccupazioni comuni degli sviluppatori riguardo al fatto che l'analisi statica possa rubare il loro tempo e cos\u00ec via.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\"><img decoding=\"async\" alt=\"Analisi statica \u2013 dalla conoscenza all&#039;integrazione\" src=\"\/wp-content\/uploads\/2020\/08\/6372d668354f708cb0e08df27bb39bdd.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Se desideri condividere questo articolo con un pubblico anglofono, ti prego di utilizzare il link alla traduzione: Maxim Zvyagintsev. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\">Analisi Statica: Dall'Inizio all'Integrazione<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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\udd47Analisi Statica \u2013 dalla conoscenza all'integrazione | ProHoster","description":"Stanco di infinite revisioni del codice o di debug, a volte ti chiedi come semplificarti la vita. E dopo un po' di ricerca, oppure inciampando casualmente, puoi imbattersi nella magica espressione: \"Analisi statica\".","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/91065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=91065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/91065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/91066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=91065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=91065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=91065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}