Mostrando postagens com marcador Teste Unitário. Mostrar todas as postagens
Mostrando postagens com marcador Teste Unitário. Mostrar todas as postagens

quarta-feira, novembro 05, 2008

Pesquisa sobre Testes Unitários

O portal The Server Side .NET fez uma pesquisa bastante interessante sobre a utilização dos testes unitários. A pesquisa foi realizada em dois momentos, o primeiro em Fevereiro de 2006 e um outro agora em Outubro de 2008 e levantou basicamente se testes unitários são executados e de que forma eles são executados. Confira o resultado:

Respostas20082006
Testes unitários não são executados17%13%
O Teste unitário é informal40%46%
O casos de testes são documentados9%11%
O casos de testes e a execução são documentados14%16%
Utilizamos a abordagem de TDD20%14%


A pesquisa chegou a conclusão de que as pessoas que já faziam testes unitários, evoluíram para uma abordagem de TDD (Test Driven Development), porém as pessoas que não praticam o teste unitário possuem diversas razões, entre elas o simples fato de sentirem que o teste unitário não agrega nenhum valor ao negócio ou até mesmo por achar essa prática difícil.

Se você faz parte desse grupo de pessoas que não praticam testes, seja ele unitários ou não, pelos motivos citados acima, convido-o a conhecer um pouco do Visual Studio Team System 2008 Test Edition.

O VSTS Test Edition permite que você faça com, muita facilidade, testes unitários, testes web, testes de carga, verificação de cobertura de código, gerenciamento de test cases e muito mais. Com isso, a desculpa de que fazer teste é difícil não vale mais, mas se você ainda acha que isso não agrega valor ao seu negócio, comece a avaliar os relatórios que são gerados baseados nesses dados coletados e você conseguirá ver a qualidade do seu projeto sendo apresentada em gráficos em tempo real.

Infelizmente, tenho apenas um post publicado sobre o assunto, este falando sobre testes unitários com code coverage, mas em breve pretendo falar um pouco mais sobre essa fantástica ferramenta.

Até a próxima e bons testes.
André Dias

quarta-feira, julho 04, 2007

Teste Unitário e Code Coverage com Visual Studio

Ultimamente tenho visto muita gente falar sobre testes unitários, metodologias ágeis, garantia de qualidade, mas implementar o tal do teste unitário que é bom mesmo, são poucas empresas que conheço que fazem isso de verdade.

Quando digo que são poucas, não estou me refirindo a você abrir o Visual Studio, criar um projetinho de teste e criar um método simples para testar apenas o "caminho feliz" do seu método, estou falando de você planejar os seus testes unitários antes e criar vários métodos de testes para cobrir todas, ou pelo menos a maioria, das situações que o seu método possa executar.

Isso engloba em testar range de valores, parametros opcionais, se as exceções são levantadas corretamente e por aí vai. Se for preciso utlizar Mock Objects, ótimo, vamos fazer isso também, mas é extremamente importante que você faça métodos de testes que sejam eficientes e não apenas para dizer que está utilizando testes unitários na sua aplicação.

Um recurso muito útil presente no Visual Studio (edições pra Developer e Tester) é o Code Coverage. Esse recurso ligado junto com os testes unitários permite ao usuário acompanhar visualmente quais trechos do código foram testados ou não.

Vamos ver um exemplo de como ele funciona:

1. Vamos criar um projeto do tipo Class Library e adicionar uma classe Calculadora como o exemplo abaixo:


public class Calculadora
{
public static float Dividir(float d1, float d2)
{
if (d2 == 0)
{
throw new DivideByZeroException();
}
else
{
return d1 / d2;
}
}

public static int Soma(int a, int b)
{
return a + b;
}
}

2. Em seguida , vamos adicionar um projeto do tipo Test Project e adicionar uma classe chamada CalculadoraTest com o seguinte código:


[TestClass]
public class CalculadoraTest
{
[TestMethod]
public void DivisaoComumTeste()
{
float resultado = Calculadora.Dividir(6, 3);
float esperado = 2;

Assert.AreEqual(esperado, resultado);
}
}


Veja que a classe de teste possui apenas um método e não está cobrindo a situação de divisão por zero, e nem o método Soma. Isso não quer dizer que o método não funcione, mas ele não foi testado.

Se rodarmos esse teste, teremos o seguinte resultado:


Até aí nada de muito interessante, a janela mostra apenas que o teste foi executado com sucesso. O grande barato é quando ligamos o Code Coverage o colamos os testes unitários para rodar junto.


Para habilitar o Code Coverage, vá no arquivo localtestrun.testrunconfig da sua solução e você verá a seguinte tela:




Marque o Assembly CodeCoverageSample.dll e mande rodar os testes novamente. Quando terminar os testes, acesse o menu Test/Windows/Code Coverage Results e veja que coisa linda :-)



O Visual Studio te dá a porcentagem de código testado agrupados por métodos, classes, namespaces e assemblies e além disso marca no código por quais trechos ele passou ou não.

Dessa forma fica muito fácil visualizar que temos que escrever mais métodos de testes para testar a situação da divisão por zero e para garantir que o método de soma está funcionando corretamente.

Agora que já conhecemos o Code Coverage, é só definirmos uma meta para o nosso projeto (80, 90, 100% de cobertura) e brigar com o seu gerente pra ele alocar tempo para você criar métodos de testes que cubram todo o seu código :-)

Um grande abraço

André Dias