Blackbox-Testverfahren
Die folgenden Aufgaben sollen mit der Codebasis von Othello umgesetzt werden, welche wir letzte Woche einem Review unterzogen haben.
Äquivalenzklassenbildung
Für die Klasse Board soll eine neue Methode namens isValidMove(player, row, col) implementiert werden, welche für den jeweiligen Zustand und den übergebenen Spieler prüft, ob dieser an der Koordinate row/col einen Stein setzen kann.
Vor der Umsetzung sollen sinnvolle Testfälle anhand einer Äquivalenzklassenbildung ermittelt werden. Gehe folgendermassen vor:
- Ermittle den Definitionsbereich für Spieler und Koordinaten.
 - Unterteile die Definitionsbereiche in Äquivalenzklassen.
 - Definiere konkrete Testfälle.
 
Implementiere nun die Testfälle und die Methode isValidMove mit Deno Testing. Du kannst dich hierzu vom Code der Methode Board.validMoves bedienen. Hier ist eine Vorlage (board_test.js):
Der Testfall kann folgendermassen ausgeführt werden:
deno testGrenzwertanalyse
Die Methode Board.result gibt das Spielergebnis des aktuellen Spielzustands zurück. Das Feld tied des Rückgabewertes gibt dabei an, ob das Spiel unentschieden geendet hat.
Führe eine Grenzwertanalyse für tied durch. Definiere einen Positivtest sowie Testfälle für die angrenzenden Äquivalenzklasen (Spiel noch nicht zu Ende, Sieg Spieler 1, Sieg Spieler 2).
Implementiere anschliessend die Testfälle mit Deno. Tipp: Verwende die statische Methode Board.of um einen bestimmten Spielzustand zu erzeugen.
Zustandsbasierter Test
Die Methode Board.play wendet einen Spielzug auf das Brett an. Was der Methodenaufruf für eine Aktion zur Folge hat, hängt einerseits von den Eingabeparametern row, col und player und andererseits vom derzeitigen Zustand des Spiels ab.
Definiere zwei zustandsbasierte Testfälle, wobei jeweils Vorbedingung, Ereignis, Sollreaktion und Nachbedingung definiert werden müssen:
- Negativtest: unerlaubter Spielzug
 - Positivtest: erlaubter Spielzug
 
Du brauchst die Testfälle nur zu definieren, aber nicht zu implementieren.
Entscheidungstabellentest
Die Methode Board.result, für welche du bereits eine Grenzwertanalyse vorgenommen hast, soll noch gründlicher getestet werden. Hierzu soll ein Entscheidungstabellentest durchgeführt werden.
Gehe hierzu folgendermassen vor:
- Schreibe die relevanten Bedingungen für das Spielergebnis auf
- notiere sie oben links in der Tabelle
 
 - Erstelle alle möglichen Kombinationen aus diesen Bedingungen
- notiere sie oben rechts in der Tabelle als Wahrheitsmatrix
 
 - Schreibe die möglichen Ergebnisse des Spiels auf
- notiere sie unten links in der Tabelle
 
 - Kombiniere die Wahrheitsmatrix (oben rechts) und die Ergebnisse (unten links) zu Testfällen
- notiere sie unten rechts in der Tabelle als Wirkungsmatrix
 
 
Tipp: Die Unterscheidung, welcher Spieler gewonnen hat, muss nicht gemacht werden. Es gibt nur die Bedingungen: 1) noch nicht fertig, 2) unentschieden, 3) Sieg.
Du brauchst nur die Entscheidungstabelle aufzustellen, aber keine Testfälle detailliert zu definieren oder gar zu implementieren.