Static Code Analysis no Visual Studio: analisando o código de aplicações implementadas em .NET

Como é do conhecimento de todos os envolvidos com a implementação de sistemas, o trabalho rotineiro dentro da área de desenvolvimento de softwares está sujeito a cobranças dos mais variados tipos. Pressões pela entrega de resultados em um tempo reduzido, a atuação simultânea em vários projetos, mudanças repentinas em requisitos e, até mesmo, diferentes níveis de proficiência técnica entre os membros de uma equipe são alguns dos fatores que podem afetar a qualidade do código-fonte produzido.

Esta última questão relativa à codificação pode ganhar contornos problemáticos com o decorrer do tempo. O crescimento natural de um projeto, assim como as inevitáveis modificações em suas funcionalidades, são aspectos que podem tornar mais complexas tarefas de manutenção e evolução de estruturas já existentes.

Levando em consideração estes pontos, é importante salientar que diversos padrões e técnicas vêm sendo desenvolvidos ao longo dos anos como forma de superar essas dificuldades naturais. Estas iniciativas têm por intuito não apenas assegurar a flexibilidade de uma aplicação diante da necessidade de mudanças, como também garantir um nível aceitável de qualidade no que se refere aos trechos de código que definem o sistema em questão.

Contudo, por mais que haja um esforço em busca de uma padronização na construção de uma solução, ainda será possível que pequenos deslizes sejam cometidos durante a codificação de instruções. Estruturas declaradas de uma forma equivocada representam um bom exemplo, já que muitas vezes o compilador será incapaz de apontar alguma falha em tais situações. No caso específico do Visual Studio 2013, um recurso poderá servir então de auxílio para a identificação de ocorrências como estas: trata-se do mecanismo conhecido como “Static Code Analysis” (ou simplesmente “Code Analysis”).

Disponível para as versões Ultimate, Premium e Professional do Visual Studio 2013, este recurso possibilita a análise estática do código de uma aplicação. Analisar estaticamente refere-se, por sua vez, à execução de verificações no código de projetos que não estão sendo executados a partir do IDE. Dentre os potenciais problemas apontados por esta ferramenta, estão questões envolvendo boas práticas de desenvolvimento, globalização, segurança e interoperabilidade entre aplicações, por exemplo.

A ideia por trás do uso do Code Analysis não está em corrigir automaticamente o código, mas indicar melhorias para a obtenção de aplicações bem estruturadas e menos propensas a erros. Isto acontece empregando conjuntos de regras desenvolvidas pela própria Microsoft, as quais são conhecidas como “Framework Design Guidelines”.

O objetivo deste artigo é demonstrar como o recurso Code Analysis pode ser utilizado no Visual Studio Professional 2013. Isto será feito através da análise de um projeto do tipo Class Library, no qual constará uma classe para o cálculo do fatorial de um número inteiro.

Usando Code Analysis no Visual Studio

Na Listagem 1 está a implementação da classe Fatorial, a qual servirá de base para a execução do utilitário Code Analysis. Neste tipo está definido o método estático CalcularFatorial, o qual recebe como parâmetro um valor inteiro e devolve como resultado o fatorial correspondente a este número.

Listagem 1: Classe Fatorial

using System;

namespace TesteCodeAnalysis.Utils
{
    public class Fatorial
    {
        public static long CalcularFatorial(int numero)
        {
            if (numero <= 1)
                return 1;

            long resultado = numero;

            for (int i = 1; i < numero; i++)
                resultado = resultado * i;

            return resultado;
        }
    }
}

Antes de acionar a funcionalidade de análise de código, será necessário indicar o conjunto de regras a serem adotadas para este processo de validação. Acessar para isto as propriedades do projeto em que a classe Fatorial foi criada (a partir do menu “Project”), selecionando o item “Code Analysis” (no lado esquerdo da janela): marcar em “Run this rule set” a opção “Microsoft Basic Design Guideline Rules” (Imagem 1), salvando na sequência as modificações efetuadas no projeto (a título de exemplo, foi criada uma Class Library chamada “TesteCodeAnalysis.Utils”).

