Web site (Jan 20) The web
site is to be the repository of all course materials. While you may
use it to keep track of early drafts of documents, it is only
necessary to keep the latest, most current version. This is a public
website and you need to be considerate of such use. If there are
confidentiality issues with a client or subjects, they need to be
honored on this site. The contents and appearance of the web site
reflect on your team, on the class, and on the university. Do not
post anything that you do not want the world to see. This is also the
place that you can share design, code, and techniques with other
teams. This is a living document and needs to be kept up to date.
Feel free to put anything out on the web site that helps the team.
Specific elements required on the web site are:
- project description. This is a high level
description that introduces the casual observer to the project. For some projects, this will becoe a brochure that you
would use to "sell" your product
- contact information,
including one button email to the development team
- contract
- project plan. Once agreed to, all
changes to the project plan need to be recorded on the website. This
can be done with a simple log of changes.
- schedule for all key meetings and
deliverables (may be part of project plan)
- use cases
- requirements
- architecture
- design document
- all user manuals
- test plan
- journal of meetings and decisions.
This is the place to capture decisions that have been made and
discussions that have been had. Capturing the information will help
assure consistent understandings and (hopefully) reduce the number
of times the same point will be rediscussed.
-
related links. Related links are those that
point to similar projects that you can learn from, domain-specific
content that will frequently be referenced, and pointers to the
technology that is being used.
|
Contract (signed by Feb 20) The contract is the agreement among the team, the client,
and the professor as to what will be delivered when. Missed
commitments from the contract cost you reputation and potentially
grade. We ask the client to actually sign the document to be sure
that he or she really reads it. Contents of the contract
include
- General description. Covers the
context (e.g., dealing with aparticular population or teaching a
particular subject) and the purpose of the project (e.g., is this a
game for pure entertainment or does it have an educational purpose).
- Participants. Who is on the team, who
is the client, and who are consultants that you will be using.
- Requirements. Correctness of a project
is defined as meeting requirements. Remember to include inverse
requirements (i.e., things that are not to be done). Primary
requirements ar mandatory; secondary requirements are recommended as
they will help you with your design; tertiary requirements are at
your discretion.
- Constraints. COnstraints are a
specific form of requirement that puts limits on your potential
solutions. Examples of common constraints are the platform that the
system must run on (especially if its an old one!), resources that
can be used (e.g., memory), or performance constraints.
- Deliverables. The artifacts that the
client is expecting: code, what types of manuals, what kind of
software package (e.g., downloadable or installer wizard). Does not
usually include dates.
- Resources required.
This should include hardwre, software, and people's time.
- Obligations.
Identify the explicit obligations of the team and the client. This
can include time, getting resources, or deliverables.
- Risks. If you have
some dependencies or concerns that may cause the project to not
succeed, identify them here. Potential risks are fundamental designs
that may not be practical (e.g., the player can't distinguish the
sounds as expected), delivery of or access to equipment (either
hardware or software), or any specific activities that you don't
know how to estimate.
- Milestones.
Basically the deliverables and additional checkpoints with dates
associated with them.
|
Project plan (Feb 10) The project plan captures your work plan. Most teams
use Gantt charts, but that is not a required format. You should limit
your time spans to no more than 3 weeks. That is really the most slip
that you can recover from in one semester. If you don't feel that you
can recover from a 3-week loss, you should have a smaller timeframe.
At the end of each identified activity, you should have a
"deliverable" that allows you to say unquestionably whether
or not you have met that goal. All class deliverables should be
identified on the project plan. Associated with the project plan
needs to be an indication of who is doing the activity. Once the
project plan has been agreed to between the team and the profesor,
all changes to it need to be tracked.
|
User descriptions and use cases (team scheduled) There are two forms of use cases that
are often used: a graphical form that shows how the different use
cases relate to each other and a textual form that talks about the
details of each use case. The detailed use case needs to include
error cases. Identifying the error and unusual cases is one of the
most valuable parts of use cases, as designers and developers often
miss a number of these points. For your projects, the textual form is
required. If the graphical form helps you put the pieces together,
that is fine. Associated with each case eeds to be a description of
the user. This needs to be in enough detail to allow you to reason
about the task. For example, the one time user and the repeat user
should be treated separately in order to confirm that your
application desoign addresses the needs of both types of users. Use
cases should address all types of end users as well as
administrators. Pay special attention to first time uses as they
often have a different set of tasks that are being performed.
|
Requirements (team scheduled) The requirements document will be primarily gathered
from the contract and the use cases. Remembering that the
requirements define the correctness of a program, you can expect me
to go through the requirements at the end of the course and see if
you have met them. One of the key values of the requirements document
is the collecting and collapsing of information from the use cases
into common requirements that are translated into programming terms
rather than domain and user terms. For example, if there are two
different file structures that are needed, one of the requirements
might be the consistency of the two structures. Or as you work
through the different use cases of a game, you will find related
behaviors; identifying how those behaviors need to be consistent
might be another requirement. If your application is not permitted to
do something -- such as overwrite a file or share certain components
-- you should identfy these as constraints or inverse requirements.
|
Architecture (midterm presentation) The architecture describes the highest level external
view of the software system. It is fine to use one of the software
architecture models presented in class or to define your own. An
architecture description will typically have between 3 and 7
components. This should be the highest level of decomposition that
you use to reason about the system. When you are discussing the
implications of a design change or how to divide up work, you should
be able to easily map that back to the architecture. The architecture can be documented as a picture with a paragraph explaining the model. While the architecture may be modeled after one of the standard ones, your architecture should translate into the application terms (e.g., a repository should be labeled by the data that it captures).
|
Design document (team scheduled) The purpose of the design document is to be the guide
for someone who needs to understand the code to maintain it, extend
it, or re-use parts of it. While "all of the information"
is in the code, the concepts that underlie it are lost in the
details. Consider this document a tutorial for your code. While it is
true that the reader of the document will be familiar with basic
programming and object-oriented concepts, that is all that you can
assume. Do not assume a knowledge of the domain of the application.
(How good was your understanding when you started the project?) When
I ask your classmates to critique this document, I will give them a
specific task that they want to accomplish and the question that they
will be answering is whether this documentation will allow them to do
this in a reasonable time. In the first two sections, you are more apt to find that graphical representtion helps in the understanding, but in the later sections, you will probably find that text will work fine. Specific elements to be included in the
design document are:
- Architecture. As described above, this
is the starting point for someone about to learn the system. If you
are using a standard model, be sure to state so explicitly.
- Decomposition. The next three sections
give different views of the model defined in the architecture. The
terminiology used here is not object-oriented because not all class
projects are OO. If your project is OO, feel free to use the OO
terminology. This is the next level of decomposition from the
architecture. It should flow from the architecture and relate the
components, but not define any of the components completely. That's
what the next two sections do!
- Modules. Describe the primary modules
that you are using and the relationships among them. Whenever you
are defining relationships among components, you may find a picture
a useful addition to the write-up. The details of the modules are
described later. The purpose of this section is to relate them to
each other.
- Processes (if relevant). If your
application uses concurrent processes or multiple threads, explain
why they exist and what they are doing. For example, a system with
multiple inputs may have different processes monitoring those
inputs. Also cover when they are created and destroyed.
- Data (if relevant). Describe all the key data
components of the system. Specifically, this is the persistent data
-- files that you use or create and databases. The detailed
specifications come later; the purpose of this section is again to
give a high-level view of what the files are, how they are used,
and how they relate to each other. If there are multiple tables in a single database, this should be explicitly covered. If there is no external data associated with your application, this section is not needed.
- Detailed module definitions. For each module, you now will describe its specifics, including the interfaces, details of
decomposition, and key algorithms. If this is a class, you will define its attributes and their types as well as all of the associated methods. You need to describe what functions the methods are doing and a natural language explanation of the attributes. In addition, if there identifiable invariants, pre- or post-conditions of the methods, they should be documented here. In addition this is the place to define any of the key algorithms that you use. If you are using a standard routine or data structure (e.g., a binary tree), you do not need to do more than state that fact.
- Detailed data definitions (if relevant). For
any file or database, a complete definition of the format needs to
be included. The definition should include both the format and use
of each field within the application. If there are constraints on
fields, they should be included. The relationship of individual
fields are also defined here. If there is no external data associated
with your application, this section is not needed.
- Design decisions. This is the place to document any decisions that you made that effected the overall design of the system. Any dependencies that the application has should be explicitly stated here and the reason for that dependency explained. Decisions about things that you chose not to do are as important as those that you chose to do.
In addition, consider this the repository of any
other information that will be helpful to the next developer.
Consider this the one document that survives for the developer and if
you have easily included versions of your use cases, requirements, and any flow diagrams that helped
you develop the work, include them. If they can not easily be
included, you will not be penalized.
|
User manual (team scheduled) The user manual is a document that is intended for the users of the system. If there are different types of users, there minimally must be different sections for them. The manual needs to be written at an appropriate level for the intended audience. If the user is a reluctant computer user, the manual should be very specific and avoid jargon. This is not necessary for someone who is more comfortable with computers. The skill level of the user should be defined in your user descriptions. For applications intended for very young users, think of the user manual as the document that the teacher will need to interpret. The closer that you can get to the teacher being able to simply read the manual to them, the more on target the writing is. Remember that users are not very tolerant of long-winded documents. Get the essential information written up front. If there is more detail needed for special cases, put it in a separate section. Of course the goal is that no one ever has to read a user manual, but you should not assume that it is that intuitively obvious! For most school-related projects, there will be two users: the student and the teacher. Do not assume that the teacher is the administrator. While in some cases this may be true, you need to separate the roles.
|
Administrator manual (team scheduled) The administrator manual is intended for the person
setting up the system. This needs to include all software and
hardware dependencies, download instructions, and any hardware set-up
instructions.This is the place to document what systems have been
tested, what the expected compatabilities are and any known incompatabilities. If the administrator needs to set up ids and passwords before the system is fully deployed, this needs to be covered inthis manual. The administrator manual should include a complete set of easy-to-follow instructions of how to deploy the system in a new environment or how to redeploy the system if it needs to be restarted or refreshed. You again need to be cognizant of the skill level of the administrator. You can assume that it is an adult, but given the intended audience, you must determine the appropriate level of skills that you can assume. This should be defined in your user descriptions.
|
Test plan (team scheduled) The test plan is your guide to testing. There are several parts of testing that you should cover. Specifically, you need to have plans for
- unit testing
- system testing
- user testing
For each of these items, the plan needs to cover
- Any test automation or tools that you will be
using. This can include off-the shelf components or writing scripts.
There are a lot of unit test tools available. Are you going to be
using them?
- Any individuals that you will need to test
the system. Typically, these are user tests that follow some level
of developer testing. It is important that your test plans be well
though out when you need to bring in outside peple.
- The test cases that you will run. In
particular, consider any test environments that require testing of
different timings. How will you test them? When you use users for
testing, you should give them specific tasks to try to accomplish.
Letting them try the system in an unstructured manner is also
important as users will find ways to use the system tht you never
thought of.
|
| Code (team scheduled) Aside from functioning properly, the code is expected to be consistently written and well documented in a uniform manner. Assure that your team is following consistent standards. The only way that I should be able to tell who wrote a module is by the fact that the person's name is included in the comments. |