2011-04-19 9 views
5

Acabo de volver a visitar el clásico libro de texto C K & R. Y leí el ejercicio 1-11:¿Cómo se prueba el programa de recuento de palabras si hay algún error descubierto?

¿Cómo probarías el programa de recuento de palabras? ¿Qué tipo de información es más probable que descubra errores si los hay?

En realidad, solo tengo una idea básica para contar manualmente un párrafo existente para obtener los números exactos de las palabras y compararlo con el cálculo del número de palabras del resultado del programa.

¿Hay algo que me haya perdido? ¿Y cuál es el truco de la prueba? Resumen

EDITAR

Respuestas:

definición semántica de la palabra, algunos casos especiales:

  • enlace palabra: "gato-pie"
  • pequeña palabra: a, b , c
  • biiiiiig palabras: "a fooooooooo < 40MILLIONLETTERS> ooooooo a" tiene 3 palabras

condiciones de contorno:

  • textos con múltiples espacios entre las palabras.
  • Textos mayores que 2 GB
  • Palabras que contienen un guion pero no espacio en blanco.
  • Palabras que no son ascii.
  • archivos de alguna codificación diferente (si el programa es compatible con eso)
  • caracteres que están rodeados por espacios en blanco, pero no contienen caracteres de palabra (por ejemplo "hola - mundo")
  • textos sin ninguna palabra
  • Textos con todas las palabras en una sola línea

Respuesta

2

Bueno, depende de lo que definir semánticamente como las palabras. Dado que es usted que está escribiendo el programa de recuento de palabras, se supone que debe saber qué es una palabra.

Para probar este programa, debe pensar dónde están los casos de esquina: ¿una "palabra vinculada" cuenta como una o dos palabras? ¿Considera que "soy" para ser uno o dos? Etc.

En cuanto al ejercicio K & R, supongo que voluntariamente olvidaron algunos de estos casos de esquina, y sugieren que, al analizar su código, encuentren estas advertencias.

2

Éstos son algunos ejemplos de textos que podrían descubrir errores:

  • textos con múltiples espacios entre las palabras.
  • Textos mayores que 2 GB
  • Palabras que contienen un guion pero no espacio en blanco.
  • Palabras que no son ascii.
  • archivos de alguna codificación diferente (si el programa es compatible con eso)
  • caracteres que están rodeados por espacios en blanco, pero no contienen caracteres de palabra (por ejemplo "hola - mundo")
  • textos sin ninguna palabra
  • Textos con todas las palabras en una sola línea
+0

También: ¿palabras separadas con guiones en varias líneas? – Benoit

1

no he ejercicio 1-11 releer para esta respuesta ... (mi libro está a 60 km)

cosas que podrían haber sido codificados mal

  • pequeñas palabras: "a b c d" tiene 4 palabras
  • palabras biiiiiig: "a fooooooooo<40MILLIONLETTERS>ooooooo a" tiene 3 palabras
  • uso de varios símbolos: ",.!? ...

definiciones que pueden no haber sido entendido

  • "cat-walk" 1 palabra? ¿2 palabras?
  • "under-\nstood" salto de línea (con guión) en el medio de una palabra
1

Para probar un algoritmo debe crear un conjunto de casos de prueba con el resultado conocido.

Este casos de prueba deben cubrir:

  • más combinaciones posibles de la entrada;
  • casos de "borde". En su caso, podría ser: una palabra, 2 palabras con muchos delimitadores, texto breve iniciado y terminado con delimitadores, y así sucesivamente;
  • Algunos texto extraño. Solo mira el algoritmo y trata de pensar en la entrada extraña que puede romperlo. Por lo general, es un texto bastante pequeño (3-4) palabras, pero con algunos delímetros extraños entre ellos como "hello,word", "hello ,word", "hello word,,,,"
0

Los otros chicos ya dieron algunas buenas sugerencias prácticas. Permítanme agregar dos cosas:

En primer lugar, K & R no quiero que encuentre todas las deficiencias de su código. El objetivo del ejercicio es informarle que a menudo existe una entrada falsa y que en algún momento se espera que de alguna manera se ocupe de ella en una situación similar. Cómo lo haces depende completamente de ti. Solo recuerde que algunos problemas aparentemente fáciles a veces requieren pensamiento difícil.

Point in case: cuando mi estúpido iPhone recibe un mensaje que dice "foo es malo. Huele.", Reconoce "bad.it" como una URL. Parece gracioso, pero hasta el momento, no puedes arreglar este error sin tener que cambiar el contenido del mensaje.


Y, segundo, su título es engañoso. No hay forma de que encuentre todos los errores en un programa por simple prueba . O como Edsger Dijkstra dijo una vez:

Las pruebas muestran la presencia , no el ausencia de errores.

Este es un resultado fundamental de la informática teórica y en realidad puede ser probado. Consulte Rice's theorem si le interesa.



EDIT: por escrito de esta publicación, he encontrado un error que de alguna manera está relacionado con nuestro tema: el analizador stackoverflow no reconocerá "http://en.wikipedia.org/wiki/Rice 's_theorem" como una dirección URL. :-)

EDIT2: archivé un informe de error en meta here.

Cuestiones relacionadas