Was ist das Ziel von Softwaretests? [geschlossen]

8

Nachdem ich viele Bücher gelesen habe, gibt es einen grundlegenden Widerspruch:

Einige sagen, "das Ziel des Testens ist es, Fehler zu finden", während andere sagen, "das Ziel des Tests ist es, die Qualität des Produkts auszugleichen", was bedeutet, dass Fehler seine Nebenprodukte sind.

Ich würde auch zustimmen, dass, wenn das Testen in erster Linie auf eine Fehlersuche abzielen würde, wer die eigentliche Überprüfung durchführen und tatsächlich die Information liefern würde, dass die Software bereit ist?

Selbst wenn Kaner seine ursprüngliche Definition des Testziels von der Fehlersuche auf die Bereitstellung von Qualitätsbewertungen geändert hat, kann ich den deutlichen Unterschied immer noch nicht erkennen. Ich empfinde beides als gleich wichtig.

Ich kann die Software anhand ihrer Spezifikation überprüfen, um sicherzustellen, dass sie funktioniert. In diesem Fall handelt es sich bei den gefundenen Fehlern nur um Produkte. Aber ich führe auch Tests durch, nur um Dinge zu zerbrechen.

Auch welche Definition ist genauer?

Hinweis oben Ich beziehe mich hauptsächlich auf Softwaretests als Prozess.

John V.
quelle
1
Auf welche Art von Tests beziehen Sie sich hauptsächlich?
Simon Whitehead
Im Allgemeinen Softwaretests als Prozess.
John V

Antworten:

19

Wie Sie sicher wissen, gibt es viele verschiedene Arten von Softwaretests, wie z. B. Unit-Tests, Integrationstests, Abnahmetests usw. Es ist also eine Art Überbegriff für all diese und auf diesem sehr hohen Niveau Diskussion können wir nur wirklich über "Qualität" als einen weiten Begriff sprechen. Sie validieren die Software einfach anhand der Akzeptanzmaße, die Sie anwenden möchten. Auf verschiedenen Ebenen und Arten von Tests variieren diese stark, und die einzige wirkliche Gemeinsamkeit ist der Qualitätsaspekt.

Fehler (wie traditionell definiert) sind eine bestimmte Art von Problem mit der Software, aber es gibt viele andere. Sofern es sich nicht um eine bestimmte niedrigere Teststufe handelt, ist es nicht sinnvoll, die Definition auf Fehler zu beschränken. Ist eine etwas zu langsame Benutzeroberfläche ein Fehler ? Was ist mit der Tatsache, dass wir vergessen haben, den Entwicklern zu sagen, dass sie einen Korb zu unserem Webshop hinzufügen sollen? Vielleicht kommt die Verwirrung mit bestimmten Arten von Tests, die als "Softwaretests" bezeichnet werden, aber es ist wirklich nur Semantik.

Wenn ich die Definition formalisieren möchte, würde ich sagen, dass das Testen ein Prozess ist, bei dem die Software anhand Ihrer Anforderungen validiert wird (was auch qualitativ sein kann). Ein Fehler ist nur eine sehr spezifische Verletzung von Anforderungen (insbesondere eine, von der der Entwickler dachte, dass sie bereits richtig funktioniert hat).

EDIT: Ich sollte wahrscheinlich hinzufügen, dass das Wort "Bug" für verschiedene Personen sehr unterschiedliche Bedeutungen hat, und wir sollten diese semantische Diskussion tatsächlich beginnen, indem wir es definieren. Ich verwende die Definition aus der Sicht eines Entwicklers - dies funktioniert nicht so, wie ich (der Entwickler) es beabsichtigt habe. Es basiert normalerweise entweder auf einer sehr spezifischen Anforderung oder auf einer sehr spezifischen Interpretation einer Anforderung. Die Definition des Kunden ist normalerweise ähnlich - dies funktioniert nicht so, wie ich (der Kunde) es beabsichtigt habe, was in der Tat eine ganz andere Sache ist. Mit der letzteren Definition könnten Sie Qualität und Fehler fast gleichsetzen, da alles, was nicht den Wünschen des Kunden entspricht, ein "Fehler" ist.

