Background for the header
To the home page of the University of Antwerp



LORE / Teaching / SRe2LIC / Opdracht 2007

Back to SRe2Lic.

Context | Assignment | Result


StatCVS is an open source software system that generates statistics about a module in a Concurrent Versions System repository. For Subversion , a CVS alternative, a similar software system was developed, named StatSVN.

StatSVN inherits a number of features from StatCVS, and additionally provides some new features. A list of these new features is presented at the StatSVN wiki.

Complementary to the standard usage of a log-file, StatSVN acquires information using a connection with the repository. In StatCVS, this information is extracted from the log-file.


As a reengineering team, you are asked to restructure the implementation of StatSVN and StatCVS such that these projects implement an identical interface for the extraction of the information common to StatSVN and StatCVS.

Thus, the choice of the information source to be used by StatSVN and StatCVS to extract information should become an implementation detail.

More specifically, we ask you to perform the following activities, and report about these in your project report:

[Design recovery]

  1. Describe the current design of the implementation of StatSVN and StatCVS what concerns the extraction of information common to both projects. Clearly indicate how this design is located in the architecture of both projects.


  1. Compose a single generic design describing the information extraction services of StatSVN and StatCVS. This interface should clarify that the choice of using a log-file or a connection with the repository is merely an implementation detail. This interface serves as a functional specification for the tests. Since the proposed interface will be shared by both StatSVN and StatCVS, you can demonstrate the functional equivalence of both projects with regard to these services by reusing the tests across the projects.

  2. [Management]

    1. Estimate the effort required for (i) refactoring towards the interface in both projects; and (ii) changing/extending the tests.


    1. Refactor the current implementation of StatSVN and StatCVS such that both make use of the proposed interface.

    2. Adjust/extend the tests of both projects as to achieve an adequate coverage for extracting the common information before, during and after refactoring. These tests should be reusable across both projects (due to the functional equivalence).

You will be required to perform a number of techniques presented during the lab sessions. These are:

  • Analyse:
    • Duplicated Code Analysis
    • Mining Software Repositories
    • Metrics and visualization
  • Restructuring:
    • Testing
    • Refactoring

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:

  • Determine the extent to which the current tests provide feedback on your future refactoring-steps. Quantify this.
  • Compose an argument discussing why the tests are (in)adequate for your chosen refactoring scenario, and adjust the tests in case this is required. Be efficient with regard to the time invested in testing.


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.

    • You can demonstrate the mapping between each of the classes from the original structure with the new structure.
    • The compilation process succeeds flawlessly.
    • The tests run without flaws, and demonstrate clearly that the extraction of information common to both projects is implemented correctly.

  • The introduction of the new design clearly indicates the concepts and responsibilities relevant for F_queryServer. A future implementation of F_queryServer in StatCVS will be efficient.

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, of written for another case.


Valid HTML 4.01! Valid CSS!

 Lab On REengineering - Antwerpen, last modified 15:47:27 11 April 2007