Я працюю над компаратором списку, щоб допомогти сортувати не упорядкований список результатів пошуку за дуже конкретними вимогами нашого клієнта. Вимоги вимагають створення алгоритму рейтингової відповідності з такими правилами за важливістю:
- Точна відповідність на ім'я
- Усі слова пошукового запиту в імені або синонімі результату
- Деякі слова пошукового запиту в імені або синонімі результату (% у зменшенні)
- Усі слова пошукового запиту в описі
- Деякі слова пошукового запиту в описі (% у зменшенні)
- Остання змінена дата спадання
Вибір природного дизайну для цього порівняльника здавався рейтинговим балом на основі потужностей 2. Сума менш важливих правил ніколи не може бути більше, ніж позитивна відповідність правилу вищої важливості. Це досягається наступним балом:
- 32
- 16
- 8 (оцінка вторинного вимикача на основі% спадання)
- 4
- 2 (оцінка вторинного вимикача на основі% спадання)
- 1
У дусі TDD я вирішив спочатку почати з моїх тестових одиниць. Встановити тестовий випадок для кожного унікального сценарію було б як мінімум 63 унікальних тестових випадків, не враховуючи додаткових тестових випадків для логіки вторинного вимикача за правилами 3 та 5. Це здається непосильним.
Фактичних тестів насправді буде менше. На підставі власне самих правил деякі правила забезпечують, що нижчі правила завжди будуть істинними (наприклад, коли "Усі слова пошукового запиту відображаються в описі", тоді правило "Деякі слова пошукового запиту з'являються в описі" завжди буде істинним). І все-таки варто докласти зусиль для написання кожного з цих тестових випадків? Це рівень тестування, який зазвичай вимагається, коли мова йде про 100% охоплення тесту в TDD? Якщо ні, то що було б прийнятною альтернативною стратегією тестування?