Daniel B.
quelle
Ich denke, dein letzter Absatz fasst es wirklich gut zusammen.
Harold
+1. Ich wollte es zu dem Zeitpunkt abstimmen, als ich es ausarbeitete. Anscheinend habe ich das vergessen.
David Hammen
Is a UI which is a bit too slow a bug?- könnte ich es Usability Bug nennen? What about the fact that we forgot to tell the developers to add a basket to our web store?Könnte ich es Fehler in den Anforderungen nennen?
Tarun
@ Tarun du könntest definitiv diesen Weg gehen. Das Wort Bug wird jedoch sehr leicht missverstanden (normalerweise im Sinne von "Programmierer durcheinander"), daher ist es möglicherweise nicht die beste Terminologie. In Bezug auf das Problem "UI zu langsam" neigte ich zu einer qualitativen Maßnahme, die oft nicht spezifiziert, aber implizit ist und von Kunden erwartet wird. In diesem Fall könnte es sich fast sowohl um einen "Usability-Fehler" als auch um einen "Anforderungsfehler" handeln.
Daniel B
10

Aus der Antwort von Daniel B:

Ich verwende die Definition aus der Sicht eines Entwicklers - dies funktioniert nicht so, wie ich (der Entwickler) es beabsichtigt habe. Es basiert normalerweise entweder auf einer sehr spezifischen Anforderung oder auf einer sehr spezifischen Interpretation einer Anforderung. Die Definition des Kunden ist normalerweise ähnlich - dies funktioniert nicht so, wie ich (der Kunde) es beabsichtigt habe, was in der Tat eine ganz andere Sache ist.

Dies ist im Wesentlichen der Unterschied zwischen Verifizierung und Validierung. Die Überprüfung beantwortet die Frage "Haben wir es richtig gebaut?" Die Validierung beantwortet die Frage "Haben wir das Richtige gebaut?" Verifikationstests und Validierungstests sind ziemlich unterschiedliche Dinge. Die Überprüfung ist eine viel einfachere Aufgabe als die Validierung. Mit der Überprüfung wissen Sie, woran Sie testen müssen: an den Anforderungen (oder Geschichten), die festlegen, was die Software tun soll. Hier gibt es ein Problem: Was ist, wenn diese Anforderungen oder Geschichten falsch sind? Wie testen Sie dieses Problem? Das versucht die Validierung anzugehen.

Eine weitere in einigen Kreisen verwendete Komponente ist das Konzept der Akkreditierung. Dies ist wichtig, wenn Software wiederverwendet wird. Beispiel: Angenommen, Sie erstellen eine Simulation eines Fahrzeugs und benötigen ein gutes Modell seiner Trägheitsmesseinheit. Ein vorhandenes IMU-Modell finden Sie in der Komponentenmodellbibliothek. Dieses bestehende Modell wurde gründlich anhand der Anforderungen überprüft und anhand der Realität validiert. Die Tests sind sehr umfangreich, einschließlich Vergleiche mit Flugdaten. Verifiziert und validiert! Hört sich gut an! Verwenden Sie es einfach so wie es ist.

Andererseits vielleicht auch nicht. Die beabsichtigte Verwendung dieses Modells war möglicherweise ein Ruhevorgang. Sie können eine Rakete während der Startphase modellieren. Das Verhalten der IMU während des Starts wird dem Spezifikationsverhalten nahe kommen: mit anderen Worten, mies. IMUs arbeiten in Ruhephasen normalerweise viel, viel besser als Spezifikationen. Die beabsichtigte Verwendung dieses Modells entspricht nicht Ihrer beabsichtigten Verwendung. Du solltest es besser nicht wiederverwenden. Akkreditierungsversuche gehen über die Überprüfung und Validierung hinaus. Es beantwortet die Frage "Ist dies das Richtige für diesen speziellen Verwendungszweck?"

Ein weiteres Beispiel ist der erste Flugtest der Ariane 5-Rakete. Der Softwarefehler, der zum Scheitern von Flug 501 führte, gilt als einer der berüchtigtsten und teuersten Softwarefehler aller Zeiten. Die Erstellung von Flugsoftware ist extrem teuer. Um diese enormen Kosten zu vermeiden, verwendete die Flugsoftware Ariane 5 große Teile der Flugsoftware Ariane 4 wieder. Umfangreich verifiziert und validiert und bereits in einer realen Umgebung verwendet. Verwenden Sie es also einfach so wie es ist. Falsch. Es sollte zur Wiederverwendung akkreditiert worden sein. Ein angeblich "nicht mögliches" Ereignis mit einem Konvertierungsüberlauf von 64 Bit zu 16 Bit ist zufällig aufgetreten, und das Fahrzeug ist infolgedessen ausgefallen.

David Hammen
quelle
+1 für die Ausarbeitung von Verifikation vs. Validierung, und ich stimme eher zu, dass Validierung oft die schwierigere von beiden ist.
Daniel B
5

Was ist das Ziel von Softwaretests?

Kurz gesagt: Wie der Kommentar der Fragesteller sagt, "im Allgemeinen Softwaretests als Prozess". - Ihre Frage ist weit gefasst, und hier ist ihre Definition im Wikipedia-Artikel .

