Quali strumenti di analisi statica sono disponibili per C #?

Quali strumenti sono disponibili per l’analisi statica rispetto al codice C #? Conosco FxCop e StyleCop. Ce ne sono altri? Ho incontrato NStatic in passato, ma è stato in sviluppo per quello che sembra per sempre – è piuttosto carino da quel poco che ho visto, quindi sarebbe bello se potesse mai vedere la luce del giorno.

Sulla stessa linea (questo è principalmente il mio interesse per l’analisi statica), anche gli strumenti per testare il codice per problemi di multithreading (deadlock, condizioni di gara, ecc.) Sembrano un po ‘scarsi. Typemock Racer è appena spuntato, quindi lo vedrò. Qualcosa al di là di questo?

Le opinioni di vita reale sugli strumenti che hai utilizzato sono apprezzate.

Strumenti di rilevamento della violazione del codice:

  • Fxcop , ottimo strumento di Microsoft. Verificare la conformità con le linee guida del framework .net.

    Modifica ottobre 2010: non più disponibile come download indipendente. Ora è incluso in Windows SDK e dopo l’installazione può essere trovato in Programmi \ Microsoft SDK \ Windows \ [v7.1] \ Bin \ FXCop \ FxCopSetup.exe

    Modifica febbraio 2018 : questa funzionalità è stata ora integrata in Visual Studio 2012 e successivamente come analisi del codice

  • Clocksharp , basato sull’analisi del codice sorgente (su C # 2.0)
  • Mono.Gendarme , simile a Fxcop ma con una licenza opensource (basata su Mono.Cecil )
  • Smokey , simile a Fxcop e Gendarme, basato su Mono.Cecil . Non più in fase di sviluppo, lo sviluppatore principale ora collabora con il team Gendarme.
  • Coverity Prevent ™ per C # , prodotto commerciale
  • PRQA QA · C # , prodotto commerciale
  • PVS-Studio , prodotto commerciale
  • CAT.NET , addin di Visual Studio che aiuta a identificare i difetti di sicurezza
  • CodeIt.Right
  • Spec #
  • Pex

Strumenti metrici di qualità:

  • NDepend , ottimo strumento visivo. Utile per gli studi di metrica del codice, regole, diff, accoppiamento e dipendenza.
  • Nitriq , gratis, può facilmente scrivere i propri parametri / vincoli, belle visualizzazioni. Modifica febbraio 2018: link per il download ora morti.
  • RSM Squared , basato sull’analisi del codice sorgente
  • C # Metrics , utilizzando un analisi completa di C #
  • SourceMonitor , un vecchio strumento che a volte riceve aggiornamenti
  • Code Metrics , un componente aggiuntivo di Reflector
  • Vil , vecchio strumento che non supporta .NET 2.0. Modifica gennaio 2018: Link ora morto

Controllo degli strumenti di stile:

  • StyleCop , strumento Microsoft (eseguito da Visual Studio o integrato in un progetto MSBuild). Disponibile anche come estensione per Visual Studio 2015 e C # 6.0
  • Agent Smith , plugin di convalida stile codice per ReSharper

Rilevamento della duplicazione:

  • Simian , basato sul codice sorgente. Funziona con molte lingue.
  • CloneDR , rileva i cloni parametrizzati solo sui limiti del linguaggio (gestisce anche molte lingue diverse da C #)
  • Clone Detective un plug-in di Visual Studio. (Utilizza internamente ConQAT )
  • Atomiq , basato sul codice sorgente, un sacco di lingue, una fantastica visualizzazione “rotella”

Strumenti generali di refactoring

  • ReSharper – Funzionalità di analisi e refactoring del codice C #

Lo strumento NDepend è quotato come Quality Metric Tools ma è anche uno strumento di rilevamento della violazione del codice . Disclaimer: sono uno degli sviluppatori dello strumento

Con NDepend, si può scrivere la regola del codice su LINQ Queries (ciò che chiamiamo CQLinq) . Più di 200 regole di codice CQLinq sono proposte di default. Il punto di forza di CQLinq è che è semplice scrivere una regola di codice e ottenere risultati immediati . Le strutture sono proposte per sfogliare gli elementi di codice abbinati. Per esempio:

Regola del codice CQLinq

Inoltre, NDepend viene fornito con molte altre funzioni di analisi statica . Questi includono:

  • Stima intelligente del debito tecnico
  • Grafico delle dipendenze
  • Matrice delle dipendenze
  • Funzionalità di diff di codice
  • NDepend.API che consente di scrivere il proprio strumento di analisi statica. Con NDepend.APi abbiamo persino sviluppato uno strumento per rilevare il codice duplicato (dettagli in questo post del blog: Un algoritmo originale per trovare codice duplicato su codice .NET ).
  • Gendarme è un analizzatore statico basato su regole open source (simile a FXCop, ma trova molti problemi diversi).
  • Clone Detective è un bel plug-in per Visual Studio che trova il codice duplicato.
  • Inoltre, parlando di Mono, trovo l’atto di compilazione con il compilatore Mono (se il tuo codice è abbastanza indipendente dalla piattaforma per farlo, un objective che potresti voler tentare comunque) trova tonnellate di variabili senza riferimento e altri Avvisi a cui manca completamente Visual Studio (anche con il livello di avviso impostato su 4).

Hai visto CAT.NET ?

Dal blurb –

CAT.NET è uno strumento di analisi del codice binario che consente di identificare varianti comuni di alcune vulnerabilità prevalenti che possono dare origine a comuni vettori di attacco come Cross-Site Scripting (XSS), SQL Injection e XPath Injection.

Ho usato una beta precoce e sembra che sia venuto fuori un paio di cose che vale la pena guardare.

A parte l’eccellente elenco di madgnome, aggiungerei un rilevatore di codice duplicato basato sulla linea di comando (ma è gratuito):

http://sourceforge.net/projects/duplo/

Klocwork ha uno strumento di analisi statica per C #: http://www.klocwork.com

Trovo molto utili i componenti aggiuntivi di Code Metrics e Dependency Structure Matrix per Reflector.

Optimyth Software ha appena lanciato un servizio di analisi statica nel cloud http://www.checkinginthecloud.com . Carica in modo sicuro il tuo codice esegui l’analisi e ottieni i risultati. Nessun problema.

Supporta diverse lingue tra cui C # maggiori informazioni possono essere trovate su wwww.optimyth.com

Axivion Bauhaus Suite è uno strumento di analisi statica che funziona con C # (così come C, C ++ e Java).

Fornisce le seguenti funzionalità:

  • Visualizzazione dell’architettura software (incluse le dipendenze)
  • Applicazione di regole architettoniche, ad esempio stratificazione, sottosistemi, regole di chiamata
  • Rilevazione clonazione – evidenziando copia e incolla (e codice modificato)
  • Rilevamento di codice morto
  • Rilevazione del ciclo
  • Metriche del software
  • Controlli stile codice

Queste funzionalità possono essere eseguite su base una tantum o come parte di un processo di integrazione continua. I problemi possono essere evidenziati in base al progetto o per base di sviluppatori quando il sistema è integrato con un sistema di controllo del codice sorgente.