Producing Production Quality Software

Prof Arthur Goldberg, NYU CS Department

Fall 2004 Syllabus

Update history: 9/7, 9/8, 9/15, 9/22, 9/27, 9/29, 10/6, 10/13, 10/18, 10/20, 10/27, 11/1, 11/3, 11/4, 11/11, 11/19, 11/24, 12/1, 12/8
Prof. Arthur P. Goldberg

Classroom Activities
Course overview

Examples of bad code
Practice recognizing problems with other people’s code and Software Quality Guidelines; their rationale
Review this Syllabus
Review Software Quality Guidelines
Students do Example X from Examples of bad code
Software Quality: Capers Jones' View (handout) GG: Chapter 3: Overview of Software Inspections, especially 3.1
Discuss function point analysis

An Approach to Writing Better Code
Pseudocode/PDL approach to design and implementation

SM: Sections 3.3 and 3.4, and Chapter 4 (in SM 2nd edition: 3.4, 3.5 and 9.1 to 9.3) Code inspection
Blank inspection form
Example Web server to inspect; completed inspection form
4 OO  Design (handout)
An Example of Good Code-My SMTP Answer
SM: Requirements Prerequisite. Requirements Checklist. Amount of Time to Spend on Prerequisites
Do an OO design problem, ViaNet Bank

Testing (handout), Limitations of Testing (handout)
‘Glass box’ testing; unit testing; JUnit; coverage testing: structured basis testing ; QA; independent testing; etc.
Black box, or functional, testing;
its limitations;
Blackbox Testing Handout>
SM1: Chapters 6, 7 and 25, Unit Testing
SM2: Chapters 5, 6 and 22
Gamma and Beck, JUnitTest Infected: Programmers Love Writing Tests
Demo Eclipse and JUnit
Demo some How To Break Software examples
Demo Canned HEAT
<Review examples of bad code that survived functional testing of IMAP web servers>
Error Handling (handouts), Java Exceptions (handouts)
SM1: Section 5.6
SM2: Chapter 8

Review Programming With Assertions
Look at Hermes
Binary search invariants example
7 Code design with assertions and invariants
Error handling in javamail's IMAPFolder code,
For reference: IMAP RFC 3501
Binary search invariants example, continued
Study error handling in

8 System Design in Java
Design Principles

Notes on Java system design
SM2: Chapters 3, 5, and 6
Demo Canned HEAT again
Binary search invariants answer
Design DBMS architecture
Architecture; Module decomposition and interfaces (handout)

Processing semi-structured input with REs, FSMs, and CFGs (handout)
SM2: Chapters 3, 5, and 6 Continue design of DBMS architecture
Architecture example
Process CSV file example
Review java FSM builder; TCP example, diagram
10 Guest lecture: Software Quality at Popkin (handout)
Mariya Shapran, Quality Assurance Manager,  Popkin Software & Systems 
Enterprise Modeling: Aligning Business and Information Technology
Popkin Software Overview
Moving Toward a Business Process Standard

Grading of HW3
11 Design Patterns (handout); Composite example
Gamma et. al., Handout, Chapters 1,  most of 2, and Abstract Factory
Erich Gamma, Kent Beck, JUnit A Cook's Tour
Review JUnit A Cook's Tour
Discuss AYE conference
Show filemon
Concurrent and Distributed Programming
CHAPTER 17, Threads and Locks, of the Java Language Specification
Java API: Thread (especially scheduling methods), Object (especially wait(), notify() and notifyAll())
Review a single-writer, multiple reader lock implementation
Guest lecture: Software Development in the Corporate Systems eBusiness Group at MetLife
Dave Ditillo, VP - Corporate eBusiness IT
Group programming issues: Group dynamics, team work
An overview of processes, teams, etc., including perspectives from a Project Manager, a Business Analyst and a Quality Assurance person.
MetLife Career Opportunities

Group Programming Practices: Capers Jones, SEI's CMM, Software Effort Estimation
Data handout

SM2: Chapters 21, 28, and 30
[Some Weinberg writing TBD]

Wideband Delphi exercise