Software Testing

Was ist Software Testing?

Als Software Testing bezeichnet man alle Abläufe während der Entwicklung einer Software, die zur Qualitätssicherung dieser Software beitragen. Hierbei werden also eine Vielzahl von Tests durchgeführt, um jegliche Fehler und Mängel im Coder der Software zu identifizieren und anschließend zu beheben.

In der Regel wird das Testing kontinuierlich während der Entwicklung einer Software betrieben. Das liegt daran, da sonst im fortgeschrittenen Stadium der Entwicklung essentielle Fehler nicht mehr behoben werden können bzw. Die Behebung exorbitant teuer wird.

Wieso ist Software Testing heutzutage so wichtig?

Der Entwicklungsumfang von Software Anwendungen nimmt heutzutage stetig zu. Somit ist Software derzeit nicht nur größer denn je, sondern auch komplexer. Fortlaufende Tests sind somit unverzichtbar. Tiefreichende Fehler können so rechtzeitig identifiziert und behoben werden. Deswegen sollte die Qualitätssicherung und insbesondere das Software Testing bei der Planung von Software Projekten angemessen berücksichtigt werden.

Auch als Kunde eines Software Lieferanten sollte immer hinterfragt werden, wie bzw. ob die Software getestet wird. Die folgenden Fragen sind hierbei am wichtigsten:

Besitzt der Software Lieferant einen Arbeitsbereich für Software-Tester?

Wird die Software parallel zur Entwicklung getestet?

Testet die Entwicklung die Software einmalig erst vor der Abgabe?

Software Validierung

Während der Validierung wird überprüft, ob die Software den Anforderungen des Kunden entspricht. Dies sollte zu gegebener Zeit, in der Regel am Ende, des SDLC stattfinden. Wenn die Software alle Anforderungen erfüllt, hat sie die Validierung bestanden.

Software Verifikation

Mit der Software Verifikation wird festgestellt, ob die Software anhand der vorgegebenen Spezifikationen und Methoden entwickelt wurde. Je nach Vertragsart bestehen gewisse Geschäftsanforderungen vom Kunden gegenüber dem Software Lieferanten. Diese Anforderungen müssen bei der Abgabe der Software eingehalten werden.

Davon abgesehen wird während der Verifikation überprüft, ob die Software Fehler enthält und ob die Software überhaupt im Stande ist ihren angedachten Zweck zu erfüllen.

Arten von Software Tests

Software Testing ist einer der größten Bereiche der Qualitätssicherung. Die Form des Testing unterscheidet sich jedoch von Projekt zu Projekt. Je nach Art des Services, Produktes und den Arbeitsabläufen innerhalb des Unternehmens wählen die Qualitätsbeauftragten (u. a.die Software-Tester) ein oder mehrere Testarten des Testing aus folgender Liste:

  • Alpha Testing (Internes Acceptance Testing)
  • Beta Testing (Externes Acceptance Testing)
  • Continous Testing (Nutzung von Automatisierten Tests in der Entwicklungspipeline des Bauprozesses)
  • Compatibility Testing (Tests zur Kompatibilität mit der Plattform bzw. dem System)
  • Regression Testing (Testdurchläufe mit Ziel der Prüfung von in der Vergangenheit eingebauten Funktionalität, welche nach einer Softwareaktualisierung durchgeführt werden)
  • Functional Test (Tests im direkten Bezug zu Akzeptanzkriterien)
  • Smoke Testing (Erfahrungsbasierter Test mit dem Ziel die Hauptfunktionen der Software zu überprüfen)
  • Installation Testing (Tests zur fehlerfreien Installation)
  • A/B Testing (2 oder n-Varianten Tests)
  • Security Testing (Überprüfung der Datensicherheit in Bezug auf Einsicht und Modifizierung)
  • Usability Testing (Test zur Nutzer Akzeptanz der UI)
  • Destructive Testing (Gezielte Tests auf Abstürze und andere Fehlverahlten)
  • Accessibility Testing (Tests zur Barrierefreiheit)
  • Acceptance Testing (Überprüfung der User Anforderungen)

Funktionale Tests

Funktionale Tests sind vollständig fokussiert auf die Funktionalität der Software. Hierbei testet man zum Beispiel, ob eine Anwendung ihren geplanten Zweck erfüllt. Abgesehen von der Prüfung und Erfüllung der gewünschten Funktionen zählen zu den funktionalen Tests auch Sicherheits- und Interoperabilitätstests. Mit Sicherheitstests wird u. a. geprüft, ob auf interne Daten der Software zugegriffen werden kann oder und diese anschließend zu bearbeiten.

Interoperabilitätstests bewerten hingegen die Fähigkeit der Software mit anderen Komponenten und Systemen zu kooperieren.

Nicht Funktionale Tests

Nicht funktionale Tests werden zur Überprüfung der allgemeinen Qualitätsmerkmale der Software genutzt. Diese Tests beziehen sich nicht auf die reine Funktionalität. In der Regel orientieren sich die nicht funktionalen Tests an den Qualitätsmerkmalen, die der DIN-ISO 9126 entsprechen. Dazu zählen unter anderem Merkmale wie die Benutzbarkeit, Zuverlässigkeit, Effizienz und Übertragbarkeit. Für diese Merkmale gibt es eine Vielzahl von Testarten (Performanztests, Lasttests, Usability-Tests, Robustheitstests und Portabilitäts-Tests), die individuell durchgeführt werden.

