Можно ли уменьшить количество проверок для алгоритма движения стрелок часов?
Что проверяют
Умеете ли вы сокращать набор проверок осознанно, а не выкидывая то, что дольше выполняется. Задача про часы удобна тем, что пространство входов конечно и обозримо, поэтому сразу видно, владеете ли вы техниками тест-дизайна или перечисляете кейсы наугад.
Как отвечать
Сначала уточните, о чём речь: о проверках внутри алгоритма или о количестве тест-кейсов. Для тестировщика обычно второе.
Полный перебор тут возможен: сочетаний часовой и минутной стрелки всего 720. Машине это ничего не стоит, и параметризованный тест имеет право на жизнь, если есть независимый оракул. А вот ручной чек-лист на 720 строк бессмыслен, его сокращают классами эквивалентности.
Классы получаются такие: обычное положение внутри часа, переход минуты через ноль, переход часа, полдень и полночь, совпадение стрелок, противоположные стрелки, случай, когда разность углов больше половины окружности и нужен меньший угол. Границы берутся по краям классов: ноль и 59 минут, 12 часов, переход через сутки, плюс заведомо невалидные входы вроде отрицательных и слишком больших значений.
Дальше сильный ход: перейти от примеров к свойствам. Вместо списка ожидаемых чисел формулируются инварианты, проверяемые на всём диапазоне сразу: угол не бывает отрицательным и не превышает половину окружности, а время, сдвинутое на 12 часов, даёт тот же угол. Такой тест находит то, чего в чек-листе не было, и заменяет десятки строк.
И про уровень: подобные расчёты проверяются юнит-тестами, гонять их через интерфейс дорого и незачем.
Где спотыкаются
Сокращают, выбрасывая границы, и оставляют круглые значения. Ошибка в делении по модулю живёт ровно на стыке, поэтому уходят как раз те кейсы, ради которых тесты и писались.
Проверяют только целые часы. Часовая стрелка двигается вместе с минутной, и наивная реализация, которая ставит её строго на деление, на ровных значениях отвечает верно, а на промежуточных ошибается. Один такой кейс важнее десятка круглых.
Называют число кейсов, но не технику. «Сделаем двадцать проверок вместо ста» без объяснения, какие классы покрыты и какой риск сознательно принят, звучит как угадывание, а не как тест-дизайн.