CO4206留学生辅导、讲解Java语言、Java讲解、辅导Re-Engineering
- 首页 >> Java编程CO4206 / CO7206 / CO7506 Assignment 3
Re-Engineering AssertJ
(This assignment carries 50% of the final mark)
Deadline: 23:59 GMT, Sunday 6th of January 2019
1 Overview
AssertJ is currently one of the most popular Java projects on Github (that are Mavenbuildable).
It is a relatively large system, comprising of the order of tens of thousands
of lines of code, and over 500 classes (you’ll calculate the precise metrics throughout
the course of this assignment).
1.1 Setup
As with the other assignments, we will use Github Classroom for this assignment.
Please clone your personal version of this repository here:
https://classroom.github.com/a/_4zauxdP
We have created a base repository for you, which contains the following familiar
directory structure:
analysisCode: This is where you keep the code that you use to analyse the
system. As a starting point, we have included the Java, R, and Bash scripts that
have been developed in the labs and in Assignment 1. You are free to (and
expected to) edit and improve them to suit your needs, and are free to do so in
any way that you wish (as long as this does not involve any additional 3rd party
code libraries or tools).
assertj-core This contains a snapshot of the assertj-core repository. This
contains the full subject system that you are expected to use as the basis for
your analysis. It does not contain any git data. If you wish to analyse the commithistory
of this repository (as we did in our lab session), you will have to clone a
separate copy of this on your local machine, and check-out the specific
repository we used in our repository (9d45e93). For this you would have to write:
git clone https://github.com/joel-costigliola/assertj-core.git
change directory into the assertj-core directory
git checkout 9d45e93
dataFiles This is where you can store any data files that are produced (e.g.
CSV files with metrics, data traces, images, etc.).
2
notesAndReports This is where you are expected to store your final report,
along with any other notes that you use in its production.
2 Instructions
For this assignment, the goal is to put all of the skills that we have learnt throughout the
course into practice.
Put yourself into the position you’ll hopefully find yourself in a few months from now.
You are a graduate employee, put in charge of re-engineering a large system (in this
case AssertJ).
Everything in your repository will count as your submission. The main component
will be the write-up, which will provide the necessary guidelines.
The detailed submission instructions (along with guidelines on how much detail is
expected in the report), are provided below. Each exercise is associated with a section
title you are expected to use in the report, along with a guideline for how much detail
is required, and to what extent it contributes to the final mark.
Five sections are to be completed:
1. Investigate the system without using any tools, to gain a broad under- standing of
its function, its key components, and architectural features. In doing so, adopt the
relevant re-engineering patterns, such as ”Read the Code in One Hour”, or ”Skim
Documentation”.
In your write-up, list every pattern that you used, how you applied it in the context
of this assignment, and what it enabled you to learn about the system. This latter
point is especially important. Try to highlight gen- uinely insightful observations.
Include any notes taken whilst applying the patterns in the notesAndReports
directory.
Submission: ”Initial Exploration”, 1.5 - 3 pages of the report.
Assessment of this section contributes to 15% of the final mark.
2. Carry out some static and dynamic analysis to calculate metrics that can give you
an insight into potential weaknesses (or strengths) within the system. For this you
should:
Calculate the LOC and the Weighted Method COunt for each class, and calculate
the LOC (i.e. the number of nodes in the CFG) and the Cyclomatic Complexity for
each method.
For particularly large methods (if there are any), you may wish to employ slice-based
metrics to gain an understanding, for example, of how cohesive the methods are.
Analyse the repository log to identify classes that have been particularly changeprone
throughout the development of the project.
Use dynamic analysis to highlight any particularly importantclasses that contribute
to the system when it executes.
In your write-up, detail what you did and how you went about it. If you wrote your
own code to carry out some form of analysis (on top of what is already in the code
3
base), provide some details. Although you are not expected to include complete
tables of results (these would be too large), you are expected to focus on specific
sub-groups - e.g. the top 10 results for a given metric. Do not include visualisations
or charts yet. The purpose of this part is to focus on method you used, and to
highlight individual classes or methods that appear to be notable.
Commit any scripts or code you used to the repository, and ensure that this is
described in the report. If you commit code to the repository and do not mention
it, then it will probably not be counted towards your assignment.
Submission: “Metrics and Analysis”, 4 - 7 pages, including at most 2.5 pages of
tables.
Assessment of this section contributes to 25% of the final mark.
3. Use visualisation to give you the big picture:
Use charts created in Excel or R to visualise metrics, or relationships between
metrics, to point you towards key problematic areas within the system.
Visualise the class structure.
Use visualisation to home-in on any code duplication in the system.
Given that there are over 500 classes in the system, you’ll need to use some
ingenuity to ensure that the results are readable when it comes to class diagrams
or duplication plots. For example, you could think of leaving out classes that are
never executed or have a metric value below a given threshold. In the class diagram
you could also use metrics to visually accentuate the most relevant / important
classes (and to correspondingly reduce the prominence of less important classes).
In your write-up, provide any visualisations you produce that you believe to be
insightful. For every visualisation, be sure to describe what it is showing, and why
you believe it to be useful (do not merely make this an assertion, as is the case
throughout this report, you need to provide an argument to justify such statements).
As with the previous section (and throughout the report) be sure to commit and
describe any code.
Submission: “The Big Picture”, 4 - 7 pages, including at most 3.5 pages of
visualisations.
Assessment of this section contributes to 25% of the final mark.
4. Use the evidence you have collected from your analyses to set out which areas of
the system could be candidates for re-engineering.
Review all of the evidence you have collected, choose a particular prob- lem that
you wish to focus on. Explain why this is a good candidate, using the evidence that
you have collected.
Submission: “Reengineering”, 1 page.
Assessment of this section contributes to 10% of the final mark.
4
5. Carry out the re-engineering task.
Carry out (or attempt to carry out) the reengineering task. Write test cases to try to
ensure that your refactoring has not broken anything and be incremental with
regular commits. Once you have finished, gather evidence to demonstrate that you
have succeeded in improving the quality of the system.
Note - depending on the scale of the reengineering task, it is possible that you will
only partially succeed with the stated reengineering aim. This is fine. It is better to
aim for a partial completion of a larger refactoring task, that to carry out a small, trivial
task. Assessment of this step will be based on the appropriateness of the selected
task (based on the data you have collected – is this really the most urgent task?),
and your selection and application of reengineering strategies.
Once you are done, make sure that you commit the final version of the reengineered
system.
Submission: “Reengineering”, 3-7 pages, including at most 3.5 pages of
visualisations.
Assessment of this section contributes to 25% of the final mark.
3 Submission Instructions
Deadline:
Please ensure that your report is committed to the notesAndReports folder, and is
formatted as a PDF.
Please ensure that your tools are executable via scripts or test-cases, and that
these are documented in the report.
Marking Criteria for Sections 1, 2, 3, 4 and 5:
Marks will be judged according to the percentage of task completion and correctness
of technical discussions, for each section. For example, if the tasks are 80% complete
and technical discussions are 60% correct, the mark for this section will be
(80%+60%)/2= 70% of this section’s mark.
Plagiarism:
This work is subject to departmental plagiarism protocols.
For students starting from October 2018, use the link to the Blackboard course site
Academic Integrity at Informatics (https://bit.ly/2PaCym2).
For other students, use the link to the
PDF: https://campus.cs.le.ac.uk/ForStudents/plagiarism/DoAIF.pdf