MINT üben

Projekt: Software im Team

Dreißig Übungen zu Projektphasen, Schnittstellen, Teamarbeit und Testfällen — von AFB I bis AFB III.

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Dreißig Übungen in gemischter Reihenfolge — du klickst, ziehst, ordnest, rechnest und knobelst. Jede Übung gibt dir sofort eine Rückmeldung, und zu jeder Aufgabe gibt es zwei gestufte Tipps: Der erste zeigt die Richtung, der zweite den entscheidenden Schritt. Die Chips zeigen das Anforderungsniveau: AFB I heißt wiedergeben und direkt anwenden, AFB II selbst entscheiden und verknüpfen, AFB III begründen, beurteilen oder eine Falle durchschauen. Aufgaben mit dem Chip Mix verbinden Wissen aus früheren Unterkapiteln, bei Trick steckt eine Falle drin. Fährst du über ein unterstrichenes Arbeitswort, siehst du, was es genau von dir verlangt.

A1
Die Klasse Vorstellung im Kino-Projekt
AFB I

Ein Team entwirft die Ticketbuchung für ein Kino. Im Klassendiagramm steht:

Vorstellung
  • - film: Zeichenkette
  • - saal: Ganzzahl
  • - frei: Ganzzahl
  • c Vorstellung(film: Zeichenkette, saal: Ganzzahl, plaetze: Ganzzahl)
  • + buchen(anzahl: Ganzzahl)
  • + stornieren(anzahl: Ganzzahl)
  • + getFrei(): Ganzzahl
  • + getFilm(): Zeichenkette
  • + istAusverkauft(): Wahrheitswert

Nenne in jeder Zeile das Zeichen, das die beiden Anzahlen aus dem Diagramm richtig vergleicht. Methoden sind hier immer die öffentlichen Methoden ohne den Konstruktor.

Wähle in jeder Zeile, wie die linke Seite zur rechten steht, und prüfe dann alle auf einmal. Mit der Tastatur: ←/→ wählt, ↑/↓ wechselt die Zeile, Enter prüft.
  • Methoden
    Attribute
  • Aufträge
    Anfragen
  • Konstruk­toren
    Klassen
  • Parameter von buchen
    Parameter von getFilm
  • Attribute
    Parameter des Konstruk­tors
Das Diagramm ist der Vertrag des Teams: Attribute stehen im mittleren Feld, der Konstruktor und die Methoden im unteren. Aufträge haben keinen Rückgabetyp hinter der Klammer, Anfragen haben einen. Der Konstruktor zählt nicht zu den Methoden.
Zähle zuerst in der Klassenkarte: Attribute stehen im mittleren Feld, der Konstruktor und die Methoden im unteren.
Aufträge haben keinen Rückgabetyp hinter der Klammer, Anfragen haben einen. Der Konstruktor (c) zählt nicht zu den Methoden.
A2
Die Schulbuch-Tauschbörse planen
AFB III

Für eine Tauschbörse gebrauchter Schulbücher steht im Pflichtenheft:

  1. Ein Angebot hat einen Buchtitel und einen Preis in Euro und gehört zu einer anbietenden Person.
  2. Der Preis eines Angebots kann gesenkt werden.
  3. Man kann abfragen, ob ein Angebot schon reserviert ist.
  4. Anbietende können nach einem Verkauf mit 1 bis 5 Sternen bewertet werden.
  5. Die Börse zeigt alle Angebote bis zu einem Höchstpreis an.

Das Team hat daraus diesen Entwurf gemacht:

Boerse
  • - angebote: Reihung vom Typ Angebot
  • c Boerse()
  • + hinzufuegen(a: Angebot)
  • + guenstigeZeigen(hoechstpreis: Ganzzahl)
enthält1n
Angebot
  • - titel: Zeichenkette
  • - preis: Ganzzahl
  • - reserviert: Wahrheitswert
  • - anbieter: Anbieter
  • c Angebot(titel: Zeichenkette, preis: Ganzzahl, anbieter: Anbieter)
  • + getTitel(): Zeichenkette
  • + getPreis(): Ganzzahl
  • + preisSenken(betrag: Ganzzahl)
  • + reservieren()
  • + istReserviert(): Wahrheitswert
  • + getAnbieter(): Anbieter
