Maintenance and Evolution of a Tool to Automatically Generate Functional Test Cases

Supervisor : Yvan Labiche

Team size: Minimum 3, Maximum 5

CSE SE Comm Biomed EE Aero Special
NoYesNoNoNoNoNo

Description

A tool called MELBA has been created over the last couple of years to support a specific black-box software testing technique referred to as Category-Partition. It is now a fairly large piece of software: 30,000 lines of Java code without counting third-party libraries. It currently provides a graphical user interface (either Swing or JavaFX) to specify the inputs to the testing technique. Melba can generate test case specifications (also called test frames) according to different selection criteria, as well as test inputs for those test case specifications. A test case specification specifies what a test case should do: for instance, a test case specification for a parameter of type string could specify that the string length should be at least 5 (i.e., at least 5 characters in the string) and that the string should contain both letters and digits. To generate a test case from a test case specification, one has to find an input value that satisfies the constraints of the test case specification. In the example above, a string like "abc12d4f" satisfies the constraints. This project mimics a realistic work environment whereby you will have to work on a decent-sized piece of software that others have created and contributed to and be asked to contribute to it yourself: extensions with new functionalities, preventive maintenance (to foresee technological changes), corrective maintenance (to fix defects), different deployment solutions (e.g., software product lines, dockerization) ... It simulates a real project where one does not start from scratch and has to work with the code and documentation (or lack thereof) provided by others. Specifically: - The Swing and FX graphical user interfaces (UI) of Melba work well with the backend logic but with some differences that need to be removed so the user experience is identical with both kinds of UI technologies. - The FX UI should allow MELBA to be "easily" adapted to a web environment; the project will look into this. - Melba should also provide a command-line option for execution. - Melba is meant to be deployed differently and provide alternative sets of functionalities to various users. - MELBA relies on third-party technologies to function, including Janino, an open-source embedded Java compiler, CASA and ACTS respectively created by the University of Nebraska-Lincoln and the National Institute of Science and Technology in the USA, Microsoft's Z3, JavaCC (a compiler generator), Weka's machine learning engine. More recent versions of some of these third-party technologies have been released since they were first integrated into Melba. The project will look into adapting to these new versions (preventive maintenance). - The reliability of MELBA needs to be significantly increased. Different mechanisms will be used to achieve this goal, such as a better exception reporting and handling mechanism all through the application, proper reporting to the user, source code documentation, design-by-contract with the Java Modeling Language (JML), software unit and system testing (with JUnit), high level of structural coverage of the code, static verification of the code. - The integration between MELBA and Weka has been severed. The communication needs to be re-established. Some hints regarding how this can happen are still present in the code. The project is to fix this. - The UIs need to be verified against accessibility standards. What you will learn in this project: - Introduction to new technologies: the ones MELA relies on (see above), which are important for software development in general. - Working with Java, including UI development (Swing, FX). - Experience with a well-known testing technique. - Experience with advanced software engineering principles and tools: e.g., combinatorics, solvers, static analysis. Expertise required: - Java. - An appetite for digging into code. - An appetite for learning new things. - No expertise is required in covering arrays (CASA, ACTS) and solvers (Z3). - No expertise is required in category partition testing.

Prerequisites:

Nothing else than to register for the course

Keywords:

software maintenance, software evolution, software testing, structural coverage, UI, covering arrays, solvers, grammars/parsers, static analysis