Escolar Documentos
Profissional Documentos
Cultura Documentos
Estamos construindo
certo o produto?
Validação e Verificação (V&V)
1 2
3 4
5 6
1
25/07/17
Verificação
está8ca
Conceitos
Análise de Projeto Projeto Implementação
Requisitos Arquitetural Detalhado
Técnicas
Protó@pos
dinâmicas
7 8
Falta (defeito)
– Causa de uma falha (aspecto Interno)
– Exemplo: Código incorreto ou faltando
Falta Erro Falha Erro de Sistema
– Estado intermediário (instabilidade)
class A { … – Provém de uma falta
int quadrado(int x) {
return x; – Pode resultar em falha, se propagado até a saída
} Falha
}
– Incapacidade do so=ware de realizar a função
requisitada (aspecto externo)
– Exemplo: Terminação anormal, restrição temporal
violada
9 10
11 12
2
25/07/17
Abordagens para
Análise Está@ca
Validação e Verificação
13 14
15 16
17 18
3
25/07/17
19 20
Obje8vo
21 22
Categorias Níveis
Funcional
Componente
Integração Defeitos
Integração
Funcional Sa8sfação
Componente
23 24
4
25/07/17
Abordagens
“Testes mostram a
presença de falhas, mas
não a ausência delas.”
Dpsodlsklskdls
Skdasdk Dpsodlsklskdls
‘dklaksdlksl;ad Skdasdk
Ldaskdl;ksa;ld ‘dklaksdlksl;ad
Kdlsakdl;kas;ldk;lasdk;sad; Ldaskdl;ksa;ld
Lksl;kdl;aks;ld Kdlsakdl;kas;ldk;lasdk;sad;
Lsak;ldka;lkd;aksdas Lksl;kdl;aks;ld
Fdlskfl;dskf; Lsak;ldka;lkd;aksdas
Lksl;kdl;aks;ld Fdlskfl;dskf;
Lsak;ldka;lkd;aksdas Lksl;kdl;aks;ld
[Edsger Dijkstra]
Dspop[odfpodfs[pfds[fo Lsak;ldka;lkd;aksdas
Lksl;kdl;aks;ld Dspop[odfpodfs[pfds[fo
Lsak;ldka;lkd;aksdas Lksl;kdl;aks;ld
Lksl;kdl;aks;ld Lsak;ldka;lkd;aksdas
Lsak;ldka;lkd;aksdas Lksl;kdl;aks;ld
Lksl;kdl;aks;ld Lsak;ldka;lkd;aksdas
Lsak;ldka;lkd;aksdas Lksl;kdl;aks;ld
Lksl;kdl;aks;ld Lsak;ldka;lkd;aksdas
Lsak;ldka;lkd;aksdas Lksl;kdl;aks;ld
Lsak;ldka;lkd;aksdas
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmdmsm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
X
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
27 28
Iden8ficação Nome
RF 001 Cadastrar usuário
Descrição
O usuário ... Por:
Procedimento de teste não Pré-condições
é influenciado pela implementação 1. O servidor ...
Fluxo de eventos
1. O usuário...
Resultados dos testes podem ser FS 01 - Fluxo Secundário 1: Algum campo vazio
avaliados por pessoas sem conhecimento 1. O sistema mostra ...
FS 02 – Fluxo Secundário 2: E-mail já cadastrado
da linguagem de programação
1. ...
Saídas e pós condições:
• O sistema deverá ...
29 30
5
25/07/17
31 32
Exercício
• Pensem em um cenário de u@lização do
twioer. A par@r do cenário derive casos de
teste. Só a quan8dade de casos
de teste é o suficiente?
33 34
35 36
6
25/07/17
37 38
Exemplo Fronteiras
• Especifique casos de teste para a função que
recebe como entrada números de 10 a 100
usando a técnica de valor limite.
Estaqs@cas indicam que há uma
maior susce8bilidade a erros
Função nas fronteiras de par@ções
Entrada: Número
(limites dos @pos)
{9, 10, 100, 101}
39 40
41 42
7
25/07/17
Dados Exercício
Valor Resultado
-5 Não existe
-1 Não existe buscaBinaria
public double raiz(double x) Entrada: Coleção de Inteiros e Valor
0 0
1 1
4 2
43 44
Classes de Par@ção
Coleção Elemento
45 46
Casos de Teste
Coleção Valor Resultado
<> 9 -1
<1> 9 -1
<9> 9 1
<4,5,6,7> 1 -1
<4,5,6,7> 5 2
<4,5,6,7> 7 4
<4,5,6,7> 9 -1 POSCOMP 2016
47 48
8
25/07/17
Sinônimos...
Caixa-clara
Teste Caixa-Branca Caixa-branca
Caixa de Vidro
Teste Estrutural
49 50
class A {
int x() {
return 10;
}
int y (){
return 10/0;
}
}
51 52
Contexto...
• Não se pode avaliar o grau de cobertura de
uma funcionalidade pelo teste de caixa preta
Como melhorar • Seria bom gerar dados de teste que permitam
este cenário? exercitar algum critério em relação ao código
(cobertura)
53 54
9
25/07/17
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmdmsm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
2 3
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
4
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
Entrada Programa
O obje@vo é testar cada caminho
pelo menos uma vez
Casos de teste são gerados
a par@r da implementação
55 56
57 58
Exemplo
1
Cálculo de xy
1. read x, y;
y<0 2 y≥0
2. if (y < 0)
3. p := 0 - y 3 4
4. else p := y;
5. z := 1.0;
5 Quais os @pos de
6. while (p ≠ 0) {
7. z := z * x;
p := p - 1; 7
p≠0 6
p=0
cobertura?
} 8
y<0
8. if (y < 0)
y≥0
9. z := 1 / z; 9
10. write z;
10
59 60
10
25/07/17
Cobertura de Instruções
• Cobertura de instruções (nós) 1
– Checar se todos as instruções foram executados
Cálculo de xy
2 Cada instrução deve ser
• Cobertura de decisões (ramos) 1. read x, y; y<0 y≥0
2. if (y < 0)
3
executada pelo menos 1 vez
– Checar se todos os ramos de if e case foram 3. p := 0 - y 4
4. else p := y; 5
testados 5. z := 1.0;
6. while (p ≠ 0) {
x y Nós percorridos
• Cobertura de condições 7. z := z * x; p≠0 6
- -1 {1,2,3,5,6,7,8,9,10}
p := p - 1;
– Checar se todas as partes das condições foram } 7
- 0 {1,2,4,5,6,8,10}
testadas 8. if (y < 0)
y<0
8
9. z := 1 / z;
10. write z; y≥0
9
10
61 62
11
25/07/17
Exercício 1 Exercício 2
• Faça o grafo de fluxo de controle e sugira • Faça o grafo de fluxo de controle e sugira os
casos de teste u@lizando o teste caixa branca casos de teste u@lizando o teste caixa branca
por cobertura de condições. por cobertura de instruções e decisões.
1. read x, y 1. read x, y, z;
2. z = x + y; 2. while (x>0) {
3. if (x>0 and y>1) { 3. y = x+1;
4. x = x-1; 4. if (x+y > 7)
5. z = z-1;
5. if (z >5)
6. else z = z+1;
6. z = z-1;
7. if(x==0)
7. else z = z+1 8. z = 5*y;
8. } write x,y }
9. write x,y;
67 68
Complexidade Ciclomá8ca
69 70
12
25/07/17
Desafios
• Esforço computacional
• Mutantes Equivalentes
Outras Abordagens
73 74
return z;
} END END
Caminho 1: (X ≥ Y) && (Z = X)
76
Caminho 2: (X < Y) && (Z = Y)
75
Teste de Regressão
• Ferramenta • Re-execução de testes feitos após uma
– JavaPathFinder manutenção corre@va ou evolu@va
• Em processos de desenvolvimento itera@vos,
muitos dos artefatos produzidos nas primeiras
iterações são usados em iterações posteriores
• Aplicação
– Geração de Casos de Testes
– Constraint Solvers (CVC3,...)
77 78
13
25/07/17
Priorização de Testes
Dpsodlsklskdls
Skdasdk
testes?
Lksl;kdl;aks;ld
Lksl;kdl;aks;ld
Lsak;ldka;lkd;aksdas
Lsak;ldka;lkd;aksdas
Dspop[odfpodfs[pfds[fo
Lksl;kdl;aks;ld
Lksl;kdl;aks;ld
Lsak;ldka;lkd;aksdas
Lsak;ldka;lkd;aksdas
Lksl;kdl;aks;ld
Lsak;ldka;lkd;aksdas
Lksl;kdl;aks;ld
– Tempo
Lksl;kdl;aks;ld
Lsak;ldka;lkd;aksdas
Lsak;ldka;lkd;aksdas
Lksl;kdl;aks;ld
Lksl;kdl;aks;ld
Lsak;ldka;lkd;aksdas
Lsak;ldka;lkd;aksdas
79 80
Ferramentas Randoop
81 82
Exercício Randoop
• Quais os desafios envolvidos na criação de um • Gerador Automa@zado de Testes de Unidade
gerador automa@zado de testes? no formato JUnit
– Timelimit
• Encontrou bugs nas coleções de Java
• Plugin para o Eclipse
hop://people.csail.mit.edu/cpacheco/randoop/1.2/doc/index.php
83 84
14
25/07/17
Exemplo Exercício
• Usem o Randoop e avaliem a qualidade do projeto real
escolhido no projeto.
• Avaliem a cobertura da coleção de testes gerada.
java -classpath randoop.jar randoop.main.Main – Variar o @melimit e discu@r a influência do @melimit
gentests --testclass=A @melimit=10 com relação a cobertura da coleção gerada?
– Caso a cobertura não chegue a 100%, o que é possível
fazer?
• Se encontrarem algum bug, reportem no bugzilla do
projeto.
85 86
EclEmma
Cobertura de Teste
hop://www.eclemma.org
87 88
Cobertura
• Análise da Cobertura de Testes em formato
JUnit
• Possui mais métricas de cobertura de teste
• Usem o Ant pra rodar
hop://cobertura.sourceforge.net/
89 90
15
25/07/17
Exercício
• Usem o EclEmma e/ou Cobertura para avaliar
a cobertura dos testes gerados pelo Randoop
e os testes de unidade já existente no sistema.
• O sistema possui uma coleção de testes? Qual
a cobertura?
• Compare a coleção de testes existente com a
gerada pelo randoop?
91 92
Ar@go
FindBugs
hop://www.ibm.com/developerworks/java/library/j-cq01316/index.html?ca=drs
93 94
95 96
16
25/07/17
Resultados Vídeo
hop://findbugs.cs.umd.edu/talks/findbugs.mov
97 98
Exercício
• Usem o Findbugs para avaliar se existem bugs
no sistema.
• O Randoop encontrou alguns deles? MuJava
• As métricas (coletadas com o Metrics)
avaliadas também indicaram estes sintomas?
• Relacione o resultado com a cobertura da
coleção de testes.
99 100
hop://cs.gmu.edu/~offuo/mujava/
101 102
17
25/07/17
Ar@go
hop://agile.csc.ncsu.edu/SEMaterials/tutorials/muclipse/
103 104
105 106
O que é?
Gerador de eventos e cliques aleatórios para
testar um aplica@vo em Android.
Monkey
hop://developer.android.com/tools/help/monkey.html
107 108
18
25/07/17
O que é?
Permite criar testes caixa preta para aplica@vos
em Android.
Robo@um
hops://code.google.com/p/robo@um/
109 110
O que é?
Conjunto de ferramentas para testar aplicações
web
Selenium
hop://seleniumhq.org/
111 112
113 114
19
25/07/17
115 116
117 118
20
25/07/17
121 122
Referências
Capítulos 22-24
123
21