CS 326: Software Methods

Sophisticated software systems play a prominent role in many aspects of our lives, and while programming can be a very creative and exciting process, building a reliable software system of any size is no easy feat. Moreover, the ultimate outcome of any programming endeavor is likely to be incomplete, unreliable, and unmaintainable unless principled methods for software construction are followed. This course explores those methods. Specific topics include: software processes; specifying requirements and verifying correctness; software architectures; concurrent, parallel, and scalable systems design; testing and debugging; and performance evaluation.

Full Syllabus

Class Details

      Instructor:   Stephen Freund
Office: TPL 302
Office Hours:     Monday and Tuesday, 2:15-4:00
email: freund@cs.williams.edu
phone: 413-597-4260
TA:     Caroline Kessler (Lab Hours: Sunday,Monday 8:00-9:30pm in TCL217a)



Tentative Calendar


Mon
Tues
Wed
Thurs
Fri
09/03
09/04
09/05
09/06
Welcome & Reasoning About Code
Lab 0: Intro To Swift
09/07
09/03
09/04
09/05
09/06
Welcome & Reasoning About Code
Lab 0: Intro To Swift
09/07
09/10
09/11
Reasoning About Loops
09/12
09/13
Specifications
Lab 1: XCode, Swift, and Dafny
09/14
09/10
09/11
Reasoning About Loops
09/12
09/13
Specifications
Lab 1: XCode, Swift, and Dafny
09/14
09/17
09/18
Data Abstraction
09/19
09/21
09/17
09/18
Data Abstraction
09/19
09/21
09/24
09/26
09/27
Gestures and More Swift
Lab 3: Connect The Dots
09/28
09/24
09/26
09/27
Gestures and More Swift
Lab 3: Connect The Dots
09/28
10/01
10/02
Testing
10/03
10/04
Debugging, Design and Style
Lab 4: Coding To Specifications
10/05
MT DAY?
10/01
10/02
Testing
10/03
10/04
Debugging, Design and Style
Lab 4: Coding To Specifications
10/05
MT DAY?
10/08
Reading Period
10/09
Reading Period
10/10
10/11
Swift Design Elements
Lab 5: Graph ADT and GraphViz
10/12
10/08
Reading Period
10/09
Reading Period
10/10
10/11
Swift Design Elements
Lab 5: Graph ADT and GraphViz
10/12
10/15
10/16
OO Design
10/17
10/19
10/15
10/16
OO Design
10/17
10/19
10/22
10/23
MVC
10/24
10/26
10/22
10/23
MVC
10/24
10/26
10/29
10/30
Tables, Generic Abstractions
10/31
11/01
Generic Abstractions and UML Class Diagrams
Lab 8: Utter!
11/02
10/29
10/30
Tables, Generic Abstractions
10/31
11/01
Generic Abstractions and UML Class Diagrams
Lab 8: Utter!
11/02
11/05
11/06
Gathering Requirements, Use Cases, System Architectures
  • Slides: Requirements
  • (Optional) Read “Head-First Object-Oriented Analysis and Design” (on reserve in Schow)
11/07
11/08
No class
Lab 9: Campus Paths
Lab: Midterm
11/09
11/05
11/06
Gathering Requirements, Use Cases, System Architectures
  • Slides: Requirements
  • (Optional) Read “Head-First Object-Oriented Analysis and Design” (on reserve in Schow)
11/07
11/08
No class
Lab 9: Campus Paths
Lab: Midterm
11/09
11/12
11/13
Dependencies and Decoupling; Design Patterns
11/14
11/15
Design Patterns
Lab 9: Campus Paths
11/16
11/12
11/13
Dependencies and Decoupling; Design Patterns
11/14
11/15
Design Patterns
Lab 9: Campus Paths
11/16
11/19
11/20
REST APIs
11/21
Thanksgiving
11/22
Thanksgiving
11/23
Thanksgiving
11/19
11/20
REST APIs
11/21
Thanksgiving
11/22
Thanksgiving
11/23
Thanksgiving
11/26
11/27
Building Systems in the Wild
11/28
11/29
No Class
11/30
11/26
11/27
Building Systems in the Wild
11/28
11/29
No Class
11/30
12/03
12/04
No Class
12/05
12/06
Project Presentations
Lab: Project Presentations
12/07
12/03
12/04
No Class
12/05
12/06
Project Presentations
Lab: Project Presentations
12/07
12/10
12/11
12/12
12/13
12/14
12/10
12/11
12/12
12/13
12/14


Resources

Readings
Software



Acknowledgement: This course utilizes material developed by Michael Ernst, Hal Perkins, David Notkin, Dan Grossman, Zach Tatlock, and Paul Hegarty.