Software-Testing
Die Schülerinnen und Schüler sichern die Qualität von Software durch Unit-Tests und Integrationstests.
Über dieses Thema
Software-Testing sichert die Qualität von Programmen durch systematische Überprüfungen. In Klasse 10 lernen Schülerinnen und Schüler Unit-Tests für einzelne Funktionen und Integrationstests für das Zusammenspiel von Modulen. Sie erkunden, ob Fehlerfreiheit bewiesen werden kann, warum automatisierte Tests effizienter sind als manuelle und was einen Bug von einem Feature unterscheidet. Diese Inhalte knüpfen an die Standards KMK STD.03 und STD.05 an und fördern präzises Denken im Software-Projektmanagement.
Im Rahmen der Einheit Software-Projektmanagement vertiefen Schüler das Testen als integralen Bestandteil des Entwicklungsprozesses. Sie verstehen, dass Tests nicht nur Fehler aufdecken, sondern auch als Dokumentation dienen und Regressionen verhindern. Durch praktische Übungen entwickeln sie Fähigkeiten wie Debugging und Test-Driven Development, die für reale Projekte essenziell sind.
Aktives Lernen eignet sich hervorragend für Software-Testing, da Schüler ihre eigenen Codes testen und Fehler erleben. Kollaboratives Debuggen in Gruppen macht abstrakte Konzepte konkret und motiviert, weil Erfolge sofort sichtbar sind. Solche Ansätze stärken Problemlösungskompetenzen nachhaltig.
Leitfragen
- Kann man die Fehlerfreiheit einer Software beweisen?
- Warum ist automatisiertes Testen effizienter als manuelles?
- Was unterscheidet einen Bug von einem Feature?
Lernziele
- Demonstrieren Sie die Anwendung von Unit-Tests zur Überprüfung der Funktionalität einzelner Code-Module.
- Analysieren Sie das Zusammenspiel mehrerer Module durch die Durchführung von Integrationstests.
- Bewerten Sie die Effizienz von automatisierten Teststrategien im Vergleich zu manuellen Testverfahren.
- Erklären Sie die Kriterien, die einen Softwarefehler (Bug) von einer gewünschten Funktionalität (Feature) unterscheiden.
- Erstellen Sie einfache Testfälle, um spezifische Fehlerbedingungen in einem gegebenen Code-Snippet zu identifizieren.
Bevor es losgeht
Warum: Schüler müssen grundlegende Programmierkonzepte wie Variablen, Funktionen und Kontrollstrukturen verstehen, um Code testen zu können.
Warum: Ein grundlegendes Verständnis dafür, wie man Fehler im Code findet und behebt, ist eine notwendige Basis für das systematische Testen.
Schlüsselvokabular
| Unit-Test | Ein Test, der die kleinste testbare Einheit eines Softwarecodes isoliert prüft, typischerweise eine Funktion oder Methode. |
| Integrationstest | Ein Test, der das Zusammenspiel und die Kommunikation zwischen verschiedenen Modulen oder Komponenten einer Software überprüft. |
| Bug | Ein Fehler im Programmcode, der dazu führt, dass die Software nicht wie erwartet funktioniert oder abstürzt. |
| Test-Driven Development (TDD) | Ein Entwicklungsansatz, bei dem zuerst Tests geschrieben werden, die dann fehlschlagen, bevor der eigentliche Code geschrieben wird, um die Tests zu erfüllen. |
| Regressionstest | Ein Test, der sicherstellt, dass durch neue Codeänderungen keine bereits funktionierenden Teile der Software beeinträchtigt wurden. |
Vorsicht vor diesen Fehlvorstellungen
Häufige FehlvorstellungDie Fehlerfreiheit einer Software lässt sich mathematisch beweisen.
Was Sie stattdessen lehren sollten
Fehlerfreiheit kann nicht absolut bewiesen werden, sondern nur durch exhaustive Tests mit hoher Abdeckung widerlegt werden. Aktive Ansätze wie das Schreiben eigener Testfälle helfen Schülern, diese Grenzen zu erleben und Edge-Cases zu entdecken.
Häufige FehlvorstellungAutomatisiertes Testen ist immer effizienter als manuelles Testen.
Was Sie stattdessen lehren sollten
Automatisierte Tests sparen Zeit bei Regressionen, eignen sich aber nicht für UI-Tests oder exploratives Testen. Praktische Vergleiche in Gruppen zeigen Schülern, wann welche Methode passt und fördern nuanciertes Urteilsvermögen.
Häufige FehlvorstellungEin Bug ist immer ein Programmierfehler, ein Feature eine gewollte Funktion.
Was Sie stattdessen lehren sollten
Der Unterschied hängt vom Anforderungskontext ab; was als Bug gilt, kann subjektiv sein. Diskussionen zu realen Beispielen in der Klasse klären dies und trainieren Kommunikation mit Stakeholdern.
Ideen für aktives Lernen
Alle Aktivitäten ansehenPaarprogrammierung: Unit-Tests schreiben
Schülerinnen und Schüler arbeiten in Paaren an einer gemeinsamen Funktion, schreiben Unit-Tests mit einem Framework wie JUnit und führen diese aus. Sie besprechen fehlgeschlagene Tests und passen den Code an. Abschließend teilen Paare Ergebnisse im Plenum.
Gruppenrotation: Test-Arten erkunden
Richten Sie Stationen für Unit-Tests, Integrationstests, manuelle Tests und automatisierte Tests ein. Gruppen rotieren alle 10 Minuten, testen vorgegebenen Code und protokollieren Beobachtungen. Am Ende diskutieren sie Vor- und Nachteile jeder Methode.
Klassenbewerbung: Bug-Hunt-Challenge
Die Klasse testet eine fehlerhafte Software gemeinsam. Jede Schülerin und jeder Schüler meldet Bugs mit Screenshots und Reproduktionsschritten. Die meisten fundierten Meldungen gewinnen. Schließen Sie mit einer Debriefing-Runde ab.
Individuell: Test-Suite erweitern
Jede Schülerin und jeder Schüler erweitert eine gegebene Test-Suite um Edge-Cases und negativen Tests. Sie commiten in ein Repository und peer-reviewen die Tests der Mitschüler. Feedbackrunde schließt ab.
Bezüge zur Lebenswelt
- Softwareentwickler bei großen Automobilherstellern wie Volkswagen nutzen automatisierte Tests intensiv, um die Zuverlässigkeit von Steuergeräten für Fahrerassistenzsysteme zu gewährleisten, bevor diese in Serienfahrzeuge eingebaut werden.
- Qualitätssicherungsingenieure bei Spieleentwicklungsstudios wie Ubisoft verwenden Integrationstests, um sicherzustellen, dass verschiedene Spielmechaniken wie Charakterbewegung und Physik-Engine reibungslos zusammenarbeiten.
- Webentwickler bei E-Commerce-Plattformen wie Zalando führen kontinuierlich Unit- und Integrationstests durch, um sicherzustellen, dass Funktionen wie der Warenkorb und der Bezahlvorgang auch nach Updates stets fehlerfrei funktionieren.
Ideen zur Lernstandserhebung
Die Schüler erhalten ein kleines Code-Snippet mit einer absichtlichen Fehlfunktion. Sie sollen einen Unit-Test schreiben, der diesen Fehler aufdeckt, und kurz begründen, warum ihr Test erfolgreich wäre.
Stellen Sie die Frage: 'Warum ist es oft effizienter, einen automatisierten Test zu schreiben, der bei jedem Update erneut läuft, anstatt denselben Test manuell durchzuführen?' Sammeln Sie Antworten und diskutieren Sie die Aspekte Zeitersparnis, Konsistenz und Fehleranfälligkeit.
Zeigen Sie zwei Szenarien: A) Ein Benutzer meldet, dass die Schaltfläche zum Speichern nicht funktioniert. B) Ein Benutzer meldet, dass die Schaltfläche zum Speichern nach dem letzten Update manchmal nicht reagiert. Lassen Sie die Schüler entscheiden, ob es sich wahrscheinlich um einen Bug oder ein Feature handelt und begründen Sie kurz.
Häufig gestellte Fragen
Was unterscheidet Unit-Tests von Integrationstests?
Warum ist automatisiertes Testen effizienter als manuelles?
Wie hilft aktives Lernen beim Verständnis von Software-Testing?
Was ist der Unterschied zwischen einem Bug und einem Feature?
Planungsvorlagen für Informatik
Mehr in Software-Projektmanagement
Agile Methoden (Scrum/Kanban)
Die Schülerinnen und Schüler organisieren Teamarbeit in kurzen Entwicklungszyklen mithilfe agiler Methoden.
3 methodologies
Versionsverwaltung mit Git
Die Schülerinnen und Schüler arbeiten gemeinsam am Quellcode und lösen Konflikte mithilfe von Versionsverwaltungssystemen.
3 methodologies
Anforderungsanalyse und User Stories
Die Schülerinnen und Schüler ermitteln die Bedürfnisse von Nutzern und formulieren diese als User Stories.
3 methodologies
Dokumentation und Clean Code
Die Schülerinnen und Schüler schreiben lesbaren und wartbaren Programmcode und erstellen technische Dokumentationen.
3 methodologies
Projektabschluss und Pitch
Die Schülerinnen und Schüler präsentieren die Ergebnisse ihrer Softwareprojekte vor einem Publikum.
3 methodologies