Sto lavorando a un comparatore di elenchi per aiutare a ordinare un elenco non ordinato di risultati di ricerca per requisiti molto specifici dal nostro cliente. I requisiti richiedono un algoritmo di pertinenza classificato con le seguenti regole in ordine di importanza:
- Corrispondenza esatta sul nome
- Tutte le parole della query di ricerca nel nome o un sinonimo del risultato
- Alcune parole della query di ricerca nel nome o nel sinonimo del risultato (% decrescente)
- Tutte le parole della query di ricerca nella descrizione
- Alcune parole della query di ricerca nella descrizione (% decrescente)
- Data dell'ultima modifica decrescente
La scelta naturale del design per questo comparatore sembrava essere una classifica basata su potenze di 2. La somma di regole meno importanti non può mai essere più di una corrispondenza positiva su una regola di importanza maggiore. Ciò si ottiene con il seguente punteggio:
- 32
- 16
- 8 (Punteggio secondario del tie-breaker basato su% decrescente)
- 4
- 2 (Punteggio secondario del tie-breaker basato su% decrescente)
- 1
Nello spirito del TDD ho deciso di iniziare prima con i miei test unitari. Avere un caso di test per ogni scenario unico equivarrebbe ad almeno 63 casi di test univoci che non tengono conto di casi di test aggiuntivi per la logica del tie breaker secondario sulle regole 3 e 5. Ciò sembra prepotente.
I test effettivi saranno in realtà meno però. Sulla base delle stesse regole stesse alcune regole assicurano che le regole più basse siano sempre vere (ad esempio, quando "Tutte le parole della query di ricerca vengono visualizzate nella descrizione", la regola "Alcune parole della query di ricerca vengono visualizzate nella descrizione" sarà sempre vera). Vale comunque la pena impegnarsi nello scrivere ciascuno di questi casi di test? È questo il livello di test generalmente richiesto quando si parla della copertura del test al 100% in TDD? In caso contrario, quale sarebbe una strategia di test alternativa accettabile?