O documento discute os conceitos de verificação e validação no desenvolvimento de software, testes de software e automação de testes. Aborda os níveis de teste de software, incluindo teste de unidade, integração e sistema, assim como técnicas de teste manual e automático.
1. Prof. Marcelo H. Yamaguti (1)
Pontifícia Universidade Católica do Rio Grande do Sul
Faculdade de Informática
Prof. Marcelo H. Yamaguti
Introdução à Engenharia de
Software
DESENVOLVIMENTO DE
SOFTWARE
Verificação e Validação
2. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (2)
Referências
• Estude para aprofundamento no conteúdo:
– SOMMERVILLE, Ian. Engenharia de Software. 9ª ed. São
Paulo: Pearson, 2011. – Capítulo 8
– PFLEEGER, Shari Lawrence. Engenharia de Software: teoria
e prática. 2ª ed. São Paulo: Prentice-Hall, 2004. - Capítulos 8 e
9
– IEEE. Guide to the Software Engineering Body of Knowledge.
SWEBOK. Version 3. IEEE Computer Society. 2014. –
Chapter 4
Introdução à Engenharia de Software
3. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (3)
Teste
• Teste:
– Técnica de avaliação da correção do software.
– E. Dijkstra: “Os testes podem mostrar apenas a presença de
erros, não a sua ausência”.
Implementação
Introdução à Engenharia de Software
Software
implementado Teste
Software
testado
Defeitos
encontrados
4. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (4)
Conceitos
• Verificação e Validação:
– Verificação: avalia se software atende aos requisitos definidos
(“Estamos construindo o produto da maneira correta?”).
– Validação: avalia se o software atende às expectativas do
cliente (“Estamos construindo o produto certo?”)
• Erro, Defeito, Falha:
– Erro: é o resultado de um engano humano. Ex.: interpretação
incorreta de um requisito, programação com uso de tipo de
dado incorreto.
– Defeito (bug): é a inclusão do erro no software. Ex.:
programação de lógica incorreta, tipo de variável incorreto.
– Falha: é a execução anormal do software devido aos defeitos.
Ex.: software não cumpre os requisitos definidos, software
para a sua execução anormalmente (“fatal error”) ou trava
(“entra em loop”, “pendura”).
Introdução à Engenharia de Software
5. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (5)
Conceitos
• Teste, Depuração, Manutenção corretiva:
– Teste: atividade de avaliar a correção do software em busca de
falhas.
– Depuração (debugging)*: atividade de localizar o defeito no
software.
– Manutenção corretiva: atividade de remover o defeito do
software.
• Curiosidade: conta-se que o termo “bug” (inseto) deve-se ao fato de que um
programa no computador Mark II (a relés) parou de funcionar e descobriu-se
que a causa era um inseto que impedia o fechamento de um relé. Assim que o
inseto foi retirado, o programa voltou a funcionar...
Introdução à Engenharia de Software
6. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (6)
“Debug”
• Bug encontrado no Mark II:
Introdução à Engenharia de Software
7. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (7)
Processo de teste
• Exemplo de processo de teste de software:
Introdução à Engenharia de Software
Adaptado de Sommerville, 2011.
8. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (8)Engenharia de Software
Níveis de teste de software
• Níveis de teste:
– Teste de unidade: módulos do sistema.
– Teste de integração: inter-relacionamentos entre os módulos.
– Teste de sistema: sistema completo.
9. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (9)Engenharia de Software
Níveis de teste de software
• Teste de unidade:
– É executado em nível de módulo do programa.
– Cada módulo (função, sub-rotina, classe) é testado como uma
unidade independente.
– Metas:
• verificar a execução de cada módulo
• percorrer os caminhos lógicos
• verificar conjuntos de dados (válidos e inválidos)
10. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (10)Engenharia de Software
Níveis de teste de software
• Teste de unidade:
– Problema:
Um teste exaustivo pode possuir um custo muito elevado.
Por exemplo: suponha um módulo que trabalhe com dois parâmetros:
um número inteiro qualquer e outro real apenas positivo. Desta forma
um teste exaustivo deve prever todas as combinações possíveis, supondo
que sejam possíveis 65534 valores inteiros e 1,7x1038, o número de
combinações possíveis seria em torno de 1,11x1043, se cada teste desde
módulo levasse apenas um nanosegundo (10-9s) - um bilionésimo de
segundo - o teste levaria apenas 353.000.000.000.000.000.000.000.000
(ou 3,53 x 1026 ) anos, para apenas um módulo!
11. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (11)Engenharia de Software
Níveis de teste de software
• Teste de integração:
– Verifica a correção da comunicação entre módulos.
– Metas:
• verificar se cada módulo funciona adequadamente dentro da estrutura
de controle.
• checar a interface entre os módulos.
– Diretrizes principais:
• Abordagem top-down para estrutura de controle e correção das funções
de alto nível.
• Abordagem bottom-up para teste de módulos que possuem interface ou
lógica complexa.
12. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (12)Engenharia de Software
Níveis de teste de software
• Teste de integração top-down:
– funções e módulos de alto nível são testados primeiro.
– requer stubs ou módulos fantasmas que são chamados pelos
módulos em teste.
Problema: os módulos stub podem ser codificados com erro!
Módulo
stub
Módulo
em teste
Módulo
stub
13. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (13)Engenharia de Software
Níveis de teste de software
• Teste de integração bottom-up:
– módulos de nível mais baixo são integrados e testados
primeiros.
– requer skeletons ou acionadores (módulos que chamam os
módulos em teste).
Problema: o módulo acionador pode ser codificado com erro!
Módulo
em teste
Módulo
acionador
Módulo
em teste
14. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (14)
Níveis de teste de software
• Teste de sistema:
– Etapas de teste de sistema:
Introdução à Engenharia de Software
Adaptado de Pfleeger, 2004.
15. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (15)Engenharia de Software
Teste de sistema
• Teste funcional:
– Avaliar o sistema completo visando verificar erros na
implementação da especificação.
– Diretrizes:
• requisitos e especificações funcionais devem ser usados para construir
os casos de teste.
• testar o sistema em três etapas:
1) casos normais ou ideais.
2) casos extremos: limites de valores amplo, volume grande de valores.
3) exceções: valores inválidos.
16. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (16)
Teste de sistema
• Teste de desempenho:
– Avaliação do software conforme outros requisitos solicitados.
– Exemplos de teste de desempenho:
• Stress
• Recuperação
• Regressão
• Usabilidade
• ...
Introdução à Engenharia de Software
17. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (17)Engenharia de Software
Teste de sistema
• Teste de regressão:
– Testar de na nova versão, as funcionalidades anteriores
continuam corretas.
– A cada nova funcionalidade (ou módulo) verifica-se o efeito
nos anteriores.
– Problema: o número de testes cresce aritmeticamente.
A
B
A
B
C
A
B
C
D
...
18. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (18)Engenharia de Software
Teste de sistema
• Teste de aceitação:
– Teste pelos (ou representante dos) clientes ou usuários em
ambiente de homologação.
– Foco em validação.
– É um teste da satisfação do usuário em um ambiente
(próximo) de utilização real.
– Exemplos:
• protótipos semi-acabados
• versões beta
19. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (19)
Teste de sistema
• Teste de instalação:
– Teste realizado pelos clientes ou usuário no software instalado
(implantado) no ambiente real do usuário (ambiente de
produção).
– Com a aceitação pelo cliente, o sistema será formalmente
entregue.
Introdução à Engenharia de Software
20. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (20)Engenharia de Software
Seleção de dados para teste
• Tipos de dados de teste:
1. construídos (simulados)
2. reais modificados (valores, volume)
3. reais
• Método de seleção:
1. uso normal ou ideal
2. teste de partes complexas
3. tratamento de erros
21. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (21)Engenharia de Software
Técnicas de testes
• Manuais:
– teste de mesa (simulação em papel do código)
– walkthrough
– inspeção
• Automáticos:
– analisador (compilador) de código
– verificadores de estrutura
– analisador de dados
– verificador de sequência
– geradores de casos de teste
22. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (22)
Automação de testes
• Automação de testes:
– Utilizar ferramentas de software para apoiar o teste de um
programa.
– Pode ocorrer em vários níveis, desde o teste unitário ao teste
de sistema.
– Facilita o teste de regressão.
Introdução à Engenharia de Software
23. PUCRS - FACIN
Prof. Marcelo H. Yamaguti (23)
Automação de testes
• TDD (Test Driven Development):
– Metodologia ágil que privilegia a definição dos testes antes da
codificação do software.
Introdução à Engenharia de Software
Adaptado de Sommerville, 2011.
24. Prof. Marcelo H. Yamaguti (24)
Pontifícia Universidade Católica do Rio Grande do Sul
Faculdade de Informática
Prof. Marcelo H. Yamaguti
Introdução à Engenharia de
Software
DESENVOLVIMENTO DE
SOFTWARE
Verificação e Validação