{"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 un'infinita revisione del codice o di debug, a volte ti chiedi come semplificarti la vita. E dopo aver cercato un po', o magari casualmente imbattendoti, puoi vedere la magica espressione: &quot;Analisi statica&quot;. Vediamo di cosa si tratta 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 stai programmando in un linguaggio moderno, anche senza rendertene conto, hai gi\u00e0 utilizzato un analizzatore statico. Infatti, qualsiasi compilatore moderno fornisce, seppur 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 in nessuna parte della 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 ridotto spettro 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 avere una comprensione pi\u00f9 dettagliata di questa metodologia. <\/p>\n<h2>A cosa serve l'analisi statica?<\/h2>\n<p>\nIn poche parole: accelera e semplifica. <\/p>\n<p>L'analisi statica permette di scoprire una miriade di problemi diversi nel codice: dall'uso errato delle strutture linguistiche a refusi. 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 \u00e8 presente 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> Ti consiglio di rivedere la correttezza dell'uso dell'elemento 'y'.<\/p>\n<p>Se desideri provare a toccare questo errore manualmente, prova l'esempio pronto 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 sezioni di codice simili immediatamente, e questo pu\u00f2 farti rimanere bloccato nel debug per un'intera ora, chiedendoti perch\u00e9 tutto funzioni in modo cos\u00ec strano. <\/p>\n<p>Tuttavia, si tratta di un errore evidente. E se uno sviluppatore ha scritto codice non ottimale perch\u00e9 ha dimenticato qualche sottigliezza del linguaggio? Oppure ha addirittura introdotto nel codice <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0066\/\">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. \u00c8 un assistente per lo sviluppatore che gli indica vari problemi nel codice e spiega nella documentazione perch\u00e9 non si dovrebbe scrivere in quel modo, a cosa pu\u00f2 portare e come correggerlo. 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 pi\u00f9 errori interessanti che l'analizzatore pu\u00f2 rilevare negli articoli:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0700\/\">Top 10 errori nei progetti C++ del 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Top 10 errori nei progetti C# del 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Top 10 errori nei progetti Java del 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nOra che hai letto questo materiale e ti sei reso conto dell'utilit\u00e0 dell'analisi statica, potresti volerla mettere alla prova. Ma da dove iniziare? Come integrare il nuovo strumento nel progetto attuale? E come presentarlo al team? Troverai le risposte a queste domande qui sotto.<\/p>\n<p><b>Nota.<\/b> L'analisi statica non sostituisce e non annulla una cosa utile come le revisioni del codice. Essa integra questo processo, aiutando a notare e correggere in anticipo errori di battitura, imprecisioni e costrutti pericolosi. \u00c8 molto pi\u00f9 produttivo concentrarsi sulle algoritmi e sulla chiarezza del codice durante le revisioni, piuttosto che cercare parentesi inserite in modo errato o <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">leggere noiose funzioni di confronto<\/a><\/noindex>.<\/p>\n<h2>0. Introduzione allo strumento<\/h2>\n<p>\nTutto inizia con una versione di prova. Infatti, \u00e8 difficile decidere di implementare qualcosa nel processo di sviluppo se non si \u00e8 mai visto uno 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 modi per interagire 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 di solito gli analizzatori statici forniscono un'enorme quantit\u00e0 di avvisi per progetti con una grande base di codice. Non \u00e8 necessario correggerli tutti, poich\u00e9 il tuo progetto \u00e8 gi\u00e0 funzionante e quindi questi problemi non sono critici. Tuttavia, puoi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">dare un'occhiata agli avvisi pi\u00f9 interessanti<\/a><\/noindex> e correggerli se necessario. Per questo \u00e8 necessario filtrare l'output e mantenere solo i messaggi pi\u00f9 affidabili. Nel plugin PVS-Studio per Visual Studio questo si fa filtrando per livelli e categorie di errori. Per un output pi\u00f9 preciso, lasciate attivi solo <i>High<\/i> e <i>Generale<\/i> (anch'esso cliccabile):<\/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, esaminare 178 avvisi \u00e8 decisamente pi\u00f9 semplice che affrontare diverse migliaia\u2026<\/p>\n<p>Nelle schede <i>Medium<\/i> e <i>Basso<\/i> spesso si trovano avvisi utili, tuttavia in queste categorie sono incluse quelle diagnosi che hanno una minore precisione (affidabilit\u00e0). Per maggiori dettagli sui livelli di avvisi e le varianti di lavoro su Windows, \u00e8 possibile controllare qui: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">clicca<\/a><\/noindex>*.<\/p>\n<p>Dopo aver esaminato gli errori pi\u00f9 interessanti (e averli corretti), \u00e8 opportuno <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 aiuto per il programmatore, non un elenco di bug. \ud83d\ude42<\/p>\n<h2>1. Automazione<\/h2>\n<p>\nDopo la familiarizzazione, arriva il momento di configurare i plugin e integrarli nel CI. \u00c8 necessario farlo prima che i programmatori inizino a usare l'analizzatore statico. Il fatto \u00e8 che un programmatore potrebbe dimenticare di attivare l'analisi o semplicemente non volerlo fare. \u00c8 importante effettuare una certa verifica finale affinch\u00e9 il codice non verificato non possa entrare nel ramo di sviluppo generale.<\/p>\n<p><b>Cosa scoprirete 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 vostro sistema di build.<\/li>\n<\/ul>\n<p>\nPoich\u00e9 non esiste documentazione ideale, a volte \u00e8 necessario scrivere a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">supporto<\/a><\/noindex>. \u00c8 normale, e siamo lieti di aiutarvi. \ud83d\ude42<\/p>\n<p>Ora passiamo ai servizi di integrazione continua (CI). Qualsiasi analizzatore pu\u00f2 essere implementato senza particolari problemi. \u00c8 necessario creare una fase separata nel pipeline, che di solito si trova dopo la compilazione e i test unitari. Questo si fa utilizzando varie utility da console. Ad esempio, PVS-Studio fornisce le seguenti utility:<\/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 di 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 di 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 fare tre cose:<\/p>\n<ul>\n<li>Installare l'analizzatore;<\/li>\n<li>Eseguire l'analisi;<\/li>\n<li>Consegnare i 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 operativi Windows non \u00e8 possibile installare l'analizzatore tramite il gestore di pacchetti, ma c'\u00e8 la possibilit\u00e0 di distribuire l'analizzatore dalla linea di comando:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nUlteriori dettagli sulla distribuzione di PVS-Studio sui sistemi Windows possono essere letti *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">qui<\/a><\/noindex>*.<\/p>\n<p>Dopo l'installazione, \u00e8 necessario avviare direttamente l'analisi. Tuttavia, si consiglia di farlo solo dopo che la compilazione e i test sono stati completati. Questo perch\u00e9 per l'analisi statica \u00e8 generalmente necessario un tempo doppio rispetto alla compilazione.<\/p>\n<p>Poich\u00e9 il modo di avvio dipende dalla piattaforma e dalle caratteristiche del progetto, mostrer\u00f2 un'opzione per C++ (Linux) come esempio:<\/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\/\">converte<\/a><\/noindex>il rapporto in formato testo, lo visualizzer\u00e0 a schermo e restituir\u00e0 un codice di ritorno diverso da 0 in caso di avvisi. Un meccanismo di questo tipo \u00e8 utile per bloccare la compilazione quando sono presenti messaggi di errore. Tuttavia, \u00e8 sempre possibile rimuovere il flag <i>-w<\/i> e non bloccare la compilazione che contiene avvisi.<\/p>\n<p><b>Nota.<\/b> Il formato testo non \u00e8 pratico. Viene fornito solo come esempio. Prendi nota di un formato di report pi\u00f9 interessante \u2014 FullHtml. Esso consente di navigare nel codice.<\/p>\n<p>Puoi leggere di pi\u00f9 sulla configurazione dell'analisi su CI nell'articolo &quot;<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0005\">PVS-Studio e Continuous Integration<\/a><\/noindex>&quot; (Windows) o &quot;<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0661\/\">Come configurare PVS-Studio in Travis CI<\/a><\/noindex>&quot; (Linux).<\/p>\n<p>Bene, hai configurato il funzionamento dell'analizzatore sul server di build. Ora, se qualcuno carica codice non verificato, il passaggio di verifica fallir\u00e0, e potrai scoprire il problema, tuttavia non \u00e8 molto conveniente, poich\u00e9 \u00e8 pi\u00f9 efficace controllare il progetto prima che avvenga la fusione dei branch, ma durante la fase della pull request.<\/p>\n<p>In generale, la configurazione dell'analisi delle pull request non \u00e8 molto diversa dall'avvio normale dell'analisi su CI. A parte la necessit\u00e0 di ottenere un elenco dei file modificati. Di solito, \u00e8 possibile ottenerli richiedendo la differenza tra i branch tramite 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 all'analizzatore l'elenco di file. Ad esempio, in PVS-Studio questo \u00e8 implementato 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 saperne 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 nella lista 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 contenenti avvisi, creando cos\u00ec un limite che il codice non verificato non potr\u00e0 oltrepassare.<\/p>\n<p>Tutto ci\u00f2 \u00e8 indubbiamente buono, ma sarebbe utile avere la possibilit\u00e0 di visualizzare tutti gli avvisi in un unico posto. Non solo da parte dell'analizzatore statico, ma anche dai test unitari o dall'analizzatore dinamico. A questo scopo esistono vari 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 in SonarQube<\/a><\/noindex>.<\/p>\n<h2>2. Integrazione sulle macchine degli sviluppatori<\/h2>\n<p>\nOra \u00e8 giunto il momento di installare e configurare l'analizzatore per un uso quotidiano nello sviluppo. A questo punto hai gi\u00e0 familiarizzato con la maggior parte dei metodi di lavoro, quindi questa pu\u00f2 essere considerata la parte pi\u00f9 semplice.<\/p>\n<p>Come opzione pi\u00f9 semplice, gli sviluppatori possono installare autonomamente l'analizzatore necessario. Tuttavia, questo richieder\u00e0 molto tempo e li distoglier\u00e0 dalla programmazione, quindi puoi automatizzare questo processo utilizzando un installer e le opportune flag. Per PVS-Studio ci sono vari <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">flag per l'installazione automatizzata<\/a><\/noindex>. D'altra parte, ci sono sempre gestori di pacchetti, ad esempio, Chocolatey (Windows), Homebrew (macOS) o decine di opzioni per Linux.<\/p>\n<p>Dopo, sar\u00e0 necessario installare i plugin necessari, 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 tempo di dire qualche parola sui modi per accelerare il lavoro dell'analizzatore durante l'uso quotidiano. Un'analisi completa dell'intero progetto richiede molto tempo, ma quanto spesso cambiamo il codice tutto in una volta? \u00c8 difficile che esista un refactoring cos\u00ec ampio da coinvolgere immediatamente l'intero codice sorgente. Il numero di file modificati alla volta raramente supera la decina, quindi ha senso analizzarli. Per tale situazione esiste <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">la modalit\u00e0 di analisi incrementale<\/a><\/noindex>. Solo non spaventatevi, non \u00e8 un altro strumento. \u00c8 una modalit\u00e0 speciale che consente di analizzare solo i file modificati e le loro dipendenze, e questo avviene automaticamente dopo la compilazione, se state lavorando in un IDE con il plugin installato. <\/p>\n<p>Nel caso in cui l'analizzatore rilevi problemi nel codice recentemente modificato, ne informer\u00e0 autonomamente. Ad esempio, PVS-Studio vi avviser\u00e0 tramite 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 \/>\nNaturalmente, non \u00e8 sufficiente dire agli sviluppatori di utilizzare lo strumento. \u00c8 necessario spiegare loro di cosa si tratta e come funziona. Ecco, ad esempio, articoli su come iniziare rapidamente con PVS-Studio, tuttavia, tutorial simili li potrete trovare per qualsiasi strumento preferito:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/\">Come eseguire 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 eseguire 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 eseguire PVS-Studio Java<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nArticoli come questi forniscono tutte le informazioni necessarie per un utilizzo quotidiano e non richiedono molto tempo. \ud83d\ude42<\/p>\n<p>Gi\u00e0 nella fase di introduzione allo strumento, abbiamo disabilitato un gran numero di avvisi durante uno dei primi avvii. Purtroppo, gli analizzatori statici non sono perfetti, quindi di tanto in tanto producono falsi positivi. \u00c8 solitamente facile disabilitarli, ad esempio, nel plugin PVS-Studio per Visual Studio basta 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 potete solo disabilitarli. Ad esempio, potete segnalare il problema al supporto. Se un falso positivo pu\u00f2 essere corretto, nei futuri aggiornamenti potrete notare che il numero di falsi positivi specifici per il vostro codice diminuisce sempre di pi\u00f9.<\/p>\n<h2>Dopo l'integrazione<\/h2>\n<p>\nEccoci giunti a tutti i passaggi per integrare l'analisi statica nel processo di sviluppo. Nonostante l'importanza della configurazione di tali strumenti nel CI, il luogo principale di esecuzione \u00e8 proprio il computer dello sviluppatore. Infatti, l'analizzatore statico non \u00e8 un giudice che dice da lontano che il codice non vale nulla. Al contrario, \u00e8 un assistente che suggerisce se siete stanchi e ricorda se avete dimenticato qualcosa.<\/p>\n<p>La verit\u00e0 \u00e8 che, senza un uso regolare, l'analisi statica difficilmente semplificher\u00e0 notevolmente lo sviluppo. Infatti, il suo principale vantaggio per gli sviluppatori non \u00e8 tanto nella ricerca di aree di codice complesse e controverse, quanto nella loro rilevazione precoce. Concordate che scoprire un problema quando le modifiche sono passate in fase di test non \u00e8 solo spiacevole, ma anche molto lungo. L'analisi statica, tuttavia, se utilizzata regolarmente, esamina ogni modifica direttamente sul vostro computer e segnala luoghi sospetti mentre si lavora sul codice.<\/p>\n<p>E se tu o i tuoi colleghi siete ancora incerti sull'opportunit\u00e0 di implementare l'analizzatore, ti consiglio di passare ora a leggere l'articolo &quot;<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0687\/\">Motivi per cui implementare l'analizzatore statico di codice PVS-Studio nel processo di sviluppo<\/a><\/noindex>&quot;. Esamina le preoccupazioni comuni degli sviluppatori riguardo al fatto che l'analisi statica sottrarr\u00e0 loro tempo e altro.<\/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: Dal Prendere Avvio 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.1.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.1.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 delle interminabili revisioni del codice o del debug, a volte ti chiedi come semplificarti la vita. E un po' di ricerca, o trovandosi per caso, pu\u00f2 portarti a scoprire la 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}]}}