© Liashko/Shutterstock.com
Entwickler Magazin
Unit Tests mit Python

Finde den Fehler!

Zur Qualitätssicherung von Software ist Testen unverzichtbar. Manuelles Testen, wenngleich teilweise notwendig, ist zeitaufwändig, fehleranfällig und teuer und sollte daher möglichst reduziert werden. Wünschenswert ist dagegen ein automatisiertes Testen von Software, beispielsweise bei jedem Check-in in ein Versionskontrollsystem. Unit Tests erlauben es, Codeeinheiten automatisch testen zu lassen und helfen dabei, die Softwarequalität nachhaltig zu sichern. Dieser Artikel zeigt an einem Beispiel die Verwendung von Unit Tests mit Python.

Wolfgang Schmidt


Tests sollen allgemein sicherstellen, dass Software das tut, was von ihr erwartet wird. Klassischerweise (aufgrund ihrer Herkunft aus der Mathematik) befasste sich die Informatik mit der Korrektheit von Berechnungen und Algorithmen. In der Frühzeit der Computerverwendung herrschte das EVA-Prinzip vor (Eingabe – Verarbeitung – Ausgabe). Mathematisch lässt sich ein Programm in diesem Paradigma als die Implementierung einer Funktion verstehen, die eine Menge von Eingangsdaten nach einer definierten Regel auf eine Menge von Ausgangsdaten abbildet. Ein Programm ist demnach korrekt, wenn es für alle möglichen erlaubten Mengen von Eingangsdaten die der Regel entsprechenden Mengen von Ausgangsdaten generiert. Die entsprechenden Algorithmen wurden damals auf dem Papier sehr sorgfältig entworfen und nur abschließend einmal (nun ja, falls sie funktionierten) getestet.

Heutzutage gibt es deutlich mehr Akzeptanzkriterien für Software. Korrektheit ist nach wie vor wichtig, aber es geht auch um Themen wie Usability (Benutzbarkeit einer Software), Robustheit (Toleranz gegenüber fehlerhaften/unerwarteten Eingangsdaten), Performance usw. Und so gibt es auch ein breites Spektrum an Testverfahren, wie Usability-Tests, Stresstests, Integrationstests und vieles mehr.

Der beste Test für eine komplexere Systemsoftware, zumindest aus wirtschaftlicher Sicht, ist oft letztlich der Test durch den Endanwender/Kunden. Denn dieser entscheidet schließlich, ob das Verhalten der Software aus seiner Sicht akzeptabel ist oder nicht. Obwohl manuelle Tests des Endanwenders mit dem System und Integrationstests, die das Zusammenspiel der einzelnen Komponenten/Subsysteme prüfen, sehr aussagekräftig sind, sind sie auf der anderen Seite auch sehr teuer. Statt das gesamte System mit demselben Verfahren zu testen, hat sich inzwischen weitgehend die Ansicht durchgesetzt, dass ein Mix verschiedener Tests geeigneter ist, um ein System zu testen. Üblicherweise werden Tests auf drei Ebenen vorgenommen:

UI-/EndanwendertestsTests der Serviceschicht / IntegrationstestTests einzelner Codeeinheiten

Diese Gliederung entspricht der von Mike Cohn in [1] vorgeschlagenen Testpyramide, bei der die Unit Tests die Basis, die Integrationstests die mittlere Schicht und die UI-Tests die Spitze bilden. Unit Tests bilden deshalb die Basis, weil sie sehr einfach automatisch durchgeführt werden können und entsprechend billig sind. Außerdem bewirken Fehler in den einzelnen Codeeinheiten fast immer Fehler in den darüber liegen...

Entwickler Magazin
Unit Tests mit Python

Finde den Fehler!

Zur Qualitätssicherung von Software ist Testen unverzichtbar. Manuelles Testen, wenngleich teilweise notwendig, ist zeitaufwändig, fehleranfällig und teuer und sollte daher möglichst reduziert werden. Wünschenswert ist dagegen ein automatisiertes Testen von Software, beispielsweise bei jedem Check-in in ein Versionskontrollsystem. Unit Tests erlauben es, Codeeinheiten automatisch testen zu lassen und helfen dabei, die Softwarequalität nachhaltig zu sichern. Dieser Artikel zeigt an einem Beispiel die Verwendung von Unit Tests mit Python.

Wolfgang Schmidt


Tests sollen allgemein sicherstellen, dass Software das tut, was von ihr erwartet wird. Klassischerweise (aufgrund ihrer Herkunft aus der Mathematik) befasste sich die Informatik mit der Korrektheit von Berechnungen und Algorithmen. In der Frühzeit der Computerverwendung herrschte das EVA-Prinzip vor (Eingabe – Verarbeitung – Ausgabe). Mathematisch lässt sich ein Programm in diesem Paradigma als die Implementierung einer Funktion verstehen, die eine Menge von Eingangsdaten nach einer definierten Regel auf eine Menge von Ausgangsdaten abbildet. Ein Programm ist demnach korrekt, wenn es für alle möglichen erlaubten Mengen von Eingangsdaten die der Regel entsprechenden Mengen von Ausgangsdaten generiert. Die entsprechenden Algorithmen wurden damals auf dem Papier sehr sorgfältig entworfen und nur abschließend einmal (nun ja, falls sie funktionierten) getestet.

Heutzutage gibt es deutlich mehr Akzeptanzkriterien für Software. Korrektheit ist nach wie vor wichtig, aber es geht auch um Themen wie Usability (Benutzbarkeit einer Software), Robustheit (Toleranz gegenüber fehlerhaften/unerwarteten Eingangsdaten), Performance usw. Und so gibt es auch ein breites Spektrum an Testverfahren, wie Usability-Tests, Stresstests, Integrationstests und vieles mehr.

Der beste Test für eine komplexere Systemsoftware, zumindest aus wirtschaftlicher Sicht, ist oft letztlich der Test durch den Endanwender/Kunden. Denn dieser entscheidet schließlich, ob das Verhalten der Software aus seiner Sicht akzeptabel ist oder nicht. Obwohl manuelle Tests des Endanwenders mit dem System und Integrationstests, die das Zusammenspiel der einzelnen Komponenten/Subsysteme prüfen, sehr aussagekräftig sind, sind sie auf der anderen Seite auch sehr teuer. Statt das gesamte System mit demselben Verfahren zu testen, hat sich inzwischen weitgehend die Ansicht durchgesetzt, dass ein Mix verschiedener Tests geeigneter ist, um ein System zu testen. Üblicherweise werden Tests auf drei Ebenen vorgenommen:

UI-/EndanwendertestsTests der Serviceschicht / IntegrationstestTests einzelner Codeeinheiten

Diese Gliederung entspricht der von Mike Cohn in [1] vorgeschlagenen Testpyramide, bei der die Unit Tests die Basis, die Integrationstests die mittlere Schicht und die UI-Tests die Spitze bilden. Unit Tests bilden deshalb die Basis, weil sie sehr einfach automatisch durchgeführt werden können und entsprechend billig sind. Außerdem bewirken Fehler in den einzelnen Codeeinheiten fast immer Fehler in den darüber liegen...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang