Topic outline

  • Einführung in das Testen von Software


    • Das Testen in der Softwareentwicklung spielt eine entscheidende Rolle für die Qualität, Zuverlässigkeit und Benutzerzufriedenheit von Softwareprodukten. Es ist ein systematischer Prozess, der darauf abzielt, Fehler und Probleme in der Software zu identifizieren, bevor sie an den Endbenutzer ausgeliefert wird. Die Bedeutung des Testens kann anhand verschiedener Aspekte beleuchtet werden:

    • Die Begriffe "Fehler", "Mängel" und "Fehlerursachen" sind zentrale Konzepte im Bereich des Softwaretestens und der Qualitätssicherung. Sie helfen dabei, die Art und Quelle von Problemen innerhalb eines Softwareprodukts zu identifizieren und zu klassifizieren.

    • Testziele und Qualitätsmerkmale sind grundlegende Konzepte in der Softwareeprüfung, die festlegen, was durch das Testen erreicht werden soll und welche Aspekte der Softwarequalität als wichtig erachtet werden.
      Die Definition und Beschreibung dieser Elemente ist entscheidend für die Planung und Durchführung effektiver Testaktivitäten sowie für die Bewertung der Softwarequalität.

    • Der Lebenszyklus von Testaktivitäten, oft als Software Test Life Cycle (STLC) bezeichnet, beschreibt die systematische Ausführung von Testprozessen in Phasen. Jede Phase hat spezifische Ziele und Aufgaben, die dazu beitragen, die Qualität der Software durch das Finden und Beheben von Fehlern zu verbessern.

      Der STLC ermöglicht es Testteams, strukturiert und fokussiert vorzugehen, um die Softwarequalität zu sichern und die Entwicklungs- und Wartungskosten zu reduzieren.

  • Testebenen

    • Einheitentests (Unit Testing): Testen von individuellen Funktionen oder Methoden.
    • Integrationstests: Testen von Interaktionen zwischen Komponenten oder Systemen.
    • Systemtests: Testen des gesamten Systems auf Übereinstimmung mit den Anforderungen.
    • Akzeptanztests: Verifizierung, ob das Endprodukt die Erwartungen des Kunden oder Benutzers erfüllt.

  • Testarten

    • Funktionale Tests: Überprüfung der Funktionalität und der sichtbaren Verhaltensaspekte der Software.
    • Nicht-funktionale Tests: Beinhaltet Leistungstests, Sicherheitstests, Usability-Tests, Kompatibilitätstests und mehr.
    • Regressionstests: Sicherstellung, dass neue Änderungen keine Auswirkungen auf die bestehende Funktionalität haben.
    • Exploratives Testen: Unstrukturiertes Testen zur Entdeckung bisher unbekannter Fehler.

    • Funktionale Tests sind darauf ausgerichtet zu überprüfen, ob die verschiedenen Funktionen einer Software gemäß den spezifizierten Anforderungen und Bedingungen arbeiten. Sie konzentrieren sich auf das "Was" die Software tut, im Gegensatz zu nicht-funktionalen Tests, die das "Wie gut" die Software etwas tut (wie Performance, Skalierbarkeit usw.) untersuchen


    • Nicht-funktionale Tests beziehen sich auf das Überprüfen von Aspekten einer Software, die nicht direkt mit einer spezifischen Funktion oder Funktionalität verbunden sind, sondern vielmehr mit der Art und Weise, wie das System operiert. Diese Tests bewerten die Performance, Zuverlässigkeit, Sicherheit und andere wichtige Qualitätsattribute der Software. Im Gegensatz zu funktionalen Tests, die sich darauf konzentrieren, was die Software tut, konzentrieren sich nicht-funktionale Tests darauf, wie gut die Software ihre Aufgaben unter verschiedenen Bedingungen ausführt.

      Nicht-funktionale Tests sind entscheidend für die Gewährleistung der Benutzerzufriedenheit und der allgemeinen Softwarequalität.

    • Regressionstests sind ein entscheidender Bestandteil des Software-Testprozesses, die sicherstellen, dass Änderungen am Code (wie Bugfixes oder neue Features) nicht zu neuen Fehlern in bereits getesteten Teilen der Software führen. Die Gestaltung effektiver Regressionstests erfordert eine strategische Planung und Durchführung, um die Softwarequalität durch den Entwicklungsprozess hindurch zu gewährleisten.

    • Exploratives Testen ist ein Ansatz beim Softwaretesten, der sich durch seine Unstrukturiertheit und seine Fokussierung auf die Erkundung und das Entdecken von Fehlern auszeichnet. Im Gegensatz zu traditionellen, skriptbasierten Testmethoden, bei denen Tests im Voraus geplant und spezifiziert werden, basiert das explorative Testen auf der Neugier, Erfahrung und Intuition des Testers. Es wird oft als Ergänzung zu strukturierten Testmethoden eingesetzt, um Bereiche zu erforschen, die möglicherweise übersehen wurden, und um ein tieferes Verständnis der Anwendung zu entwickeln.

  • Testdesign-Techniken


    • Code-Reviews, Walkthroughs und Inspektionen sind drei wichtige Techniken der statischen Codeanalyse in der Softwareentwicklung, die darauf abzielen, Fehler zu identifizieren, die Codequalität zu verbessern und Best Practices zu fördern, bevor der Code ausgeführt wird.

      In allen drei Techniken ist eine konstruktive Atmosphäre entscheidend, in der Feedback und Kritik dazu dienen, die Codequalität zu verbessern und nicht die Leistung einzelner Entwickler zu bewerten

    • Die Grenzwertanalyse ist eine Testdesign-Technik, die sich auf die Identifizierung und Überprüfung von Fehlern an den Rändern von Eingabebereichen konzentriert. Es basiert auf der Beobachtung, dass Fehler häufig an den "Grenzen" eines Eingabebereichs auftreten, wie z.B. an den minimalen und maximalen Werten. Die Grenzwertanalyse wird oft in Kombination mit der Äquivalenzklassenbildung eingesetzt, um eine umfassende Testabdeckung zu gewährleisten.

    • Das Entscheidungstabellentesten, auch bekannt als "Cause-Effect Testing", ist eine systematische Testdesign-Technik, die verwendet wird, um komplexe Geschäftslogiken oder Systemanforderungen effektiv zu testen. Diese Methode eignet sich besonders gut für Situationen, in denen das Verhalten eines Systems von einer Kombination verschiedener Bedingungen abhängt. Eine Entscheidungstabelle hilft dabei, alle möglichen Kombinationen dieser Bedingungen und die entsprechenden erwarteten Aktionen oder Ergebnisse darzustellen.

  • Testautomatisierung


    • Testautomatisierung bezieht sich auf die Verwendung spezieller Software (separate von der zu testenden Software), um die Ausführung von Tests zu steuern, die Vergleichung der tatsächlichen Ergebnisse mit den vorhergesagten Ergebnissen zu automatisieren und andere testbezogene Aufgaben (wie Testdaten-Setup) zu erleichtern.
      Die Implementierung der Testautomatisierung erfordert eine sorgfältige Planung und kontinuierliche Wartung der Testskripts, um sicherzustellen, dass die Tests aktuell bleiben und relevante Aspekte der Anwendung abdecken. Eine erfolgreiche Testautomatisierungsstrategie berücksichtigt den Aufwand für die Erstellung und Wartung der Testautomatisierung im Vergleich zum erwarteten Nutzen.

    • Die Auswahl von Testfällen für die Automatisierung ist ein kritischer Schritt in der Teststrategie eines Projekts, da sie die Effektivität der Testautomatisierung maßgeblich beeinflusst. Nicht jeder Testfall eignet sich für die Automatisierung; daher ist es wichtig, Kriterien zu definieren, die bei der Auswahl helfen.

    • Google Test (auch bekannt als gtest) ist ein umfangreiches Framework für das Unit-Testing von C++ Anwendungen. Es ist Open Source und von Google entwickelt, um Entwicklern ein effektives Werkzeug für das Schreiben von Tests in C++ zu bieten. Google Test ist für eine Vielzahl von Plattformen verfügbar, darunter Windows, Linux und MacOS. Es wird in zahlreichen Projekten innerhalb und außerhalb von Google verwendet und unterstützt die Entwicklung robuster, fehlerfreier C++ Software durch umfangreiche Testmöglichkeiten