CS 180: Software Engineering

Fall Quarter 2004: September 23, 2004 - December 3, 2004

Contents

Basics

Catalog Description: A study of software engineering techniques for the development, maintenance, and evolution of large software systems. Topics include requirements and specification; system design and implementation; debugging, testing, and quality assurance; reengineering; project management; software process; tools; and environments.

Prerequisite(s): CS 141: Intermediate Data Structures and Algorithms. You must have good programming skills as well as reasonable writing and presentation skills to pass this course!

Time Requirements: Four units (12-16 hours/week): lecture (3 hours/week), laboratory (3 hours/week), individual study (6-10 hours/week; includes reading, writing, and hacking).

Coordinates

Instructor: Peter H. Fröhlich
Office Hours: Monday, Wednesday, Friday, 3:10 pm - 4:00 pm (email for additional appointments)
Location: Surge, Room 341

Lectures: Monday, Wednesday, Friday, 12:10 pm - 1:00 pm
Location: Spieth Hall, Room 2200

Assistant: Paul DiLorenzo
Office Hours: Wednesday, 2:00 pm - 3:00 pm (email for additional appointments)
Location: Surge, Room 282

Lab: Friday, 2:10 pm - 5:00 pm
Location: Surge, Room 171

Assistant: Dragomir Yankov
Office Hours: Friday, 5:00 pm - 6:00 pm (email for additional appointments)
Location: Surge, Room 282

Lab: Friday, 6:10 pm - 9:00 pm
Location: Surge, Room 171

Mailing List: cs180@lists.cs.ucr.edu (Archive)

Books

Required

Daniel Steinberg, Daniel Palmer: Extreme Software Engineering. Prentice Hall, 2004. Succinct introduction to eXtreme Programming (XP), an agile, iterative development process based on user stories, pair programming, testing first, and other interesting concepts.

Martin Fowler: UML Distilled. Addison-Wesley, 3rd edition, 2003. Succinct introduction to the Unified Modeling Language (UML) and also a concise summary of basic software engineering and software construction concerns. The 2nd edition is also good enough for the course, and it's available much cheaper.

Recommended

Andrew Hunt, David Thomas: The Pragmatic Programmer. Addison-Wesley, 1999. A wealth of practical advice on various topics relevant to software construction, including design, implementation, testing, debugging, etc. Organized in 46 relatively small "lessons," extensively cross-referenced, including 70 "rules" and several check lists on a reference card. You can download additional material for this book here. An errata is available.

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, 1995. The standard reference for object-oriented design patterns: well-documented solutions to recurring design and implementation problems. The case study in chapter 2 is also a great introduction to object-oriented design and programming.

Also Running

Here are a number of "standard" text books on Software Engineering, most of which are huge and expensive. I've opted to not require one of these, which is somewhat unconventional. Instead I'll cover many of the "standard" topics in lecture and leave it up to you to research them further if you want to. I prefer to have cheap, concise books that are more useful in the long term, and the required books above are just that.

Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli: Fundamentals of Software Engineering. Prentice Hall, 2nd edition, 2003. Recent text, emphasizes concepts over specific methods and processes, but provides a decent survey of those as well. Broad since it covers the whole software life-cycle, yet manages to treat all subjects in sufficient depth for an introductory course. You can download the official slides and other material for this book here.

Ian Sommerville: Software Engineering. Addison-Wesley, 6th edition, 2002. Popular alternative text, frequently used at UC Irvine for example. You can download the official slides for this book here.

Hans van Vliet: Software Engineering: Principles and Practice. John Wiley & Sons, 2nd edition, 2001. Promising alternative text, I am considering this one for some future iteration of the course. However, I have not done a complete evaluation of it.

Schedule (Tentative!)

Warning: The schedule is under active revision for Fall 2004, there will be significant changes in the next few days!

Note the word tentative above. Things seldom go according to plan, and I expect changes here and there as we go along. Please also read the notes below. Most importantly: Keep in mind the actual Project Schedule available below, it contains details on when which assignments are due.