Manuelles und automatisiertes Testing

Software Testing wird vorrangig manuell von eingeplanten Personen im Entwicklungsprozess durchgeführt. Eine automatische Ausführung ist nur mit Testingwerkzeugen möglich und muss dauerhaft gepflegt werden.

Zum manuellen Testen werden z.B. vorab auf Basis von Akzeptanzkriterien Testfälle definiert. Daraus können Test Suiten erstellt werden welche 10,100 oder auch 10000 Testfälle enthalten können, die auf die unterschiedlichen Sektionen und Ebenen des Software Codes abgestimmt sind. Die Software-Tester führen dann mit dem Handbuch ein Vielzahl von Testläufen durch und melden das Ergebnis den vorgesehenen Stakeholdern.

Automatisiertes Software Testing benötigt sogenannte Test-Tools. Diese Tools können auf dem Software-Markt gekauft werden oder selber entwickelt werden. Automatisierte Testverfahren sind vor allem bei größeren Software Projekten empfehlenswert. Mit ihnen spart das Entwicklungs Team hohe Kosten vor allem mit Hinblick auf Regressive Tests. Ein Testskript kann z. B. so verbaut sein, dass dieses automatisch bei einem regelmäßigen Bauprozess der zu testenden Software gestartet wird und dann so oft wie gewünscht laufen kann. Die Tests können also zum Beispiel während der Nacht oder auch an Wochenenden durchlaufen, wenn kein Mitarbeiter mehr im Büro ist. Eine spätere Auswertung dieser Testruns muss im nachhinein durch den jeweiligen Stakeholder passieren.

Beide Testverfahren haben ihre Vor- und Nachteile. Die Wahl des Testverfahrens sollte man in der Regel vom Umfang des Projektes abhängig machen. Ein kleines Webentwicklungsprojekt kann zum Beispiel ganz leicht von Hand getestet werden. Wenn man jedoch überprüfen will, ob eine Webseite der Datenlast von 1 Millionen Nutzern Stand halten kann, ist das automatisierte Testing die einzige Option.

Statische Testverfahren

Statische Testmethoden werden hauptsächlich bei sogenannten Artefakten verwendet. Dazu zählen zum Beispiel Quelltexte oder Anforderungen, die ohne die Ausführung auf einem Rechner geprüft werden. In der Regel handelt es sich um Dokumente oder Quellcode. Prinzipiell kann man aber jede Form von Anwendung, die der Softwareentwicklung entsprungen ist, mit statischen Testverfahren prüfen. Die populärsten Form der statischen Testverfahren sind werkzeuggestützte statische Analysen und Reviews.

Vorteile von statischen Testverfahren:

  • Genaue Darstellung des aktuellen Zustandes der Software
  • Rechtzeitige Erkennung von Fehlern
  • Direkte Aufdeckung der Fehlerzustände
  • Die Tests beinhalten auch Merkmale wie Wartbarkeit
  • Abgleichung mit Programmier-Standards
  • Die Prüfung umfasst auch nicht-ausgeführte Teile der Software
  • Das ganze Team trägt zur Qualitätssicherung bei
  • Regte den Austausch zwischen Teammitgliedern an

Nachteile von statischen Testverfahren:

  • Ungeeignet für komplexe Interaktionen zwischen unterschiedlichen Bestandteilen des Systems
  • Bei manchen Anwendungen gibt es Fehler, die erst nach der Ausführung entstehen. Diese werden von einem statischen Testverfahren nicht erfasst
  • Sollte bei Auffälligkeiten geprüft und neu angesetzt werden

Dynamische Testverfahren

Bei dynamischen Testverfahren werden Fehler Wirkungen durch das Ausführen der Anwendung identifiziert. Zu den beliebtesten dynamischen Testverfahren zählen:

  • Exploratives Testing
  • Black-Box-Testverfahren
  • White-Box-Testverfahren
  • Grey-Box-Testverfahren

Vorteile von dynamischen Testverfahren:

  • Die Software muss während der Prüfung tatsächlich ausgeführt werden (Einsatz auf einer Produktionsnahen Umgebung)
  • Die Kooperation zwischen den einzelnen Bestandteilen des Systems wird geprüft
  • Beinhaltet zusätzlich wichtige nicht-funktionale Tests (Lasttests, Performance Test, usw.)

Nachteile von dynamischen Testverfahren:

  • Benötigte ein lauffähiges Testobjekt (Komplexe Systeme können spezielle Testumgebungen benötigen)
  • Je nach Umfang der Anwendung beanspruchen dynamische Testverfahren hohe Aufwände
  • Es werden nur Programmteile getestet, die auch ausgeführt werden können

Modernes Software Testing für Software Development bei Critical QA

Florian Hemmann gründete im März 2019 das Unternehmen Critical QA. Die Firma ist spezialisiert auf Dienstleistungen im Bereich der Software Qualitätssicherung. Dazu zählt auch eine individuell konfigurierte Testing Lösungen. Je nach Wunsch können alle möglichen Arbeitsabläufe in Ihren Software-Entwicklungsprozess integriert werden.