(Wyobrażam sobie, że byłoby to dobre pytanie do rozmowy kwalifikacyjnej , ale w moim przypadku jest bardziej pragmatyczne).
Mamy dużą i złożoną aplikację, która modeluje wyjątkowo długi i wyrafinowany proces reakcji chemicznej między dziesiątkami składników chemicznych. Jesteśmy na etapie projektowania testów akceptacyjnych dla aplikacji, ale nieco zniechęca nas nieuchronna liczba możliwych ścieżek do przetestowania. Przyszło mi do głowy, że nasza sytuacja jest bardzo podobna do tego, z czym musiał się zmierzyć zespół programistów Google Maps, gdy przyszedł czas na przetestowanie algorytmu planowania trasy w funkcji „Uzyskaj wskazówki”. Oczywiście nie mogli przetestować (zweryfikować i zweryfikować) każdej możliwej trasy. Jak więc uzyskali pewność, że ich aplikacja będzie działać w każdej sytuacji?
A ponieważ nie oczekujemy, aby dowiedzieć się, jak oni zrobili to, pozwól mi zapytać: Jak byś ty go o zaprojektowanie zestawu testowego z odpowiedniego pokrycia kodu, aby zadowolić siebie, że dana aplikacja jest solidna - kiedy to jest dosłownie niemożliwe zbadać każdą potencjalną ścieżkę przez system?
To, czego szukam, to zasady, których użyłbyś do rozbicia nierozwiązywalnego problemu na mniejsze, dające się traktować kawałki, których suma zapewnia satysfakcjonujące oszacowanie całości: „Nie mogę przetestować wszystkiego, ale mogę to przetestować , to i to - i to wystarczy ”. Nie szukam podejścia, które byłoby „możliwe do udowodnienia”, ale raczej ostrożne , biorąc pod uwagę rzeczywiste ograniczenia budżetowe / czasowe.
(Używam przykładu z mapami Google jako czegoś w rodzaju folii, aby uzyskać odpowiedzi, które są jak najbardziej szczegółowe).