Let a constituent of a program by any of class, interface, method, field…
First step:
1. Define a program p, composed of a set of constituent C. 2. Define a set of refactorings R applying on any constituent. 3. Define a set of metrics M to compute on constituents. 4. Choose a subset of C, <c1,...,cn>. 5. Choose a subset of R, <r1,...,rm>. 6. Apply <r1,...,rm> on <c1,...,cn> to obtain <c'1,...,c'n> 7. Compute the metrics in M on both the ci and the c'j. 8. Apply the similarity measure and assess precision and recall.
Second step:
1. Choose a set of programs P (either different version of a same program and different similar programs). 2. Apply the similarity measure defined above.