Deliverable 2: Concrete Architecture and Beta Release

Software Architecture and Design (Fall 2003)

Last Modified: October 20th 2003

Submission Details

The following items must be submitted electronically on or before November 7th using the 'submit' command:


Formal Architecture Document

What is an Architecture Document for?

The purpose of document is to provide a concrete description of the components of your system's architecture. In addition, the Implementation Plan gives you an idea of how long the project will take and how to distribute development tasks to each of your team members.

While writing this document keep in mind that the intended audience for this document is management and the development team. Do not make your report longer than necessary; shorter reports that contain appropriate information are preferred. Your report should not be longer than 40 pages, including all diagrams and appendices. Your document should be clear, concise and useful. For example, organize your report so it is easy navigate to information that you may need later, e.g. Process View Diagrams.

Tips:
  1. To verify the clarity of your document, proofread it. -- It's like testing your code before you submit it.
  2. To improve the conciseness and clarity, not to mention quality, revise your document. -- It's like optimizing your code.

What do we mean by 'Formal'?

You are to write a formal document, not a working paper. It is our intent to allow you to develop your formal writing skills and style. The Markers will be primarily focused on the content of your documents, but a substantial amount of marks have been explicitly allocated for things like clarity, presentation, style, etc. This is in addition to the marks allocated for the Abstract, Introduction, References, etc. Also, since this is not a working paper and the intended audience includes management you will be severely penalized for submitting an unprofessional document. As a rule of thumb, unprofessional means that your company could not show your document to a client. Bottom line, do not forget to run spell check, make sure all diagrams appear properly in your submission, etc.

Document Structure and Content

Title Page

Title -- About 3 to 6 words making clear what your report is about.
Author -- Your names, email addresses, student ids, group number, etc.
Date -- The date of the most recent change to the document
Abstract -- About 1/3 to1/2 of a page, single-spaced, presenting a summary of the key points in your report and any important conclusions, targeted at knowledgeable manager

Table of Contents

List of Figures

1.0 Introduction

Describe the purpose of the document and its indented audience. Include any assumptions that you are making about the audience (e.g. Knowledge of Java, Familiarity with IP Telephony, etc.).

1.1 Document Conventions

Describe or define any new terminology or special conventions that you use in the document. For example, any nicknames or abbreviations used to refer to elements of your system must be defined here. Diagrammatic Conventions can either be described in this section or in the header of the section where they are used.

1.2 Overview

The purpose of this section is to outline the structure of your document and briefly describe the content of all major sections. To this end you should provide a 1-2 sentence description of each section of the document. For example,

The following section contains a description of the ___, ___, and ___ components of the system architecture. This includes ___. Section 5 discusses the proposed Implementation Plan in terms of ___, ___ and ___.…There are 2 Appendices. The first contains …


Whether you chose to include references to specific section numbers as part of your overview is a matter of writing style.

2.0 System Architecture (Development And Process Views)

Include a Development View diagram of the entire system. That is, a diagram showing the relationships between the major components of your system. The term component usually refers to a subsystem or a module, but can also refer to a process, a file, or a database.

Provide a description of each component in your system including the component's responsibilities (What it does) and a component-specific Process View diagram with description (How it works).

Important Notes:

  1. You must describe all components of the system, not just those you are implementing for this deliverable.
  2. Depending on your architecture, you may need to defer some design decisions and leave some parts under-designed.
  3. Make sure any uncommon abbreviations or notation you use is described (Students often forget to do this).

3.0 Inter-component Interfaces (formerly called External Interfaces)

Thoroughly describe all Inter-Component Interfaces. That is,


Having a thorough description of the inter-component interfaces will help your group members code in isolation. That is, component developers can write their code against a predetermined set of thoroughly described interfaces. This helps to speed up the development process.

Notes:

  1. You may find it more natural to describe the interfaces exposed by a component as part of the description of that component. Feel free to do so.
  2. Components are the boxes in your Development View Diagram and Inter-Component Interfaces are the lines between the boxes.

4.0 Off-the-shelf Components

