Die Testpyramide ist der Sammelbegriff für unterschiedliche Arten von Testfällen mit unterschiedlicher Komplexität und Laufzeitverhalten. Aufgrund ihrer Abhängigkeit hat sich das Bild einer Pyramide durchgesetzt, mit vielen Modultests an der Basis und einem Systemtest an der Spitze.

Modultests (englisch: unit tests) bilden die Basis der Testpyramide. Diese Testart stellt sicher, dass die Grundbausteine (z.B. Klassen und Methoden bei objektorientierter Programmierung) einer Komponente funktionieren. Eine wichtige Eigenschaft von Modultests: Sie sind schnell und können bei der kleinsten Änderung im Code sofort ausgeführt werden. Für praktisch jede Programmiersprache gibt es Bibliotheken: JUnit für Java, PHPUnit ist die Portierung von JUnit auf PHP. Bei Python (Unittest) und Ruby (Test:Unit) ist die Unterstützung für Modultests fester Bestandteil der Standardbibliothek.

Ein Komponententest überprüft das Zusammenspiel der Grundbausteine einer Komponente. Dieser Test wird nur dann ausgeführt, wenn die Modultests gezeigt haben, dass die Grundbausteine der Komponente wie erwartet funktionieren.

Ein Schnittstellentest testet die Schnittstellen einer Komponente. Dieser Test betrachtet die Komponente als sogenannte “black box” und überprüft die Konformität der Implementierung der Schnittstellen zur Spezifikation.

Ein Systemtest (auch: Akzeptanztest) überprüft das Zusammenspiel von Komponenten in einem IT-System. Dieser Test wird nur dann ausgeführt, wenn die Testfälle der Komponententests aller im IT-System verbauten Komponenten gezeigt haben, dass die Komponenten wie erwartet funktionieren.


Fowler: TestPyramid

The test pyramid is a way of thinking about different kinds of automated tests should be used to create a balanced portfolio. Its essential point is that you should have many more low-level unit tests than high level broad-stack test running through a GUI.

A unit test are low-level, focusing on a small part of the software system. The common properties of unit tests — small scope, done by the programmer herself, and fast — mean that they can be run very frequently when programming.

A broad-stack test is a test that exercises most of the parts of a large application. It’s often referred to as an end-to-end test or full-stack test.