Bei Softwaretests handelt es sich um eine Untersuchung, die durchgeführt wird, um Stakeholdern Informationen über die Qualität des getesteten Produkts oder der getesteten Dienstleistung bereitzustellen. Softwaretests können auch eine objektive, unabhängige Ansicht der Software bieten, damit das Unternehmen die Risiken der Softwareimplementierung einschätzen und verstehen kann.

So zielen von Software - Tests ist es , unabhängige Informationen zu liefern über die Qualität des Produkts / Software. - Wie muss es gemacht werden und Teilprozess von Softwaretests? - ist eine andere Frage zu suchen.

Bearbeiten: Der Softwaretestprozess muss unabhängig von den Geschäftsanforderungen bereitgestellt werden. Andernfalls wäre weniger Wert darin. Tatsächlich haben Softwareprojekte mit großem Umfang (wie nationale Immobilienprojekte oder ähnliches) ein separates Angebot für Qualitätskontroll-, Test- und Softwareüberprüfungs- / Akzeptanzprozesse.

Yusubov
quelle
Unabhängig? Fast nie. Die meisten Tests werden von derselben Organisation geschrieben, die das Produkt erstellt. Bei der testgetriebenen Entwicklung handelt es sich nicht nur um dieselbe Organisation, sondern um dieselben Personen. Die unabhängige Überprüfung und Validierung ist teuer und wird außerhalb des Bereichs hochkritischer Systeme nur selten verwendet.
David Hammen
1
-1 für das Zitieren von Wikipedia. Es ist eine zu weit gefasste Definition und, weil aus Wikipeda herausgenommen, nur jemand anderes Meinung.
Andy
2
@Andy, wenn Zitat die Quelle sagt, die nicht der Grund für das Down-Voting ist. Zweitens steht Wikipedia öffentlich zur Bearbeitung und Verbesserung zur Verfügung. Somit ist es KEINE persönliche Meinung. Es ist die Meinung der Gemeinschaft.
Yusubov
4

Identifizieren Sie Software-Regressionen , sobald sie sich präsentieren.

Insbesondere Unit-Tests sollen Regressionen frühzeitig in der Gebäude- / Test- / Bereitstellungskette identifizieren

Akzeptanztests dienen eher dazu, einen Vertrag mit einem Kunden zu erfüllen . Wenn jedoch ein Teil eines Abnahmetests nicht bestanden wird, wie es eigentlich sein sollte, haben Sie eine zu behandelnde Regression identifiziert.

ZJR
quelle
So wie ich den Begriff „Regressionstest“ sehe, wäre letzterer keine Regression, da die Funktion nie so funktioniert hat. Regressionstests sind eines der Dinge, an denen ich als Entwickler stark interessiert bin, aber es sind nicht alle Softwaretests. Sie müssen auch überprüft und validiert werden, da David Hammen die Begriffe in seiner Antwort ausführlich erläutert hat.
Christopher Creutzig
2

Ich glaube, das Buch "The Art of Software Testing" von Glenford J. Myers definiert es am besten:

"Beim Testen wird ein Programm ausgeführt, um Fehler zu finden."

Er kontrastiert diese Definition mit mehreren allgemeinen Definitionen:

  • "Beim Testen wird nachgewiesen, dass keine Fehler vorliegen."
  • "Der Zweck des Testens besteht darin, zu zeigen, dass ein Programm seine beabsichtigten Funktionen korrekt ausführt."
  • "Testen ist der Prozess, bei dem das Vertrauen hergestellt wird, dass ein Programm das tut, was es tun soll."

Anstatt zu beweisen, dass ein Programm funktioniert, sollten wir davon ausgehen, dass das Programm Fehler aufweist und das Ziel von Softwaretests darin besteht, diese zu finden. Auf diese Weise wird die Qualität der Software erhöht, was das ultimative Ziel von Softwaretests ist.

Avian00
quelle
1
Wir sollten jedoch darauf achten, dass das Testen keine Qualitätssicherung darstellt.
Alinoz
Wie wir in der Chip - Test Geschäft zu sagen pflegte, „können Sie nicht die Qualität testen in einem Produkt“!
Bill IV
1

@ David Hammens Antwort ist sehr gut formuliert, obwohl nicht genau das, was ich gesagt hätte. Ich bin damit einverstanden, dass die Überprüfung antwortet: "Haben wir diese richtig erstellt?". Alles, was durch einen Prozess erzeugt wird, kann überprüft werden. Bei der Herstellung wird ständig überprüft, ob das produzierte Produkt korrekt hergestellt wurde.

