Reading material referenced:

The course textbook "Object Oriented Technology", "Unit testing in Java" by Johannes Link, "Thinking in Java" by Bruce Eckel, "A Programmer's Guide to Java Certification" by Khalid Mughal and Rolf Rasmussen,

the MVC paper by John Hunt [pdf], course notes and JUnit tutorials:

http://junit.sourceforge.net/doc/testinfected/testing.htm

http://junit.sourceforge.net/doc/cookbook/cookbook.htm

JUnit 4 tutorial

For the midterm exam the students should:

- Know various software and OO notions  (object, class, interface, type)

- Be able to explain what OO programming means (e.g. by Stroustrup)

- Be able to describe 3 most common OO principles (inheritance, encapsulation, polymorphism) and their benefits and downsides

- Be able to describe SOLID principles (Single Responsibility, Open/closed, Liskov substitution, Interface segregation, Dependency inversion)

- Know the Law of Demeter for object oriented systems

- Be able to apply and give concrete examples for 3 most common OO principles, Law of Demeter and SOLID principles

- Be able to identify class candidates, their attributes and operations, and relationships among them from a requirements document according to the principles of OO programming

- Know the principles and benefits of Model Driven development

- Be able to describe the Model View Controller (MVC) architectural style and its benefits

- Be able to implement the communication between classes from different categories according to the MVC architecture in Java (e.g. event broadcasting from  model classes to view classes)

- Be able to use an exception mechanism in Java, know its purpose and be able apply it in an MVC architecture

- Be able to use JUnit to create testcases and hierarchy of testsuites

- Know the input domain partitioning testcase generation approach and be able to apply it

- Know the coverage criteria testcase generation approach and be able to apply it

- Know the peculiarities of Object Oriented testing

- Be able to create testsuites according to input domain partitioning and coverage criteria approaches

- Be able to create a statechart of a class

- Be able to create testsuites that test the protocol (behavior) of a class based on its statechart