Deriving Component Interfaces after a Restructuring of a Legacy System

Although there are contributions on component-oriented languages, components are mostly implemented using object-oriented (OO) languages. In this perspective, a component corresponds to a set of classes that work together to provide one or more services. Services are grouped together in interfaces that are each implemented by a class. Thus, dependencies between components are defined using the semantic of the enclosed classes, which is mostly structural. This makes it difficult to understand an architecture described with such links. Indeed, at an architectural level dependencies between components must represent functional aspects. This problem is worse, when the components are obtained by re-engineering of legacy OO systems. Indeed, in this case the obtained components are mainly based on the consistency of the grouping logic. So, in this paper we propose an approach to identify the interfaces of a component according to its interactions with the other components. To this end, we use formal concept analysis. The evaluation of the proposed approach via an empirical study showed that the identified interfaces overall correspond to the different functional aspects of the components.

[1]  Robert W. Schwanke,et al.  Using Neural Networks to Modularize Software , 1994, Machine Learning.

[2]  Stéphane Ducasse,et al.  Recovering high-level views of object-oriented applications from static and dynamic information , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[3]  Nenad Medvidovic,et al.  Using software evolution to focus architectural recovery , 2006, Automated Software Engineering.

[4]  Gregor Snelting,et al.  Assessing Modular Structure of Legacy Code Based on Mathematical Concept Analysis , 1997, Proceedings of the (19th) International Conference on Software Engineering.

[5]  Hausi A. Müller,et al.  A reverse-engineering approach to subsystem structure identification , 1993, J. Softw. Maintenance Res. Pract..

[6]  Salah Sadou,et al.  From Object-Oriented Applications to Component-Oriented Applications via Component-Oriented Architecture , 2011, 2011 Ninth Working IEEE/IFIP Conference on Software Architecture.

[7]  Richard S. Hall,et al.  OSGI in Action, Creating Modular Applications in Java , 2011 .

[8]  Claudio Riva,et al.  Combining static and dynamic views for architecture reconstruction , 2002, Proceedings of the Sixth European Conference on Software Maintenance and Reengineering.

[9]  Joseph Gil,et al.  Revealing class structure with concept lattices , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[10]  Arie van Deursen,et al.  Identifying objects using cluster and concept analysis , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[11]  Salah Sadou,et al.  Identifying components in object-oriented programs using dynamic analysis and clustering , 2009, CASCON.

[12]  Nicolas Anquetil,et al.  Recovering software architecture from the names of source files , 1999, J. Softw. Maintenance Res. Pract..

[13]  Hironori Washizaki,et al.  A technique for automatic component extraction from object-oriented programs by refactoring , 2005, Sci. Comput. Program..

[14]  Meir M. Lehman,et al.  On understanding laws, evolution, and conservation in the large-program life cycle , 1984, J. Syst. Softw..

[15]  Hong Yan,et al.  DiscoTect: a system for discovering architectures from running systems , 2004, Proceedings. 26th International Conference on Software Engineering.

[16]  Soo Dong Kim,et al.  Component identification method with coupling and cohesion , 2001, Proceedings Eighth Asia-Pacific Software Engineering Conference.

[17]  S. Mansoor Sarwar,et al.  Software clustering techniques and the use of combined algorithm , 2003, Seventh European Conference onSoftware Maintenance and Reengineering, 2003. Proceedings..

[18]  Frank Tip,et al.  Reengineering class hierarchies using concept analysis , 1998, SIGSOFT '98/FSE-6.

[19]  Houari A. Sahraoui,et al.  Deriving high-level abstractions from legacy software using example-driven clustering , 2011, CASCON.

[20]  S. Lotfi,et al.  An Evolutionary Approach for Partitioning Weighted Module Dependency Graphs , 2007, 2007 Innovations in Information Technologies (IIT).

[21]  Welf Löwe,et al.  Architecture Recovery by Semi-Automatic Component Identification , 2003, Electron. Notes Theor. Comput. Sci..

[22]  Bernhard Ganter,et al.  Formal Concept Analysis: Mathematical Foundations , 1998 .

[23]  Soo Dong Kim,et al.  A systematic method to identify software components , 2004, 11th Asia-Pacific Software Engineering Conference.

[24]  Benjamin Klatt,et al.  Reverse Engineering Software-Models of Component-Based Systems , 2008, 2008 12th European Conference on Software Maintenance and Reengineering.

[25]  Paolo Tonella,et al.  Migrating interface implementations to aspects , 2004, 20th IEEE International Conference on Software Maintenance, 2004. Proceedings..

[26]  David Garlan,et al.  Software architecture: a roadmap , 2000, ICSE '00.

[27]  Houari A. Sahraoui,et al.  Applying concept formation methods to object identification in procedural code , 1997, Proceedings 12th IEEE International Conference Automated Software Engineering.

[28]  Salah Sadou,et al.  Restructuring Object-Oriented Applications into Component-Oriented Applications by Using Consistency with Execution Traces , 2010, CBSE.

[29]  Stéphane Ducasse,et al.  Software Architecture Reconstruction: A Process-Oriented Taxonomy , 2009, IEEE Transactions on Software Engineering.

[30]  Emden R. Gansner,et al.  Using automatic clustering to produce high-level system organizations of source code , 1998, Proceedings. 6th International Workshop on Program Comprehension. IWPC'98 (Cat. No.98TB100242).

[31]  Arie van Deursen,et al.  Aspect Mining and Refactoring , 2003 .

[32]  Song C. Choi,et al.  Extracting and restructuring the design of large systems , 1990, IEEE Software.