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