Estoy trabajando en un comparador de listas para ayudar a ordenar una lista desordenada de resultados de búsqueda según los requisitos muy específicos de nuestro cliente. Los requisitos requieren un algoritmo de relevancia clasificado con las siguientes reglas en orden de importancia:
- Coincidencia exacta en el nombre
- Todas las palabras de consulta de búsqueda en nombre o sinónimo del resultado
- Algunas palabras de consulta de búsqueda en nombre o sinónimo del resultado (% descendente)
- Todas las palabras de la consulta de búsqueda en la descripción.
- Algunas palabras de la consulta de búsqueda en la descripción (% descendente)
- Fecha de última modificación descendiente
La elección de diseño natural para este comparador parecía ser una clasificación puntuada basada en poderes de 2. La suma de reglas menos importantes nunca puede ser más que una coincidencia positiva en una regla de mayor importancia. Esto se logra mediante el siguiente puntaje:
- 32
- dieciséis
- 8 (puntaje secundario de desempate basado en% descendente)
- 4 4
- 2 (Puntuación secundaria de desempate basada en% descendente)
- 1
En el espíritu TDD, decidí comenzar primero con mis pruebas unitarias. Tener un caso de prueba para cada escenario único sería, como mínimo, 63 casos de prueba únicos sin considerar casos de prueba adicionales para la lógica secundaria de desempate en las reglas 3 y 5. Esto parece excesivo.
Sin embargo, las pruebas reales serán menos. Según las reglas reales, ciertas reglas aseguran que las reglas inferiores siempre serán verdaderas (por ejemplo, cuando "Todas las palabras de consulta de búsqueda aparecen en la descripción", entonces la regla "Algunas palabras de consulta de búsqueda aparecen en la descripción" siempre será verdadera). ¿Aún vale la pena el nivel de esfuerzo al escribir cada uno de estos casos de prueba? ¿Es este el nivel de prueba que generalmente se requiere cuando se habla de una cobertura de prueba del 100% en TDD? Si no, ¿cuál sería una estrategia de prueba alternativa aceptable?