Week Lecture Lab Exam Reading
0 Welcome Welcome, Register Teams, Programming Review, LaTeX [Introduction] [Example] - S 1
1 Introduction to XP, Core XP Practices, Pair Programming Register Teams, Revision Control [Subversion] - S 2, F 1
2 Test-Driven Development, Planning Game, Requirements & Use Cases The xUnit Framework [PyUnit] [CppUnit] [JUnit], UML Tools [ArgoUML] - S 3-4, F 2
3 Spike Retrospective, Domain Analysis (Static), Domain Analysis (Dynamic) Requirements Case Study, CRC Cards [Paper] - S 5, F 3, 9, 12
4 Project Management, UML Case Study (Tetris) Open Lab: Requirements Document Q&A, Midterm Review - S 6-7, F 4-5
5 Movie Event, Midterm Review Acceptance Testing [FIT], Design Document Preview [Midterm]
[Solution]
S 8-9, F 6-8
6 Software Architectures, Structured Analysis & Design, Design Patterns: Composite & Observer Design Document Q&A - S 10-11, F 10-11
7 Design Patterns: Visitor, Software Testing Basics, Guest Lecture: Model-Driven Architecture (Max Najim) Design Patterns: Template Method, Factory Method & Abstract Factory - S 12-13, F 12-14
8 High-Level Requirements & Cleanroom Process, Components & OO Problems: Interface Conflicts & Fragile Baseclasses, TBD PyContract, TBD - S 14-15, F 15-17
9 TBD, Legal Issues,
Holiday!
Holiday!
- S 1-15, F 1-17
10 Capability Maturity Model (CMM), Comprehensive Review Open Lab: Presentations [Comprehensive]
[Solution]
S 1-15, F 1-17

Notes

Week 0 is the "pseudo week" starting Thursday, September 23. Open Lab means you can attend any lab section offered that week: You don't have to attend the one you're enrolled in, and you can even attend all of them if you want to; otherwise you need to go to the lab you're enrolled in.

The terms "S c" and "F c" refer to chapters in the required texts by Steinberg and Fowler; for example, "S 1" refers to chapter 1 in Steinberg, "F 4" refers to chapter 4 in Fowler. It's a good idea to review/skim the material "around" assigned chapters as well.

Some topics we go over in lecture or lab are not covered in the texts; I will try to provide additional references for those. Some topics discussed in the texts are not covered in lecture or lab (unless you ask about them), but the material is relevant.

You are expected to do the assigned reading before a topic is covered in lecture or lab. Reading assigned in the week of an exam is part of the exam! Please try to read ahead, you'll be surprised how much more sense the lectures make...

The department's programming guidelines make for quite interesting reading, often highly relevant to this course.

Slides

I try to write slides for my lectures, but I am not always very lucky in getting them done (either on time or ever). In other words, it's a good idea to always take notes in class. :-) That said, I decided to put all my slides into one PDF file instead of posting every lecture by itself. The advantage is that you never have to guess whether I forgot to post a certain lecture, or whether I never wrote the slides for it. The drawback is that the file evolves during the quarter, so the version you download in one week will be quite different from the one available three weeks later. Keep that in mind please.

I'll try to email the list whenever I post a new version of the slides, but of course I might forget. If in doubt, just check back here.

Project

The project in CS 180 is a little complicated, at least from an organizational point of view. First, here's a description of the overall schedule, processes, and artifacts. This document contains important deadlines, check for updates frequently!

Next, here's a more technical description of the actual project, at least of the most fundamental requirements. Your clients will definitely have their own ideas on top of these, so beware.

There will be future revisions of both of these documents, but they should be reasonably complete for now. Yes, we practice some form of XP ourselves. :-)

Links

Here are a bunch of links you might be interested in as you try to get a grip on software engineering. I didn't have time to organize them yet, but I promise that all of them are quite enlightening.

Teams

The following teams are currently registered. If there are any changes in your team, be sure to let us know, we need to approve those to keep track of what's going on in the course. Also, if any information below is wrong, tell us ASAP. Thanks!

Presentations

The final presentations are on Friday, December 3, 2004 starting at 3:10 pm in STAT B650. Please note the room, it's not the lecture room and not the labs!

Two people from each team need to present for 20 minutes: 15 minutes for the actual talk and 5 minutes for questions from the audience (students, assistants, clients, experts, etc.). The default arrangement for a presentation will be the slides you handed in on our laptop. If you want to give a live demo, please contact Peter with the details; if you don't contact us, we'll assume a standard talk, slides only.

Time Team Presenters
3:10 pm Welcome! Peter
3:20 pm The Sun Enterprise ?
3:45 pm J.J.A.K.A.S.S. ?
4:10 pm Deviant Entertainment ?
4:35 pm Group-3 ?
5:00 pm Break! -
5:10 pm Frinkiac-7 Mike, Adam
5:35 pm Presto Forte Henry, David
6:00 pm Macrosoft ?
6:25 pm Wrapup! Peter
6:30 pm Release Meeting! -

Note that the schedule includes 5 minutes of "slack" all over, which is already pretty "tight" judging from past experience. Please be on time, ideally even a bit early.

Assessment

Assignments 40% (6), Iterations 20% (7), Midterm 15% (1), Comprehensive 15% (1), Peer Review (1): 10%. See my policies for more information.

Updated: $Id: index.html,v 1.40 2004/11/30 23:37:52 phf Exp $ Validate: XHTML CSS
Copyright © 2003-2004 Peter H. Fröhlich. All rights reserved.