Quais são as diferenças entre um caso de borda, um caso de canto, um caso de base e um caso de limite?

71

Eu não sou um falante nativo de inglês. Na minha língua nativa, estou ciente de alguns termos usados para se referir à condição verificada para interromper uma recursão e à condição verificada para casos extremos, improváveis ou super simples. Em inglês, encontrei os termos "caso de borda", "caso de canto", "caso de limite" e "caso de base", mas não consigo descobrir as diferenças e qual é usado para se referir a quê; Eu adoraria obter um resumo das diferenças entre eles.

Em particular, ficaria muito feliz se alguém pudesse fornecer anotações para as linhas no exemplo de código a seguir:

    int transmogrify(int n) {
1.      assert(n <= 1000000);
2.      if (n < 0) return -1;
3.      if (n == 1000000) return PRE_CALC;
4.      if (n == 0) return n+1;            // For stopping the recursion
5.      if (n == 1251) return 3077;
        return transmogrify(n-1);
    }

Eu acho que é:

  1. Verificação de sanidade
  2. Verificação de entrada
  3. Caso de fronteira? Caso de borda? Caso de esquina?
  4. Caso base? Caso de fronteira?
  5. Caso de canto? Caso de borda?
por Oak 16.12.2011 / 14:47
fonte

2 respostas

80

Eu também não sou um falante nativo de inglês. Mas de acordo com a Wikipedia:

  • Caso Edge ocorre em um parâmetro operacional extremo (máximo ou mínimo).
  • Caso Corner ocorre fora dos parâmetros operacionais normais , especificamente quando várias variáveis ou condições ambientais estão simultaneamente em níveis extremos, mesmo que cada parâmetro esteja dentro do intervalo especificado para esse parâmetro . (Os "parâmetros operacionais normais externos" obviamente significam algo como "fora da típica combinação de parâmetros operacionais", não estritamente "fora dos parâmetros operacionais permitidos". Ou seja, você ainda está dentro do espaço de parâmetro válido, mas próximo ao seu canto). / li>
  • Caso de limite ocorre quando uma das entradas está em ou logo além dos limites máximo ou mínimo.
  • Caso base é onde Recursão termina.

Assim, a nomenclatura parece estar totalmente confusa, embora o caso de canto pareça significar algo um pouco diferente (uma combinação de valores) do que os casos de borda e limite, que são definitivamente sinônimos. Provavelmente, é seguro dizer que os casos de borda, canto e limite são a mesma coisa na fala comum. Alguém poderia dizer algo diferente para cada um deles, mas quase não há um acordo comum.

Seu 1) e 2) são o que você escreveu, 3) é um caso de borda / limite, 4) é um caso básico e 5) é um caso especial.

    
por 16.12.2011 / 14:58
fonte
24

Independentemente das diferenças entre as palavras, o que você usaria para descrever um teste depende da semântica (significado) do teste, não do código exato - No exemplo fornecido, não é óbvio o que cada um dos testes significa. Além disso, eis como eu os compreendo:

  • Verificação de sanidade = Isto faz algum sentido? Por exemplo, se a sua aplicação só gera inteiros, sqrt(-1) e log(-1) estão indefinidos .
  • Verificação de entrada = Testa a entrada do usuário, em oposição a alguma estrutura interna de dados ou a saída de uma função. Por exemplo, no Bash [ $# -gt 0 ] verifica se você recebeu pelo menos um parâmetro de entrada, o que também pode ser uma verificação de integridade para um comando como find ou mail .
  • Verificação limite / limite = A entrada máxima ou mínima que deve produzir saída correta . Por exemplo, uma função que apenas adiciona um a um número terá um intervalo operacional de < MIN_INT > para < MAX_INT > - 1, uma vez que a entrada é menor que < MIN_INT > não pode ser fornecido pelo usuário e a saída é maior que < MAX_INT > não será útil.
  • Verificação de caso de canto = Uma verificação de limite mais complexa (um canto é um limite bidimensional), por exemplo, combinando < MIN_INT > e < MAX_INT > em um cálculo.
  • Verificação especial de caso = Valores especiais não-óbvios e não limítrofes , por exemplo, log(1 + the smallest floating point number) .
por 16.12.2011 / 15:24
fonte