(Я думаю, это был бы хороший вопрос для интервью , но в моем случае это более прагматично, чем это.)
У нас есть большое и сложное приложение, которое моделирует чрезвычайно длительный и сложный процесс химической реакции между десятками химических компонентов. Мы находимся на стадии разработки Приемочных тестов для приложения, но нас несколько пугает несметное количество возможных путей для тестирования. Мне пришло в голову, что наша ситуация очень похожа на то, с чем столкнулась команда разработчиков Google Maps, когда пришло время протестировать алгоритм планирования маршрута в их функции «Получить направления». Очевидно, они не могли проверить (проверить и подтвердить) каждый возможный маршрут. Так как же они получили уверенность, что их приложение будет работать в любой ситуации?
И поскольку я не ожидаю узнать, как они это сделали, позвольте мне спросить вас: как бы вы разработали набор тестов с адекватным покрытием кода, чтобы убедиться, что данное приложение устойчиво - когда оно буквально невозможно исследовать каждый потенциальный путь через систему?
То, что я ищу, - это принципы, которые вы бы использовали, чтобы разбить неразрешимую проблему на более мелкие, поддающиеся обработке куски, сумма которых обеспечивает удовлетворительную оценку целого: «Я не могу проверить все, но я могу проверить это , этого и этого - и этого достаточно. Я не искал подход , который является «доказуемо правильным», а тот , который благоразумен , учитывая реальные ограничения бюджета / время.
(Я использую пример карт Google как нечто вроде фольги, чтобы получить ответы, которые являются как можно более конкретными.)