Você está na página 1de 21

25/07/17

Estamos construindo
certo o produto?
Validação e Verificação (V&V)

Rohit Gheyi Estamos construindo


o produto certo?

1 2

Verificar So=ware Verificação


∀c: Classe | ∃ a: Atributo |
a ∈ atributo(c) ∧ .. ⇒ ..
Determinar se as saídas das a@vidades
estão de acordo com as entradas?
Projeto de acordo com especificação?
Implementação de acordo com o projeto? class Conta {
int saldo;
void tranferir(int x, Conta b) {
...
}
}

3 4

Validar So=ware Verificação e Validação (V&V)


Análise está8ca
–  Revisões, análises
Os resultados estão de –  Todos os artefatos

acordo com o que o –  Exemplo: Inspeções


Análise dinâmica
usuário pediu? –  Sistema para executar
–  Exemplo: Testes

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

Depuração Processo que localiza Para expor uma falta…


e corrigi defeitos
•  Reachability
–  O teste deve chegar no local da falta
•  Infec@on
–  O teste deve corromper o estado
•  Propaga@on
–  O teste deve manter o estado corrompido e exibir
uma saída inválida

11 12

2
25/07/17

Abordagens para
Análise Está@ca
Validação e Verificação

13 14

Inspeções Manuais Vantagens


•  Obje@vo: Detectar erros •  Não foca em um 8po de defeito
•  Não requer que o programa seja executado •  O conhecimento de erros comuns do domínio
–  Análise está@ca e da linguagem ajudam muito
•  Técnica eficiente para encontrar erros –  Exemplo: Erro de ponteiros em C

15 16

Limitações Análise Está@ca Automa@zada


•  Não validam o comportamento dinâmico Ferramentas que analisam o código do
•  Não avalia requisitos não funcionais como programa esta@camente e detectam possíveis
defeitos
desempenho, confiabilidade, interface do
usuário
•  Não demonstra se o so=ware é ú8l
•  Ao fazer inspeções, não confundir com
avaliação do pessoal. Não tornar o processo
público

17 18

3
25/07/17

Exemplos de Análises Ferramentas…


•  U@lização de variáveis sem inicialização
•  Acesso de um array fora dos limites
•  Variáveis declaradas mas nunca u@lizadas
•  Funções e procedimentos não u@lizados
•  Código inacessível

O atributo não u@lizado

19 20

Obje8vo

Análise Dinâmica Encontrar defeitos


Avaliar a sa8sfação do cliente

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

Caixa Preta Caixa Branca


25 26

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

Teste Caixa Preta


mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd

Entrada Programa Saída Saída


Esperada

Casos de teste são gerados


usando somente a especificação

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

Criação de casos de teste...

Como projetar Entradas válidas


casos de teste? Testar cada fluxo alterna@vo
Usar a informação da pré-condição

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

Como selecionar Par@cionamento


casos de teste? Valor Limite
Fronteiras

35 36

6
25/07/17

Par@cionamento Valor limite

Determinando par@ções Escolhemos mínimo inválido,


mínimo válido, máximo válido e
Selecionando máximo inválido
representantes

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

Exemplo Classes de Par@ção


•  Especifique casos de teste para a função raiz Número Resultado
quadrada. x < -1 Não existe
x = -1 Não existe
Raiz 0 0
Entrada: Número x = 1 1
x > 1 raiz(x)

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

Quais as classes vazia


1 elemento
Não está na seqüência
Não está na seqüência
de par8ção e valores? 1 elemento
Mais de 1
Está na seqüência
É o primeiro elemento da seqüência
Mais de 1 É o elemento do meio da seqüência
Mais de 1 É o úl@mo elemento da seqüência
Mais de 1 Não está na seqüência

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;
}
}

Uma coleção com 1000 Uma coleção com 1000


testes é boa? testes é boa (adequada)?

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

Intuição Teste de Caminho

msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmdmsm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

Uma abordagem de teste estrutural


mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd
msmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd

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

Grafo de Fluxo de Controle


nó = bloco de comandos seqüenciais
ramo = transferência de controle
Como iden8ficar 1 1 1
1
os caminhos? 1 2 3 2 3 ... m 2 2
4 3
n 3
if-then-else case while repeat-un@l
seqüencial seleção repe@ção

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

Exercício Cobertura de Decisões


1
•  Faça o grafo de fluxo de controle e sugira os casos de Cada ramo deve ser percorrido
teste u@lizando o teste caixa branca por cobertura de Cálculo de xy
2 pelo menos 1 vez
1. read x, y; y<0 y≥0
instruções. 2. if (y < 0)
3. p := 0 - y 3 4
1. read x, y 4. else p := y; 5 x y Ramos percorridos
5. z := 1.0;
2. z = x + y; 6. while (p ≠ 0) { - -1 {(1,2), (2,3), (3,5), (5,6),
3. if (x>0 and y>1) { 7. z := z * x; p≠0 6 (6,7), (7,6), (6,8), (8,9),
4. x = x-1; p := p - 1;
} 7 (9,10)}
5. if (z>5) 8. if (y < 0) 8
y<0 - 0 {(1,2), (2,4), (4,5), (5,6),
6. z = z-1; 9. z := 1 / z;
10. write z; y≥0 (6,7), (7,6), (6,8), (8,
7. else z = z+1 9
10)}
8. } write x,y 10
63 64

