Software Engineering


Class Meetings

You're here, so you figured this part out :-) Monday evenings, 5pm to 7pm. Warren Weaver Hall, room 102.

Contacting the Professor

Office Hours

Room 401, Warren Weaver Hall, from 4pm to 5pm.

Also by appointment.


My personal account, or my NYU account,


My full contact info is on my personal home page. Yes, you can try stalking me if you want, but I won't make it completely easy for you by putting all that personal stuff here. :-)






Methodologies: UML, eXtreme Programming




Documentation, literate programming

Version control

Build tools



Understanding the user's needs

Writing a specification

Programming using encapsulation and patterns

Project-specific assignments

The Final Project


SW standards

First Milestone review

Second Milestone review

Final presentation

The Software Lifecycle

Stages of the Lifecycle

As a way to manage and regularize software development, we talk about a lifecycle. By analogy with living organisms, software is "born," "grows," and (eventually) "dies."

Usually, the software lifecycle is described as somewhere around four stages:


What does it do?

Use-cases as a tool

Come up with examples for how the SW will be used. Provide as much detail as possible on the tasks the SW will address.

Careful: Programmers are often not the end user.


Sometimes broken out as a separate stage, either before or after a "specification" stage.

Here, we refer to following:



How does it do it?






Constructing it according to the design

What most people call "programming"


Sometimes testing is described as part of implementation; sometimes part of maintenance; sometimes a phase of its own.



Fixing anything broken

Bug tracking and reporting


Practices in a Nutshell


Grouping and Ordering Lifestyle Stages

Formalizing Process

Fodder for flame-wars. Instead of arguing the merits, pick one and stick with it. Just don't be a fanatic about it.

Formalizing Notation

More fodder for flame-wars. People have argued about whether to draw pictures with rectangles or clouds.


The Merits of the "Black Box"

Re-use working code: Reduce testing time

New code uses old code, and knows the old code works


Re-use a design, not code

Figuring out how to meet a spec is hard. Match bits of the spec to a particular design pattern to get part of the design "for free."

Catalogs of prior art


Get old code to use new code

Old style: Callbacks, function pointers

New style: Virtual functions or overriding members

New style: Templates

Documentation, literate programming

Every stage listed "Documentation"

Determining intent is difficult

Literate programming makes code part of documentation

Start by writing a clear explanation of what is to happen. The code gets extracted from that. Contrast this with writing the implementation then later commenting it or writing separate documentation.

First made popular by Donald Knuth.

Version control

Sometimes we make mistakes....

"Undo" in an application isn't enough

Multi-level, branching undo across an entire programming team

Helps handle:

Build tools

Big projects get hard to manage

Recompile everything is not an option


Compile farms


Facilitating installation

How to distribute the product

Coordinating with maintenance

Homework Mechanics

Homework assignments will consist of one or more questions and will be due one week from being assigned (i.e., at the class following the homework's assignment).


Each answer will be given a grade between 0 and 10. This does not correspond directly to the letter grade (i.e., a 7 does not equal a C). It represents the level of completion of the answer. No answer is a 0. A complete, correct answer is a 10. High-quality and expansive answers can earn scores above 10. Plagiaristic answers can earn scores below 0.

Within a homework assignment, all questions are of equal weight. If the answer for one question is intrinsically longer than another, then (implicitly) the shorter answer is seen as more important by the instructor.

Each homework assignment is of equal weight.


Homework questions will be clearly identified as requiring either a prose answer or a code answer.

A prose answer must be handed in on paper, preferrably formatted (handwriting will be accepted, but responsibility for legibility is the student's).

A code answer must be handed in both electronically and on paper. Electronic hand-in must be in the form of email to the TA and the instructor, in the form of a tar file compressed with gzip, containing all relevant files. Paper hand-in should consist of a print-out of all documentation as well as clearly labeled and organized print-outs of all relevant files (source, test input, results).

Doing Your Own Work

The purpose of grading assignments is to determine how well you, the student, have learned the material. Plagiarism defeats this purpose (thereby wasting your own tuition money). When there is evidence of plagiarism, the minimum assumption will be that the student submitting plagiaristic answers knows nothing of the material - i.e., the grade assigned will be, at best, a zero.

What does all this mean?

On Homework

Doing research to find the answer to a question is permitted, even encouraged. Part of what you will learn in this class is how to avoid unnecessary work. But your research must be clearly labeled and cited. Evidence of your own thought and understanding (e.g., original prose you wrote yourself) must be present. Answers that consist of a quoted paragraph from some website are not satisfactory.


Some assignments will require collaboration with other students. Either you the students will make your individual contributions clear or all students will be assumed to make equal contributions.

For example, in group projects, you may find yourself stuck with a group member who does not contribute adequately. In this class, you may either:

Choosing which approach to take is part of group management.

Homework Assignment: A User Survey

Read the user survey for calendars. You are not required to complete the survey, though doing so would be a great help to the researchers conducting it. Instead, you must answer the following two questions: