+ All Categories
Home > Documents > IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program...

IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program...

Date post: 09-Sep-2020
Category:
Upload: others
View: 8 times
Download: 0 times
Share this document with a friend
26
IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar
Transcript
Page 1: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation

Refactoring via Program Slicing and SlidingJune 2007

Ran EttingerSoftware Asset Management GroupIn HRL Seminar

Page 2: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation2

Agenda

� When Refactoring Met Slicing…

� Motivating example and some definitions

� Original Research Question (2001)

– “How can program slicing and related analyses assist in building automatic tools for refactoring?”

� Initial Results (2003)

� “Untangling: a slice extraction refactoring” [AOSD04]

� The need for more…

� Final Results (2006)

� Sliding on top of a formal theory for slicing-based refactoring...

� Some Further Challenges

Page 3: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation3

When Refactoring Met Slicing…

� Refactoring is a discipline of change

– Of the internal structure of a software system

– Through small and well-defined source-code transformations

– That preserve the (observable) behavior of the original system (program)

– Demo 1: Refactoring in Eclipse

Slicing is the study of meaningful subprograms

“When debugging unfamiliar programs programmers use program pieces

called slices which are sets of statements related by their flow of

data. The statements in a slice are not necessarily textually contiguous,

but may be scattered through a program” [Mark Weiser, CACM82 ]

Given a program and a variable (at a point) of interest, a slice of the program on

that variable is a subprogram that preserves the original behavior, with respect to that variable

Demo 2: Slicing in Eclipse

Page 4: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation4

When Refactoring Met Slicing…

� Refactoring is a discipline of change

– Of the internal structure of a software system

– Through small and well-defined source-code transformations

– That preserve the (observable) behavior of the original system (program)

– Demo 1: Refactoring in Eclipse

� Slicing is the study of meaningful subprograms

– “When debugging unfamiliar programs programmers use program pieces

called slices which are sets of statements related by their flow of

data. The statements in a slice are not necessarily textually contiguous,

but may be scattered through a program” [Mark Weiser, CACM82 ]

– Given a program and a variable (at a point) of interest, a slice of the program on

that variable is a subprogram that preserves the original behavior, with respect to that variable

– Demo 2: Slicing in Eclipse

Page 5: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation5

Original Research Question

� Initial observation:

– “Programmers use slices when refactoring”

• Paraphrasing Weiser [CACM82]

� Context

– Intercomp’s Cobol-to-Java

– OOPSLA’00

– Fowler’s refactoring book [Fow]

• The video-store example: from procedural design to objects

� The research question:

– “How can program slicing and related analyses assist in building automatic tools for refactoring?”

Page 6: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation6

Initial Results (1)

� A definition of an “Extract Slice” mini refactoring

– Given a program and a variable (at a point) of interest, extract the slice of the program on that variable as a reusable method, and update the original program to reuse the extracted slice

– Can participate in solving “Extract Method”, “Replace Temp with Query”, and other known refactorings

� Nate: an Eclipse plugin for slice ectraction

– Supporting slice extraction on a small subset of Java

– Supported by an Eclipse Innovation Grant from IBM

– Implemented with Mathieu Verbaere: the slicer and MSc thesis– Demo 3: The “Replace Temp with Query” refactoring in Eclipse+Nate

� An investigation of untangling refactorings to introduce aspects

� “Untangling: a slice extraction refactoring” [AOSD04, with Mathieu]

Page 7: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation7

Initial Results (2): The Need for More

� State-of-the-art slice-extraction solutions

– Block-based slicing by Maruyama [SSR01]

– Tucking by Lakhotia and Deprez [IST98]

– Procedure extraction by Komondoor and Horwitz [POPL00,IWPC03]

� Identified limitations (Nate and the related work)

– Strong preconditions

• E.g. no duplication of assignments

• Leading to low applicability

– Informal (unconvincing) correctness proof

� Observation/Realization:

– Weakening of preconditions (i.e. improving applicability) will require a careful (preferably formal) investigation

Page 8: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation8

Final Results (1)

� A formal theory of slicing-based refactoring

– Based on “predicate calculus and program semantics”[Dijkstra and Scholten] and the refinement calculus [Back,Morgan]

– Supporting a simple imperative programming language

� A designated slice-refinement proof method

– Separate correctness proofs for extracted slice and complement

– Together yield full refinement (i.e. correctness)

– Works only for deterministic programs!

• No problem: Refactoring deals with executable code, not specifications

Page 9: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation9

Final Results (2)

� A novel program decomposition into small entities called slides

– Smaller than slices: Ignore data flow influences

– Participates in the formation of (potentially) smaller complements

� A highly applicable solution to the slice-extraction refactoring problem, called sliding

– A kind of code-motion transformation, like in compilers

– Trading code reusability and readability with runtime efficiency

– Given a program and a variable of interest, sliding extracts the variable’s slice

