Course notes taken for CSCB07/CSC207 at UofT (Software Design).

CRC cards and how to properly develop software with a team.

In previous note, we discussed CRC cards, they look like this:

| Class: InputAudioDevice                      |
| Super-classes: AudioDevice                   |
| Sub-classes: Microphone                      |
| Responsibility:                              |
|     - Passes audio signal to computer.       |
| Collaborators:                               |
|     - StreamWriter                           |

Now let’s convert it to an actual class!

An InputAudioDevice might look like the following:

class InputAudioDevice extends AudioDevice {

    private StreamWriter writer;

    void writeAudioStream(byte b) {}


Object Class

All classes within Java extends from Object, and you should always consider override some of the methods:

Always Check Parameters

You should always check parameter validity, and indicate in JavaDoc what exception might be thrown within this method.

Not really necessary within private methods, since you have full control over them.

Software Development Process


In many courses, programs are coded once and thrown away. However, in real life, that is not the case, and development is an agile process.

Common Elements Within Software Development

Validation and Verification

Waterfall Model

It does not work well when

Iterative Development

Don’t finish all features in one go, you code, get feedback, then code again…

Incremental Development

Code only what you need now, code the rest piece by piece.

Agile Methods

Agility is the ability to both create and respond to change in order to profit in a turbulent business environment.

Agile is

Traditional software development timeline:

Requirements -> Build -> Test -> Release

You can only use the software at the end, and bugs are found late.

Agile timeline:

Build/Release -> Build/Release -> Build/Relase -> ....

Good visibility of progress, find bugs early, easy to respond to changes, use the software early.

User Stories

Users usually do not use the same terms as software developers.

User stories help to cleaify requirements and can be used for clarification when communicating with the client.

Can also used to identify different types of users.


As a store associate, I can search for a book by its ISBN, so that I can determine the book's in-stock quantity for the store.
As a bookstore customer, I can search for books by the Author's name, so that I can easily find all book by that author.

Agile Tools

There are a few important tools we use in agile development process:

Scrum Agile Development Process

It is iterative and incremental, and there are a few roles:

Scrum Method

Final Product - The software