Spring 2006»CSCI 221 Homework 2

CSCI 221 Homework 2

Assigned Date: Tuesday, Jan. 31, 2006
Due Date: Tuesday, Feb. 7, 2006
Due Time: 11:55pm

Last modified on February 06, 2006, at 10:02 AM (see updates)

Purpose

This assignment focuses on Unit Testing. You are expected to work in isolation (without access to any resources other than the class textbook, class notes, and the instructor).

Assignment

Below you will find an OO design of Java classes for the game Tic-Tac-Toe.

Implement a test suite for diagnosing bugs in the future system implementation.

In the spirit of test-first development, do not implement the Tic-Tac-Toe game at this time.

  1. First create a stubbed implementation of the given OO design.
    • Again, do NOT implement the complete functionality.
    • Within your classes, provide only method signatures, and empty bodies (for void methods) or dummy return statements (for non-void methods).
  2. Using BlueJ's jUnit functionality, implement your tests as jUnit test classes and methods.
    • Focus on functional cohesion, i.e., a test method should focus only one bit of functionality. The smaller, the better.

Design

Your program stub should be implemented using BlueJ. Create a project called, what else, TicTacToe. In that project create the following classes and stub methods:

  • Rules encapsulates all rules of the game
    • public Rules()
    • public boolean isGameOver(Board board) - checks if the game is over
    • public boolean isWin(Board board) - checks if we have a winner
    • public boolean isDraw(Board board) - checks if we have a draw
    • public boolean isValid(int move, Board board) - checks if the proposed move is valid (it does not make the move)
  • HumanPlayer encapsulates the human player
    • public HumanPlayer()
    • public void makeMove(Board board, Rules rules) - asks the end-user for a move and, if valid, puts it on the board
  • ComputerPlayer encapsulates the computer player
    • public ComputerPlayer()
    • public void makeMove(Board board, Rules rules) - uses artificial intelligence techniques to make a valid move (this functionality will be provided)
  • Board encapsulates the game board
    • public Board() - builds a board of nine squares
    • public Board(int numOfSquares) - builds a board of numOfSquares squares
    • public void clear() initializes the board to empty squares
    • public char getSquare(int position)
    • public void setSquare(int position, char value)
    • public String toString() - returns a printable representation of the board
  • Square
    • public Square()
    • public char getValue()
    • public void setValue(char value)
    • public String toString() -- returns a printable representation of the square
  • TicTacToe the system driver
    • public static void main(String[] args) - declares instances of above classes and uses their methods to implement the game (again, this should be a stub for now)

Documentation

Your test methods should be documented via javadoc. One should look at your javadoc API to determine the extent of your test suite.

Submission

  1. Open your BlueJ project.
  2. Open (edit) each source file and generate the class interface (javadoc). This can be done within the editor window either by pressing CTRL/J , or selecting the Interface drop-down menu item (on the right). (Note: This is necessary to generate your documentation for grading.)
  3. Under the Project menu, click Create Jar File... . In the dialog box that opens, select Include Source, and press Continue.
  4. Verify that the .jar file is correct, by using the 'jar xvf file.jar' command, where file.jar is your archive. Your .jar file should contain:
    • Readme.txt (see Widget for a sample).
    • Any files generated automatically by BlueJ (e.g., bluej.pkg, bluej.pkh, etc.).
    • Rules.java, HumanPlayer.java, ComputerPlayer.java, Board.java, Square.java, TicTacToe.java.
  • A doc subdirectory with the Javadoc API documentation generated by BlueJ, for each of the classes above.
    • Unit test classes for each class above.

In other words, I should be able to unzip your submission and run it without modifications or additions.

  1. Email the generated .jar file to manaris@cs.cofc.edu, by the due date and time.