Wonach möchtest du suchen?

Digitale Leute – Build Better Products

Richtiges Testing:
8 Verfahren, mit denen Entwickler die Software-Qualität verbessern

08. April 2020

Qualitätssicherung ist für die Softwareentwicklung von besonderer Bedeutung. Schon ein kleiner Fehler im Grundkonstrukt einer Software kann verheerende Folgen haben. Solche Fehler zu vermeiden und hohe Qualitätsstandards einzuhalten, ist eine wichtige Aufgabe für jedes Entwicklerteam. Gutes Software-Testing ist darum sehr wichtig.

Dies ist ein Gastbeitrag von Gero Duppel, Geschäftsführer beim Software-Entwickler QOSSMIC. Gero Duppel hat mehr als zwei Jahrzehnte Erfahrung in der Software-Branche. Zunächst arbeitete er als Developer, Team Manger und CTO, unter anderem für Globalpark, Startplatz Cologne und Konsument. Seit 2016 leitet er QOSSMIC (ehemls. pro.volution). Gero war Speaker beim Digitale Leute Summit 2019. 

Sicherlich ist jeder schon mal mit Software in Berührung gekommen, die nicht ganz so funktioniert, wie sie eigentlich sollte. Meistens sind es nur kleinere Fehler. Im Großen und Ganzen funktioniert die Software. Doch gelegentlich kommt es zu größeren Fehlern, die im Zweifel ganze Anwendungen und die daran gekoppelten Prozesse beeinträchtigen. Dies kann so weit gehen, dass Umsätze zurückgehen oder sogar komplett ausbleiben.

Testing will gelernt sein

Dabei ist es immer besser, von Anfang an, in hoher Qualität zu arbeiten, als sie erst im Nachhinein sicherzustellen. Bereits im Entstehungsprozess der Software sollten die Entwickler hohe Standards einhalten, damit grundlegend weniger Fehler entstehen.

Dieses Vorgehen erfordert viel Disziplin. Besonders in größeren Teams muss das auch erlernt werden. Doch sobald die vereinbarten Standards für alle etabliert sind, reduziert sich der Aufwand für Testing im Nachgang massiv. Im Folgenden liste ich einige Verfahren auf, die bei uns zu den Entwicklungsstandards gehören.

1. Statische Code-Analyse

Der erste Test, den jeder Code absolvieren muss, ist die statische Code-Analyse. Bei dieser Art der Qualitätskontrolle testen die Entwickler den Code, während er entsteht. Die Besonderheit bei einer statischen Code-Analyse ist, dass der reine Source-Code analysiert wird, aber dieser nicht ausgeführt wird.

Diese Art der Tests hilft insbesondere dabei, festgelegte Regeln und Standards einzuhalten. So werden besonders schnell Fehler gefunden, die durch Nichteinhaltung der Standards auftreten, und zum Beispiel zu Sicherheitsrisiken führen können.

Doch gibt es in der Softwareentwicklung keine Standards ohne zahlreiche Ausnahmefälle. Die statische Code-Analyse hilft in diesem Fall dabei, Fehler zu finden, die im üblichen Entwicklungsprozess durch möglicherweise halbherzig durchgeführte Tests unbeachtet bleiben würden.

2. Code-Review im 2-Daumen-Prinzip

Neben den Software-gestützten Testverfahren sind insbesondere Testverfahren innerhalb der Entwicklerteams sehr effizient. Bei uns nutzen wir hierzu ein 6-Augen-Prinzip oder, wie wir es nennen, das 2-Daumen-Prinzip.

Neben dem verantwortlichen Entwickler, der den jeweiligen Code erstellt hat, werden zwei weitere Entwickler für eine Code-Review hinzugezogen. Bei dieser Code-Review untersuchen die Kollegen den geschriebenen Code auf Fehler und dokumentieren diese für eine anschließende Korrektur. Dieser Prozess wird so lange wiederholt, bis alle Fehler gefunden und korrigiert sind.

Somit haben insgesamt sechs Augen über den Code geschaut und auf Fehler untersucht. Die zwei Kollegen, die das Review durchführen, geben jeweils einen Daumen hoch und bestätigen somit, dass der Code nach bestem Wissen und Gewissen frei von Fehlern ist.

Dieses Verfahren bietet neben der gesteigerten Code-Qualität noch zahlreiche weitere Vorteile.

Softwareentwicklung, Testing bei Pro.Volution

3. Unit Test

Mit diesem Testverfahren testen die Entwickler einzelne Einheiten (“Units”) der Software. Einheiten können in diesem Kontext auch als Bausteine der Software verstanden werden. Jedes neue Feature kann aus mehreren Bausteinen bestehen.

Die einzelnen Bausteine werden in diesem Verfahren darauf getestet, ob sie ungewollte Verhaltensänderungen verursachen und somit zu Fehlern führen können. Diese Tests werden jedoch nur an den einzelnen Bausteinen und in einem eingeschränkten Bereich der Software durchgeführt .

