Início > Teste de Software > Ferramentas para teste de software em Python – Parte 1

Ferramentas para teste de software em Python – Parte 1

Não querendo ser pretensioso demais, esse post vai tentar abordar algumas das ferramentas que podem ser utilizadas no teste de software específicos para linguagem Python, visto que esse é um cenário muito extenso e diversas abordagem podem ser utilizadas. Mas primeiramente, um grande questão: O que deve ser considerado no teste do software? Antes de responder, permita-me voltar um pouco com a história.

Quando se fala em testar, diversas variáveis podem ser consideradas: o custo do teste; o tipo do teste; a cobertura alcançada no código; a capacidade do teste revelar algum defeito, dentre várias outras. Responder a questão anterior está diretamente relacionado com a escolha de alguma destas, ou de outras métricas. E para cada característica, um tipo ferramenta pode ser utilizada. Por essa profundidade, inicia agora uma série de posts relacionados ao tema. Para começar, vamos falar do básico sobre o teste em Python.

Nota: Se você nunca criou testes, nem escreveu uma linha em Python, não se preocupe. Apesar de ser um assunto bastante abrangente, ele é de fácil compeensão.

Motivação

O teste ajuda a definir e restringir o problema em questão. Com ele você de garantir que o software que está sendo entregue ao cliente funciona como foi especificado, com uma maior garantia que no meio da noite não terá ninguém te ligando dizendo que ocorreu uma falha inesperada. Princípios como do Test Driven Development encorajam a escrita do teste antes da escrita do código de negócios. Mas o teste pode ser escrito em várias fases do processo de desenvolvimento. O importante é que ele deve ser escrito.

O primeiro passo é aplicar o teste de unidade. Entende-se por unidade a menor parte testável do programa. Em linguagens Orientadas a Objeto, este pode ser considerado tanto como a classe, quanto o método. Jamais um atributo, pois não existe um comportamento. Python é uma linguagem que pode ser utilizada no paradigma OO, e é também conhecida por ‘vir com as pilhas’ (componentes prontos para uso), logo no teste de unidade não é diferente. O unittest foi o primeiro framework desenvolvido para o teste de unidade, e  ainda é o mais conhecido e utilizado. Este é uma releitura do famoso JUnit, utilizado em programas Java. Para sua aplicação, alguns conceitos precisam ser introduzidos.

  • Dado de teste: É a menor unidade do teste. Verifica dados da especificação para um particular conjunto de entrada.
  • Suite de teste: É uma coleção de dados de teste.

O unittest fornece um rico grupo de ferramentas para construção e execução dos testes. Veremos que é possível satisfazer, com poucas linhas, as principais necessidades do teste de unidade. Para isso, considere o arquivo exemplo1.py, representado pela próxima figura:

O código praticamente fala por sí próprio. Na primeira linha é definido um método reverse aceitando lista como parâmetro. Na segunda linha, a lista é invertida, e em seguida, é retornada. O dado de teste para este código é apresendo a seguir.

Apesar do teste escrito ser bastante simples, ele apresenta as principais características necessárias de um dado de teste. Na primeira linha é feito um import para o unittest. Posteriormente, é criada a classe ReverseTests. O nome Test é necessário, pois informa ao compilador que este é um arquivo de teste. A classe ainda herda de unittest.TestCase. Isso é necessário, pois um dado de teste necessáriamente deve estender essa classe. A linha 5 faz um import específico para o método criado anteriormente, e a linha 6 representa o ponto crucial do teste, chamado assertEqual(). Este método verifica o resultado experado (primeiro parâmetro) com o resultado que é obtido (segundo parâmetro), realizando essa comparação. O último bloco apresenta uma maneira simples para rodar o teste. O método unnittest.main() fornece uma interface em linha de comando para o script. Quando o teste acima é executado, uma saida similar a esta é obtida:

--------------------------------------------------------
Ran 1 tests in 0.000s
OK

Nesse momento, você conseguiu executar o seu primeiro teste. E ele foi bem sucedido. Agora, mude o valor passado no método assertEqual e veja qual será a saida apresentada. Além do assertEquals, outros métodos são de importância: setUp() e tearDown().

O método setUp()é utilizado para preparar variáveis e/ou objeto que vão ser usadas nos métodos de teste. Este método é chamado imediatamente antes de todos os outros métodos de teste. Qualquer exceção lancada por esse método é considerado um erro, ao invez de uma falha no teste.

No caso do método tearDown(), o método é chamado após todos os métodos de teste serem executados. Esse método só vai ser chamando se o método setUp() for executado também. Com a inclusão destes métodos, o nosso arquivo de teste refatorado se tornou o seguinte:

O código acima ficou muito simples e claro, e ainda conseguiu atender todas as nossas necessidades. Estes foram os passos básicos para o teste de unidade ser atendido. No próximo episódio, os caminhos para tornar sua documentação testável. Não perca!

Anúncios
Categorias:Teste de Software
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: