FL-2.2.1-A (K2) Compare os diferentes níveis de teste da perspectiva de seus objetivos, da base de teste, dos artefatos de teste, das falhas e defeitos típicos e das abordagens e responsabilidades.

Tópico - Progresso:

Os seguintes níveis de testes serão abordados:

 

  Unitário ou componentes.

  Integração.

  Sistema.

  Aceite.

 

Esses níveis de testes são caracterizados pelos seguintes atributos:

 

→  Objetivos específicos.

→  Base de teste, referenciada para derivar casos de teste.

→  Objeto de teste (ou seja, o que está sendo testado).

→  Defeitos e falhas típicas.

→  Abordagens e responsabilidades específicas.

 

Visão Geral – Teste de Unitário ou Componente

 

 

No teste unitário, as unidades de software implementadas são sistematicamente testadas pela primeira vez. Dependendo da linguagem de programação utilizada, estas unidades de software podem ser nomeadas de formas diferentes:

 

  Unidades.

  Módulos.

  Programas.

  Funções.

  Classes.

 

 

São características do teste unitário:

 

Um componente para testes pode ser montado a partir de outros componentes menores. É fundamental que o testador se concentre em aspectos internos e no comportamento do componente.

O teste unitário verifica aspectos internos do componente sob teste.

Os componentes são testados individualmente e isoladamente de outros componentes. O isolamento é necessário para evitar  influências externas sobre os componentes sob teste. Se for detectado um problema, ele é certamente proveniente do componente sob teste.

 

Normalmente o teste unitário é feito pelo desenvolvedor, ou com estreita colaboração com ele. Testes de componentes não visam testar a interação com os componentes vizinhos. Essa é a tarefa de teste de integração.

 

No sistema DreamCar, a especificação para o cálculo do preço do veículo define que:

O ponto de partida é (baseprice – discount) + (special price + extraprice)

 

→  baseprice é o preço base do veículo

→  discount é o desconto concedido pelo revendedor

→  specialprice é um valor para um modelo especial

→  extraprice é o valor dos acessórios

 

Se três ou mais acessórios (que não fazem parte do modelo especial)  são escolhidos, há um desconto de 10 % em apenas estes itens particulares. Se cinco ou mais acessórios são escolhidos, este desconto é aumentado para 15 %

O desconto concedido pelo concessionário se aplica somente ao baseprice, enquanto o desconto dos acessórios se aplicam apenas aos acessórios. Estes descontos não podem ser acumulativos

 

 

Essa função em C++ faz o cálculo do preço total:

 

Para testar o cálculo do preço, o testador usa a interface correspondente da classe. Ele faz uma chamada a função calculate_price () com parâmetros e dados apropriados. Então registra a reação da função para a chamada de função. Isso significa fazer a leitura e gravação do valor de retorno da chamada da função.

Para isso, um driver de teste é necessário. Um driver de testes é um programa que chama o componente em teste (por exemplo, calculate_price () e, em seguida, recebe a reação do objeto de teste.

 

A utilização de frameworks para drivers de testes podem contribuir para simplificar os testes unitários. Esses frameworks estão disponíveis no mercado, por exemplo, JUNIT.

 

 

 

Um componente poderá ser chamado (ou usado) de um modo que não está em conformidade com a especificação. No caso de uso indevido de componentes, ele não deve fazer com que todo o sistema falhe. Deve ser capaz de lidar com a situação de erro, de forma razoável e robusta.

 

No teste unitário a robustez de um programa é testado através de chamadas de funções e os dados que são sabidamente errados, ou são casos especiais não mencionados na especificação. Esses casos de teste são também chamados de testes negativos.

A reação do componente deve ser um tratamento de exceção apropriado. Se não, entradas erradas podem provocar falhas de domínio como a divisão por zero ou acesso através de um ponteiro nulo. Tais falhas podem levar a uma falha geral do programa.

 

Avalia a eficiência do componente no uso de recursos do computador:

 

   Uso de memória.

 

   Tempo de processamento de CPU.

 

   Tempo de processamento de disco.

 

   Uso de rede.

 

  O tempo para executar funções.

 

 

Abrange todas as características de um programa que definirão o quão fácil ou difícil será seu desenvolvimento e manutenção.

 

 

O programador deve entender completamente o programa e seu contexto. Vale para o programador original, que é convidado a continuar o desenvolvimento, depois de meses ou anos, e também para o programador que assume a  responsabilidade pelo código que alguém escreveu.

 

O teste unitário é um teste de caixa branca, onde :

 

→  O testador projeta casos de testes baseado no seu conhecimento das funções e variáveis do programa.

→  O uso de ferramentas de depuração (debugger) facilita observar as variáveis do programa durante a execução.

→  O estado interno de um componente pode ser observado e manipulado.

→  Isto é útil para testes de robustez, porque o testador é capaz de provocar situações especiais.

 


O desenvolvimento dirigido a testes é uma abordagem moderna para testes de componentes, onde os casos de testes são preparados e automatizados antes da codificação. Partes do código são repetidamente testadas e melhoradas até que todos os testes sejam executados com sucesso.