Sto lavorando su un comparatore di elenchi per facilitare l'ordinamento di un elenco non ordinato di risultati di ricerca per esigenze molto specifiche del nostro cliente. I requisiti richiedono un algoritmo di pertinenza classificato con le seguenti regole in ordine di importanza:
- Corrispondenza esatta per 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 (% discendente)
- Tutte le parole della query di ricerca nella descrizione
- Alcune parole della query di ricerca nella descrizione (% discendente)
- Data ultima modifica decrescente
La scelta di design naturale 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 maggiore importanza. Questo risultato è ottenuto dal seguente punteggio:
- 32
- 16
- 8 (Punteggio secondario di tie-breaker basato su% decrescente)
- 4
- 2 (Punteggio secondario di tie-breaker basato su% decrescente)
- 1
Nello spirito TDD ho deciso di iniziare prima con i miei test unitari. Avere un caso di test per ogni scenario unico dovrebbe essere almeno 63 casi di test esclusivi che non considerano casi di test aggiuntivi per la logica del tie breaker secondario sulle regole 3 e 5. Questo sembra prepotente.
I test effettivi saranno effettivamente meno però. Sulla base delle regole stesse, alcune regole assicurano che le regole inferiori 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 appaiono nella descrizione" sarà sempre vera). È ancora il livello di impegno nello scrivere ognuno di questi casi di test che vale la pena? È questo il livello di test che viene tipicamente richiesto quando si parla di copertura del 100% del test in TDD? In caso contrario, quale sarebbe una strategia di test alternativa accettabile?