CSC440 Software Engineering
Fall 2018
Assignment #4

Problem 1, 34 points.

Design, implement, and test the first iteration of your system. To what extent does it meet your done criteria? Revisit the requirements of your system and describe any changes needed, e.g. due to incompleteness, inconsistency, ambiguity, as well as any revisions needed to your diagrams. Prepare for sprint 2 as you did for sprint 1; define done criteria and a test plan for the user stories assigned to sprint 2.

Regarding documentation: If you are using Java, then use Javadoc style comments, generate via your IDE (and include in your submission) documentation pages like those provided in the Java standard library; regardless, the main class should be documented with its purpose, inputs, outputs and assumptions, each data class should be documented with its purpose, attributes and class invariants, and each method should be documented with its purpose and descriptions of its parameters and what it returns (if anything), side-effects (if any), and any assumptions/constraints.

Problem 2.

In this problem, you will work on some aspects of high-level and class-level design of the WarGames system. For this problem, your solutions have to be based on the object diagram fragment provided here.

2a, 33 points In thinking about the high-level design of WarGames, you identified a subsystem that contains abstractions to represent professors, students, and TAs, as well as courses and grades. Produce a class diagram that shows the interface of this subsystem. Make sure that you only show public components (this includes classes (and interfaces if you use Java), fields, and methods). For each method in your classes (and interfaces if you use Java), show the types of all parameters and the return type. Show constructors for all classes. Base your solution on the fragment of the object diagram (note the relationship between the Grade object and the relationship between the Student and Assignment objects) provided at the above link.

2b, 33 points Produce a class-level design diagram for the subsystem from Problem 2a. Clearly mark classes that are not visible outside of this subsystem. Appropriate use of design patterns (see slides #5 starting at slide 11) is a plus (extra credit). In particular, if you use Java-style interfaces for solving Problem 2a, try using either the AbstractFactory or FactoryMethod pattern to avoid making classes that implement these interfaces public. Make sure that you show not only public, but also private (plus protected for Java and friends for C++) members of classes and interfaces.

How to submit
Print your work and give me a hard-copy in class. You do not have to re-submit your solutions for previous assignments.