CS 121
-
Fall 2010
Lectures: TR 2:45-4:00pm - SPR LSC
Instructor: Alexandre R.J. François (alex@cs.hmc.edu)
Page last modified: 7 January 2011
The objective of this course is to introduce you to the theory and practice of software design and development. You will study the processes involved in software development, from system design, requirements specification and analysis through system architecture specification, code design, implementation, and testing. You will study ways to organize and manage these stages. You will also learn principles of software design.
You will apply these principles and techniques in the design and development of an interactive computer system (possibly a game). The whole class will collaboratively design, prototype and test a common system. The project will follow an iterative design process.
We focus on interactive systems for several reasons. Interactive systems require solutions to a broad range of problems that rarely show up in a single software project. They are real-time systems with stringent performance constraints. Usability must be a central concern in their design. They typically use computer graphics and sound. can draw on other areas of computer science as well, such as artificial intelligence, computer networking, and computer art. And they often involve the modeling and simulation of physical systems, which requires concepts from mathematics, engineering, and physics. Inceidentally, interactive systems such as games are fun projects, and most students have a strong sense of what constitutes a good product.
Prerequisites: CS 70
Textbook: Code Complete 2nd Edition by Steve McConnell, Microsoft Press, 2004.
Evaluation is based on:
The class will collectively design, prototype and test an interactive system. An interactive system is one whose behavior is directly influenced by its environment. Video games are good examples of interactive systems (but obviously not all interactive systems are games).
The project will follow an iterative design process alternating divergence and convergence phases, and promote early and copious prototyping. The overall design process will integrate traditional software construction techniques such as requirement elicitation, architectural design, code design and refactoring, reviews, unit testing, etc.
Some activities will involve the class as a whole, many activities will be conducted in smaller teams (3-5 people). In addition, if necessary or desirable, some "individual" activities might be conducted in pairs. Each and every individual is expected to be a responsible and actively committed member of the team for the duration of the project. Everyone will be encouraged to exercise leadership as the project progresses.
Possible modalities and procedures will be explored and selected as the project develops.
The whole class will work together to design, prototype and test one single interactive system. Collective output (e.g. documents) will contribute to a collective component of the project grade. Team-based activities will contribute to a per-team grade component. An individual component, based on a weekly activity log/portfolio, will round up each student's project grade. The weights are as follows:
Collective deliverables:
Team-level deliverables:
Individual deliverables:
| Date | Topic | Readings | Project | References and Links |
|---|---|---|---|---|
| T 8-31 | Introduction [pdf] |
François: courses created
Risk Forum | ||
| R 9-2 | Project organization 1 [pdf] |
Trac Guide
Keller: Goal Driven Project Management | Project ideas | Project Trac |
| T 9-7 | Design [pdf] |
usabilitynet: User-Centred Design
Glinert: Upping your game's usability | Portfolio, wiki, and more project ideas |
Norman, 2002
Miller, 1956 Modern Times: the feeding machine |
| R 9-9 | Design [pdf] | Human-Computer Interaction (HCI) | More organized project ideas |
Moggridge, 2007
McConnell, 2004: 1-5 |
| T 9-14 | Requirements [pdf] |
McConnell, 2004: 3.1-3.4, 5.1, 5.4-5.5
Wiegers: Requirements traps Ambler: BRUF | More developed (specific) selected project ideas | McConnell, 2004: 1-5 |
| R 9-16 | Requirements [pdf] |
McConnell, 2004: 20
Wiegers: Listening to Customer's Voices Cockburn: Use Cases, 10 Years Later Bittner: Integrating Use Cases, Storyboarding and Prototyping | Project lock-in | McConnell, 2004: 21 |
| T 9-21 | UML [pdf] |
Braun et al.: UML Tutorial
Sparx Systems: UML Tutorial, use case model, dynamic model | Design document draft 1 | |
| R 9-23 | S/W Architecture, SAI/MFSM [pdf] |
McConnell, 2004: 3.5
Francois: SAI article | Design document draft 1+ |
MFSM User Guide
MFSM Reference Guide |
| T 9-28 | Project check point: design document | McConnell, 2004: 21 |
Design document draft 2
Requirements document draft 1, use case candidates | The Core Application Architecture on Mac OS X |
| R 9-30 | Architectural patterns [pdf] |
Design document draft 2+
Requirements document draft 1+, use cases | C++ Design rules (definitions, ground rules, documentation) | |
| T 10-5 | Code design: basics [pdf] |
Design document draft 3
Requirements document draft 2, refined use cases, requirements matrix Draft system architecture (SAI) | ||
| R 10-7 | Logical design [pdf] | C++ Design rules: ground rules |
Design document draft 3+
Requirements document draft 2+ | |
| T 10-12 | Classes [pdf] | Requirements document draft 3 | ||
| R 10-14 |
Physical design
Project software organization |
MFSM User Guide
MFSM Reference Guide | ||
| T 10-19 | Fall break - no class | |||
| R 10-21 | Project: first contact with code [pdf] | C++ Design rules |
Software description document 1
Code shell for prototype 1 |
Using Subversion (svn) (HMC/CS only)
Version Control with Subversion MFSM User Guide MFSM Reference Guide |
| T 10-26 | Project [pdf] | C++ Design rules | See Trac tickets for milestone prototype1 |
MFSM User Guide MFSM Reference Guide |
| R 10-28 | Project [pdf] |
Milestone: Prototype 1
See Trac tickets for milestone prototype1 | ||
| T 11-2 | Project | See Trac tickets for milestone prototype2 | ||
| R 11-4 |
Midterm
[html]
(take home - no class) | |||
| T 11-9 | Debugging and testing [pdf] |
McConnell, 2004: 22 Kempe: An Introduction to Software Test Cases | See Trac tickets for milestone prototype2 | |
| R 11-11 | Project |
Milestone: Prototype 2
See Trac tickets for milestone prototype2 | ||
| T 11-16 | Project | See Trac tickets for milestone prototype3 | ||
| R 11-18 | Project | See Trac tickets for milestone prototype3 | ||
| T 11-23 | Project | See Trac tickets for milestone prototype3 | ||
| R 11-25 | Thanksgiving - no class |
Milestone: Prototype 3
See Trac tickets for milestone prototype3 | ||
| T 11-30 | Last crunch | Project PR material | ||
| R 12-2 | Last crunch / Presentation preparation |
Project demo plan
Milestone: Project demo system See Trac tickets for milestone demo | ||
| T 12-7 | Project demo + presentations [pics] |
Project demo system
Team presentations | ||
| R 12-9 | Post-mortem [pdf] | Project final documents: design, requirements, software description, user guide, website | ||
Platitude is a hybrid game that combines the platformer genre with aspects of the tower defense genre. Up to five platformers race to reach the end of the stage while their opposition, the builder, attempts to block their progress by placing various platforms and defenses in their way.
Project public website: www.cs.hmc.edu/courses/2010/fall/cs121/Platitude
A prototype of the system was demonstrated on 7 December 2010. The demonstration system successfully implemented the game mechanics in a distributed system. Pictures of the project demonstration are posted at: www.cs.hmc.edu/courses/2010/fall/cs121/Pictures.
Project Trac: www.cs.hmc.edu/trac/cs121fa2010
Trac guide: trac.edgewall.org/wiki/TracGuide
SAI: pollux.usc.edu/~afrancoi/sai
MFSM: mfsm.sourceforge.net
User guide: mfsm.sourceforge.net/UserGuide.html
Reference guide: mfsm.sourceforge.net/Reference/
(Norman, 2002) Donald A, Norman, The Design of Everyday Things, Basic Books, 2002, ISBN-10: 0385267746.
(Miller, 1956) George A. Miller, "The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information," The Psychological Review, vol. 63, pp. 81-97, 1956.
(Moggridge, 2007) Bill Moggridge, Designing Interactions, MIT Press, 2007, ISBN-13: 978-0262134743. [website]
(Winograd, 1996) Terry Winograd, Bringing Design to Software, Addison Wesley, 1996, ISBN: 0201854910.
(Fullerton, 2008) Tracy Fullerton, Game
Design Workshop, Second Edition: A Playcentric Approach to Creating
Innovative Games, Morgan Kaufmann, 2008, ISBN-13: 978-0240809748.
(Rouse, 2001) Richard Rouse III, Game
Design - Theory and Practice
(Brooks, 1975) Frederick P. Brooks, The
Mythical Man-Month: Essays on Software Engineering, Addison Wesley, 1975,
ISBN: 0-201-00650-2.
20th Anniversary edition, Addison Wesley, 1995,
ISBN-10: 0201835959.
(McConnell, 2004) Steve McConnell, Code Complete, Microsoft Press, 2nd Edition, 2004. (textbook)
(Flynt and Salem, 2004) John P. Flynt and Omar Salem, Software Engineering for Game Developers, Muska & Lipman, 2004, ISBN-10: 1592001556.
(Lakos, 1996) John Lakos, Large Scale C++ Software Design, Addison-Wesley Professional, 1996, ISBN-13: 978-0201633627.
(Meyers, 1998) Scott Meyers, Effective C++, Second Edition, Addison-Wesley Professional, 1998, ISBN: 0-201-92488-9.
(Gamma et al., 1995) Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns, Addison-Wesley / ACM Press, 1995, ISBN-10: 0201633612.
(Bjork and Holopainen, 2004) Staffan Bjork and Jussi Holopainen, Patterns in Game Design, Charles River Media, 2004, ISBN: 1-584-50354-8.
(Andrews, 1999) Gregory R. Andrews, Foundations of Multithreaded, Parallel, and Distributed Programming, Addison Wesley, 1999, ISBN-10: 0201357526.