Er definiert dann die Validierung, von der wir uns einig sind, dass sie anders ist, als "Haben wir das Richtige gebaut?" Ich würde sagen, dass sich die Validierung in die entgegengesetzte Richtung bewegt, um die genaue korrekte Funktion eines Entwurfs vollständig zu bestätigen. Eher wie "Objektiv demonstrieren, dass die Lösung richtig entworfen ist". Die richtigen Schraubensorten, die richtigen Größen der internen Variablen. Die Stücke sind dem Job gewachsen.

Davids Bestätigung: "Haben wir das Richtige gebaut?" ist eine hochrangige Frage, die Sie nicht gegen den täglichen Build ausführen können, Daumen hoch oder Daumen runter. Es ist eine Beurteilung der Anforderungen und in geringerem Maße des Designs. Es ist keine vernünftige Frage, die an ein Textfeld auf einem Bildschirm oder einen Parameter in einer API gerichtet ist. Sie sind sich nicht sicher, wie der Ein-Wort-Name für die Richtigkeit der Anforderungen lautet, möglicherweise für die Anforderungsvalidierung. Vollständiger Nachweis, dass die Anforderungen den Bedürfnissen des Endbenutzers entsprechen.

Im Gegensatz dazu ist meine Definition für Validieren ein Beweis für die Richtigkeit eines Entwurfs. Objektive Tests, die zeigen, dass die ausgewählten Teile die Aufgabe erfüllen. Die für Ariane V ungeeignete Ariane IV-Software würde hier versagen, da Ariane IV einen begrenzten Bereich von Winkelratenänderungen aufwies. Der Code wurde für diesen begrenzten Bereich optimiert, und Ariane V war in der Lage, einen größeren Bereich von Winkelraten zu erzeugen, was den Überlauf verursachte. Wenn beide Bordcomputer beim Überlauf abstürzten und nach dem automatischen Neustart erneut ausgeführt wurden, wurde das Destruct-System ausgelöst.

Wie Dykstra sagte: "Vorzeitige Optimierung ist die Wurzel allen Übels."

In meinen Definitionen wird davon ausgegangen, dass die Anforderungen korrekt sind und akzeptiert werden, was durch Anforderungstests bestätigt wird. Design oder Code-Validierung beweisen, dass das Design, möglicherweise ein Teil der Implementierung, korrekt ist. Es muss noch korrekt ausgeführt werden, aber es muss bestätigt werden, dass es sich um eine Überprüfung handelt, die auf akzeptierten Anforderungen und einem akzeptierten Design basiert.

Sie werden feststellen, dass dies dem Entwicklungsmodell des Wasserfalls schmerzlich nahe kommt, das schädlich erscheint, wenn man glaubt, komplexe Systeme zu beschreiben. Trotzdem unterscheiden sich die Anforderungen von Design und Code ist eine dritte Sache. Ich denke, mein Plädoyer ist, dass die Elemente im Wasserfall nützliche Beschreibungen sind, aber dass "vollständig" irreführend ist, deshalb habe ich es in "akzeptiert" geändert, was auf Kontingenz und Veränderlichkeit hindeutet.

Rechnung IV
quelle
0

Softwaretests zielen nicht darauf ab, Fehler zu finden, sondern darauf, Fehler zu verhindern. Durch ordnungsgemäße Tests in einem frühen Stadium wird verhindert, dass Fehler in Produktionssysteme gelangen.

jwenting
quelle
-1

Ich denke, dass Investitionen in Tests getätigt werden, um "die Benutzererfahrung zu verbessern".

Oft bleiben Fehler zurück, weil sie die Verwendung des Produkts nicht beeinträchtigen. Ebenso wird "Angleichung der Qualität des Produkts" auch danach aufgeschlüsselt, wie nützlich es ist, in einem bestimmten Bereich zu arbeiten. Schließlich müssen die Kriterien "Gut genug für den Versand" darin anerkannt werden, dass der Endzustand für das Testen immer subjektiv ist.

duanev
quelle
-1

Eine Software mit einer hohen Qualität ist unter anderem eine Software mit 0 (oder sehr wenigen) Fehlern. Eine Fehlersuche ist also ein Prozess zur Verbesserung der Qualität.

Eine Software, die alle ihre Funktionen erfüllt, ist auch eine qualitativ hochwertige Software. Das Testen zur Validierung der Funktionen ist daher ein Prozess zur Verbesserung der Qualität.

Eine Software, bei der eine gute Benutzererfahrung eine qualitativ hochwertige Software ist, und so weiter ...

Nun, ich denke, das Ziel von Sotware-Tests ist es, die Qualität zu verbessern. Dann können Sie einige Tests zur Fehlersuche, einige Validierungen und Verifizierungen von Funktionen, einige Tests auf der Benutzeroberfläche usw. durchführen.

ilazgo
quelle