The schedule is subject to change.

 

Date

Topic

Reading

Notes

Programming

Homework

8/30

Course Info

Introduction

 

 

 

 

 

9/2

 

9/6

 

9/9

9/13

The Java Language and Tools

9/2: Java vs C++: References vs. Pointers, Garbage collection, Type Safety

9/6: Eclipse IDE

 

9/9: Test-first principle and JUnit

9/13: Version control and Mercurial

 

9/2 Assignment1 - individual: an easy Java programming assignment.

Requires use of Eclipse, JUnit and Mercurial. Student becomes familiar with the tools which they will be using throughout the semester.

 

9/16

UML Class Diagrams

 

 

9/16: Assignment1 due.

 

 

 

9/20

9/23

 

 

 

9/27

 

9/30

Basic Software Design

9/20: Design by Contract

9/23: Subtype polymorphism

 

 

 

9/27: The open-closed principle, other principles, LSP

9/30: LSP continues

 

 

9/20: Assigment2 – team: a programming assignment, covers Design-by-contract. Requires use of JML in addition to all else.

 

9/27: Assignment2 due.

9/27: Assignment3 – team: a programming assignment, covers the LSP. Requires use of JML.

 

 

 

10/4

10/7

 

10/14

Design Patterns, most important ones

10/4: Factory, Singleton

10/7: Adapter, Bridge, Composite, Proxy

 

10/14: Observer, State, Template Method, Visitor

 

 

10/4:  Assignment3 due.

10/4: Assignment4 – team: a larger assignment that covers at least 3-4 frequently used design patterns.

Will have two phases: Phase1 (design), due after 10 days, where they receive feedback, and Phase2, code, tests, and all documentation due on due date.

 

 

 

10/18

Midterm Exam

 

 

 

 

 

10/21

10/25

 

10/28

Design Patterns continue

10/21: Prototype, Decorator, Facade

10/25: Command, Interpreter, Iterator

 

10/28: Design patterns and Subtype Polymorphism, Open-closed principle, and the LSP

 

10/21: Assignment4 due.

10/21: Assignment 5 – team: Reverse engineering assignment. Students are given non-trivial Java code, and asked to identify all patterns and describe in 1-2 sentences their purpose. Will count towards communication requirement!

 

 

 

11/1

11/4

11/8

 

11/11

Software Testing

11/1: Fundamentals of Software Testing

11/4: Black-box testing Techniques

11/8: White-box testing Techniques

 

11/11: Random testing and tools

11/1: Assignment 5 due

11/1: Assignment 6 – team: Given code with spec, design comprehensive tests and measure coverage.

11/11: Assignment 6 due

 

 

 

 

11/15

11/18

 

 

11/22

Refactoring

11/15: Fundamentals of Refactoring

11/18: Refactorings

 

 

11/22: Refactorings continue

 

11/15: Assignment 7 – team: Students are given “smelly” but working code. They need to refactor it into better code.

11/22: Assignment 7 due

 

11/29

12/2

12/6

Student Presentations???

 

 

12/9

Review

 

 

12/14

Final Exam

 

 

 

 


 

Some notes:

 

·      Team assignments. Will be done in teams of 2 or 3 students (I am not sure which). Teams will change after each assignment, except after Assignment 2.

After completion of each team assignment, students will submit an evaluation of their teammates --- consistently bad evaluations should somehow be taken into

account when calculating a students’ final grade on assignments.

 

·      Textbooks. David, Chuck, do you have in mind a good book that covers this material? The material is not excessively deep, so we can do without a required

book, but it will be good to have a book.

 

·      Many issues remain. Designing assignments, grading assignments, communication intensiveness, student presentations, etc.