Softwaretesttechniken oder -kategorien [geschlossen]

16

Welche Arten von Softwaretests kennen Sie? Ich habe von Test-Driven Development, Unit Tests usw. gehört, kann aber deren Wichtigkeit und Unterschied nicht verstehen. Warum verwenden wir beispielsweise Regressionstests oder Akzeptanztests? Welchen Vorteil bieten sie?

Dehumanizer
quelle
8
Welcher Teil davon war verwirrend oder unvollständig? en.wikipedia.org/wiki/Software_testing
S.Lott
2
Sie können die Regressionstests überspringen, wenn Sie sich nicht darum kümmern, ob vorhandene Funktionen beschädigt werden, und Sie können den Akzeptanztest überspringen, wenn Sie sich nicht darum kümmern, ob die Benutzer die Software tatsächlich verwenden oder dafür bezahlen, dass sie das tun, was sie von ihr erwarten . Professionelle Programmierer kümmern sich um beides.
HLGEM
Ich stimme dafür, diese Frage erneut zu eröffnen, da es die einzige ist, die mir einen guten Überblick über die verschiedenen Arten von Testkategorien gibt. Vielleicht hat jemand eine gute Idee, wie man die Frage umformuliert, damit sie besser zu dieser Site passt?
Doc Brown

Antworten:

38

Umfassende Kategorien für mich wären:

Black-Box-Test . Sie können den Code nicht sehen und testen nur blind, bis zu einem gewissen Grad, da das, was sich in der Anwendung oder im System befindet, vor Ihnen verborgen ist. Daher kennen die Leute in diesem Fall nicht alle Fehlerfälle und müssen mit verschiedenen Randbedingungen rechnen, die offensichtlich sein können oder nicht, um alle Fälle zu finden.

White-Box-Test . Sie können den Code anzeigen und überprüfen, welche Codepfade verwendet werden, sodass die Codeabdeckung als Metrik verwendet werden kann, um sicherzustellen, dass die gesamte Logik im System verwendet wird. Die Idee hier ist zu wissen, wie der Code aussieht, um die Tests zu leiten, damit er nicht so mysteriös ist wie Black-Box-Tests.

Gray-Box-Tests sind ein Hybrid aus den beiden vorherigen.

Grenzfälle sind in der Regel etwas, was man beim White-Box-Testen sieht, da im Code, den man für Treffer schreibt, verschiedene Bedingungen zu sehen sind, z. B. wenn Sie ein Programm hatten, das nach einer Zahl fragt, und jemand X eingibt, wie dies gehandhabt wird sollte irgendwo im Code zu sehen sein.

Allgemeine Klassifikationen von Tests wären:

Unit-Tests . Dies sind in der Regel die kleinsten Tests, die etwas Bestimmtes testen. Behandelt diese Methode z. B. diesen Grenzfall? Beachten Sie, dass die Abhängigkeitsinjektion hier für Fälle verwendet werden kann, in denen Scheinobjekte verwendet werden, um Abhängigkeiten für die Tests zu verringern.

Integrationstests . Hierbei handelt es sich um Tests, bei denen einige Komponenten verbunden sind und Tests ausgeführt werden, um sicherzustellen, dass die Komponenten gut zusammenarbeiten. Beachten Sie, dass die Komponententests möglicherweise unabhängig voneinander ausgeführt werden. Hier wird jedoch geprüft, wie gut die Dinge zusammenpassen, da es möglicherweise zu einer Fehlkommunikation zwischen den Ebenen kommt, die dazu führt, dass diese Tests beim Auffangen verschiedener Fallstricke hilfreich sind. Der Begriff End-to-End-Tests wird für Integrationstests verwendet, bei denen eine vollständige Kette von Komponenten von "einem Endpunkt der Anwendung zu einem anderen" getestet wird (was auch immer das bedeutet).

Regressionstests . Dies sind Tests, die in der Vergangenheit durchgeführt wurden und erneut durchgeführt wurden, um sicherzustellen, dass das, was behoben wurde, weiterhin behoben bleibt und Fehler nicht erneut in den Code eingefügt werden.

Usability-Tests . Dies wären Tests, um festzustellen, wie gut Endbenutzer mit der Software arbeiten können, um verschiedene Aufgaben zu erledigen. Wo könnte etwas automatisiert werden, um etwas schneller zu machen, oder um die Benutzeroberfläche so anzupassen, dass etwas einfacher zu bedienen ist?

