JFreeChart JFreeChart is a Java chart library for displaying professional charts in their applications. JFreeChart targets both server-side and client-side applications supporting a wide range of chart types. It handles many output types, like Swing and JavaFX, image files (including PNG and JPEG), and vector graphics file formats (including PDF, EPS and SVG). JFreeChart is an open source project written in Java and its source code can be download from the project’s web site.
Links:
A customer is interested in extending the functionalities of JFreeChart. He wants to create a time serie where each point of the graph has a different shape. These shapes can be of type rectangular, ellipse but also customized (namely the shape is defined by the customer). An example of the effect required is given below.
In this graph all points are characterized by a tuple x,y,shape. These points are recorded in a database.
The current version of JFreeChart does not handle (1) the possibility of having a different shape for each point and (2) the possibility of retrieving data of type shape from the database.
The customer does not require a facility to insert the data inside the database. You should assume that this information is already stored.
Deadline: Send Project Report in PDF by e-mail to Alessandro Murgia and Serge Demeyer
You can find the source code of JFreeChart here: http://sourceforge.net/p/jfreechart/code/HEAD/tree/
refactoring God Class or fixing God Class (Extract Class) or fixing God Class (removing code clones)
if you also introduce new tests:
refactoring God Class + new test added
It is not considered a good practise to commit a big chunck of modified files without providing a reason that explains why those files have been modified.
[Design recovery]
Describe the current design of the implementation of the selected feature in JFreeChart. Clearly indicate how this design is located in the architecture of the project.
[Design]
Compose a generic design that describes how the new functionality / feature should be integrated and how the design handles the interaction with the rest of the system. It should be clear that, in a) the types of changes recorded can be easily extended; in b) the choice for a specific storage format is merely an implementation detail; in c) the types of repositories supported can be easily extended.
It will be necessary to redesign the test suite in such a way that it can cope with the new feature and design.
[Management]
Estimate the effort required for (i) refactoring towards the new requirements; and (ii) changing/extending the tests.
[Refactoring]
Refactor the current implementation of JFreeChart such that it can handle one of the new features.
Adjust/extend the tests of the project to preserve their effectiveness and coverage during and after refactoring.
You will be required to perform a number of techniques presented during the lab sessions. These are:
This project emphasizes the sound, systematic analysis of the presented problem, the associated solution space and the chosen solution(s). The software reengineering sessions are composed in such a way as to prepare you for such a project. We stimulate you to assess the benefits and drawbacks of the techniques presented in the lab sessions, and ask you to exploit the analysis techniques wisely. You are free to use alternative analysis techniques.
What concerns the refactoring-part, we emphasize the use of tests. Our minimum requirements are:
To show that you have passed the assignment, you will have to demonstrate the following:
You have made a selection of analysis techniques (e.g., duplicated code analysis, mining software repositories, metric and visualization as seen in the lab sessions, but others are allowed as well), and have applied these techniques in a sound, systematic manner. You have indicated clearly (using screenshots, results of the interpretation of the output of the techniques) how you have used the results of these analysis techniques.
You have performed the above 5 activities (decomposed into (i) Design Recovery; (ii) Design; (iii) Management; and (iv) Refactoring) and discussed them in your project report.
The restructurings you have applied are behavior preserving.
The introduction of the new design clearly indicates the project is ready to be released in a language of choice. You are not supposed to carry out the refactoring process completely. Select and execute a set of refactorings that sufficently illustrate your proposed solution.
Aspects that we typically like to see addressed in the report are:
Note: similar to previous years, it is once again possible to submit your own project proposals. These proposals will be approved in case they provide a well-structured exercise on the reengineering techniques presented in the lab sessions. E.g., you can always propose to reengineer another software system, for instance the software system used in your thesis, or written for another case.