Those of you who indent to use off-the-shelf components or frameworks must provide a brief description of these products including a thorough description of why you have decided to use them. A few paragraphs for each product including a link to more information should suffice.

5.0 Architectural Scenarios

To help you debug your architecture and to demonstrate the proposed operation of your system include several well-chosen architectural scenarios.

6.0 Implementation Plan (Code View)

6.1 File Organization

Provide a folder hierarchy diagram, which depicts the organization of your source files. Provide a brief explanation or justification of the structure you have selected.

Explain the build process. For example, for C++, is there a makefile in each directory? For Java, how is package compilation handled?

For each component in your development view list all of the files that implement that component. Do this using a Diagram or a Table. If a file corresponds to more than one component then you must express this information in a useful way. If you prefer, you may instead do this for each process and thread in your Process Views.

6.2 Development Plan

List of all development tasks needed to get the system from its current state to a complete state. For each task include:


The assignment of group members should be based on a critical path analysis using Pert and Gantt charts. Perform this analysis and include the Task Dependency diagram, and the Pert and Gantt charts. Make sure to highlight the critical path on both charts. Incorporate the fact that some tasks need to be completed by one deadline (the Deadline for this deliverable) while other tasks don’t need to be completed until some time later (the deadline for the next deliverable). Ask a TA, or the Professor, if you are not sure how to do this.

7.0 Glossary

Include a glossary that briefly defines all the key terms used in your architecture, giving when appropriate, the "type" of the item being explained. The Glossary differs from the Document Conventions section in that a glossary contains all the technical terms that you use in your document (e.g. TCP/IP, XML, Component, etc.). Meanwhile, Document Conventions contains only the terms that either you invented or that are crucial to the understanding of the document.

8.0 References

List any publications (documents, websites, etc.) that you refer to in your document. You should also list documents that a reader might want to read in conjunction with yours.


Implementation Requirements for Beta Release

For the Beta release of your system you will implement the essential elements of your system. In addition to the requirements specified in the previous deliverable, the beta release of your system must implement the following:

Account Management

Phone Management


All of the operations listed above are to be performed through a Graphical User Interface (GUI).

For more specifications on these requirements refer to your SRS or the original project documentation. If these requirements contradict your SRS consult your TA or the Professor.

Integration Tests

You will implement a set of automated integration tests, which demonstrate the correctness of the code you have written. Integration tests are basically unit tests done at a Component level (i.e. the Unit is a Component). To implement these tests you may use a common unit testing framework such as JUnit or CppUnit. Your integration tests should cover the set of functionality exposed by each component of your system. However, you need only provide tests for the components and functionality that is required in this deliverable or in the previous deliverable.

Update your Unit Testing Working Paper in light of the additional tests.

Installation Guide

Write an installation script. This script can assume that an instance of MySQL is available. The script will login to the database, create any tables that you need and load them with the necessary data. The script may accept arguments but should have default values for all of these arguments.

You will also write scripts to properly start the various components of your system. These scripts may accept arguments (e.g. port numbers), but once the user specifies a value they will not need to specify it again. For example, once a user specifies the port for your database, they will do not need to specify that port when starting the server or the phone processes. Tip: You can do this using system variables or by programmatically modifying your startup scripts.

All scripts should have a '-h' option which outputs help (usage) information.

The startup scripts for your phone process must have an option, '-e', which automatically starts a phone emulator (using the given IP and port). The phone process will then connect to the emulator instead of connecting to a real phone. There are two emulators available. The first was written by a TA the second was written by students. They are both written in Java and have similar functionality. These emulators will allow you to test your system without needing to use an actually IP Phone. Moreover, they can be run on any machine so you do not need to be in the lab to use them (i.e. you can develop at home). The emulators can be found in the following locations:
      /u/cs446/VoIP/public/FakeInterface/*    (written by a TA)
      /u/cs446/VoIP/public/ipphoneclient.zip  (written by students)
Your startup script needs to support one emulator or the other, it does not need to support both.

Update your Installation Guide in light of the changes to your system (including the addition of installation and startup scripts).