Computer Science 181F - Big Software (Fall 2012)

Tuesday/Thursday - 14:45-16:00

Last Updated: 9/4/12


Lecture, Reading and Exam Schedule

Week Day Date Discussion Topic Reading* Projects Slides
1 T 09/04 Introduction McC 1-2
Kessler: Why Projects Fail
Brooks: No Silver Bullet
P1a: teams and concepts pdf
Q&A
R 09/06 Basic Project Skills McC 28.2
Spolsky: 12 steps to better code
Kampe: Reproducibility and Control
Kampe: Surviving Larger Projects
Kampe: What is a Post-Mortem?
Schaefer: Diablo Postmortem
Project 1 Description
pdf
Q&A
2 T 09/11 S/W Process Models McC 3-3.2
Kampe: S/W Process Models
Boehm: Spiral Development
Big Requirements up Front
P1a: proposal development pdf
Q&A
R 09/13 Requirements McC 3.3-4
Wiki: Requirements Analysis
Kampe: User Requirements
Wiegers: Requirements Traps
Wiegers: Prioritizing Requirements
pdf
Q&A
3 T 09/18 Users, Roles,
and Use Cases
Sisson: User Characterization
Rouse: What Players Want
Wiegers: Developing Use cases
Wells: User Story Cards
Wiki: UML introduction
Agile: UML use case diagrams
Agile: UML activity diagrams
Agile: UML state diagrams
P1b - requirements planning pdf
Q&A
R 09/20 DEMONSTRATION P1c Requirements Elicitation
4 T 09/25 Quality
Quality Assurance
McC 20
Rakitin: What is Quality?
Spolsky: Five Worlds
Rakitin: What is Software Quality Assurance?
Boehm: S/W Defect Reduction
Wieger: Peer Reviews
P1d - Final Requirements pdf
Q&A
R 09/27 System Models
& Modeling
Kampe: Why we model
Ambler: Agile Modeling Principles
Ambler: UML component diagrams
Ambler: UML deployment diagrams
Gabler: Game Prototyping
pdf
Q&A
5 T 10/02 Principles of Architecture McC 3.5-6, 5.2
SEI: S/W Architecture
Garlan: S/W Architecture (ch 1-2)
Foote: Big Ball of Mud (digest)
Wiki: Mechanism/Policy Separation
Kampe: Software Testability
Kampe: Interface Stability
P2a - architecture, prototyping pdf
Q&A
R 10/04 Evolving an Architecture McC 5.1, 5.3-4, 34.1, 34.6
Kampe: Architecture Does All That?
pdf
Q&A
6 T 10/09 Formal Reviews McC 21.3-4
Wieger: Inspections
Wieger: 7 Deadly Sins
P2a - architecture, prototyping pdf
Q&A
R 10/11 U/I Design usability.net: User Centered Design
Talin: U/I Design Principles
Wiki: Usability Testing
Thompson: Halo 3 Usability
Bay: Designing Games that Don't Suck
Nielsen: Web U/Is are different from GUIs
Kampe: Content Architecture
Kampe: CLI Design
pdf
Q&A
7 T 10/16 DEMONSTRATION Floridex architecture
SQL component analysis
Phone UI component analysis
U/I mock-up
P2b Architectural Review
R 10/18 MID-TERM EXAM all the above info
8 T 10/23 FALL BREAK
R 10/25 Component, Class Designs McC 6, 34.4
Object Mentor: Packaging Principles
Spolsky: What are specs?
Agile: UML class diagrams
Agile: UML package diagrams
Agile: UML object diagrams
P2c Finalize Architecture pdf
Q&A
9 T 10/30 Routine, Algorithm Design McC 7-7.2 (skim 7.3-7.7), 9-9.3, 18
Agile: UML Sequence diagrams
P3a Component Specifications pdf
Q&A
R 11/01 Design Patterns McC section 5.3 (review design patterns)
Garlan: S/W Architecture (ch 3)
Wiki: Client/Server Model
Creational: singleton, object-pool
Behavioral: iterator, observer, strategy, visitor
Structural: adapter, bridge, proxy
Synchronization: events, locking, leases, transactions,
pdf
Q&A
10 T 11/06 Testability & Test Cases McC 19.5-6, 22
(review) Kampe: Software Testability
Kampe: Introduction to S/W Test Cases
Cornett: Code Coverage
sample: testing strategy
sample: list of test cases
sample: test case
P3b - Component Design pdf
Q&A
R 11/08 Robustness McC 8
Kampe: HA taxonomy
Kampe: S/W HA
pdf
Q&A
11 T 11/13 Bugs & Debugging McC 23
Kampe: Forensic Debugging
Kampe: Root Cause Analysis
Wiki: Defect Tracking
Black: writing a bug report
Kampe: Severity and Priority
Bugzilla Manual (sections 5.3-5.4)
P3b/c - Design/Test Plan pdf
Q&A
R 11/15 Integration Strategy
Testing Methodology
McC 29
Kampe: Integration Strategy
Fowler: Continuous Integration
Kampe: The Train Model
Wiki: Test Driven Development
Kampe: Test Harnesses
CUnit - a unit testing framework (just skim)
pdf
Q&A
12 T 11/20 System Testing
Performance
McC 25
Wiki: System Testing
Kampe: Load & Stress Testing
Kampe: Testing and Bug Discovery
Kampe: Scenario Based Testing
Kampe: Release Phases & Criteria
Gnu: Gprof (just skim)
P3d - Design Review pdf
Q&A
R 11/22 THANKSGIVING
13 T 11/27 Maintainability Much but easy Reading
McC 30.2, 31, 32.1-4, 34.3, 34.5
Wiki: Doxygen (documentation generation)
P3e - Finalize Design pdf
Q&A
R 11/29 Agile Process McC 34.2, 34.9
Wiki: Agile S/W Development
Wiki: Scrum (Roles, Sprint, Meetings, Artifacts)
pdf
Q&A
14 T 12/04 Productivity & Collaboration McC 21.1-2, 28.1, 28.5, 33
XP: Project Activities
XP: Rules
XP: Values
XP: Collective Ownership
Williams: Pair Programming
Rosenberg: Problems w/Pair Programming
Global Software Development
P4 - Implementation and Final Report pdf
Q&A
R 12/06 Task Estimation
and Risk Assessment
McC 27, 28.3
Kampe: S/W Estimation Principles
Wiki: COnstructive COst MOdel
Peters: S/W Project Estimation
Wiegers: Risk Assessment & Management
Scrum backlog grooming
pdf
Q&A
15 T 12/11 Project Scheduling
and Tracking
McC 34.7
Wiegers: Successful Project Management
Brooks: Mythical Man Month (digest)
Kampe: Project Management Concepts
Kampe: Project Milestones
Kampe: Putnam Norden Rayleigh curves
Scrum points and velocity
Wiki: Earned Value Analysis
pdf
Q&A
16 W 12/19 FINAL EXAM everything since midterm info
F 12/21 EXTRA CREDIT syllabus and assigned reading
lectures and class activities
assigned projects
Course Post Mortem Review

*There will be daily quizzes on the assigned reading

Supplementary Reading

Git and GitHub

You will need to get set up on GitHub and learn basic git use. I have created a Git Cheat Sheet that:

McConnell, chapters 10-19

This course involves considerable reading ... and yet it touches only only superficially on many important subjects. The projects require so much planning activity that there is little time left for actual implementation. I believe (and I hope you will agree) that this course will make very good use of the semester ... but many students enter this course hoping to gain more, and large-project, programming experience. I respect this desire, but I couldn't find enough hours in the semester.

The primary text for this course (McConnell, Code Complete) actually has several excellent chapters on coding and programming issues. The only reasons I do not assign them are:

If, however, you want to be exposed to a well articulated collection of programming lessons that it normally takes a decade or more to learn, I strongly recommend that you read (and carefully study) chapters 10-19 of Code Complete.

Design Patterns: Elements of Reusable Object-Oriented Software

This book by Gamma, Helm, Johnson and Vlissides (the Gang of Four) is considered by many to be one of the foundations of object oriented design. Design patterns will not solve all of your problems, but studying and using them will make you a better programmer. I did not make it required reading for this class because it would have taken us too deeply into programming, but if you have not already read it, I strongly encourge you to do so.