Tools und Frameworks für Softwaretests

Im Software Engineering existieren verschiedene Vorgehensmodelle, die den Rahmen des Entwicklungsprozesses stecken. Klassische Modelle, wie zum Beispiel das Wasserfallmodell, sind in sequenziellen Phasen aufgeteilt. Das V-Modell baut auf dem Wasserfallmodell auf und weist den einzelnen Entwicklungsstufen Testarten zu. Nachfolgend ist das V-Modell mit den entsprechenden Teststufen abgebildet.
Der Entwicklungsprozess beginnt mit der Definition der Anforderungen. Diese können mit Hilfe von Methoden aus dem Requirements Engineering ermittelt werden. Auf Grundlage der Anforderungen erfolgt der Entwurf des funktionalen Systems und der technischen Systemarchitektur. Eine weitere Detaillierung erfolgt im Rahmen des Komponentenentwurfs. Hier werden Klassen im Hinblick auf Attribute und Methoden spezifiziert. Abschließend erfolgt die Implementierung, die die technische Umsetzung adressiert.
Den einzelnen Phasen stehen verschiedene Testarten gegenüber, die zur Validierung (Überprüfung, ob das richtige Produkt entwickelt wird) und Verifikation (Überprüfung, ob das Produkt richtig entwickelt wird) dienen. Nachfolgend werden diese genauer beschrieben. Zusätzlich werden verschiedene Tools genannt, die abhängig von der Testart in der Praxis zum Einsatz kommen.
Unit-Tests
Unit-Tests (auch Modultests genannt) bilden die Basis im Testprozess. Im Rahmen dieser, werden einzelne Komponenten einer Anwendung isoliert auf ihre Funktionalität geprüft.
-
- Testen findet in der frühen Phase in der Entwicklung statt
- Automatisierte Tests üblich
- Als Komponenten werden Funktionen, Klassen, Methoden oder Prozeduren bezeichnet
- Komponenten werden in der Regel nicht isoliert im System bestehen, daher muss eine Möglichkeit geschaffen werden, diese abgekapselt zu testen
Tools und Frameworks für Unit-Tests
Abhängig von der Programmiersprache, in der die Software entwickelt wurde, eignen sich verschiedene Test-Frameworks.
Java:
– JUnit ist ein weitverbreitetes open-source Test-Framework. Es ist in vielen Entwicklungsumgebungen, wie beispielsweise IntelliJ IDEA, bereits integriert. JUnit kommt zudem häufig im Rahmen des test-driven software development zum Einsatz. Das heißt, dass die Testfälle entwickelt werden, bevor die Module und Komponenten überhaupt in Form von Code existieren. Weiterhin können Tests automatisiert werden und die Verwendung des Frameworks ist unabhängig von der Plattform möglich.
– TestNG ist ein zu JUnit ähnliches Framework, das als Plugin in verschiedenen Entwicklungsumgebungen eingebunden werden kann. Es bietet einen Support für data-driven testing an und ermöglicht das Ausführen von parallelen Tests. Darüber hinaus ist das Testen von exception handling möglich und ist u.a. auch für Integrationstests anwendbar.
JavaScript:
– Jasmine ist ein ebenfalls quelloffenes Test-Framework für Unit-Tests. JavaScript-Module können im Browser als auch unter der Laufzeitumgebung Node.js getestet werden. Weiterhin lässt Jasmine die Durchführung von automatisierten Tests für asynchronen Code zu.
C++:
– Das GoogleTest-Framework ist für das Testen von Modulen, die in C++ geschrieben sind, gedacht. Tests können in Testsuiten (Sammlung von Testfällen) zusammengefasst werden. Dies ermöglicht es Muster schneller und einfacher zu erkennen.
Integrationstests
Mit Hilfe von Integrationstests wird geprüft, ob die einzelnen Komponenten des Gesamtsystems fehlerfrei zusammenspielen. Auch Fehler in der Schnittstellenentwicklung werden in diesem Zusammenhang getestet.
-
- Bei Komponentenintegrationstests wird das Zusammenspiel einzelner Komponenten mit anderen Komponenten getestet
- Systemintegrationstests funktionieren ähnlich: hier werden Teilsysteme oder Softwarepakete, die wieder mit anderen Teilsystemen oder Paketen zusammenwirken, getestet
- Eine Teilautomatisierung wird bei Integrationstests angestrebt
- Weitere Testobjekte können Datenbanken, APIs oder Microservices sein
Tools und Frameworks, die für Modultests angewendet werden, können zum Teil auch für die Integrationstests verwendet werden (z.B. JUnit, TestNG, Jasmine, GoogleTest).
Tools und Frameworks für Systemtests
Bei Systemtests wird geprüft, ob die Anwendung als ganzheitliches System funktioniert. In der Regel erfolgt dies mit Hilfe von Testdaten auf einem Testsystem. Gründe hierfür sind u.a., dass die Tests das Produktivsystem beschädigen könnten und sich die Testdaten auf angebundene Datenbanken und Systeme auswirken. Systemtests werden in der Regel nicht von den Entwicklern durchgeführt, sondern von Testern im Rahmen der Qualitätssicherung. Bei automatisierten Tests kann eine Einbeziehung von Entwicklern erforderlich sein.
1) Selenium ist eines der bekanntesten und meist genutzten Frameworks für automatisierte Tests von Webapplikationen. Es ist plattformunabhängig und kann für verschiedene Browser eingesetzt werden. Darüber hinaus lässt das Open-Source-Tool eine Programmierung in einem breiten Spektrum von Programmiersprachen zu. Skripte können in u.a. in PHP, Java, Python, Ruby ausgeführt werden. Die Testautomatisierung kann von der Benutzeroberfläche bis zur Datenbank automatisiert werden. So lassen sich etwaige Systemfehler identifizieren.
2) Ein ähnliches aber umfangreicheres Framework ist Ranorex. Es ist ein kommerzielles Framework, das nicht nur für automatisierte Tests von Web-Apps sondern auch für mobile und Desktop-Apps verwendet werden kann. Weiterhin ermöglicht es die parallele Ausführung von Tests und eine Testerstellung ohne Programmierung. Weitere Vorteile sind die höhere Nutzerfreundlichkeit und das einfachere Setup gegenüber Selenium.
3) SoapUI ist ein plattformunabhängiges Testtool für Webservices (SOAP, REST und GraphQL) und ermöglicht ebenfalls automatisierte Tests. Weiterhin können Performance- und Lasttests ausgeführt werden. Es steht eine kostenlose Basisversion zur Verfügung, die für das Testen von Webservices ausreichende Funktionen mitbringt.
4) Ein weiteres Tool zum Testen der Performance und Last von Webanwendungen ist Gatling. Es ist als kostenlose Basisversion verfügbar, bietet aber auch in der Enterprise-Version zusätzliche Funktionen. In Gatling ist es möglich mehrere Benutzer in einem Thread zu simulieren oder Lasttests um SQL-Abfragen zu erweitern. Darüber hinaus werden die Programmiersprachen Scala, Kotlin und Java unterstützt.
Tools und Frameworks für Abnahmetests
Abnahmetests (auch Akzeptanztest) stehen am Ende der Testphase und dienen als abschließende Prüfung. Die Funktionalität wird unter realen Bedingungen geprüft. Dies kann beispielsweise in Form von Beta-Tests erfolgen. In der Regel werden die Abnahme- und Akzeptanztests vom Kunden oder Endnutzer durchgeführt. Typische Testobjekte sind u.a. Formulare, Reports, Recovery Systeme oder ein vollständig integriertes System
Zur Abnahme von Webanwendungen eignet sich u.a. das plattformunabhängige Test-Framework Cucumber. Es ermöglicht die Prüfung von Anforderungen und ob diese erfüllt wurden. Es unterstützt verschiedene Programmiersprachen, wie z.B. PHP, Python, Perl und Java. Cucumber setzt auf die Beschreibungssprache Gherkin, sodass die Testfälle einfach in Textform vorliegen und somit auch für Personen verständlich sind, die keinen technischen Background haben.
Viele der genannten Tools und Frameworks lassen sich auch stufenübergreifend einsetzen, sodass nicht mehrere Anwendungen implementiert werden müssen und unter Umständen höhere Kosten für Lizenzen entstehen.
Fehler, die erst beim Endnutzer im Produktivsystem auffallen, verursachen deutlich höhere Fehlerbehebungskosten (Link), als solche, die bereits bei der Anforderungsermittlung entstehen. Daher ist das Testen bereits in der frühen Entwicklungsphase unerlässlich.
Artikel, die Sie auch interessieren könnten:
Scrum
Scrum ist ein agiles Framework für das Projektmanagement, das speziell dafür...
Qualitätskriterien für Anforderungen in der Softwareentwicklung
Die Definition und Überprüfung von Benutzeranforderungen ist ein wesentlicher...
Requirements Engineering
Requirements Engineering - Wie sich schon aus dem Namen ableiten lässt, geht...
Weitere Artikel finden Sie in unserem IT-Blog.