Testar é o processo de executar o programa com a intenção de encontrar erros
Uma forma de reforçar uma boa definição para teste é analisar o significado de teste bem-sucedido e teste mal-sucedido
Muitos gestores de projetos chamam testes que passam de:
E testes que falham de:
Um teste bem construído é bem-sucedido quando encontra erros que podem ser corrigidos.
O mesmo teste é também bem-sucedido quando eventualmente estabelece que não há mais erros a ser descobertos.
O único teste mal-sucedido é aquele que não examina apropriadamente o software.
Um teste que não encontra erros pode ser considerado não-sucedido, uma vez que o conceito de software sem erros é irreal.
É importante lembrar que, em geral, é impraticável, ou mesmo impossível, encontrar todos os erros de um programa.
Isto gera o desafio de encontrar o equilíbrio ideal de quanto teste é necesário e/ou possível, uma vez que há implicações econômicas no processo de testar software..
Modificar um software existente é mais propenso a erros do que escrever um novo software.
Por conta disso um bom conjunto de testes reduz essa tendência e reduz o custo de manutenção.
Uma boa recomendação é desenvolver casos de teste usando métodos caixa-preta e na sequência desenvolver testes adicionais usando métodos caixa-branca.
Exemplo de teste caixa-branca:
Teste de módulos (ou testes unitários) é o processo de testar individualmente subprogramar, subrotinas, ou procedimentos de um programa.
Testar com foco nos pequenos blocos de software primeiro.
Uma unidade é o menor componente possível de software capaz de ser testado.
Em testes unitários há um esforço de detectar defeitos relacionados a funcionalidade e estrutura de cada unidade.
Testes de integração possui duas metas principais:
Testar o sistema como um todo, já com testes unitários e testes de integração finalizados.
O objetivo é garantir que o sistema está deacordo com os seus requisitos.
caixa-preta
Testes de sistema avaliam tanto o comportamento funcional quanto os requerimentos de qualidade como por exemplo:
Esta fase de testes é especialmente útil para detectar erros externos de hardware ou interfaces com outros projetos de software.
Testes funcionais de sistema tem a muita sobreposição com os testes de aceitação.
Muito frequentemente os mesmos conjuntos de teste podem ser aplicados em ambos.
Ambos demonstram a funcionalidade do sistema.
Os testes de aceitação representam as expectativas dos clientes e usuários.
Código auxiliar desenvolvido para dar suporte ao teste das unidades e componentes de software.
O Harness consiste de drivers que executam o código a ser testado e emcapsulam os módulos que serão testados.
HelloWorld em Perl:
Mojolicious é um framework Perl para aplicações web.
# hello.pl
use Mojolicious::Lite;
get '/' => {
text => 'Hello world!'
};
app->start;
Executar HelloWorld:
$ morbo hello.pl
Server available at http://127.0.0.1:3000
Request (GET) HelloWorld:
$ curl http://localhost:3000
Hello world!
# hello-test.t
use Test::More;
use Mojo::File 'path';
use Test::Mojo;
my $hello = path(__FILE__)->dirname->sibling('hello.pl');
my $t = Test::Mojo->new($hello);
$t->get_ok('/')->content_like(qr/Hello world!/);
done_testing();
Executar teste:
$ prove hello-test.t