(Ich stelle mir vor, das wäre eine gute Interviewfrage , aber in meinem Fall ist es pragmatischer.)
Wir haben eine große und komplexe Anwendung , die einen extrem langen und ausgeklügelten chemischen Reaktionsprozess zwischen Dutzenden chemischer Komponenten modelliert. Wir sind gerade dabei, Abnahmetests für die Anwendung zu entwerfen, sind jedoch etwas entmutigt über die unlösbare Anzahl möglicher Testpfade. Mir ist aufgefallen, dass unsere Situation der Situation des Google Maps-Entwicklerteams sehr ähnlich ist, als es darum ging, den Routenplanungsalgorithmus in der Funktion "Route berechnen" zu testen. Offensichtlich konnten sie nicht jede mögliche Route testen (verifizieren und validieren). Wie kamen sie zu der Gewissheit, dass ihre Anwendung in jeder Situation funktionieren würde?
Und da ich nicht damit rechne, herauszufinden, wie sie es geschafft haben, möchte ich Sie fragen: Wie würden Sie eine Testsuite mit angemessener Codeabdeckung entwerfen , um sich davon zu überzeugen, dass eine bestimmte Anwendung robust ist - wenn es buchstäblich unmöglich ist jeden möglichen Weg durch das System zu sondieren?
Was ich suche, sind die Prinzipien, die Sie verwenden würden, um ein hartnäckiges Problem in kleinere, handhabbare Teile zu zerlegen, deren Summe eine zufriedenstellende Schätzung des Ganzen liefert: "Ich kann nicht alles testen, aber ich kann dies testen , dies und das - und das ist genug. " Ich suche nicht einen Ansatz, der "nachweislich richtig" ist, sondern einen , der angesichts realer Budget- / Zeitbeschränkungen umsichtig ist.
(Ich verwende das Google Maps-Beispiel als eine Art Folie, um Antworten zu erhalten, die so spezifisch wie möglich sind.)