2009-03-27 16 views
9

Qualcuno ha esperienza sull'introduzione di FxCop sul codice legacy? Vorremmo che la nostra build fallisse se qualcuno introduce codice che viola le regole. Ma per il momento, questo è impossibile, in quanto il codice precedente ha oltre 9000 violazioni.Come si inizia con FxCop sul codice legacy?

L'unico modo per eliminare gli errori che conosco è tramite l'attributo SuppressMessage, ma funziona solo sui metodi e su GeneratedCodeAttribute. Quest'ultimo potrebbe essere utilizzato per classi e spazi dei nomi (se ricordo correttamente), ma non dovrebbe essere utilizzato per il codice non generato (vedere here).

In questo momento, prendiamo un po 'di tempo ogni giorno per rimuovere le violazioni, ma ne vengono introdotte di nuove, perché la nostra costruzione non fallirà.

Qualche idea?

risposta

6

Sono stato in una situazione simile. Ho iniziato a utilizzare FxCop su un progetto esistente qualche tempo fa e ho avuto parecchi errori all'inizio. Quello che ho fatto è stato disattivare tutte le regole, quindi attivare un gruppo alla volta, risolvendo gli errori man mano che andavo.

I gruppi Security and Performance sono un buon punto di partenza: mi hanno aiutato a trovare problemi di cui non ero a conoscenza prima. Alcune delle regole sono soggettive e potrebbero non essere pienamente applicabili al tuo progetto, se non del tutto. Ad esempio, se l'internazionalizzazione non è un problema, allora lascia il gruppo disattivato. Se ci sono regole specifiche che non si applicano a te, come le regole di denominazione, quindi disattivali.

Se si riesce a eliminare una serie di errori per una determinata regola, è possibile impostare la compilazione in caso di errore se tali regole vengono violate in futuro. Quindi nessun nuovo errore si insinuerà.

Se si tratta di un progetto di una certa dimensione, basta fare una regola alla volta, rivedere la pertinenza/importanza della regola e correggere gli errori o disattivare la regola se non si applica .

2

Inizia chiedendo questo: sei disposto e in grado di modificare il codice legacy per conformarsi alle regole FxCop? O per dirla in modo diverso: è questo il modo migliore per passare il tempo?

Se si è disposti a spendere tempo e fatica, iniziare selezionando le piccole regole che si trovano più importanti per la qualità generale e implementarle. Se ciò è utile, puoi aggiungere alcune regole, correggere codice e così via.

Nella mia esperienza non esiste un approccio big bang per l'implementazione delle regole FxCop e simili. L'unico modo possibile è prendere piccoli pezzi alla volta.

+0

+1 Morso concordato, importante alla volta. –

2

È possibile aggiungere eccezioni per vecchie violazioni in un progetto FxCop. In questo modo non avrai bisogno di aggiungere alcun attributo al tuo codice esistente e riceverai avvertimenti su tutte le nuove violazioni.

Per fare ciò, creare un progetto nell'interfaccia utente di FxCop, eseguire l'analisi con le regole, quindi nella vista dei risultati selezionare la violazione che si desidera ignorare per ora. Fai clic con il tasto destro e scegli "Escludi". Gli avvisi selezionati verranno spostati nella scheda "esclusi nel progetto". Quando sei pronto per tornare indietro e correggerli, seleziona e fai clic su "Contrassegna come attivo".

Queste esclusioni sono memorizzate nel file .FxCop.

Tuttavia, consiglierei di introdurre le regole gradualmente, per facilitare la curva di apprendimento per tutti.

+0

Come lo fai esattamente? E 'questa l'opzione' Non sparare messaggi contro il codice legacy per il quale la correzione è un cambio di rottura '? Sembra essere andato in FxCop 1.36 beta (che stiamo usando). E in che modo FxCop sa quali violazioni sono nuove e quali sono vecchie? – Peter

+0

Non vedo l'opzione di cui stai parlando nella mia versione FxCop (1.36 credo). Aggiunti dei chiarimenti su "Escludi nel progetto" da pubblicare. –

0

Come circa il seguente approccio:

  1. Run FxCop con tutte le norme in materia che sono rilevanti per il vostro progetto
  2. Salvare i risultati come una linea di base
  3. Sviluppare nuovo codice
  4. Run FxCop
  5. Rimuovi tutti i risultati dalla linea di base

questo si tradurrà in controlli fxcop sul tuo nuovo codice ....