Formalizing Refactoring by Using Graph Transformation

Hiroshi KAZATO  Minoru TAKAISHI  Takashi KOBAYASHI  Motoshi SAEKI  

Publication
IEICE TRANSACTIONS on Information and Systems   Vol.E87-D   No.4   pp.855-867
Publication Date: 2004/04/01
Online ISSN: 
DOI: 
Print ISSN: 0916-8532
Type of Manuscript: Special Section PAPER (Special Section on Knowledge-Based Software Engineering)
Category: Metrics, Test, and Maintenance
Keyword: 
refactoring,  object-oriented design,  graph transformation,  graph grammar,  OCL,  meta model,  

Full Text: PDF(2MB)>>
Buy this Article




Summary: 
Refactoring is one of the promising techniques for improving software design by means of behavior-preserving structural transformation, and is widely taken into practice. In particular, it is frequently applied to design models represented with UML such as class diagrams. However, since UML design models includes multiple diagrams which are closely related from various views, to get behavior-preserving property, we should get the other types of design information and should handle with the propagation of the change on a diagram to the other diagrams. For example, to refactor a class diagram, we need behavioral information of methods included in the class and should also refactor diagrams which represent the behavior, such as state diagrams, activity diagrams. In this paper, we introduce refactoring on design models as transformations of a graph described by UML class diagram and action semantics. First, we define basic transformations of design models that preserve the behavior of designed software, and compose them into refactoring operations. We use Object Constraint Language (OCL) to specify when we can apply a refactoring operation. Furthermore we implement our technique on a graph transformation system AGG to support the automation of refactoring, together with evaluation mechanism of OCL expressions. Some illustrations are presented to show its effectiveness. The work is the first step to handle with refactoring on UML design models in integrated way.