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.

Cc517998.fig1(pt-br,MSDN.10).jpg
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).

Cc517998.fig2(pt-br,MSDN.10).jpg
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).

Cc517998.fig3(pt-br,MSDN.10).jpg
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)

Cc517998.fig4(pt-br,MSDN.10).jpg
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).

Cc517998.fig5(pt-br,MSDN.10).jpg
Figura 5 - Test View.

Na janela Test View clique no botão Run Selection.

Cc517998.fig6(pt-br,MSDN.10).jpg
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.

Cc517998.fig7(pt-br,MSDN.10).jpg
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

Cc517998.fig8(pt-br,MSDN.10).jpg
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.

Cc517998.fig9(pt-br,MSDN.10).jpg
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.