CS 361 Project Documents

Date of last update: Feb. 26, 2008.
Status: Requirements, Project Plan, and Design specs are up-to-date. However, a few additional clarifications may be later added.

The Project:

What actually is the project? It is to design software. To tie the project both with RUP and with XP, we will think of our designs as executable programs. (Pretend that I'm going to scan in your UML drawings and UI screen mock-ups and press "execute", and that it will run just as your design describes.)

So, what you're delivering is "executable" software (as a design prototype in our case). Also the other part always expected when you deliver software: the official requirements. In addition, in this course you have to turn in one more piece of documentation: your project plan. This is to make sure you are actually getting experience planning a sizable project, rather than just hacking away and hoping for the best.


Requirements Document:

By the final version of the requirements, the content has probably changed from your original version. For example, if you are XP, you may have had to go back to your users to change the scope. So, expect change and track it, so that you can stay organized.

Here is what you need to have in your requirements document:

In addition, as you make progress on your design, each fulfilled requirement needs to forward-reference the relevant sections in the Design document, which in turn refer back to the requirement, as a way of showing exactly how each requirement and design element relate. This helps accomplish both traceability and verification, because now you can make sure you didn't skip anything.

Additional notes for RUP:

XP: What is a user story?

It is not a list of features. Instead, these stories are written by users about what users can do and how the system's behavior looks to them. User stories have a sequence of events. They use vocabulary users know. We handed out a couple of examples. Here are three more examples, one invalid and two valid:

XP: What should be done with user stories?

In XP, user stories get translated into development tasks. The tasks are your checklist of requirements. They belong in the requirements document.

In the finger scanning story, you have to figure out how you'll make the story come true in your software design, and that produces a list of tasks. You the technical person are writing these tasks, so you can use any technical details you want here. Obviously, this is no longer a story -- a technical list of things to accomplish is what you produce here.

XP: How many/how long?

As you can see from the examples, they are short. There are somewhere in the neighborhood of one/feature. However, if there are multiple situations possible for a feature that are non-obvious, you may need multiple stories for that feature. You can tell you have enough after you've passed your completeness check (recall that this is part of the Requirements Validation step; it will be part of your Appendix B).

Project Plan:

How are you going to get everything done? The plan needs to be something you are actually using to answer this question. It maps tasks to the calendar (via Gantt charts). It also assigns them to people. There are milestones and deadlines. All of these items need to be explicit in your written plan. Follow the outline given on pp 97-98 of Sommerville. Here is that outline, with some guidelines added:

  1. Introduction: Very short. Describes objectives of the project and sets out contraints (number of personnel, time, etc.) that affect your project management decisions.
  2. Project organization: Describes how your team is organized and the roles of the people on your team. You are allowed to just use your HW #3, if you are happy with it. Probable length: about a page or less.
  3. Risk analysis: As has been stressed in class, this part of your planning should not be a work of fiction. What are your real risks in getting the work done? Do an in-depth risk analysis following the "Waltz" book's specifications. The results of your risk analysis are what belong in this section, in the format of the "Waltz" book's Appendix B's Risk Control Forms (downloadable copy is here, in case it's useful).
  4. Hardware/software resource requirements: What hardware/software does your team (and ALSO next term's team, who will be doing the implementation) need to get the term project done? I would expect only about a paragraph here.
  5. Work breakdown: Take your tasks and associate them with milestones and deliverables. Also make dependencies explicit. The format should be a table like this:
    Task
    Duration (days)
    Deliverables
    Depends on
    Task 1: Meetings with clients and teams to gather user stories
    3
    User stories 
    Milestone 1: We have all the initial user stories
    N/A
    N/AN/A
    ...
    ...
    ......
    Milestone i: We have turned in REQ-1
    N/A
    N/AN/A
    ...
    ...
    ......
    Task k: Detailed design as to how the generic XML parser should behave to accept all XML communications from the various modules
    4
    Specs for working parserTasks 4 and 6 plus Milestone 3
    ...
    ...
    ......
  6. Project schedule. Using the above, place the tasks along a time dimension. The format to use for this is Gantt charts (as in Pfleeger/Atlee Figure 3.6 (p. 93)). To get to this stage, starting out with activity graphs as in Pfleeger/Atlee Figure 3.2 (p. 86) may be helpful to you, but this is optional. The last date on your time line will be the due-date of the final project.
  7. Monitoring mechanisms(data for process improvement): You need to be collecting data about your process, so that you can improve your planning process after each milestone.

Design:

The design is a collection of UML diagrams.

What to include:

The design is the "software" you are delivering, because we are pretending that it will try to execute when I scan it in. So, it needs to include information about the classes, their behavior, and how these things interact with what the user sees and does. Thus, the following components need to be included in your design document:

  1. Architecture: What is the high-level architecture of how it's supposed to work? (You will develop your first attempt at this part in your Design-1ARCH assignment.)
  2. The UI design: (You'll develop your first attempt at this part in your Design-1UI assignment.) Provide sketches of the UI screens and reports, with explicit ties to the classes and methods that update and take information from these UI components.
  3. Class diagrams: There are 3 types of class information needed (is-a, has-a, and other relationships). Everyone's project needs to include class diagrams for every significant class and their relationships.
  4. Behavior of the classes (methods): Specify every significant method's logic/behavior by sequence diagrams. (Optionally, you can also have activity diagrams and/or state charts, but these are in addition to sequence diagrams, not replacements for them.) There needs to be sufficient detail of these behaviors/methods and classes that it is clear how every requirement can indeed be met -- no handwaving.
  5. Other: If there is anything else needed not included above, you should include it. For example, if your design includes dependency on third-party tools, you need to be explicit about exactly how your modules will communicate with those modules. Or, if your design includes a persistent database, then the way that database is structured and exactly how it relates to your software classes needs to be made explicit.

Organizational notes on your design document:

You may either organize it into sections labeled as per the above list, or else may organize it by "functionality" -- that is, first the first set of one or more related UI screens and the classes/methods that support it, then the second set, and so on.

All of the design documents need to refer back to requirements by number, so that it is clear exactly which requirements each design is taking care of. (This mirrors the forward references to the Design document you place in your Requirements document, which needs to refer forward to the pieces of the Design that implement each requirement.)

How many/how much detail?

You need a representation for each state the program can get into. ie, each screen, each type of database update, etc. And, you need to provide methods that get the program into/out of those states. And the classes that store those states. But, you do not need to provide designs of trivial helper methods or of trivial helper classes. For example, low-level methods such as traversing an array, string handling, constructors, methods to get or set a single field of an object, handling locks to protect multi-user access, generating random numbers, probability functions, and so on are not needed.

Note also that, naturally, every requirement needs to be covered by your design.

The ultimate test is whether you could hand this document to next term's team (made up of entirely different people) and they could then implement your design. If your design is not clear enough or complete enough to pass this test, it is not done yet.

Testing and Quality Assurance:

Your design needs to "work". How can you tell if it does? The person leading the QA effort on your team needs to give some serious thought to this. We have already talked about ways to validate the quality of the requirements. Some of the requirements validation steps may be usable for checking your design too. Walk-throughs/traces are also common ways to "test" code (here, diagrams) without using a computer. Also, be sure to check (and make explicit in the document) how thoroughly each of your requirements is covered in the design. (If you are using iRise, you can actually "run" your design, and that will be helpful toward your testing effort.)

When to do your QA work:

For RUP, testing is important and occurs throughout design and implementation, but the details of how to do it are up to you. For XP, there are specific requirements on the types of "testing" that you must do. Don't forget to do unit, integration, and acceptance "testing" of your design. Also don't forget that in XP, unit tests need to be designed before you start your diagram of that unit.