Sobald diese einzelnen Bausteine zusammen mit anderen Units in einem größeren Teil der Software getestet werden, redet man von einem Integration Test.

4. Integration Test

Bei einem Integration Test werden mehrere kleine Bausteine einer Software zusammengeschlossen und gemeinsam getestet. Dadurch erfahren die Entwickler, ob die Kombination der einzelnen Bausteine untereinander Fehler verursacht, oder ob diese problemlos miteinander interagieren. Somit werden neue Features in Gänze getestet.

Außerdem wird auf diese Weise getestet, ob die Bausteine negative Auswirkungen auf die gesamte Applikation haben können. Wenn in diesem Testverfahren Fehler auftreten, findet das Team schnell und unkompliziert heraus, welcher Baustein die Probleme verursacht. Der gefundene Fehler kann somit auch schnell korrigiert werden.

5. Automatisierte Frontend-Test

Bei automatisierten Frontend-Tests wird die Applikation zum jeweiligen Stand im vollen Umfang so getestet, als würde sie ein echter Nutzer benutzen. Es wird das normale Nutzerverhalten getestet und beobachtet, ob es zu Fehlern oder unvorhergesehenem Verhalten der Software kommt.

Außerdem wird bei diesem Schritt getestet, ob sich eine Applikation auf verschiedenen Endgeräten und unter unterschiedlichen Bedingungen gleich verhält. Verschiedene Endgeräte wie Computer, Smartphones oder auch Software, wie Betriebssystem und Browser in verschiedenen Versionen, können die Ergebnisse verändern.

Diese Art der Tests können schnell sehr aufwendig und somit kostenintensiv werden. Um zu beurteilen, ob der Test angemessen ist, kann es helfen, den von einzelnen Funktionalitäten abhängigen Umsatz oder die Auswirkungen auf das ganze Unternehmen zu betrachten.

6. Lasttests

Im Regelbetrieb werden Systeme stets unterschiedlichen Lasten ausgesetzt. Es gibt Zeiten mit weniger oder mehr Auslastung. Um auch kurzzeitige Extrembelastungen zu testen, gibt es Lasttests. Bei Lasttests simulieren externe Systeme oder Programme hohe Nutzerintensität auf die Applikation. So findet das Team heraus, wie viele Anfragen die Anwendung oder das Server-System fehlerfrei bearbeiten kann.

Lasttests sollten vor allem bei Hochverfügbarkeitssystemen regelmässig, auch auf dem Live-System, durchgeführt werden, um mögliche Fehler und Dateninkonsistenzen zu vermeiden. Dadurch können mögliche Schwachstellen am System identifiziert und behoben werden. Gleichzeitig können Pläne entwickelt werden, um mit möglichen Systemausfällen umzugehen.

7. Softwaretester und fachliche Abnahme

Als abschließendes Testverfahren ist das Testen durch Fachpersonal eine Möglichkeit. Das empfehlen wir insbesondere, wenn es sich um sicherheitskritische Anwendungen oder Anwendungen mit großer Relevanz für das Alltagsgeschäft handelt.

Geschulte Tester gehen bei diesem Verfahren nach vorgegebenen Kriterien vor und testen die Software weitaus intensiver, als es das spätere Nutzerverhalten erwarten lässt. Zudem wird die Software verschiedenen Stresssituationen ausgesetzt, die im alltäglichen Gebrauch nicht vorkommen.

Als letzter Schritt der Qualitätskontrolle nimmt der Auftraggeber die Software ab. Hierbei werden insbesondere die formalen Anforderungen getestet und die finale Inbetriebnahme vorbereitet.

8. Monitoring & Fehler-Tracking im Live-System

Mit Veröffentlichung der Software sind zwar die üblichen Test durchlaufen. Dennoch sollte man weiterhin ein Auge auf das System zu werfen. Trotz intensiver Tests und Berücksichtigung zahlreicher Eventualitäten können im Live-Betrieb stets neue Gegebenheiten entstehen, für die eine Software nicht hinreichend konzipiert wurde. Um frühzeitig mögliche Fehler zu registrieren und entsprechende Gegenmaßnahmen einführen zu können, setzen wir diverse Monitoring-Tools ein.

Diese Tools alarmieren einerseits im Falle einer Fehlfunktion den zuständigen Administrator und dokumentieren andererseits den Fehler und die daraus resultierenden Folgen. Mit den so dokumentierten Ergebnissen können die Fehler schnellstmöglich behoben werden und das System wieder live gehen.

Monitoring und Fehler-Tracking in Live-Systemen sind ein fortlaufender Prozess und wird für gewöhnlich über die gesamte Lebensdauer eines Systems fortgeführt.

Der Originalbeitrag erschien zuerst bei Gero Duppel auf LinkedIn

podcast Podcast Episode 33 - The evolution of design systems into design APIs
Vorheriger Artikel
podcast Podcast Episode 34 - A good mix! How streaming service Deezer bets on human-curated playlists as well as algorithms
Nächster Artikel
DIGITALE LEUTE
NEWSLETTER