from its complement; but what’s in the complement?

• The union of all remaining slices?

• No. It’s a union of slides: Reusing the extracted variable’s final value

Page 10: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation10

Final Results (3)

� A concept of smaller slices called co-slicing

– A co-slice is made of a (meaningful) set of slides

� A provably correct slicing algorithm

– Based on the static-single-assignment (SSA) form

– A slice is made of a set of slides, too

– Why is the algorithm important?

• Constructive description of transformations

Page 11: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation11

Some Further Challenges

� Implementing the theoretical framework and algorithms

� Collecting empirical results

� Extending to “real” languages

� Apply sliding to more refactorings (e.g. “Separate Query from Modifier” [Fow], arbitrary method extraction)

� Apply the sliding-related refactorings in bigger reengineering challenges (e.g. Convert Procedural Design to Objects [Fow], componentization, conversion to SOA)

� Sliding beyond refactoring (e.g. in optimizing compilers, code obfuscation)

Page 12: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation12

Thanks!

� Acknowledgements

– My DPhil [Ett] supervisor Oege de Moor

• And Mike Spivey, supervising during Oege’s Sabbatical (2003)

– Past and present members of the Programming Tools Group

at Oxford, in particular Iván Sanabria, Yorck Hünke, Stephen

Drape, Mathieu Verbaere, Damien Sereni

– My thesis examiners Mark Harman and Jeremy Gibbons

– Yishai Feldman and the SAM group

Page 13: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation13

References

� [CACM82] Programmers use slices when debugging, M. Weiser, 1982

� [Back] A calculus of refinements for program derivations, 1988

� [Dijkstra and Scholten] Predicate calculus and program semantics, 1990

� [Morgan] Programming from specifications (2nd ed.), 1994

� [IST98] Restructuring programs by tucking statements into functions, A. Lakhotia and J.-C. Deprez, 1998

� [FOW] Refactoring: Improving the Design of Existing Code, M. Fowler, 2000

� [POPL00] Semantics-preserving procedure extraction, R. Komondoor and S. Horwitz, 2000

� [SSR01] Automated method-extraction refactoring by using block-based slicing, K. Maruyama, 2001

� [IWPC03] Effective automatic procedure extraction, R. Komondoor and S. Horwitz, 2003

� [AOSD04] Untangling: a slice extraction refactoring, R. Ettinger and M. Verbaere, 2004

� [Ett] Refactoring via Program Slicing and Sliding, DPhil thesis, 2006

– Submitted version http://progtools.comlab.ox.ac.uk/members/rani/sliding_thesis_esub101006.pdf

• Successfully defended on 18 January 2007, with minor corrections

– Revised version http://progtools.comlab.ox.ac.uk/members/rani/sliding_thesis_rev1_150607.pdf

• Corrections need to be approved…

Page 14: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation14

Backup

Page 15: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation15

int prod=1;

for (int i=0; i<a.length; i++) {

prod *= a[i];

}

System.out.println("The sum is " + sum);

System.out.println("The product is " + prod);

int sum=0;

for (int i=0; i<a.length; i++) {

sum += a[i];

}

On Sliding and Code-Motion Transformations

Page 16: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation16

int sum=computeSum(a);

int prod=1;

for (int i=0; i<a.length; i++) {

prod *= a[i];

}

System.out.println("The sum is " + sum);

System.out.println("The product is " + prod);

On Sliding and Code-Motion Transformations

int computeSum(int[] a) {

int sum=0;

for (int i=0; i<a.length; i++) {

sum += a[i];

}

return sum;

}

Page 17: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation17

int prod=1;

for (int i=0; i<a.length; i++) {

prod *= a[i];

}

System.out.println("The sum is " + computeSum(a));

System.out.println("The product is " + prod);

int computeSum(int[] a) {

int sum=0;

for (int i=0; i<a.length; i++) {

sum += a[i];

}

return sum;

}

On Sliding and Code-Motion Transformations

Page 18: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation18

A Slicing ExampleOriginal program Slice for variable nl

* Slicer developed by Mathieu Verbaere

* Support a small subset of Java

Page 19: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation19

Extract Slice: The Extracted Method

Page 20: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation20

Extract Slice: The Complementredundant fragments ‘in’ is not modified

Page 21: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation21

Extract Slice as a Method (rejection)

Refactoring rejected:

Input statements in extracted code

(internal state of ‘in’ is modified)

Page 22: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation22

Example: Fowler’s video-store

Page 23: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation23

Page 24: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation24

Page 25: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation25

Page 26: IBM Haifa Research Lab...IBM Haifa Research Lab © 2007 IBM Corporation Refactoring via Program Slicing and Sliding June 2007 Ran Ettinger Software Asset Management Group In HRL Seminar

IBM Haifa Research Lab

© 2007 IBM Corporation26


Recommended