JavAssess
JavAssess is composed of four different modules, three of which can work in an isolated way. The three independent modules are classes that are located in the codeassess.javassessment package, and are called Introspector, Intercessor, and Tester. The fourth extra module internally uses the other three to exploit their functionality while allowing for combining their effects. It is implemented in the codeassess package by the CodeAssess class and it requires an instance of a class that should be written by the programmer. The programmer’s class must extend the Assessor class located in the codeassess.javassessment package and, by doing so, it automatically contains the three previously described modules. These modules internally make all the abstraction, which is made transparent for the user.

-
Introspector
It provides several methods to query and manipulate the meta information of the class hierarchy in order to check properties of the code. It is possible to directly instantiate this class and start using all its functionality.
-
Intercessor
It provides several methods to modify the source code of the student's classes. It is possible to directly instantiate this class and start using all its functionality.
-
Tester
It provides several methods to execute test cases that are in a java file. It is possible to directly instantiate this class and start using all its functionality.
-
Assessor
Our library already provides mechanisms to produce a good design that ensures cohesive and maintainable code. First, all the assessment criteria should be grouped inside a class extending class Assessor. We often call this class "Template" because it acts as an assessment template. It indicates how the assessment tool should behave when a new student’s solution has to be assessed. To avoid the programmer having to declare and initialize the Introspector, Intercessor, and Tester classes, the Assessor class already does it.
-
CodeAssess
CodeAssess is designed in such a way that different templates can be used to assess different exercises. The code needed to process a template and use it against a student’s code (e.g., to mark it, or to correct it) is implemented in a separate class called CodeAssess. This could produce a situation where two professors used the same name (e.g., InehitanceExercise) for their templates. In this case, if we try to load a second class with a name already used, Java would detect that a class with the same name has already been loaded, and would return it instead of loading the new one. This situation can be solved by using different class loaders. JavAssess already implements this loading system and abstracts away the problem from the user.