Qualidade de Código - Como o Visual Studio 2005 pode nos ajudar!
Alexandre Tarifa, Microsoft Corporation
Publicado em: 5 de setembro de 2006
Nesta página
Introdução
Qualidade de Código
Análise de Código
Na prática
Teste Unitário e Code Coverage
Na prática
Conclusão
Introdução
A qualidade de código tem sido a cada dia tratado como um pré-requisito para qualquer equipe de desenvolvimento. Já foi provado por inúmeros institutos/empresas que a manutenção é uma das etapas mais caras dentro de projetos e que boa parte dos problemas estavam ligados a baixa qualidade de código.
Qualidade de Código
Por mais que as ferramentas e linguagens de programação evoluam cada vez mais, ainda sim, grande parte do código ainda é feito por um ser humano, o que possibilita então que erros aconteçam. Como diz aquele ditado antigo: errar é humano.
Para facilitar então a auditoria do que é feito o Visual Studio 2005 nos oferece algumas ferramentas para tentar diminuir cada vez mais a quantidade de códigos incorretos ou problemáticos. Com esse paradigma levantado, foi criada uma versão do Visual Studio chamada: Visual Studio Team Developer Edition, onde a qualidade no código foi a principal característica empregada.
Este produto faz parte de família de produtos do Visual Studio Team System (Figura 1), onde você consegue muitas informações no site www.vstsrocks.com.br.
Figura 1 - Visual Studio Team System
Os recursos são divididos em duas categorias: Ferramentas de análise de código e testes de código (Unit Test).
Análise de Código
Os analisadores de códigos já são utilizados em muitos projetos, porém sempre com ferramentas separadas do Visual Studio. Já nesta versão do Visual Studio temos o analisador de código estático do Visual Studio além do fxCop, produto já disponível na versão 2003, porém que necessitava de uma instalação a parte.
O analisador do Visual Studio trás muitas possibilidades de auditoria no código onde podemos configurar somente o que se faz relevante ao projeto a ser analisado.
Na prática
Temos um projeto Class Library simples, em VB.Net, na janela Solution Explorer, selecione My Project e a janela de configuração é aberta. Selecione a aba Code Analisys (Figura 2).
Figura 2 - Configurações do analisador de código
Enable Code Analisys - Liga/Desliga o analisador de código
Rules - Liga/Desliga cada item ou categoria de analises que serão levadas em consideração na análise do código. Além disso é possível definir se casa análise gera somente um Warning ou Error.
No projeto criado adicione o seguinte código:
Public Function Analise(ByVal Param As String) As Collections.Generic.List(Of String) Dim variavelNaoUsada As String Dim lista As New Collections.Generic.List(Of String) lista.Add("Windows Forms") lista.Add("Asp.Net") lista.Add("Windows Mobile") Return lista End Function
Os pontos que vamos configurar vão detectar problemas na nomenclatura do parâmetro e da variável que não foi utilizada, sendo assim vamos habilitar somente Naming Rules e Performance Rules. Um detalhe é que as regras de nomenclatura que são levadas em consideração provém da convenção sugerida pela Microsoft, para saber mais conheça o Design Guidelines (Manual do Visual Studio).
Figura 3 - Analisador de código
Para rodar o analisador, basta compilar a aplicação (Control + Shift + B), assim na própria janela de OutPut é exibido o resultado da análise.
C:\Documents and Settings\alexandret\My Documents\Visual Studio 2005\Projects\AnalisadorCodigo\AnalisadorCodigo\Class1.vb(4): warning : CA1709 : Microsoft.Naming : Correct the casing of parameter name 'Param'. C:\Documents and Settings\alexandret\My Documents\Visual Studio 2005\Projects\AnalisadorCodigo\AnalisadorCodigo\Class1.vb(4): warning : CA1804 : Microsoft.Performance : Class1.Analise(String):List`1<System.String> declares a local, 'variavelNaoUsada', of type System.String, which is never used or is only assigned to. Use this local or remove it.
Claro que neste exemplo simples somente estes dois itens foram encontrados, já em um grande projeto é necessário uma análise refinada nos itens que serão checados.
Em casos mais criteriosos, ao invés de exibir como um simples Warning, basta na configuração alterar para Error, com isso o projeto nem mesmo é compilado.
Teste Unitário e Code Coverage
O conceito de teste unitário já é conhecido a um bom tempo, porém sempre trabalhávamos com add-ins no Visual Studio 2003 (Nunit). Agora na versão 2005 temos o recurso integrado com o Visual Studio e além disso podemos medir o percentual de código que foi testado ou não. E como os recursos estão integrados com o Visual Studio, a implementação é muito mais simples e principalmente automatizada, isso aumenta em muito a produtividade.
O grande ponto deste recurso está na possibilidade de integração com o Team Foundation Server, onde podemos criar políticas de chick-in no Source Control e dizer que um desenvolvedor só pode fazer o check-in de um código testado e com um percentual mínimo de aceite. Isso é o grande negócio, pois controlamos via ferramenta se as regras de desenvolvimento estão sendo seguidas.
Na prática
Temos um projeto Class Library simples, em VB.Net, na janela Solution Explorer adicione uma classe chamada Login. Vamos adicionar um código muito simples, um método de LoginAcesso que recebe o nome de um usuário e senha e retorna se este usuário está autenticado ou não.
Public Function LoginAcesso(ByVal usuario As String, ByVal senha As String) As Boolean If usuario = "Usuario" Then Return True Else Return False End If End Function
O objetivo do teste neste caso é verificar se a validação está correta, ou seja, esperamos um retorno como True na chamada deste método.
Criar o teste unitário é muito simples, clique com o botão direito do mouse sobre o código e Create Unit Test. Uma janela de Wizzard é aberta (Figura 4)
Figura 4 - Criando o Unit Test.
Selecione o método e clique em OK. Uma nova janela é aberta pedindo o nome do projeto, note que um novo projeto do tipo Test é criado.
O Visual Studio cria então uma classe LoginTest e o método LoginAcessoTest que é o responsável pelo teste. Note alguns TODO´s, onde devemos adicionar os valores que queremos testar. A chamada do teste deve ficar conforme a listagem abaixo:
Public Sub LoginAcessoTest() Dim target As Login = New Login Dim usuario As String = "Alexandre" 'TODO: Initialize to an appropriate value Dim senha As String = "1234" 'TODO: Initialize to an appropriate value Dim expected As Boolean Dim actual As Boolean actual = target.LoginAcesso(usuario, senha) Assert.AreEqual(expected, actual, "Valor incorreto.") End Sub
A verificação está no Assert.AreEqual, ou seja, podemos utilizando a classe Assert fazer inúmeros tipos de testes.
Para rodar o teste, no menu do Visual Studio selecione Test > Windows >Test View (Figura 5).
Figura 5 - Test View.
Na janela Test View clique no botão Run Selection.
Figura 6 - Test Result.
Com isso temos a execução o teste finalizada porém não sabemos se 100% do código foi testado. Para isso utilizamos o recurso chamado Code Coverage, que analisa o percentual de código executado. No Solution Explorer, abra o diretório Solution Items e dê um duplo clique em localtestrun.testrunconfig, com isso uma janela é aberta. Selecione Code Coverage e habilite o projeto Class Library, clique em Apply e Close.
Figura 7 - Configuração.
Novamente pelo Test View, execute o teste criado anteriormente. Na janela Test Result, clique no último botão Show Code Coverage Results
Figura 8 - Code Coverage.
Uma nova janela de resultados é aberta, a Code Coverage Results (Figura 9), vá até o método LoginAcesso e dê um duplo clique, com isso podemos verificar o código executado.
Figura 9 - Code Coverage Result
Conclusão
Trabalhar com o Visual Studio 2005 Team System significa ter diversos recursos adicionais em nossa ferramenta de trabalho, mesmo tendo estes recursos em forma de add-in do Visual Studio, a facilidade que os recursos integrados nos oferece já é um bom motivo para utilizarmos à ferramenta.