Exercício Cobertura de Condições


Todas as condições devem ser avaliadas para
•  Faça o grafo de fluxo de controle e sugira os valores V/F em cada (sub)decisão
casos de teste u@lizando o teste caixa branca 1
por cobertura de decisões. 1. if (x>0 and y>100) x>0 x≤0
2. x = x+y+1;
1. read x, y 1A
3. else x = x+y-1; y >100 y ≤ 100
2. z = x + y; 4. write x,y
3. if (x>0 and y>1) { 2 3
4. x = x-1; x y Ramos percorridos 4
5. if (z >5)
6. z = z-1; 1 101 {(1,1A), (1A,2), (2,4)}
7. else z = z+1 1 99 {(1,1A), (1A,3), (2,4)}
8. } write x,y -1 100 {(1,3), (3,4)}
65 66

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

Plugin do Eclipse: Metric Cobertura da Gramá@ca


Testar compiladores, ferramentas de
refatoramento

Complexidade Ciclomá8ca
69 70

Teste de Mutação Exemplo


•  A par@r de um programa são gerados várias public class A {
public class A {
public class A { public class A {
public class A {
int m() {
versões dele com mutações (faltas) int m() { int m() {
int m() {
int m() {
return 5+7;
return 5+7;
–  Introduzir defeitos ar8ficiais no programa return 5+7; return 5+7;
} return 5-7;
}
} } } }
•  Obje@vo
} } }
–  Detectar a falta introduzida }
–  Avaliar quantos mutantes a sua coleção de testes
consegue matar ?
71 72

12
25/07/17

Desafios
•  Esforço computacional
•  Mutantes Equivalentes
Outras Abordagens

73 74

Execução Simbólica Exemplo


•  Executa o programa com dados simbólicos int max(int x, int y) { x = X, y = Y, z = Z
int z;
•  Caracteriza todos os caminhos possíveis
if(x >= y) X >= Y
z = x;
else z = y; [ X >= Y ] Z = X [X<Y] Z=Y

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

•  É possível sempre executar toda a coleção de


Dpsodlsklskdls
‘dklaksdlksl;ad
Skdasdk
Ldaskdl;ksa;ld
‘dklaksdlksl;ad
Kdlsakdl;kas;ldk;lasdk;sad;

Lksl;kdl;aks;ld
Lksl;kdl;aks;ld
Lsak;ldka;lkd;aksdas
Lsak;ldka;lkd;aksdas
Fdlskfl;dskf;

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

•  Priorizar e Selecionar casos de testes


–  Com relação a qual critério?

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

FindBugs Escolha Projeto


•  Iden@fica •  Abra um projeto
–  Bugs •  Escolha as classes,
–  Possíveis Bugs java, e/ou jar e
•  Análise está@ca aperte Finish
•  Más prá@cas de programação •  Plugin do Eclipse
•  Vulnerabilidade
http://findbugs.cs.umd.edu/demo/jnlp/findbugs.jnlp

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

O que é? Tipos de Mutantes


•  MuJava gera mutantes para Java
•  Eclipse plugin: MuClipse

hop://cs.gmu.edu/~offuo/mujava/

101 102

17
25/07/17

Ar@go

hop://agile.csc.ncsu.edu/SEMaterials/tutorials/muclipse/

103 104

Exercício Outras Ferramentas


•  [Opcional] Avaliem a qualidade dos testes •  Javalanche
(Randoop+existente) criando algumas –  Escalabilidade
mutações do sistema usando o MuJava. –  Eficiência
Quantos mutantes a coleção de testes –  hop://www.javalanche.org
consegue matar? •  Jester
•  Se o MuJava não escalar, façam mutações
manuais. Descrevam a mutação e indiquem o
resultado da avaliação da coleção de testes.

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

Testar acesso ao Gmail inválido Download


Plugin para o firefox

113 114

19
25/07/17

Criar um novo teste Aba para registrar os eventos

115 116

Executa ações e grava informações Executando os Testes

117 118

Exportar para Formatos... Exercício


•  Descrevam alguns casos de teste (fluxo
principal e alterna@vo) e u@lizem o Selenium
para automa@zá-los.
•  Exemplo
Teste Descrição Entrada Saída
1 Login realizado com Login: teste Inbox do
sucesso Senha: 1234 usuário
2 Login realizado com senha Login: teste Dados
inválida Senha: 4321 inválidos
119 120

20
25/07/17

Poscomp 2011 Poscomp 2014

121 122

Referências

Capítulos 22-24

123

21

Você também pode gostar