Como implementar FxCop/análise estática em uma base de código existente
-
09-06-2019 - |
Pergunta
Quais são algumas das estratégias usadas ao implementar FxCop/análise estática em bases de código existentes com violações existentes?Como reduzir de forma mais eficaz as violações da análise estática?
Solução
Faça uso liberal do atributo [SuppressMessage] para começar.Pelo menos no começo.Depois de obter a contagem para 0 por meio do atributo, você estabelece uma regra de que novos checkins não podem introduzir violações do FxCop.
O Visual Studio 2008 possui um ótimo recurso de análise de código que permite garantir que a análise de código seja executada em cada compilação e você pode tratar avisos como erros.Isso pode desacelerar um pouco as coisas, então recomendo configurar um servidor de integração contínua (como CruiseControl.NET) e fazer com que ele execute a análise de código em cada check-in.
Depois de controlá-lo e não introduzir novas violações a cada check-in, comece a lidar com classes inteiras de violações do FxCop de uma vez, com o objetivo de remover os SuppressMessageAttributes que você usou.
A maneira de saber quais você realmente deseja manter é sempre adicionar um valor de Justificação àqueles que você realmente deseja suprimir.
Outras dicas
Reescreva seu código de maneira passageira!
Sério, uma base de código antiga terá centenas de erros - mas é por isso que temos programadores novatos/estagiários.Corrigir violações do FxCop é uma ótima maneira de obter uma visão geral da base de código e também aprender como escrever código .NET em conformidade.
Então, controle-se, beba muita cafeína e supere isso em alguns dias!
NDepend parece ele poderia fazer o que você procura, mas não tenho certeza se pode ser integrado a uma compilação automatizada CruiseControl.Net e falhar na compilação se o código não atender aos requisitos (que é o que eu gostaria de fazer acontecer).
Alguma outra ideia?
Uma alternativa ao FxCop seria usar a ferramenta NDepend.Esta ferramenta permite escrever Regras de código sobre consultas LINQ em C# (o que chamamos CQLinq). Isenção de responsabilidade:Eu sou um dos desenvolvedores da ferramenta
Mais do que 200 regras de código são propostos por padrão.Personalizar regras existentes ou criar suas próprias regras é simples graças ao bem conhecido Sintaxe C# LINQ.
Para manter baixo o número de falsos positivos, o CQLinq oferece recursos exclusivos para definir qual é o conjunto Apenas meu código por meio de consultas de código especiais prefixadas com nãomeucódigo.Mais explicações sobre esse recurso podem ser encontradas aqui.Aqui estão, por exemplo, dois nãomeucódigo consultas padrão:
Para manter baixo o número de falsos positivos, com CQLinq você também pode focar o resultado das regras apenas no código adicionado ou refatorado, já que um linha de base definida no passado.Veja a regra a seguir, que detecta métodos muito complexos adicionados ou refatorados desde a linha de base:
warnif count > 0
from m in Methods
where m.CyclomaticComplexity > 20 &&
m.WasAdded() || m.CodeWasChanged()
select new { m, m.CyclomaticComplexity }
Finalmente, observe que com o código NDepend as regras podem ser verificadas morar no Visual Studio e no momento do processo de construção, em um relatório HTML+javascript gerado.