10.0
Updates:
- none
CSC394 / IS376 Capstone Project
Design notes
Elliott
Overview
- Show the states, transitions, data flow, logic, database design,
distributed systems architecture, protocols, hardware, security models, and etc.
for the core working modules of your system.
- Your documentation manager should consider now how this design will
be formalized in your final project manual. It is a non-trivial task.
- It is assumed that design has been covered in other
classes. This is just a summary/refresher overview.
Content of the design document
- The technical details of how your project is going to work.
- A COMPLETE listing of the modules specified to the "five hour"
level of detail. Everything should be specified except the actual code. Give
the number of hours it will take to complete the task of implementing
the code should be given for each piece of the design.
- A diagramatic representation of the functional relationship between
modules.
- Representation of the flow of the data between the modules.
- For object systems, the objects, the interfaces, and the methods exposed.
- A COMPLETE mapping of files, and database records, stored permanently
on disk.
- (Older style, but often useful) A data dictionary (identification and meaning of all data that moves
through your system).
- A listing of class members or data structures.
- A description of the logic for handling run-time errors that occur.
- A complete listing of the programming languages to be used,
software packages, database systems, GUI development packages, browsers
supported, smartphone software development packages and so on.
- A complete listing of the hardware to be used: computers,
smartphones, networks, specialty devices, and so on.
- A statement about network protocols used, if appropriate.
- A statement, and/or details, about security, and privacy.
- A statement, and/or details, about the handling of multiple users,
transactions, and requests.
- Clarity about design aspects that pertain to specific applications,
such as, e.g., where cookies are stored, or how scripting is used.
- A total number of hours for the project, given as a cumulative sum
of the "five hour" modules, and at each intermediate node.
- The name of the person responsible for writing the code next to each module.
Review of design
Here is an example of a student
Level 0 document. (Citation unknown.) Level 1
documents would expand each of these top-level modules into a full page of
specifications. Level 2 documnents, if needed, would expand the
sub-modules. Each of the leaf-node modules will ultimately be represented as
sections of code, hardware file systems, network transport lines, monitors,
user input, and so on.
Use the web to retrieve information on design techiques if you do not have
notes from previous classes.
The group's design manager is in a position thought by many to be the most
important for any large project. An elegant design will be the engine that
drives smooth functioning in all other parts of the project; a poor design,
in the worst case, can guarantee failure.
The designer must at least do the following, listed here in no particular order:
- Identify the problem being solved.
- If it is a new piece of software being proposed for sale, then identify
the feasibilty of the product.
- Survey existing technology for solutions, or partial solutions, to the
problem.
- Determine why existing solutions will not solve the problem.
- Determine how to extend existing solutions to solve the problem, if
possible.
- Lay out the scope of the project. How many hours, total, will be allowed
in the budget, and how much calendar time?
- Survery all proposed solutions to the problem to decide which is the most
viable, if any ARE viable.
- Call off the project if it is not feasible within the alloted budget.
- Make preliminary platform decisions -- hardware, software, coding languages,
backup methods, code maintenance procedures, etc.
- Build prototypes as necessary to determine the correctness of the
design, and the REAL user needs in practice.
The designer must address the specified problem by designing all facets of
the running programs that comprise the software and hardware
systems.
Answer the following questions:
- What are the major modules required?
- How do the modules relate to one another?
- What is the user interface going to look like? How does one design it
to be tested?
- For each of the major modules, what is the flow of all data?
- What is the form of data stored on disk?
- What are the various states possible in the system? What
transitions are allowed between the states? What are the transition triggers?
- What is in the data dictionary? (Complete listing, and meaning, of all
the data stored in the system.)
- What are the major data structures (objects)?
- Are all the technical issues handled in the design: critical sections,
shared resources, timing issues, security, avoiding duplicate data, etc.?
- If there are security issues, what tradeoffs is the group accepting? What
are the issues?
- For the components of the larger modules, how to they run? What do the
inidividual coding objects do? Is there globablly shared data or memory?
- If there is a network component, how are timeouts handled? How is
remote administration handled?
- What are the protocols used?
- Are databases to be used? If so, what is the normalized form of the database?
- How is the file system handled?
- How are errors reported?
- What are the major algorithms used? Are these well documented?
- How will the system be guaranteed to be scaled up, if this becomes necessary?
- What special issues have to be addressed relative to the particular
paradigm? E.g., for web interaction, how are cookies handled? For wireless
systems, how are special/dual display formats handled?
- etc.