Adequação do Teste
Teste é incompleto
• Origem da incompletude
– Seqüências insuficientes
– Classificadores parciais
• É necessário uma medida que indique
quão completo é o teste. Indica:
– Quando o testador deve parar de testar
– Quando o testar precisa escrever mais testes
2
Definição: Adequação
• Requisito de adequação (RA)
– Condição sobre uma suíte de teste
• Critério de adequação
– Uma suíte de teste é adequada quando (i)
todos os testes passam e (ii) todo RA é
satisfeito por pelo menos um caso de teste
3
Exemplo
01: public static String collapseSpaces(String argStr) {
02:
char last = argStr.charAt(0);
03:
StringBuffer argBuf = new StringBuffer();
04:
for (int i = 0; i < argStr.length(); i++) {
05:
char ch = argStr.charAt(i);
06:
if (ch != ’ ’|| last != ’ ’) {
07:
argBuf.append(ch);
08:
last = ch;
09:
}
10:
}
11:
return argBuf.toString();
12: }
4
Velocity version 1.3, Apache Jakarta project.
Exemplo
quebra quando
argStr é null ou “”.
01: public static String collapseSpaces(String argStr) {
02:
char last = argStr.charAt(0);
03:
StringBuffer argBuf = new StringBuffer();
04:
for (int i = 0; i < argStr.length(); i++) {
05:
char ch = argStr.charAt(i);
06:
if (ch != ’ ’|| last != ’ ’) {
07:
argBuf.append(ch);
08:
last = ch;
09:
}
10:
}
11:
return argBuf.toString();
12: }
5
Velocity version 1.3, Apache Jakarta project.
Exemplo (nova versão)
01: public static String collapseSpaces(String argStr) {
02:
if (argStr == null) return null;
03:
char last = argStr == “” ? “” : argStr.charAt(0);
04:
StringBuffer argBuf = new StringBuffer();
05:
for (int i = 0; i < argStr.length(); i++) {
06:
char ch = argStr.charAt(i);
07:
if (ch != ’ ’|| last != ’ ’) {
08:
argBuf.append(ch);
09:
last = ch;
10:
}
11:
}
12:
return argBuf.toString();
13: }
6
Exemplo
• RA1: Não executar statements 8 e 9
• RA2: Não executar statement 6
• RA3: Executar statement 6
7
Exemplo (stmts de interesse)
01: public static String collapseSpaces(String argStr) {
02:
if (argStr == null) return null;
03:
char last = argStr == “” ? “” : argStr.charAt(0);
04:
StringBuffer argBuf = new StringBuffer();
05:
for (int i = 0; i < argStr.length(); i++) {
06:
char ch = argStr.charAt(i);
07:
if (ch != ’ ’|| last != ’ ’) {
08:
argBuf.append(ch);
09:
last = ch;
10:
}
11:
}
12:
return argBuf.toString();
13: }
8
Exemplo
• Suíte adequada
TC1: collapseSpaces(“
”);
TC2: collapseSpaces(“”);
TC3: collapseSpaces(“adequacao do teste”);
9
Exemplo
• Suíte adequada
TC1: collapseSpaces(“
”);
TC2: collapseSpaces(“”);
TC3: collapseSpaces(“adequacao do teste”);
• TC1 sat. RA1 e RA3
• TC2 sat. RA1 e RA2
• TC3 sat. RA3
10
Exemplo
• Outra suíte adequada
×
TC1: collapseSpaces(“
”);
TC2: collapseSpaces(“”);
TC3: collapseSpaces(“adequacao do teste”);
• TC1 sat. RA1 e RA3
• TC2 sat. RA1 e RA2
• TC3 sat. RA3
11
Exemplo
• Outra suíte adequada
TC1: collapseSpaces(“
”);
TC2: collapseSpaces(“”);
TC3: collapseSpaces(“adequacao do teste”);
•Minimização
TC1 sat. RA1
de suíte de teste preocupa-se
•em
TC2
sat. RA1
e RA2de testes necessários
reduzir
o número
os requisitos de adequação.
•para
TC3atender
sat. RA3
12
Redução/Minimização
• Pros
– Facilita manutenção dos testes
– Reduz tempo de execução
• Cons
– Pode eliminar testes importantes
Nota importante
• Requisito de adequação pode ser
formulado em função de algum conceito
relevante:
– requisitos
– condições de entradas
– etc.
Não apenas código!
14
Força de critério (subsumption)
15
Força de critérios de adequação
• Em geral, não é possível medir se uma
suite é melhor que a outra para revelar
erros
TC_a
incomparáveis
TC_b
16
Força de critérios de adequação
• Definiçao: Ca mais forte que Cb se e
somente se para qualquer programa P,
qualquer suíte que satisfaz Ca também
satisfaz Cb.
17
Quiz
• Dados
– RA1: Não executar statements 7 e 8
– RA2: Não executar statement 5
– RA3: Executar statement 5
– C1 = {RA2, RA3} e C2 = {RA1, RA3}
• C1 é mais forte que C2?
18
Quiz
• Dados
– RA1: Não executar statements 7 e 8
– RA2: Não executar statement 5
– RA3: Executar statement 5
– C1 = {RA2, RA3} e C2 = {RA1, RA3}
• C1 é mais forte que C2?
– RA2 => RA1
– RA2 é mais forte (i.e., restritivo) que RA1
– C1 é mais forte que C2
19
Resumo até aqui
• Requisito e critério de adequação
• Força (subsumption) do critério
• Seleção/minimização/priorização
20
Download

04-adequacao