gehört zun1
Anbieter
  • - name: Zeichenkette
  • - klasse: Zeichenkette
  • c Anbieter(name: Zeichenkette, klasse: Zeichenkette)
  • + getName(): Zeichenkette

Vereinbart ist: Für jede Anfrage (Methode mit Rückgabetyp) der Klasse Angebot werden 2 Testfälle festgelegt, für jeden Auftrag (ohne Rückgabetyp) 3. Plane damit die Tests und prüfe den Entwurf auf Vollständigkeit.

Rechne die Kette Schritt für Schritt: Erst wenn ein Schritt stimmt, wird der nächste freigeschaltet. Enter prüft.
  1. Wie viele Klassen enthält der Entwurf? Klassen
  2. Wie viele öffentliche Methoden (ohne Konstruktor) umfasst die Schnittstelle der Klasse Angebot? Methoden
  3. Wie viele Testfälle werden für die Klasse Angebot festgelegt? Testfälle
  4. Wie viele der fünf Anforderungen lassen sich mit diesem Entwurf noch nicht umsetzen? Anforderungen
Der Entwurf hat drei Klassen. Angebot hat sechs öffentliche Methoden: vier Anfragen (getTitel, getPreis, istReserviert, getAnbieter) und zwei Aufträge (preisSenken, reservieren) — also 4 · 2 + 2 · 3 = 14 Testfälle. Der Konstruktor zählt nicht mit, private Attribute auch nicht. Anforderung 4 fehlt komplett: Weder Anbieter noch eine andere Klasse hat ein Attribut oder eine Methode für die Sternebewertung. Genau solche Lücken soll der Abgleich Pflichtenheft ↔ Entwurf aufdecken, bevor programmiert wird.
Ansatz: Gehe die Klassenkarte von Angebot durch und markiere Methoden mit und ohne Rückgabetyp.
Weiter: Anfragen: 4, Aufträge: 2. Suche dann zu jeder Anforderung die Methode, die sie umsetzt — wo findest du nichts?
A3
Testfälle für die Freibadkasse
AFB II

Laut Pflichtenheft kostet der Eintritt im Freibad: unter 6 Jahren 0 €, von 6 bis 17 Jahren 3 €, von 18 bis 64 Jahren 6 €, ab 65 Jahren 4 €. Ein Teammitglied hat die Methode mit einer Mehrfachverzweigung implementiert:

public class Freibadkasse {
    public int preis(int alter) {
        if (alter <= 6) {
            return 0;
        } else if (alter < 18) {
            return 3;
        } else if (alter > 65) {
            return 4;
        }
        return 6;
    }
}

Vor der Implementierung hat das Team diese Testfälle festgelegt (Eingabe → erwartetes Ergebnis):

k.preis(5)   // erwartet 0
k.preis(6)   // erwartet 3
k.preis(17)  // erwartet 3
k.preis(18)  // erwartet 6
k.preis(64)  // erwartet 6
k.preis(65)  // erwartet 4
k.preis(70)  // erwartet 4

Überprüfe die Methode mit den sieben Testfällen: Wie viele davon schlagen fehl?

Rechne selbst und trage das Ergebnis ein — Enter prüft direkt.
Die Methode liefert: 5 → 0 ✓, 6 → 0 ✗ (erwartet 3), 17 → 3 ✓, 18 → 6 ✓, 64 → 6 ✓, 65 → 6 ✗ (erwartet 4), 70 → 4 ✓. Zwei Tests schlagen fehl — beide genau an einer Grenze: alter <= 6 müsste alter < 6 heißen und alter > 65 müsste alter >= 65 heißen. Genau deshalb legt man Testfälle direkt an die Grenzwerte aus dem Pflichtenheft. Wer nur 5, 10, 30 und 70 testet, findet keinen der beiden Fehler.
Ansatz: Rechne jeden Testfall mit der Methode durch und vergleiche mit dem erwarteten Wert.
Weiter: Achte auf die Vergleichsoperatoren: Welcher Zweig wird bei genau 6 bzw. genau 65 genommen?