Benutzerakzeptanztests . Dies wären Tests, die von Endbenutzern durchgeführt werden, um aus erster Hand zu sehen, wie etwas funktioniert, und um zu bestätigen, dass die Software die geschäftlichen Anforderungen erfüllt, die sie an erster Stelle gestellt haben.

Funktionstests sind alle Arten von Tests, die auf den Funktionsspezifikationen der zu testenden Software basieren. Dies sind immer Black-Box-Tests.

Leistungstests. Dies wären Tests, die durchgeführt werden, um sicherzustellen, dass ein System eine bestimmte Lastmenge bewältigen kann, ohne zu langsam zu werden. Das Testen einer neuen Server-Webfarm kann beispielsweise dazu führen, dass 100 Benutzer gleichzeitig auf eine Site zugreifen. Dies ist ein Beispiel für einen Leistungstest. Dies kann auch als "Belastungstest" oder "Belastungstest" bezeichnet werden, da hier im Allgemeinen versucht wird, entweder das System an seine Grenzen zu treiben oder zu überprüfen, ob das System Projektionen von einer anderen Abteilung verarbeiten kann. Der Grund für diese Tests ist, dass häufig zahlreiche Konfigurationseinstellungen optimiert werden müssen, die mehr als nur ein wenig Arbeit erfordern, um Engpässe zu erkennen und Probleme damit zu beheben. Der Engpass hier könnte Speicher, E / A, CPU oder Netzwerkbandbreite sein, die dazu führen, dass das System nicht so schnell reagiert wie erwartet.

Testgesteuerte Entwicklung ist eine Methodik und bezieht sich nicht auf eine bestimmte Art von Test, sondern darauf, dass Tests vor dem Code geschrieben werden, sodass die Tests eher die Entwicklung als das Verhalten , die Domäne oder die Funktion bestimmen, was andere Beispiele sind Prozess.

Bei der kontinuierlichen Integration werden einige Tests, wie z. B. Einheiten-, Integrations- und Regressionstests, regelmäßig ausgeführt, damit diese so früh wie möglich abgefangen werden, wenn eine Änderung einen Test bricht.

JB King
quelle
5
+1 ... und leider gibt es auch nach alledem noch manuelle Tests.
Steven Evers
2
und Stres-Test - alle möglichen Sitzungen, in denen dieselbe Maske zur selben Zeit und während des gesamten Testszenarios getestet wird, auch als Teil von UAT, übrigens +1
mKorbel
1
Fehlt Ihnen kein Coverage / Branch Coverage-Test? Laufen Sie auch unter einem Speicherüberwachungssystem wie "Electric Fence" Malloc oder Valgrind?
Bruce Ediger
1
@ Bruce Ediger: Coverage ist eine Statistik für White-Box-Tests, keine Methode zum Testen selbst, und die von Ihnen beschriebenen Tools dienen zum Testen der Leistung.
Steven Evers
Ich muss mich über die "Tools ... sind für Perfektionstests" unterscheiden. In einigen Sprachen (C oder C ++), die eine ganze Reihe von Komponententests in valgrind ausführen, werden Fehler gefunden, die keiner der anderen oben aufgeführten Testarten findet. Valgrind ist sicherlich ein Debugging-Tool, aber das Ausführen von Tests in einem valgrinded-Programm ist sehr notwendig.
Bruce Ediger
4

Regressionstests ist , dass neue Änderungen an einem System , um sicherzustellen , durchgeführt hatte keine vorhandene Funktionalität brechen , die nicht wurde angenommen , die von den Änderungen betroffen sind.

Akzeptanztests werden in der Regel von Kunden / Kunden / Geschäftsanwendern durchgeführt. Sie sind häufig anspruchsvoller als andere Testformen und werden durchgeführt, damit die Personen, die die Änderungen angefordert haben, mit ihnen zufrieden sind und Sie die Änderungen in Ihre Website übernehmen können Produktionssystem.

FrustratedWithFormsDesigner
quelle
1
Und was am wichtigsten ist, damit sie übereinstimmen, dass sie bekommen, was sie wollten und Sie jetzt bezahlen können.
Mchl