CS 100: Software Construction

Fall Quarter 2003: September 25, 2003 - December 5, 2003


Less: Basics Coordinates Books Schedule Project Teams Assessment   |   More: Scores Policies

Basics

Catalog Description: Development and construction of software products. Topics include design, coding layout, and style; implementation strategies; quality attributes; prototyping, reuse, and components; debugging, testing, and performance; integration and maintenance; documentation; standards, analysis, and selection of tools and environment; and personal software processes.

Prerequisite(s): CS 141: Intermediate Data Structures and Algorithms. Let me emphasize that you should be reasonably comfortable with C++ programming and the Unix environment, otherwise you will spend more time "catching up" than doing course work. You should also have reasonable writing and presentation skills, or at least you should be willing to develop them.

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, hacking, and homework).


Coordinates

Instructor: Peter H. Fröhlich
Office Hours: Monday, Wednesday, Friday, 11:00 am - 12:00 pm, Surge 341 (email for additional appointments)

Lectures: Tuesday, Thursday, 5:10 pm - 6:30 pm
Location: Watkins Hall, Room 1111

Assistant: Dragomir Yankov
Office Hours: Tuesday, 2:30 pm - 3:30 pm, Surge 282 (email for additional appointments)

Lab: Thursday, 6:30 pm - 9:00 pm
Location: Surge, Room 170

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


Books

Required

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.

Recommended

Martin Fowler, Kendall Scott: UML Distilled. Addison-Wesley, 2nd edition, 2000. Succinct introduction to the Unified Modeling Language (UML) and also a concise summary of basic software engineering and software construction concerns. Third edition about to be published!

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

Brian Kernighan, Rob Pike: The Practice of Programming. Addison-Wesley, 1999. Succinct discussion of a variety of programming topics. Deals with style, documentation, design, testing, debugging, portability, etc. Uses several programming languages (C, C++, Java, Perl) and discusses the tradeoffs involved. I used this one in Spring 2003 as the main text, but I think the new choice is more comprehensive and accessible; still, get this one if you feel like it, goes nicely with the current text. An errata is available.

Barbara Liskov, John Guttag: Program Development in Java. Addison-Wesley, 2001. Do not be fooled by the title. This is an excellent advanced programming text that deals with many software engineering concerns as well. If you want to learn some Java and along the way pick up lots of programming and design skills, get this book.

Steve McConnell: Code Complete. Microsoft Press, 1993. Another excellent advanced programming text, again covering many software engineering concerns as well. This is a real classic, but currently out of print as far as I know. An errata is available.


Schedule (Tentative!)

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.

Week Lecture Lab Assignment Exam Reading
0 Welcome, Software Engineering [Lecture 1] Open Lab: Accounts, Basics - - Preface; H 1, 5, 6, 15
1 Requirements (H 36), Teams (H 41), Estimating (H 13) [Lecture 2] [Lecture 3] Register Teams, LaTeX [The Not So Short Introduction to LaTeX], Discussion: Broken (H 2), Frogs (H 3) [Assignment 1] - H 2, 3, 13, 36, 41
2 Style, Documentation & Writing (H 44), Inspections [Lecture 4] [Lecture 5] Register Teams, XHTML, doxygen, Discussion: Plain (H 14), Editing (H 16) [Assignment 2] [Quiz 1]
[Solution]
H 14, 16, 32, 44
3 Configuration Managment (H 17), Debugging (H 18), Automation (H 42) [Lecture 6] [Lecture 7] Subversion, cron, Discussion: make, gdb [Assignment 3] - H 17, 18, 19, 42
4 Assertions (H 22, 23), Contracts (H 21) & Abstract Data Types [Handout], Exceptions (H 24) [Lecture 8] [Lecture 9] nana, Discussion: Balancing (H 25), Puzzles (H 37) [Assignment 4] [debug.tar.gz] - H 21, 22, 23, 24, 25, 37
5 Python [Instant Python], Review [Lecture 10] [Lecture 11] Open Lab: Patterns & Python - [Midterm]
[Solution]
all the above
6 Testing (H 34, 43), Performance [Lecture 12] [Lecture 13] Coverage, gcov, prof, Discussion: Enough (H 4), Ready (H 38) [Assignment 5] - H 4, 34, 38, 40, 43
7 UML, Duplication (H 7), Orthogonality (H 8), Refactoring (H 33) [Lecture 14] Open Lab: UML Case Study, Discussion: Reversibility (H 9), Coincidence (H 31) [Assignment 6] - H 7, 8, 9, 31, 33
8 Demeter (H 26), Views (H 29), Composite & Visitor Patterns [Lecture 15] [Lecture 16] UML Case Study, Discussion: Domain (H 12), Code (H 20) [Assignment 7] [Quiz 2]
[Solution]
H 12, 20, 26, 29, 35
9 Specifications (H 39), Bullets (H 10), Prototypes (H 11) Open Lab: UML Case Study, Discussion: Expectations (H 45), Pride (H 46) [Assignment 8] [No Silver Bullet] - H 10, 11, 39, 45, 46
10 Legal Issues, Review Open Lab: Review - [Final]
[Solution]
complete text

Notes

Week 0 refers to the September 25-26 pseudo-week. 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 attend all of them as well.

The term "H s" refers to the required text by Hunt et.al.; for example, "H 27" refers to section 27. When sections are assigned, it's a good idea to skim the material "around" those sections as well.

Some topics we go over in lecture or lab are not covered in the text; I will try to provide additional references for those. Also, some parts of the book are assigned as reading only and are not covered in lecture or lab (unless you ask about what you have read).

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.

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


Project

There is not really a "distinct" project in CS 100, instead all project work is integrated with the regular assignments. For the Spring 2003 offering of this course, all of the assignments focused on an implementation of the standard Unix wc command, the so-called "word count" tool. This quarter, all the assignments will be about a simple scheduling application, called sg for "schedule generator" here. For its user, sg offers the following basic service:

  1. Read a plain-text input file describing a number of events, for example the lectures and labs you attend in a given quarter.
  2. Write an XHTML 1.1 output file containing a tabular representation of the schedule, suitable for posting as part of your website for instance.

This simplifies maintaining an online schedule considerably: Editing the text file is much easier than finding your way around various XHTML 1.1 tags for tables, and even repeating events are only present once in the input file. Once they are posted (soon I hope), you can find an example input and the corresponding output here. More details on what sg must be able to do will be given as we go along.


Teams

Name Members
TBD TBD, TBD, TBD
TBD TBD, TBD, TBD

Assessment

Testing: Assignments 50% (8), Quizzes 10% (2), Midterm 10% (1), Final 30% (1). See my policies for more information.


Copyright © 2003 Peter H. Fröhlich. All rights reserved.
$Id: index.html,v 1.36 2003/11/24 01:36:56 phf Exp $
Valid XHTML 1.1!