CSE 331 Midterm Topics Autumn 2012

The midterm covers everything we've done in class up to sections on Thursday, Feb. 9. That includes lectures, sections, homework assignments and projects. The calendar is the primary location to find everything, but here is a list of some of the major topics we've explored.

  • Reasoning about code: assertions, invariants, pre- and post-conditions, Hoare triples, loop development
  • Specifications (vs. implementations): when does an implementation satisfy a specification, stronger vs weaker specs., requires, effects, modifies, etc.
  • Know how to use JavaDoc effectively/appropriately to document classes and interfaces.
  • ADTs: abstraction vs implementation/representation, RI, AF, mutation, advantages of immutable data, representation exposure.
  • Interfaces: pure specification; interfaces, classes & types
  • Class design and style issues: coupling, cohesion, etc.
  • Testing: JUnit basics, unit testing vs other kinds, black-box vs white/glass-box tests, picking good tests, revealing subdomains, boundary cases, coverage (path coverage, etc., why complete coverage is often infeasible), specification vs implementation tests.
  • Debugging strategies - debugging as a deliberate experiment. Interaction with testing, regression testing.
  • Exceptions and assertions – rationale behind exceptions, basic uses, when to use exceptions or assertions. Basic Java exception notions: checked vs unchecked exceptions
  • Basics of identity and equality. Relation between equals and hashCode.
  • Version control: basic notions (repository vs working copies, add, checkin, checkout, commit)