This page contains the syllabus for CS 169 – Software Engineering, Fall 2004.
|
Name |
Office |
Phone |
Email |
Office Hours |
Instructor |
Ras Bodik |
773 Soda |
642-2488 |
bodik@cs |
Tu 11am-noon (except first week) |
G.S.I. |
Gilad Arnold |
TBD |
|
arnold@cs |
TBD |
G.S.I. |
Liviu Tancau |
|
|
|
TBD |
Lectures |
1 |
MW 9-10:30 |
306 Soda Hall |
Bodik |
Discussion Sections |
101 |
W 3-4pm |
|
|
102 |
F 10-11am |
3111 Etchevery |
|
The TAs' section notes are available here.
Building large software systems is hard,
but experience shows that building large software systems that actually work is
even harder. And trying to do all this before your competitors has proved fatal
to many software projects. This course covers techniques for dealing with the
complexity of software systems. We
will focus on the technology of software engineering for the individual and
small team, rather than business or management issues. Topics will include, among others,
specifications, principles of design and software architecture, testing,
debugging, static analysis, and version control. Students gain hands-on experience
through a large course project, done in a team of 6-7 students.
CS61A-C.
It is very helpful if you have been already involved in a medium sized software
project, perhaps a semester project in one of the project classes (CS162,
CS164, or CS186).
There
is no required textbook for this class. Instead I will assign readings from
research papers. I also recommend a few textbooks if you want to read more
about the topics covered in class.
Recommended |
“Software
Engineering. A Practitioner’s Approach”, by Roger Pressman |
“Code
Complete”, by Steve
McConnell |
|
“Extreme
Software Engineering. A Hands-On Approach”, by Daniel H. Steinberg, Daniel W.
Palmer |
Copies
of the lecture notes will be made available on the course home page.
There will be a number (5 to 6) of
assignments in which you will be guided in the use of standard tools for
software engineering: debuggers, automated testing tools, version control, and
bug finding tools.
The major component of the course will
be the course project. The project is split into several components. In the
first component, you will have to write a short proposal for a project topic,
in which you argue the usefulness and feasibility of the project. Ideally, you
should propose a project for which you have a customer (friends, family,
business entities, your pet, etc.). The course staff will then pick a number of
the projects and you will have a chance to express your preference for what
project you want to work on. We will assign people to projects based on their
preferences and based on their declared expertise (or lack thereof). In the
remaining stages we will walk you through collecting requirements, design,
coding, testing. The design will be reviewed by one other team, and each team
will also act as external tester for some other team. During the semester,
members of the group will have to give short updates on the state of the
project, in lecture presentations. These presentations will have a relatively low weight in
the final grade but will prove invaluable to fellow students, who will learn from your experiences. The semester will end with a demo session.
The project is 50% of the grade, divided as follows:
documents related to each stage roughly 20%, final demo 20%, and presentations
10%. The project grade will be adjusted by team review of each team member performed at
the end of the semester.
You will loose 0.5% of the score for an
assignment, for each hour it is late.
There
will be one midterm examination (in-class, closed-book). There will be no final exam.
Instead, each project team will have to given an oral presentation and a demo
about the project.
Regrade requests will only be accepted for
programming assignments and exams. In either case, all regrade requests must be
received within one week
upon receiving your score. For exams, we will only consider regrades if we made
a mistake in the grading of your exam. For programming assignments, we will
only consider regrades if we made a mistake in the grading of your project or
if there was a small bug in your project that caused you to lose at least 10% of
points. A small bug is one that can be fixed by changing very few lines of code
without affecting the design or the algorithm in a significant way. All such
requests must be made to your TA (not to the readers).
Students are expected to attend discussion
sections. Some relevant material, especially the details of the programming
assignments and software tools, will be covered only in discussion sections.
It is impossible to pass the course without
doing the project. The relative weight of the components of your grade will be
approximately:
Homework assignments |
20% |
Midterm exam |
30% |
Project |
50% |
It is expected that all students understand University
policies on academic honesty. Cheating on assignments or exams is very serious
and will not be tolerated. All cases will be dealt through the
university’s Office of
Student Judicial Affairs. In this
course, we will use a variation of the standard policy. In this class, it is
permissible to talk to other students about assignments, to discuss particular
solutions, and even to receive partial solutions (including code) from others.
However, all assistance and cooperation must be cited in the assignment
write-up. If you receive any assistance from anyone other than course staff or
your partner on an assignment, you must acknowledge in the write-up for that
assignment who gave assistance and what assistance was given. Grading will take
into account how much help a student received from others (the more help, the
lower the grade). Failure to acknowledge sources is plagiarism and will be
treated as a serious breach of academic honesty. No assistance may be given or
received on exams.
You should know that sophisticated plagiarism detection software may be used on
the programming assignments.
Handouts will be available on-line on the class home page.
The
class home page for this semester is http://www-inst.eecs.berkeley.edu/~cs169. All course handouts, answers to frequently asked questions,
lecture notes, and updates on assignments will be posted. The class newsgroup
is ucb.class.cs169. It should be accessible
from any Unix machine on campus via any newsreader (such as ` rn ' or `tin').
Please check the home page and newsgroup regularly for important course
information. Students are responsible for changes to assignments posted on the
home page or in the newsgroup.