Ferramentas como pc-lint ou QAC podem ser usadas para executar análise de código estático em uma base de código.
Na minha experiência, a análise estática geralmente gera uma quantidade enorme de ruído, ou seja, avisos sobre coisas que não são erros reais, mas de alguma forma violam uma das regras em um determinado conjunto de regras. Desativar certas regras (para sempre no conjunto de regras ou através de comentários especiais no código) pode ser um processo realmente complicado.
Quais são os reais benefícios da análise de código estático?
fonte
Ao começar com um novo idioma, é bom ter um treinador. É assim que penso nas ferramentas de análise estática. Eu escrevo muito javascript e, no começo, peguei alguns maus hábitos, principalmente porque estava transferindo algumas coisas de idiomas anteriores. O Javascript é bastante flexível, então você pode se safar de praticamente qualquer coisa, mas se eu tivesse o jslint me alertando sobre certos padrões, teria escolhido melhores padrões de codificação desde o início, em vez de ter que reaprender coisas mais tarde.
fonte
Analisadores estáticos são basicamente revisões de código assistidas por máquina. Eles apontam áreas questionáveis que podem ser perdidas durante os testes regulares.
Por exemplo, o autor realmente quis fazer uma tarefa neste condicional?
Ou talvez um novato confunda elenco lexical:
Certamente, os analisadores estáticos requerem ajustes. Por outro lado, o controle de revisão, wikis, rastreadores de bugs, impressoras bonitas e outras ferramentas também requerem algumas configurações. Quanto maior o projeto, melhor a recompensa pelo trabalho inicial.
fonte
Do ponto de vista de um consultor, toda ferramenta de análise estática terá algum ruído, mas nem todos os analisadores estáticos são criados iguais. Ferramentas de análise estática como Coverity, Klocwork, Grammatech têm boas técnicas de análise que devem produzir resultados mais precisos. Se você ajustar e ajustar um pouco mais, obterá melhores resultados normalmente (afinal de contas, os analisadores estáticos precisam ser capazes de executar todos os tipos diferentes de código, de um minúsculo dispositivo médico a um sistema operacional de rede). A definição de "ruído" também depende de seus critérios para o que constitui um relatório com correção. Em uma extremidade do espectro, alguns desenvolvedores marcam todos os relatórios que eles não corrigem como "falsos" (até mesmo códigos mal escritos que eles não têm tempo para corrigir) e, por outro lado,
Algumas dessas ferramentas são mais focadas na análise central e outras são mais focadas na área de trabalho - embora todas as três tenham recursos compatíveis com ambas. Como o @Bob mencionou, eles custam dinheiro.
fonte
Na minha empresa anterior, usamos o analisador estático da Parasoft. E acreditava-se dentro da equipe que pelo menos 60% dos erros em tempo de execução foram detectados antes da compilação.
fonte
A análise estática também pode ser realizada sem ferramentas, executando revisões manuais no código do software. Geralmente, é a maneira mais econômica de melhorar a qualidade do código.
A segunda melhor opção é investir em uma ou mais ferramentas de análise estática de ponta (como o Coverity mencionado anteriormente, ou KLOCwork). Como essas ferramentas realizam análises muito mais profundas que o fiapo, por exemplo, a relação sinal / ruído é muito melhor.
Considero usar o fiapo como terceira opção, devido ao alto nível de ruído. Aplicar fiapos a um projeto existente pode ser uma tarefa assustadora.
Em geral, a análise estática de programas progrediu muito nos últimos anos. As atuais ferramentas de análise estática são capazes de realizar análises interprocedimentais profundas, e podem identificar automaticamente, por exemplo, procedimentos pré e pós-condições. Essa também pode ser uma grande ajuda para revisões posteriores de código.
fonte
Devido à alta taxa de falsos positivos, você não deve usar uma ferramenta de análise estática (como lint ou FindBugs) para cada compilação.
Em vez disso, é uma boa verificação de sanidade para consultar uma vez que você tenha um bug e não consegue descobrir . Nesse caso, você pode receber os falsos positivos e já pode ter reduzido as possíveis fontes do erro. Por exemplo, se você reproduzir seu erro sem sequer executar algum módulo, poderá ignorar o que o FindBugs diz para eles. Isso é particularmente útil quando você olha para um trecho de código e pensa que ele diz uma coisa, enquanto o compilador o lê literalmente (como em Java quando você tem um
equals
método que aceita o tipo de classe em vez deObject
).Você também pode fazer com que as ferramentas de análise estática façam parte do seu processo de desenvolvimento: quando um desenvolvedor recebe uma revisão de código, ele também deve executar o FindBugs nele. Em resumo, é útil, mas você não o utilizará com a mesma frequência que o compilador ou o editor de texto.
fonte