  Segmentation, a new approach based on successive edge contraction is
introduced for extract method refactoring. It targets identification of
distinct functionalities implemented within a method. Segmentation builds upon
data and control dependencies among statements to extract functionalities from
code by successive contraction of edges in the Structure Dependence Graph
(SDG). Three edge contractions are explored, namely structural control edge
contraction, exclusive data dependence edge contraction, and sequential data
dependence edge contraction. The SDG is first constructed from the program,
which is then collapsed into a segment graph that captures dependence between
subtasks. An intermediate representation for data and control dependencies
among statements keeps the technique language independent. The approach is
evaluated on four case studies, including three from the open source domain,
and the findings are reported.
