SoftwareDesignSpecification

Software Design Specification

Module Summary

Diagrams

General Architecture

E/R Diagram

Data and Control Flow Diagram

Major Modules and Interfaces

GUI

Interface

References

Controller

Interface

References

CoreDriver

Interface

References

Parser

Interface

References

Conductor

Interface

References

SongInfo

Interface

References

MusicianDirectory

Interface

InstrumentDirectory

Interface

Ensemble

Interface

References

Musician

Interface

References

Instrument

Interface

References

Score

Interface

References

Staff

Interface

References

ScoreSlice

Interface

References

Measure

Interface

References

Note

Interface

References

Sequence Diagrams

Two User Interaction Use Cases

User adding (by dragging) an instrument to the canvas

Internal Metronome triggering

Class Diagram

High Level Consumer Diagram

Data Stores

The InstrumentDirectory is a tree classification of instruments based on their genus. This is designed to allow Musicians to find out what an instrument they have never seen before is most related to. The instruments are simply represented as strings in a tree, and are specified as a list of (instrument, parent) tuples in a flat file.

The MusicianDirectory is a filterable list of Musicians. There is a flat file with lists of (MusicianClassPath, tag1, tag2,...) . When RobotRock loads, we build a reverse index mapping each tag to the Musician class. Then, when the user wants to add a new Musician to the Ensemble, the link to instantiate it is available after selecting it from a list that shares common tags.

We do not have any persistent data stores. The Score is a living document representing sheet music for a song that is composed in real time. Using the Score, it would be possibly to generate sheet music.

Alternative Designs

We envisioned a parser which would respond to different pulse events. It was nixed due to the complexity of maintaining multiple pointers in the score.

We also imagined a model where a very tight loop was controlled by a single class, but we removed this because it tightly coupled together too many classes which were conceptually unrelated.

Assumptions

Coding Style Guidelines

Python Zen is our core coding style guideline.

Risk Assesment

Risk Analysis

Summary

The three major concerns from our requirements document (performance, music quality, and usability) are still present as risks in our design spec. Much of the design has been oriented around preventing and mitigating these risks, such as the development of the Score as a large data structure that will contain all the music that has been written by the musicians, and which will be parsed by the parser and passed onto the audio synthesizer. Two new risks that have emerged during the design phase are Synchronization and Packaging. Synchronization deals with making sure that the musicians and parser behave appropriately in relation to each other, and both keep up with each and the beat of the song. Packaging is a risk primarily because none of the members of our group has experience packaging and releasing applications or installers for applications, so it is important that the team begins thinking about packaging early and is not surprised by any complications at the deadline.

Risk: Performance/Responsiveness

Risk: Music Quality

Risk: Synchronization

Risk: Usability

Risk: Packaging

Project Schedule

Milestones

Zero Feature Release (Due Date: 4/26)

Tasks:

Stubs/Skeleton Complete (Due Date: 5/1)

Tasks:

Features (except Musicians) complete (Due Date: 5/6)

Use cases should be able to work at this point, the first instrument (metronome) will be ready, and general music parameters should be adjustable with proper effects.

Tasks:

Beta Release (Due Date: 5/13)

Tasks:

Final Release (Due Date: 5/29)

Tasks:

Team Structure

Test Plan

Unit Test Strategy:

System Test Strategy:

Usability Test Strategy:

Bug Tracking: The ticketing feature in the project workspace on Assembla will be used to report bugs, assign them to team members, and report the resolution of bugs.

Documentation Plan

The program will come with a set of static html pages and images, viewable by the user's favorite browser or html viewer.

Specifically, these help pages would include:

These help pages will be accessible either by navigating to them on disk, or by selecting to view them via the program's help menu. If the program were to be distributed from a website, then that site would also host a copy of the most recent documentation (viewable online).

In addition, all User Interface elements of sufficient complexity will have tooltips quickly explaining their function.

Finally, if time allows, the program itself will have an interactive getting started function that will be an option when the program is first run. This interactive guide will take the user step by step through the same actions described in the html document. For example, when the time comes for the user to add an instrument, a large arrow will appear on screen and point to the add instrument button, along with a text box asking the user to "Click on the 'Add instrument' button to add a new instrument to the stage"