Domanda

Abbiamo iniziato a utilizzare un analizzatore statico (Coverity) sulla nostra base di codice. Siamo stati prontamente stupefatto dalla enorme quantità di avvertimenti che abbiamo ricevuto (la sua nell'ordine delle centinaia di migliaia), ci vorrà tutta la squadra un paio di mesi per eliminarli tutti (inconsapevolmente impossibile).

le opzioni che abbiamo discusso finora sono

1) assumere un imprenditore per risolvere l'avviso e fissarli - ha inconveniente: ci sarà probabilmente bisogno di molto sperimenta le persone a fare tutte queste modifiche, e nessun imprenditore sarà necessaria la comprensione del codice

.

2) filtrare l'avvertimento e trattare solo con quelli pericolosi - il problema è che la nostra produzione analisi statica sarà sempre ingombra mettendo in guardia rendendo difficile per noi per individuare i problemi. anche il filtraggio del l'avviso è anche un grande sforzo.

In entrambi i casi, portando il nostro codice a uno stato in cui l'analizzatore statica può essere uno strumento utile per noi sembra un compito monumentale.

così come è possibile lavorare con l'analizzatore statico senza braining sforzi di sviluppo in corso in un supporto completo ancora?

È stato utile?

Soluzione

La prima cosa da fare è modificare il check out per le impostazioni di analisi; supporto Coverity probabilmente lasciato con una configurazione abbastanza generico.

  • Triage un campione rappresentativo dei difetti, e se un correttore non sembra essere la produzione molto più segnale di rumore, spegnerlo per ora. (La maggior parte degli ispettori di Coverity sono buoni, ma nessuno è perfetto, e suona come è necessario fare un po 'priorità spietato.)
    • A lungo andare, girare alcune di quelle pedine indietro, ma li segnano nella vostra segnalazione partire priorità. (Questo è più difficile di quanto dovrebbe essere, ho a lungo sostenuto che Coverity ha bisogno di leggere un paio di documenti su graduatoria difetto da qualcuno chiamato Dawson Engler: -).
    • Nella corsa anche di più, provare le pedine che sono disabilitati di default; alcuni di loro trovano bug impressionanti. E analizzare gli avvertimenti sono sorprendentemente utile, anche se si ha bisogno di disattivare alcuni tra quelli fasulli.
  • Essere cinicamente realistici su quale parte del vostro codice di base si sta effettivamente andando a fissare al più presto. Utilizzare i componenti di saltare analisi sul codice che non hai intenzione di correggere difetti di, almeno per ora. (Per esempio, in teoria, se il prodotto include codice di terze parti, sei responsabile per la sua qualità e si deve correggere i bug in esso. In pratica, questi bug raramente vengono risolti. E se è codice di terze parti maturo, il falso tasso positivo sarà alto.)
    • Impostazione di componenti e l'esclusione è difficile, ma una volta fatto, funzionano bene, uno dei miei negativi regex look-ahead ha avuto più di un centinaio disgiunti.
    • Componenti anche aiutare con l'assegnazione di responsabilità individuale per i difetti, che ho trovato ad essere fondamentale per ottenere li fissi.
  • Imposta una relazione solo per i nuovi difetti, e sono persone guardano tale URL. Nuovi difetti sono in codice attivo, ed è più facile per iniziare con una politica di nuove avvertenze.

Vorrei concludere con un paio di esclusioni di responsabilità:

  • Si può decidere di ri-fare questa domanda nel forum di supporto Coverity ( http://forums.coverity.com / ), che non è molto attivo, ma dove non ci si deve preoccupare violare la NDA. Ho una lista ci degli ispettori che ho trovato la pena di abilitazione.
  • Lo faccio per vivere, e forse si vuole assumere noi ( http://codeintegritysolutions.com/ ); Sto dando un discorso su questo argomento a Stanford oggi. Assumere un consulente per fare la messa a punto fa un sacco di senso; avere qualcuno al di fuori della società facendo il triaging è più complicato. Avere un outsider fare le correzioni è ancora più complicate; imparare dai propri errori è ancora più importante di risolverli.

Altri suggerimenti

Un giorno a settimana: Accendere analisi; scegliere i 100 avvertimenti più fastidiosi; aggiustali; girare analisi off. In breve: non fatevi prendere dal panico; il codice funziona come è (non è vero?); lavorare attraverso gli avvertimenti in blocchi morso dimensioni.

Se si scopre che gli stessi tipi di avvertimenti continuano a riapparire (pratiche di codifica cattive), educare la tua squadra per evitarli in futuro.

L'ho fatto con un vecchio codice di base: che avrei avuto nel prime ore del mattino (prima che il resto della squadra), alzare il livello di allarme / analisi sul compilatore, risolvere alcuni avvertimenti e quindi impostare di nuovo a i valori di default.

  1. Per il codice legacy. Priorità a questi insetti leagcy e venire fuori un piano per affrontare con loro. Bilanciare il bug fix e nuovo sviluppo caratteristica. Nuova funzione è sempre più importante.
  2. per il nuovo codice. Ne fanno parte del vostro processo di integrazione:. Prima di controllare il nuovo codice, assicurarsi che siano liberi, Coverity

Per la vostra opzione di appaltatore, si potrebbe andare un percorso più moderata un averli risolvere solo i problemi che sono chiare, locale e non hanno bisogno di una piena comprensione del codice. Direi che un elevato numero di colpi Coverity sono cose come possibili dereferenziazioni di puntatori NULL o possibili operazioni di scrittura oltre la fine di un buffer che può essere risolto con semplici controlli che sono completamente locale al codice in questione e non hanno bisogno di comprensione del quadro generale.

Lo ammetto - ho fatto il lavoro come questo prima di utilizzare il PREfast / prefisso o qualunque sia lo strumento viene chiamato da Microsoft, e un sacco di esso era una sorta meccanica di cambiamenti. Ben si adatta a un imprenditore o forse anche uno stagista. Ma ci saranno roba che ha bisogno di più l'analisi -. Basta assicurarsi che sia chiaro al contraente (s) che non dovrebbero cercare di raggiungere in profondità le cose

Ed essere gentile con loro -. È un lavoro sgobbone, in modo da rendere qualsiasi altra cosa si può piacevole

La gente Coverity ci ha detto di 'ignorare' tutte le avvertenze la prima volta che si utilizza. Poi nella prossima generazione differenziale, avrà modo incrementale nuove avvertenze: che si dovrebbe risolvere. Poi, dopo aver utilizzato lo strumento per qualche mese e si ottiene agio con esso si torna indietro e iniziare a fissare i vecchi avvertimenti.

Prova altri analizzatori statici. Ho usato per lavorare con Test Parasoft C ++ e aveva un modo conveniente per filtrare gli avvisi in base alla loro gravità.

Vuol dire si hanno problemi con la personalizzazione alle proprie esigenze?
Come

"" Analisi personalizzabile

Coverity Analisi statica permette di sintonizzare analisi modificando sia il numero di pedine distribuito, o le impostazioni specifiche per un correttore individuo, come la soglia per dereferenzia puntatore nullo. La possibilità di configurare Coverity per un particolare blocco di codice, o l'applicazione, consente agli sviluppatori di selezionare il livello di prestazioni più appropriato per la loro applicazione, e porta a risultati più precisi e affidabili. Il Software Development Kit Coverity consente di rilevare i tipi di difetti unici in C e C ++ di codice con la creazione di pedine personalizzati. Questo è oltre a creare pedine personalizzati per trovare la concorrenza, la gestione delle eccezioni, e di altre questioni critiche. ""
http://www.coverity.com/products/static-analysis.html

tipica configurazione di analisi out-of-the-box per Coverity tenderà a dare tra uno e tre difetti per mille linee di codice. Se si dispone di centinaia di migliaia di difetti, e si dispone di molto meno di 100 milioni di linee di codice, posso garantire che la configurazione di analisi non è corretto o non ottimale per la propria organizzazione.

Oltre alla configurazione di analisi messa a punto per sé, è possibile la priorità per impatto - il "alto", "medio" e la mappatura "basso" di default dovrebbe essere abbastanza buono per iniziare fino ad ottenere una sensazione per la quale sottocategorie tendono ad essere più dannosi per l'applicazione.

In terzo luogo, se la vostra base di codice è grande (e di cui non è) suddividerlo in componenti in modo che ogni squadra o gruppo di sviluppatori possono dare un'occhiata solo il codice mantengono direttamente - questo permette entrambi i pezzi più gestibile di lavoro per manico, e permette anche di priorità sulla componente (difetti nel codice del server sono più critici di difetti nel codice del client, o codice di prova, o il codice di terze parti, ecc).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top