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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top