Teste de Software

Definição

O que é Teste de Software?

Uma das principais causas que levam a testes de software ruims é o fato de programadores começarem com uma falsa definição de teste de software

O que é Teste de Software?

O que é Teste de Software?

  1. Testar é o processo de demonstrar ausência de erros no software
  2. O propósito de testar é mostrar que o software executa suas funções corretamente
  3. Testar é o processo de estabelecer a confiança de que o software faz o que ele deveria fazer

Testar é o processo de executar o programa com a intenção de encontrar erros

Testar é o processo de executar o programa com a intenção de encontrar erros

Bem-sucedido e Mal-sucedido

Uma forma de reforçar uma boa definição para teste é analisar o significado de teste bem-sucedido e teste mal-sucedido

O que é um teste

(1) bem-sucedido?

(2) mal-sucedido?

Muitos gestores de projetos chamam testes que passam de:

  • Execução de teste bem-sucedida

E testes que falham de:

  • Execução de teste mal-sucedido

No entanto… essa definição está invertida!

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.

Entretanto…

É 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..

Princípios de Teste de Software

  • Uma parte necessária de um caso de teste é a definição das saídas ou resultados esperados

Princípios de Teste de Software

  • Inspecione minuciosamente os resultados de cada teste

Princípios de Teste de Software

  • Casos de teste devem ser escritos para entradas inválidas e não-esperadas mas também para aquelas válidas e esperadas

Princípios de Teste de Software

  • A possibilidade de existência de mais erros numa seção do programa é proporcional ao número de erros já encontrados nesta seção

Princípios de Teste de Software

  • Teste é uma tarefa extremamente criativa e intelectualmente desafiadora

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.

níveis de testes

Unidade de software

Uma unidade é o menor componente possível de software capaz de ser testado.

  • Realiza uma única função de maneira coesiva
  • Pode ser compilado separadamente
  • Representa uma tarefa singular do ponto de vista gerencial
  • Contém código que cabe numa única página ou tela

Em testes unitários há um esforço de detectar defeitos relacionados a funcionalidade e estrutura de cada unidade.

Testes de integração

Testes de integração possui duas metas principais:

  1. Detectar defeitos que ocorrem nas interfaces das unidades de software
  2. Juntar unidades individuais em um subsistema funcional e finalmente num sistema completo e pronto para testes de sistema

Testes de sistema

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:

  • Confiabilidade
  • Usabilidade
  • Performance
  • Segurança

Esta fase de testes é especialmente útil para detectar erros externos de hardware ou interfaces com outros projetos de software.

Tipos de testes de sistema

  • Teste funcional
  • Teste de performance
  • Teste de stress
  • Teste de configuraçao
  • Teste de segurança
  • Teste de recuperação

Teste funcional de sistema

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.

Testes de aceitação

Os testes de aceitação representam as expectativas dos clientes e usuários.

níveis de testes

Test Harness

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 (Perl): https://mojolicious.org/

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!

Test Harness (Perl)

  • Test::More
  • Test::Mojo

# 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