View
215
Download
0
Category
Preview:
Citation preview
Critérios de adequação e os diversos tipos de teste
Adequação do Teste
3
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
4
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
5
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: }
Velocity version 1.3, Apache Jakarta project.
6
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: }
Velocity version 1.3, Apache Jakarta project.
quebra quando argStr é null ou “”.
7
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: }
8
Exemplo
• RA1: Não executar statements 8 e 9• RA2: Não executar statement 6• RA3: Executar statement 6
9
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: }
10
Exemplo
• Suíte adequada
TC1: collapseSpaces(“ ”);TC2: collapseSpaces(“”);TC3: collapseSpaces(“adequacao do teste”);
11
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
12
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
×
13
Exemplo
• Outra suíte adequada
TC1: collapseSpaces(“ ”);TC2: collapseSpaces(“”);TC3: collapseSpaces(“adequacao do teste”);
• TC1 sat. RA1• TC2 sat. RA1 e RA2• TC3 sat. RA3
Minimização de suíte de teste preocupa-se em reduzir o número de testes necessários para atender os requisitos de adequação.
Redução/Minimização
• Pros– Facilita manutenção dos testes– Reduz tempo de execução
• Cons– Pode eliminar testes importantes
15
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!
Força do critério (subsumption)
17
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 TC_b
incomparáveis
18
• 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.
Força de critérios de adequação
19
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?
20
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
21
Resumo até aqui
• Requisito e critério de adequação• Força (subsumption) do critério• Seleção/minimização/priorização
Teste de unidade, integração e sistema
Definição
• Teste de unidade checa corretude de classes
• Teste de integração checa corretude de módulos (integração entre classes)
• Teste de sistema checa corretude do sistema como um todo
são complementares!
Teste caixa branca e preta
Definição
• Teste caixa preta é aquele realizado sem usar informação disponível no código fonte
• Caixa branca usa informação do código
Caixa preta é mais usado para testar sistemas com especificações de entrada e saída bem documentadas.
Teste funcional, estrutural, e baseado em falhas
Restrições de ambiente
• Deve basear-se em requisitos• Não há código fonte• Deve focar nos erros mais comuns• Deve focar na estrutura do código• Etc.
Restrições de ambiente
• Deve basear-se em requisitos• Não há código fonte• Deve focar nos erros mais comuns• Deve focar na estrutura do código
A importância destas restrições definem que “tipo” de teste será realizado.
Tipos de teste
• Functional• Structural• Fault-based
Tipos de teste
• Functional– Baseia-se na expectativa de comportamento
• Structural– Baseia-se na estrutura do programa
• Fault-based– Baseia-se na capacidade de encontrar falhas
Tipos de teste
• São incomparáveis!• Oferecem garantias distintas. Exemplo:
– Teste funcional é capaz de revelar erros de lógica com mais facilidade
– Teste estrutural é capaz encontrar erros limítrofes (“corner-cases”) com mais facilidade
• Functional– Baseia-se na expectativa de comportamento
• Structural– Baseia-se na estrutura do programa
• Fault-based– Baseia-se na capacidade de encontrar falhas
O sistema é uma função. Adequação baseia-se em fração do espaço de entrada da função exercitada
• Functional– Baseia-se na expectativa de comportamento
• Structural– Baseia-se na estrutura do programa
• Fault-based– Baseia-se na capacidade de encontrar falhas
Adequação baseia-se em cobertura de código (várias existentes).
• Functional– Baseia-se na expectativa de comportamento
• Structural– Baseia-se na estrutura do programa
• Fault-based– Baseia-se na capacidade de encontrar falhas
Adequação baseia-se em scores de mutação.
Várias outras classificações
• performance testing, stress testing, usability testing, configuration testing, acceptance testing, etc.
Recommended