CS190 Assignments
David Laidlaw
Brown University
Spring 2000
Assignments for each class. Handins are due, unless otherwise
specified, by 9am the day of class to allow for review before class.
Handins due on MM-DD go in the directory
/pro/web/web/courses/cs190/asgns/MM-DD-YY/LOGIN.txt -- replace LOGIN
with your CS login id. For classes with multiple handins, add a digit
after your login (e.g., dhl1.txt, dhl2.txt, ...).
Fri 1/28
Hand in:
personal background
Read the Syllabus and Project Handout. We'll go over requirements on
Friday, so pay attention to that section. Note any questions for
class.
Hand in: a list of 3-5 project titles
that you are considering. For
each title, list the potential project user(s) that you would interact
with in developing and testing the project. For each idea, evaluate
it according to the criteria in the project handout
and indicate pros and cons of the project ideas. Any troubles with
topics, come talk to a TA or to me and we'll brainstorm.
Read "The Phases of Software Engineering" through the "Requirements"
section in Reiss, pp. 404-406 and table on 407.
Read 425-427 in Reiss.
Peruse: example requirements documents. These
examples are not perfect, they are intended to give you a feel for
what was proposed last year. The first two, alpha and bravo, were the
main contenders for implementation last year, with bravo winning out.
Mon 1/31
Read
Read Preface to the 20th Anniversary Edition, chapter 1, and chapter 2
of The Mythical Man Month.
Read chapter 0 of Lakos.
Read table of contents and introduction to Writing Solid Code.
Read table of contents and introduction to Debugging the Development
Process.
Read beginning of "Software Engineering" in Reiss, pp 397-404.
Read "The Software Development Process in Reiss, pp 416-422.
Hand In
A list of discussion points, questions, or topics for class based on
the reading. What are some of the themes that appear across more than
one source? What do you agree with? What do you disagree with? What
seems intuitive and what seems counterintuitive? What surprised you?
Future work
Work on Requirements document. Check out everyone's
project titles handins for ideas,
if you wish.
Wed 2/2
Read
Continue reading with "The Phases of Software Engineering" through the
"Specifications" section in Reiss, pp. 406-412.
Peruse example specifications
docs online. Again, these are examples of the two main
contenders in CS190 last year. Also included are specifications for a
calendar manager from
the year before.
Hand In
Requirements document in text (.txt), pdf (.pdf), or postscript (.ps).
Refer to project handout.
Fri 2/4
Prepare to present in class:
Group 1: Brian Chuck, Di Wang,
Joseph Fuqua, Melissa Cheng, Rikard Grafstroem, George Quievryn
Hand In:
Read Requirements Document for the three authors following you in the
class list . (At the end of the
list, cycle back to the beginning.) If not all three documents are
present, continue down the list until you
find three. Fill out and hand in the
review form using the format
AUTHOR_by_REVIEWER.txt for the filename. Replace AUTHOR and REVIEWER
with the appropriate logins.
Update your reviews after the class presentation and hand in revised
version by the class following the presentation.
Future Work:
Work on specifications.
Mon 2/7
Prepare to present in class:
Group 2: Bretton Heath-Wlaz,
Emily Leventhal, Josh Tasman, Michelle Neuringer, Freddie O'Connell,
David Yun
Read
"Design" section of Reiss, 412-414, "Design" section, pp 427-429, skim
pp. 429-441.
Chapter 5 of Writing Solid Code.
Summary for Chapter 1 of Lakos, pp 61-62. Refer back to the
chapter if these concepts are not clear.
Hand In:
Revised comments for Group 1 presentations.
Wed 2/9
Prepare to present in class:
Group 3: Christopher Filippis,
Greg Getchell, Lisa Cozzens, Mark Zeldis, Toan Pham, Neelu Bedi
Hand In:
Revised comments for Group 2 presentations.
Read
Chapter 3 of Lakos. If you understand the statements in the summary,
then you have gotten the essential information out of the chapter.
Chapter 13 of Mythical Man Month.
Fri 2/11
Hand In:
Revised comments for Group 3 presentations.
Hand in:
Specifications Document. Should include: 1)
description of the project (from requirements); 2) system model
diagram; 3) annotations describing each component of the system model;
4) user interface diagrams and descriptions; 5) written description of
the above; 6) non-functional requirements (performance, testing,
reliability, ease of use, portability, documentation, dependencies on
other systems); 7) updated requirements (with priorities, etc.); 8)
any risky parts.
Mon 2/14
Spec presentations should cover the following information. Begin with
a very brief (< 30 second) reminder of the project. Then spend 2-3
minutes on the block diagram of the system describing the different
parts and how they fit together. Finally, in 1-2 minutes go through a
few non-obvious representative examples of functionality and how the
parts of the program will implement them.
Prepare to present in class:
Group A: Brian Chuck, Di Wang,
Joseph Fuqua, Melissa Cheng, Rikard Grafstroem, George Quievryn,
Bretton Heath-Wlaz
Hand In:
Read Specifications Documents for the three authors following you in the
class list . (At the end of the
list, cycle back to the beginning.) If not all three documents are
present, continue down the list until you
find three. Fill out and hand in the
review form using the format
AUTHOR_by_REVIEWER.txt for the filename. Replace AUTHOR and REVIEWER
with the appropriate logins.
Update your reviews after each class presentation and hand in revised
version by the class following the presentation.
Read
Chapter 5 of Lakos. If you understand the statements in the summary,
then you have gotten the essential information out of the chapter.
This chapter is very important from a design perspective, so
make sure that you really understand the summary!
Wed 2/16
Prepare to present in class:
Group B: Emily Leventhal, Josh
Tasman, Michelle Neuringer, Freddie O'Connell, David Yun, Christopher
Filippis, Greg Getchell
Read
Chapters 2-6 of Mythical Man Month. Think about how this applies to
the your group organization and top-level design.
Hand In:
Revised comments for Group A presentations.
Group A presenters hand in specification
self-assessment.
Fri 2/18
Prepare to present in class:
Group C: Lisa Cozzens, Toan Pham, Neelu Bedi
Hand In:
Revised comments for Group B presentations.
Group B presenters hand in specification
self-assessment.
Read
Bring to Class:
Fill in project evaluation form for class
projects. Enter scores for the 3 projects that you have reviewed, for
your own project, and for any others that you would are interested in.
Refer to specs documents to help with your decision. Be prepared to
discuss all projects and to choose 2-3 that we will continue with for
top-level designs. Each person in class will do a design for one of
those projects.
Read
Hand In after class (but before midnight):
Revised comments for Group C presentations.
Group C presenters hand in specification
self-assessment.
Mon 2/21 No class!
Wed 2/23
Note: due date for top-level designs moved to Friday!
Hand In:
200-400 word essay related to the Mythical Man Month reading (chapters
2-6 most recently, but feel free to tie back to earlier reading).
Share a relevant example from your own experience, compare this
reading with some other reading you've done, explain why you disagree
with some point, etc.
Work
on top-level designs and prepare for presentations.
Fri 2/25
Hand in:
Top-level Design Document. Should include: 1)
levelized high-level component diagram(s) and description of
components; 2) external dependencies; 3) task breakdown; 4) group
organization; 5) schedule (use the
class page to help assign roles from your group); 6) assumptions
you made about specifications that were not clear from the
specifications doc. All three types of testing we discussed in class
should be represented in the task breakdown and schedule.
Prepare to present in class:
Group Able: Christopher
Filippis, Greg Getchell, Lisa Cozzens, Toan Pham, Joseph Fuqua.
Presentations should be about a significant and unobvious part of your
design. Pick something that you struggled with and that illustrates a
lesson you learned this semester. For example, explain how you
applied ideas from Lakos to remove a cycle, to increase breadth, or to
reduce depth of the component graph. Or describe a significant
difference in the design component graph from the specifications
component graph and why it makes the design better. Or explain how
you struggled with the schedule but were able to put something
together that keeps everyone busy for the entire development time.
Re-read carefully the examples from Lakos chapter 5 for ideas.
Mon 2/28
Prepare to present in class:
Group Baker: Bretton Heath-Wlaz,
Emily Leventhal, Josh Tasman, Michelle Neuringer, Freddie O'Connell,
David Yun. See guidelines for the presentation from Friday.
Read
Debugging the Development Process, Chapters 1-4.
Wed 3/1
Prepare to present in class:
Group Charlie: Brian Chuck, Di
Wang, Neelu Bedi, Melissa Cheng, Rikard Grafstroem, George Quievryn.
See guidelines for the presentation from Friday.
Read
Debugging the Development Process, Chapters 5-8.
Hand in:
A list of three lessons from DDP that you think
will have the most impact on your CS190 project. Explain how and why.
Fri 3/3
Review:
All the top-level designs for your project. Pay particular attention
to the group organization possibilities and come prepared with a list
of at least 3 specific roles for which you feel you would be a good
candidate.
Read:
The essays from 2/23, with attention to lessons relevant to roles in
your group.
Mon 3/6
Wed 3/8
Review:
your DDP lessons. We'll talk about them in class. Think of relevant
things that may have already come up in your groups.
Consider:
doing some of the reading for 3/15, since that's going to be a busy
day.
Fri 3/10
Hand in:
Final Design Document. This is probably the most
critical handin of the term so far. Please carefully check that the
document carefully and completely addresses all of the following
requirements. Link the handin from the asgns directory to your
project page.
1) Revised specifications including updated requirements. These
should now be cast in concrete. Any questions that you have been
having about functionality must be answered in the revised
requirements. Priorities must be finalized and of sufficient
resolution to be used for later decision making about functionality
changes.
2) Levelized high-level component diagram(s) and description of
components. Assign level numbers to each module. The descriptions
should include a list of the calls that each module will provide.
Think of this as a pseudo-interface that lists the functionality in
the form of calls.
3) Testing strategy. All three types of testing we discussed in class
should be represented.
4) External dependencies.
5) Task breakdown and schedule. Tasks should be small enough to be
monitored effectively. Milestones for each piece of the project
should be listed at least weekly, possibly more often, particularly
for critical path pieces. The task breakdown should include not only
design and coding, but also testing, documentation, and integration.
The schedule will be presented most Fridays in class by the group
leader to show the progress that's being made on the project. Try to
keep the schedule on one page to facilitate this and create it in a
form that can be modified as the term progresses. Things always
change!
6) Group organization and roles. Include any cultural mechanisms your
group will use to keep morale up and achieve the group project goals.
Mon 3/13
Review:
Chapter 5 of Writing Solid Code. How will you incorporate this into
interfaces you design?
Read:
Summary of Chapter 8 of Lakos. Read back for any details that you
find interesting.
Chapter 6 of Lakos. This chapter talks about how to reduce physical
dependencies through changes in interfaces. Read the chapter summary
first, then section 6.6, then start at the beginning of the chapter.
Wed 3/15
Read:
Writing Solid Code, Chapters 1-4. Incorporate ideas
from this reading into the component testing strategy and into your
feedback on interfaces
Hand in:
Interface Proposals. These
should include an interface for each component in your final design.
(It's possible that some parts may have more than one component:
justify these.) Each interface should be a single .h file, with
comments. For level 0 components, the interface file should compile.
As far as possible, higher-level interface files should also compile,
but for this first pass, it isn't required, since dependencies still
need to be ironed out. Remember that the goal of this pass is to
create the minimal interface that provides the functionality that
other components need.
Each interface should also include a component-level testing
strategy and a schedule of implementation and testing deadlines
that fit in with the overall project schedule.
Fri 3/17
Read:
Writing Solid Code, Chapters 6-7. Keep in mind while
evaluating testing strategies and for creating designs that will be
reliable and testable.
Mon 3/20
Read:
Writing Solid Code, Chapter 8. How can this culture
get into your project?
Hand in:
Interface Comments. Each
component needs to be reviewed from the perspective of every other
component dependent on it. For each such pair, hand in a file with a
name of the form <component1>_by_<component2>.txt,
e.g. database_by_gui.txt. Also link all of these files to the project
page. There should be one file for each arrow in the final design
block diagram.
Interface feedback should also include feedback on the implementation
schedule. Will the parts each component needs be implemented and
tested by the time the component needs them?
Interface feedback should also be provided by the architect, testing
person, and any other appropriate team members. Copy in, link, and
label those files similarly (e.g., database_by_testing.txt).
Evaluating these interfaces is likely to make apparent that some
arrows were missing from
the final design and that some functions were missing from the
interfaces.
Wed 3/22
Nothing!
Fri 3/24
Hand in:
Final Interfaces. All interface files handed in
must compile! The testing strategy and external schedule should also
be appropriately updated.
Hand in an updated design document,
including any changes to the schedule due to new dependencies, etc.
The modified design document should have an introductory paragraph
describing any changes.
Mon 3/27 (break)
Wed 3/29 (break)
Fri 3/31 (break)
Mon 4/3
Note:
Testing assignment due Friday
Wed 4/5
Hand in:
detailed designs
Fri 4/7
Hand in:
Testing assignment
Prepare to present in class:
BEAR group. Each person in
the group should present the most interesting part of the detailed
design they were involved with. The group needs to manage the class
time effectively. Use printed transparencies for .h files and for
diagrams to save presentation time!
Group Status:
both groups should hand in a written group
status report this week in place of presenting it in class.
Mon 4/10
Prepare to present in class:
HelloUML group. Each person in
the group should present the most interesting part of the detailed
design they were involved with. The group needs to manage the class
time effectively. Use printed transparencies for .h files and for
diagrams to save presentation time!
Wed 4/12
Keep on with your projects!
Fri 4/14
Nada.
Mon 4/17
Don't forget:
Debugging
assignment due Wednesday!
Wed 4/19
Hand in:
Debugging assignment
Read:
MMM chapter "No Silver Bullet" and "No Silver Bullet
Refired"
Fri 4/21
Weekly project reports in class.
Mon 4/24
Prepare for code review:
Each group should bring a full
printout of all the code for their project, a copy of the coding
standards for the project, and transparencies
of the most complicated piece of code in the project
Wed 4/26
Prepare for code review:
Same as last class.
Fri 4/28 (reading period)
Prepare for in-class demos!
Mon 5/1 (reading period)
Hand in:
gprof assignment
Review for class discussion:
"No Silver Bullet" and "No
Silver Bullet Refired". Be prepared to discuss lessons relevant to
these readings in class
Wed 5/3 (reading period)
Prepare for demos in Lubrano!
No class in the morning
Fri 5/5 (reading period)
Group Status:
each group should be prepared to go over
project status and present a detailed plan for the remaining work that
needs to be done before the final demo and how it will get done.
Mon 5/8 (reading period)
Last Class!
Course wrapup, course evaluations, and free food :-)
Hand in:
a Maguire-style post-mortem about your project.
See Debugging the Development Process pp 79-81 for details on doing a
post-mortem.
Fri 5/12 9am (exam time)
In Sun Lab.
Hand in:
printed documentation, including sufficient detail
to continue to run your project after you are all gone and pointers to
all online resources (source, doc, web stuff, build areas, binaries,
data files, etc.); a report on the results from your user testing; a
printout of all code; and the final
specifications/requirements document.
Copyright 2000 David Laidlaw