Es gibt wirklich keine Möglichkeit, sicherzustellen , dass Ihre Testfälle korrekt sind, es sei denn, Sie konzentrieren sich beim Erstellen richtig auf die Anforderungen, verstehen den Code und stellen sicher, dass sie übereinstimmen. Der Sinn einer Testsuite besteht darin, dass Sie dies nur einmal tun müssen. Von da an können Sie die Tests erneut ausführen und prüfen, ob sie bestanden wurden, während Sie sich ohne eine Testsuite die ganze Zeit sehr konzentrieren müssten , dh wann immer Sie irgendetwas an Ihrer Codebasis tun. Das grundlegende Problem, dass Sie sicherstellen müssen, dass Sie das Richtige tun, bleibt jedoch bestehen - Computer sind einfach nicht intelligent genug, um uns von dieser Aufgabe zu entlasten.
Daher gibt es (1) keine einfache Möglichkeit, dies zu erkennen, wenn Ihre Testsuite unvollständig ist. Eine Code-Coverage-Analyse kann nachweisen, dass einige Codezeilen niemals ausgeführt werden, dh dass die Suite in irgendeiner Weise fehlerhaft ist, jedoch nicht, wie schwerwiegend dieser Fehler ist, und kann niemals nachweisen, dass er ausreichend ist. Selbst bei 100% Codeabdeckung können Sie nicht garantieren, dass alle relevanten Zustände vorliegendes Systems ausgeübt werden, und eine vollständige staatliche Abdeckung ist für jedes realistische System aufgrund der kombinatorischen Anzahl von Staaten, die existieren könnten, nicht erreichbar. Eine gute Methode, um sicherzustellen, dass Ihr Testfall für die Überprüfung der zu überprüfenden Elemente mindestens korrekt ist, besteht darin, den Test zu schreiben, zu überprüfen, ob er tatsächlich fehlschlägt, den Code zu schreiben / zu ändern und dann zu überprüfen, ob er jetzt erfolgreich ist. Daher die Begeisterung für testgetriebene Entwicklung: Sie können sicher sein, dass ein einzelner Test das Richtige tut, und wenn Sie Ihre gesamte Codebasis auf diese Weise erstellen, können Sie auch in einem großen System ein ähnliches Maß an Vertrauen erzielen.
(2) Eine Testsuite wird normalerweise unzureichend, wenn sich die Anforderungen ändern - Sie müssen nicht raten. Wenn der Kunde möchte, dass ein bestimmtes Verhalten geändert wird und Ihre Tests sowohl vor als auch nach der Änderung erfolgreich sind, haben sie diese bestimmte Eingabe / Ausgabe-Beziehung offensichtlich nicht ausgeübt.
Bei Legacy-Systemen ohne Testabdeckung oder wenn Sie nicht wissen, wie die Abdeckung ist, gibt es keinen formalen Beweis, aber (Hinweis für Eltern: persönliche Meinung folgt!) Aus Erfahrung ist es mit überwiegender Wahrscheinlichkeit möglich, dass die Tests durchgeführt werden sind nicht ausreichend. Wenn das Testen als eine nachträgliche, optionale, qualitätssteigernde, aber nicht wirklich notwendige Aktivität betrachtet wird, ist es in der Regel unvollständig und unsystematisch, da der Anreiz, sicherzustellen, dass die Tests mit der Codebasis Schritt halten, nicht gegeben ist nicht da.