GanttProject is free open source software for project scheduling and management. This application focus on creating Gantt charts, which is a bar chart representing project scheduling.
Links:
Let's supposed you and your team were hired by a hypothetical company to refactor GanttProject since they use this open-source software in their daily activities. Although GanttProject is a good software for project scheduling, it lacks an important feature for the hypothetical company. In this company, employees (resources) can be shared among different projects. Each project has a different manager, and a manager should not have access to another project's schedule. Therefore, each project is on a different file with a specific manager responsible for it.
The new feature that should be supported in GanttProject is to allow a shared pool of resources amongst different project files. That way, managers can verify resources' disponibility without having to share the whole projects.
Please pay attention to the following instructions. You need to send an email to Henrique Rocha and John Businge with:
In order to work on this assignment, the following instructions apply:
refactoring God Class or fixing God Class (Extract Class) or fixing God Class (removing code clones)
Another example, let's suppose you also introduced new tests along with the refactoring:
refactoring God Class + new test added
Of course, pushing the tests on a separate commit would also be acceptable (actually, it would be better to do so).
It is not considered good practice to commit a big chunk of modified files without providing a reason that explains why those files have been modified. Therefore, try to split your commits into smaller units (that may help with the grading).
[I. Design recovery]
Describe the current design implementation of the selected feature in GanttProject. Clearly indicate how this design is located in the architecture of the project.
[II. 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 the new design not only supports the new feature but also does not severely impact the code quality.
It will be necessary to redesign the test suite in such a way that it can cope with the new feature and design.
[III. Management]
Estimate the effort required for (i) refactoring towards the new requirements; and (ii) changing/extending the tests.
[IV. Refactoring]
Refactor the current implementation of GanttProject such that it can handle the new feature.
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 and tools as much as you deem necessary.
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:
The restructurings you have applied are behavior preserving.
Aspects that we typically like to see addressed in the report are:
If you have any questions about the project or the report, please contact the assistants.
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. You can always propose to reengineer another software system, for example, the software system used in your thesis, or written for another case.