Second part of a two-part sequence in Java programming. Introduction to specifications, simple unity testing, and debugging; building and using canonical data structures; algorithm analysis and reasoning techniques such as assertions and invariants. Three lecture hours and one discussion hour a week for one semester. Only one of the following may be counted: Computer Science 307, 314, 314H, 315, and 315H. Prerequisite: Computer Science 312 or 312H with a grade of at least C-.