Kapitel 14

Alle Codedateien dieses Kapitels herunterladen

14_4_1_TestDrivenTestDriver.cpp

Datei herunterladen

/*
 * Lösung für Übung 14.4.1 - Test-Driven Test Driver
 *
 * Bevor Sie die Methode startRide() so wie unten angegeben
 * implementiert haben, sollten Sie zuerst diese Variante benutzt haben:
 *  bool startRide(int gForces)
 *  {
 *   return true;
 *  }
 * um zu sehen, dass der Test diesen Programmierfehler auch findet.
 */
#include <iostream>

class TestDriver
{
public:
  TestDriver(int sensitivity)
    : sensitivity(sensitivity)
  {
  }
  bool startRide(int gForces)
  {
    // return true; // <- Testen Sie Ihren Test zuerst mit diesem Dummyresultat!
    sickness += sensitivity * gForces;
    if (sickness > 100)
    {
      std::cout << "... w\201rg" << std::endl;
      return false;
    }
    std::cout << "Testfahrt begonnen" << std::endl;
    return true;
  }
private:
  int sickness = 0;
  int sensitivity = 0;
};

void unitTests()
{
  TestDriver driver0(0);
  TestDriver driver5(5);
  TestDriver driver100(100);

  // Der unzerstörbare Testfahrer - ihm wird niemals schlecht
  for (int i = 0; i < 100; i++)
  {
    bool rideStarted = driver0.startRide(i);
    if (!rideStarted)
    {
      throw std::exception("Fahrt nicht gestartet");
    }
  }

  // Ein etwas empfindlicher Tester
  for (int i = 0; i < 5; i++)
  {
    bool rideStarted = driver5.startRide(4);
    if (!rideStarted)
    {
      throw std::exception("Fahrt nicht gestartet");
    }
  }
  for (int i = 0; i < 2; i++)
  {
    bool rideStarted = driver5.startRide(1);
    if (rideStarted)
    {
      throw std::exception("Fahrt unerlaubterweise gestartet");
    }
  }

  // Dieser Tester sollte vielleicht einen anderen Beruf wählen
  bool rideStarted = driver100.startRide(0);
  if (!rideStarted)
  {
    throw std::exception("Fahrt nicht gestartet");
  }
  rideStarted = driver100.startRide(2);
  if (rideStarted)
  {
    throw std::exception("Fahrt unerlaubterweise gestartet");
  }
}

int main()
{
  unitTests();
  return 0;
}

14_4_2_UserStories.cpp

Datei herunterladen

/*
 * Lösung für Übung 14.4.2 -	Verzähl mir nix von User Stories!
 *
 * Diese Lösung hat keinen Code. Stattdessen hier ein paar Beispiele für
 * User Stories, die für eine Lagerverwaltung eines Supermarktes aufgestellt werden könnten.
 * Natürlich sind noch viele mehr denkbar. Die Hauptsache ist, dass Sie grob nach dem selben
 * Format vorgegangen sind.
 *
 * 1. Als Lagermitarbeiter möchte ich Waren in den Bestand aufnehmen können, um neue Lieferungen erfassen zu können
 * 2. Als Lagermitarbeiter möchte ich Waren aus dem Bestand austragen können, um verkaufte Einheiten korrekt zu entfernen.
 * 3. Als leitender Angestellter möchte ich eine Übersicht über den aktuellen Bestand abfragen, um mir einen Überblick zu verschaffen.
 * 4. Als leitender Angestellter möchte ich neue Artikel mit ihren Stammdaten einpflegen können, um neue Produkte zu übernehmen.
 * 5. Als leitender Angestellter möchte ich Fehleingaben meiner Mitarbeiter korrigieren können, um Fehler beheben zu können.
 * 6. Als Betriebsprüfer oder Chef möchte ich ein Protokoll aller Warenbewegungen sowie Fehlerkorrekturen einsehen können, um Betrug zu erkennen.
 */
int main()
{
  return 0;
}

14_4_3_Spaziergang.cpp

Datei herunterladen

/*
 * Lösung für Übung 14.4.3 - Spaziergang
 */
#include <iostream>
#include <string>

class Programmer
{
public:
  void walk(const std::string& where)
  {
    std::cout << "Ich laufe im " << where << std::endl;
  }
};

int main()
{
  Programmer hackerman;
  // ... ernsthaft??
  hackerman.walk("Park");
  return 0;
}