Entre a infinidade de respostas até agora, ninguém abordou o particionamento de equivalência e a análise de valor-limite , considerações vitais na resposta à pergunta em questão. Todas as outras respostas, embora úteis, são qualitativas, mas é possível - e preferível - ser quantitativa aqui. O @fishtoaster fornece algumas diretrizes concretas, apenas espiando sob a cobertura da quantificação de testes, mas o particionamento de equivalência e a análise de valor de limite nos permitem fazer melhor.
No particionamento de equivalência , você divide o conjunto de todas as entradas possíveis em grupos com base nos resultados esperados. Qualquer entrada de um grupo produzirá resultados equivalentes, portanto, esses grupos são chamados de classes de equivalência . (Observe que resultados equivalentes não significam resultados idênticos.)
Como um exemplo simples, considere um programa que deve transformar caracteres ASCII minúsculos em caracteres maiúsculos. Outros caracteres devem passar por uma transformação de identidade, ou seja, permanecer inalterados. Aqui está uma possível divisão em classes de equivalência:
| # | Equivalence class | Input | Output | # test cases |
+------------------------------------------------------------------------+
| 1 | Lowercase letter | a - z | A - Z | 26 |
| 2 | Uppercase letter | A - Z | A - Z | 26 |
| 3 | Non-alphabetic chars | 0-9!@#,/"... | 0-9!@#,/"... | 42 |
| 4 | Non-printable chars | ^C,^S,TAB... | ^C,^S,TAB... | 34 |
A última coluna relata o número de casos de teste, se você enumerar todos eles. Tecnicamente, pela regra 1 do @ fishtoaster, você incluiria 52 casos de teste - todos os das duas primeiras linhas dadas acima se enquadram no "caso comum". A regra 2 da @ fishtoaster adicionaria algumas ou todas as linhas 3 e 4 acima também. Mas, com equivalência de particionamento testar qualquer um caso de teste em cada classe de equivalência é suficiente. Se você escolher "a" ou "g" ou "w", estará testando o mesmo caminho de código. Assim, você tem um total de 4 casos de teste em vez de 52 ou mais.
A análise do valor limite recomenda um ligeiro refinamento: essencialmente, sugere que nem todo membro de uma classe de equivalência é, bem, equivalente. Ou seja, os valores nas fronteiras também devem ser considerados dignos de um caso de teste por si mesmos. (Uma justificativa fácil para isso é o infame erro de um por um !) Portanto, para cada classe de equivalência, você pode ter 3 entradas de teste. Olhando para o domínio de entrada acima - e com algum conhecimento dos valores ASCII -, posso apresentar estas entradas de caso de teste:
| # | Input | # test cases |
| 1 | a, w, z | 3 |
| 2 | A, E, Z | 3 |
| 3 | 0, 5, 9, !, @, *, ~ | 7 |
| 4 | nul, esc, space, del | 4 |
(Assim que você obtiver mais de três valores de limite, o que sugere que você pode querer repensar suas delineações de classe de equivalência originais, mas isso foi simples o suficiente para que eu não voltasse a revisá-las.) Assim, a análise de valor de limite nos leva a apenas 17 casos de teste - com uma alta confiança de cobertura completa - em comparação com 128 casos de teste para realizar testes exaustivos. (Sem mencionar que a combinatória determina que testes exaustivos são simplesmente inviáveis para qualquer aplicação do mundo real!)