The UNL Math Placement Exam (MPE) is an exam which is given to most incoming students to assess their level of preparedness for university-level math courses. Students need to meet a readiness requirement before they can take math classes at UNL, and the most common way to meet this requirement is by getting an appropriate score on the MPE.
Since 2002, students have taken the MPE either on paper, or at the Arts & Sciences College Testing Center. The goal of this project was to design a new web application which would replace both the paper and the old web-based exams.
There were two primary considerations driving the need to replace the old MPE software:
The new system was designed to meet the following high-level requirements:
The new MPE system employs industry-standard J2EE tools built around the Apache Tomcat Server and a MySQL database. The system is designed using classic three-tier architecture, with XHTML/CSS rendered by JSP for the presentation layer, the Struts2 framework for the web-logic layer, and JPA/Hibernate (with a MySQL backend) for the data layer.
In order to achieve a full separation of concerns between the data/ORM layer and the web-logic layer, a data access objects (DAO) pattern was added on top of the JPA. A combination of DAO classes and use of JPA's transitive persistence completely separates the core domain model from the details of the persistence implementation.
One less usual feature of this product is the need to present technical mathematics on a webpage. Part of the legacy system was a large set of multiple choice questions encoded in XHTML and MathML. Therefore the new system needed a means of presenting MathML to the end user. We selected MathJax product as rendering engine for MathML because of its wide cross-platform support, and because no no plugins are required.
The main logic of the application is encapsulated in a set of Struts2 Actions which act on the underlying data model. These are organized into three modules; the main student interface for taking an exam and receiving results, a suite of administative tools used to access student results, and tools for managing local accounts.
The system comprises about 5,300 lines of Java code in 70 classes, plus about another 2,000 lines of JSP's and resource files. About another 2,000 lines of JUnit units test support the system.
The project makes extensive use of JUnit unit testing, and is structured in a standard Maven project style, so that a complete suite of unit tests must be passed for each deployment build.
Load testing was done using JMeter. The core load testing metric is the number of concurrent (virtual) students who can be taking an exam simultaneously. JMeter tests showed the system performing well a load level of 800 virtusl users (i.e., all requests handled correctly, within 2.5sec, with 90% of requests handled within 250ms). This level of use is over an order of magnitude above the highest anticipated actual use.