Configurando o conjunto de regras a ser utilizado para um projeto

Configurando o conjunto de regras a ser utilizado para um projeto

OBSERVAÇÃO: para o exemplo aqui abordado, será demonstrada a execução manual da ferramenta Code Analysis. Entretanto, é possível habilitar a verificação de código durante o processo de compilação de uma aplicação, bastando para isto selecionar nas propriedades do projeto a opção “Enable Code Analysis on Build” (a qual está localizada dentro da seção “Code Analysis”).

Para iniciar a análise de código, clicar com o botão direito do mouse sobre o projeto a partir da janela Solution Explorer. Selecionar o item “Code Analysis” e, em seguida, a opção “Run Code Analysis” (Imagem 2).

Acionando o utilitário Code Analysis via Solution Explorer

Acionando o utilitário Code Analysis via Solution Explorer

Será exibida neste momento a janela “Code Analysis” (Imagem 3), constando nesta última o resultado deste processo de verificação. Esta tela conta ainda com funcionalidades que permitem a execução de novas análises nos diferentes projetos de uma solução, a ordenação dos resultados segundo vários critérios (código, tipo do alerta, dentre outras opções), além do acesso às propriedades de um projeto para a especificação do conjunto de regras a ser empregado.

Conforme é possível observar, o utilitário Code Analysis gerou um alerta relativo à forma como o tipo Fatorial foi implementado. Por dispor apenas de um método estático, não contando com propriedades, métodos convencionais e outras construções típicas de uma classe que possa ser instanciada, a ferramenta sugere que Fatorial seja marcada com a palavra-chave “static”.

Resultado da execução do utilitário Code Analysis

Resultado da execução do utilitário Code Analysis

O próximo passo agora será alterar a classe Fatorial, a fim de que a mesma se transforme em um tipo estático (Listagem 2).

Listagem 2: Classe Fatorial após ajustes

using System;

namespace TesteCodeAnalysis.Utils
{
    public static class Fatorial
    {
        public static long CalcularFatorial(int numero)
        {
            if (numero <= 1)
                return 1;

            long resultado = numero;

            for (int i = 1; i < numero; i++)
                resultado = resultado * i;

            return resultado;
        }
    }
}

Uma nova execução do utilitário Code Analysis não detectará então mais nenhum ponto de melhoria na classe Fatorial (Imagem 4).

Resultado da nova execução do utilitário Code Analysis

Resultado da nova execução do utilitário Code Analysis

Conclusão

Procurei com este artigo demostrar como o utilitário Code Analysis pode ser útil na busca por um código mais organizado. Na prática, esta ferramenta sugere mudanças que podem não apenas contribuir para uma maior qualidade daquilo que é codificado, como também auxiliar os desenvolvedores na tarefa de evitar potenciais problemas em tempo de execução.

Isto não implica, obrigatoriamente, na necessidade de se alterar uma aplicação para que a mesma não gere mais nenhum alerta. Isto ficará a cargo do desenvolvedor, que deverá em tais casos levar em conta o contexto geral e decidir se determinadas modificações são ou não pertinentes.

Espero que o conteúdo abordado aqui possa ser útil em algum momento. Até uma próxima oportunidade!

Renato Groffe – Consultor em TI, MCST
http://rgroffe.wordpress.com/

Não perca as próximas publicações! Siga agora nossa página TI Selvagem no Google Plus, Twitter ou no Facebook e se gostou do conteúdo compartilhe e ajude nossa comunidade!

Referências

Framework Design Guidelines
http://msdn.microsoft.com/en-us/library/ms229042(v=vs.110).aspx

Visual Studio 2013 Static Code Analysis in depth: What? When and How?
http://blogs.msdn.com/b/hkamel/archive/2013/10/24/visual-studio-2013-static-code-analysis-in-depth-what-when-and-how.aspx

Comentarios

comentarios