Semi-automating Small-Scale Source Code Reuse via Structural Correspondence

50 %
50 %
Information about Semi-automating Small-Scale Source Code Reuse via Structural Correspondence
Technology

Published on November 18, 2008

Author: rylan.cottrell

Source: slideshare.net

Description

http://doi.acm.org/10.1145/1453101.1453130

Semi-automating Small-Scale Source Code Reuse via Structural Correspondence Rylan Cottrell, Robert J. Walker, Jörg Denzinger Laboratory for Software Modification Research University of Calgary

Manual Approach

Manual Approach

Manual Approach

Manual Approach

Manual Approach

Manual Approach

Manual Approach ??? 

Manual Approach ???  Developer’s target 

Manual Approach Original context (the reuse source) 

Manual Approach Original context  Developer’s target 

Manual Approach MethodDeclara:on node  MethodDeclara:on method  1 Decision  Original context  Developer’s target 

Manual Approach 2 Decisions  Original context  Developer’s target 

Manual Approach 4 Decisions  Original context  Developer’s target 

Manual Approach 4 Decisions  Original context  Developer’s target 

Manual Approach StringBuffer signature = new  StringBuffer signature = new    StringBuffer();    StringBuffer();  5 Decisions  Original context  Developer’s target 

Manual Approach Signature.append(`(‘);  Signature.append(getParent(method);  6 Decisions  Original context  Developer’s target 

Manual Approach signature.append(`(’);  6 Decisions  Original context  Developer’s target 

Manual Approach List parameters = node.parameters();  List parameters = method.parameters();  9 Decisions  Original context  Developer’s target 

Manual Approach 10 Decisions  Original context  Developer’s target 

Manual Approach 11 Decisions  Original context  Developer’s target 

Manual Approach 11 Decisions  Original context  Developer’s target 

Manual Approach 12 Decisions  Original context  Developer’s target 

Manual Approach •  12 detailed decisions!  •  What maOers: “Is this what I really  want?”  •  Developers aOen:on is split between the  gory details and the high‐level ques:ons.     •  Time constraints and tedium can cause  the developer to make bad decisions. 

Alternative Approaches •  Re‐implementa:on  – But the developer was stuck.  •  Formal specifica:ons (e.g., Gouda91, Yellin97).  – Heavy weight and are required to be pre‐exis:ng.  •  Pragma:c reuse planning/enactment (e.g.,  Holmes07,08).  – Designed for medium to large scale‐reuse.  •  Code clone / ``copy & paste’’ management (e.g.,  Duala‐Ekoko07, Jablonski07).  – Assists developers to make consistent changes. 

Our Approach •  Developer should focus on the conceptual  issues  •  Goals  – Automa:on of the simple steps  – “What if” scenarios, back away  – Cheaper than performing the reuse manually   Integrate 

Our Approach •  Developer should focus on the conceptual  issues  •  Goals  – Automa:on of the simple steps  – “What if” scenarios, back away  – Cheaper than performing the reuse manually   MethodDeclara:on node  MethodDeclara:on method  Original context (AST)  Developer’s target (AST)  Variable Declara:on  Variable Declara:on  Type  Type  Value: MethodDeclara1on  Value: MethodDeclara1on  Name  Name  Value: node  Value: method 

Determining Correspondence •  Generalize the common elements between the two ASTs.   •  The similarity of the child nodes is used to inform the  parent.  •  If similarity > 0 then we create a connec:on  Original context (AST)  Developer’s target (AST)  Variable Declara:on  Variable Declara:on  Type  Type  Value: MethodDeclara1on  Value: MethodDeclara1on  Name  Name  Value: node  Value: method 

Determining Correspondence •  Generalize the common elements between the two ASTs.   •  The similarity of the child nodes is used to inform the  parent.  •  If similarity > 0 then we create a connec:on  Original context (AST)  Developer’s target (AST)  Variable Declara:on  Variable Declara:on  Type  Similarity = 1  Type  Value: MethodDeclara1on  Value: MethodDeclara1on  Name  Name  Value: node  Value: method 

Determining Correspondence •  Generalize the common elements between the two ASTs.   •  The similarity of the child nodes is used to inform the  parent.  •  If similarity > 0 then we create a connec:on  Original context (AST)  Developer’s target (AST)  Variable Declara:on  Variable Declara:on  Type  Type  Value: MethodDeclara1on  Value: MethodDeclara1on  Name  Similarity = 0  Name  Value: node  Value: method 

Determining Correspondence •  Generalize the common elements between the two ASTs.   •  The similarity of the child nodes is used to inform the  parent.  •  If similarity > 0 then we create a connec:on  Original context (AST)  Developer’s target (AST)  Variable Declara:on  Variable Declara:on  Type  Type  Value: MethodDeclara1on  Value: MethodDeclara1on  Name  Similarity = 0  Name  Value: node  Value: method 

Determining Correspondence •  Generalize the common elements between the two ASTs.   •  The similarity of the child nodes is used to inform the  parent.  •  If similarity > 0 then we create a connec:on  Original context (AST)  Developer’s target (AST)  Variable Declara:on  Variable Declara:on  Type  Type  Value: MethodDeclara1on  Value: MethodDeclara1on  Name  Name  Value: node  Similarity = 1/3  Value: method 

Determining Correspondence •  Generalize the common elements between the two ASTs.   •  The similarity of the child nodes is used to inform the  parent.  •  If similarity > 0 then we create a connec:on  Original context (AST)  Developer’s target (AST)  Variable Declara:on  Variable Declara:on  Type  Similarity = 1  Type  Value: MethodDeclara1on  Value: MethodDeclara1on  Name  Name  Value: node  Similarity = 1/3  Value: method 

Determining Correspondence •  Generalize the common elements between the two ASTs.   •  The similarity of the child nodes is used to inform the  parent.  •  If similarity > 0 then we create a connec:on  Original context (AST)  Developer’s target (AST)   Similarity = 2/3  Variable Declara:on  Variable Declara:on  Type  Similarity = 1  Type  Value: MethodDeclara1on  Value: MethodDeclara1on  Name  Name  Value: node  Similarity = 1/3  Value: method 

Semantics •  Compare syntac:cally‐different structures of similar  seman:cs.  –  Variable (e.g., field, parameter, local variable declara:on)   –  Condi:onal (e.g., if and switch)  –  Excep:on handling (e.g., try‐catch, throw)  –  Loops (e.g., for, while, do)  •  For example:  Iterator iter = parameters.iterator(); while( iter.hasNext() ) { } for(Iterator iter = parameters.iterator(); iter.hasNext();) { }

Semantics •  Compare syntac:cally‐different structures of similar  seman:cs.  –  Variable (e.g., field, parameter, local variable declara:on)   –  Condi:onal (e.g., if and switch)  –  Excep:on handling (e.g., try‐catch, throw)  –  Loops (e.g., for, while, do)  •  For example:  Iterator iter = parameters.iterator(); while( iter.hasNext() ) { } for(Iterator iter = parameters.iterator(); iter.hasNext();) { }

Semantics •  Compare syntac:cally‐different structures of similar  seman:cs.  –  Variable (e.g., field, parameter, local variable declara:on)   –  Condi:onal (e.g., if and switch)  –  Excep:on handling (e.g., try‐catch, throw)  –  Loops (e.g., for, while, do)  •  For example:  Iterator iter = parameters.iterator(); while( iter.hasNext() ) { } for(Iterator iter = parameters.iterator(); iter.hasNext();) { }

Generalization of Best Fit Original context (AST)  Developer’s target (AST)  S=0.2  S=0.7  S=1  S=1  S=1  S=0.5  S=0.65  S=1  S=0.8 

Generalization of Best Fit Original context (AST)  Developer’s target (AST)  S=0.2  S=0.7  S=1  S=1  S=1  S=0.5  S=0.65  S=1  S=0.8  •  Algorithm  1.  Inclusion‐Threshold (25%)  

Generalization of Best Fit Original context (AST)  Developer’s target (AST)  S=0.7  S=1  S=1  S=1  S=0.5  S=0.65  S=1  S=0.8  •  Algorithm  1.  Inclusion‐Threshold (25%)   2.  Difference‐Threshold (5%) 

Generalization of Best Fit Original context (AST)  Developer’s target (AST)  S=0.7  S=1  S=1  S=1  S=0.5  S=1  •  Algorithm  1.  Inclusion‐Threshold (25%)   2.  Difference‐Threshold (5%)  3.  Developer Input 

Generalization of Best Fit Original context (AST)  Developer’s target (AST)  S=0.7  S=1  S=1  S=0.5  S=1  •  Algorithm  1.  Inclusion‐Threshold (25%)   2.  Difference‐Threshold (5%)  3.  Developer Input 

Jigsaw

Jigsaw

Jigsaw

Jigsaw

Jigsaw

Evaluation - Experiment •  “Can Jigsaw mimic the results of real small‐scale  reuse tasks, to produce an integra:on of  comparable quality?”  •  Found 16 test cases of small‐scale via a clone  detector.  •  Results  – Recreated integra:on results of equal quality 12 out  of the 16 test cases.  – In the worst case, 2 lines of code were not integrated.   – 5 test cases required developer input. 

Evaluation – Case Studies •  2 Industrial developers.  •  4 tasks were randomly chosen from the experiment.   •  “Can an industrial developer use Jigsaw to complete small‐ scale reuse tasks?”  –  Developers were able to reproduce integra:on results.  –  Developers found Jigsaw supported them in performing the  task.  •  “Do industrial developers find Jigsaw a poten:ally useful  tool?”  –  `[Jigsaw] helped me iden:fy a method call I did not realize was  missing.’’  –  Jigsaw allowed him to “focus on [his] intent.”  •  “What usability changes would improve the efficacy of  Jigsaw in an industrial context?”  –  Greater control over correspondence connec:ons. 

Discussion •  Is this promo:ng a bad prac:ce?  •  Simple type and inheritance hierarchy  checking.  •  Node ordering problems:  C A B A  B C C  A 

Summary •  Developers must worry about the high‐level issues while wading  through a sea of gory details.  –  Can lead to bad decisions.    •  Jigsaw uses structural correspondence determined through syntac:c  and seman:c informa:on to integrate the original context into the  developer’s target.  •  Jigsaw semi‐automates the integra:on allowing the developer to try  “what if” scenarios, cheaply.  •  Jigsaw empowers the developer to focus on conceptual issues.  –  Decision about whether to apply “copy &paste” becomes central.    lsmr.cs.ucalgary.ca/projects/jigsaw/   

Add a comment

Related presentations

Related pages

Semi-automating small-scale source code reuse via ...

Semi-automating small-scale source code reuse via structural ... structural correspondence for ... Semi-automating small-scale source code reuse via ...
Read more

Semi-automating small-scale source code reuse via ...

Page 1. Semi-automating Small-Scale Source Code Reuse via Structural Correspondence Rylan Cottrell, Robert J. Walker, Jörg Denzinger Laboratory for ...
Read more

via Structural Correspondence

via Structural Correspondence on ... ranging from 3,000 to 112,000 source lines from this ... scale source code reuse via structural correspondence.
Read more

Euklas - Eclipse Users' Keystrokes Lessened by Attaching ...

... J., Semi-automating small-scale source code reuse via structural correspondence ... A code reuse interface for non ... a step towards large-scale reuse ...
Read more

Source Code-Based Recommendation Systems - Home - Springer

Source code-based recommendation ... Denzinger, J.: Semi-automating small-scale source code reuse via ... on violations of structural source-code ...
Read more

Code Reuse | LinkedIn

View 2934 Code Reuse posts, presentations, experts, and more. Get the professional knowledge you need on LinkedIn. LinkedIn Home What is LinkedIn?
Read more

Anti-unification (computer science) - Wikipedia, the free ...

Code factoring: Cottrell, Rylan (Sep 2008), Semi-automating Small-Scale Source Code Reuse via Structural Correspondence, Univ. Calgary ...
Read more

Search results for "Robert J. Walker" – FacetedDBLP

Found 55 publication records. Showing 55 according to the selection in the facets . Hits ? Authors Title Venue Year Link Author keywords; 1: Mostafa Hamza ...
Read more

Rylan Cottrell

Rylan Cottrell,University ... The End-to-End Use of Source Code ... Semi-automating small-scale source code reuse via structural correspondence ...
Read more