Por que eu devo ler este artigo:Este artigo apresenta alguns conceitos relacionados à modelagem de teste, incluindo as principais técnicas e critérios de teste que podem ser utilizados para verificação ou validação de um produto.

Além disso, este artigo apresenta, através de uma abordagem prática, a utilização das técnicas Partição de Equivalência e Análise do Valor Limite para identificação de condições e casos de teste.

Teste de software é um componente crítico da garantia de qualidade de software e representa uma revisão final da especificação, do projeto e do código construído. O aumento da visibilidade do software como um elemento do sistema e os "custos" de manutenção associados a uma falha, são questões motivadoras para a execução de um teste rigoroso e bem planejado.

Não é raro uma empresa de desenvolvimento de software gastar entre 30% e 40% do esforço total do projeto na etapa de teste. A rigor, o teste de softwares que envolvem vidas (por exemplo, sistemas para medicina, monitoramento de reatores nucleares) pode custar de três a cinco vezes mais do que todas as outras fases de engenharia de software juntas.

Segundo Myers, “testar um programa é analisar um programa com a intenção de descobrir erros e defeitos”. Ou seja, durante os testes certificamos se o software foi implementado corretamente, isto é, verificamos o software; e também certificamos se ele foi construído de acordo com seus requisitos, ou seja, validamos o software.

Após o desenvolvimento do código fonte, o software deve ser testado para encontrar (e corrigir) tantos erros quanto possíveis antes de ser entregue ao cliente.

O propósito do teste de software não é provar que um programa está bem escrito, mas sim descobrir todos os defeitos que por ventura existem nele.

Através dos testes não demonstramos a ausência de erros ou defeitos, apenas evidenciamos os existentes. Um bom teste é aquele que exercita diversas porções do software fazendo-o falhar.

Assim, dizemos que o teste de software é uma atividade de natureza “destrutiva” e não “construtiva”. De igual importância a examinar se um software realiza as tarefas para as quais foi projetado, é identificar o que ele faz não intencionalmente.

Sabemos que o custo de reparos no software aumenta ao longo do tempo, portanto, quanto mais tarde um defeito for encontrado, maior será o custo da sua correção. Daí a importância da realização de testes desde o início de um projeto.

De uma forma simples, testar um software significa verificar através de uma execução controlada se o seu comportamento ocorre de acordo com o especificado.

O objetivo principal desta atividade é revelar o número máximo de falhas dispondo do mínimo de esforço, mostrando aos que desenvolvem se os resultados estão ou não de acordo com os padrões que foram estabelecidos.

Ao longo deste artigo, iremos discutir os principais conceitos relacionados às atividades de teste e as principais técnicas de modelagem de teste que podem ser utilizados para verificação ou validação de um produto, assim como exemplos práticos da aplicação de cada tipo de técnica.

Processo de Teste

Pode-se entender um programa como sendo uma função que descreve uma relação entre um elemento de entrada e um elemento de saída. O processo de teste é utilizado para garantir que este programa realize integramente esta função.

Os elementos essenciais de um teste são:

· O software executável ou o código fonte;

· Descrição do comportamento esperado do software;

· Descrição do seu domínio funcional (entradas).

O processo de teste consiste, então, em obter um valor válido do seu domínio funcional (ou inválido), definir o comportamento esperado do software para o valor escolhido, executá-lo, observar seu comportamento e, por fim, comparar este comportamento com o esperado.

Se o comportamento atual não coincidir com o esperado, este teste descobriu (no sentido de tornar visível) um erro.

A completa verificação de um software pode ser obtida através de um teste exaustivo, isto é, a aplicação do processo de teste para todos os valores do domínio (entradas). No entanto, comumente as entradas são infinitas ou, quando finitas, são suficientemente grandes tornando inviável a quantidade de testes necessária para cobri-las. Por exemplo:

int FuncaoA(char ch);

int FuncaoB(int x, int y);

Considerando ...

Quer ler esse conteúdo completo? Tenha acesso completo