Software Reuse versus Stability: Evaluating Advanced Programming Techniques

With system development becoming increasingly incremental, software reuse and stability stand out as two of the most desirable attributes of high-quality software. In this context, a key goal in contemporary software design is to simultaneously promote reuse and stability of the software modules. However, the achievement of this goal is far from trivial as it largely depends on the programming techniques being employed in the software implementation. While the use of a specific advanced mechanism can somehow contribute to modules’ reuse, it might also require developers to make various undesirable changes in their interfaces and implementation. In this context, there are a growing number of techniques for improving modularity, ranging from aspect-oriented and feature-oriented programming to composition filters. This paper presents an exploratory analysis of advanced programming techniques on how they make it possible to reach a better tradeoff of software reuse and stability. The evaluation was carried out based on 11 releases of 2 product lines, which were originally built to promote the stable reuse of common modules across different products. Our results revealed that a hybrid incarnation of feature-oriented and aspect-oriented programming seems to be the most promising programming technique. For instance, the combined use of virtual inner classes, mixin composition, and point cut-advice tended to promote product-line modules with both superior stability and reusability.

[1]  Thomas Leich,et al.  Aspectual Feature Modules , 2008, IEEE Transactions on Software Engineering.

[2]  Lodewijk Bergmans,et al.  Compose*: a Language- and Platform-Independent Aspect Compiler for Composition Filters , 2008 .

[3]  Carlos José Pereira de Lucena,et al.  Modularizing design patterns with aspects: a quantitative study , 2005, AOSD '05.

[4]  P. K. Suri,et al.  Software Reuse Metrics: Measuring Component Independence and its applicability in Software Reuse , 2009 .

[5]  Thomas Leich,et al.  Aspectual mixin layers: aspects and features in concert , 2006, ICSE '06.

[6]  Christian Prehofer,et al.  Feature-Oriented Programming: A Fresh Look at Objects , 1997, ECOOP.

[7]  Sérgio Soares,et al.  Assessing Intra-application Exception Handling Reuse with Aspects , 2009, 2009 XXIII Brazilian Symposium on Software Engineering.

[8]  Cláudio Sant'Anna,et al.  Evolving software product lines with aspects , 2008, 2008 ACM/IEEE 30th International Conference on Software Engineering.

[9]  Cristina V. Lopes,et al.  Aspect-oriented programming , 1999, ECOOP Workshops.

[10]  Francisco Dantas,et al.  Stability of Product Lines with Composition Filters : An Exploratory Study , 2010 .

[11]  Anand R. Tripathi,et al.  Data abstraction mechanisms in SINA/ST , 1988, OOPSLA 1988.

[12]  Charles W. Krueger,et al.  Software reuse , 1992, CSUR.

[13]  Jan Bosch,et al.  Composition Filters: Extended Expressiveness for OOPLs , 1992, OOPSLA 1992.

[14]  Reidar Conradi,et al.  An empirical study of software reuse vs. defect-density and stability , 2004, Proceedings. 26th International Conference on Software Engineering.

[15]  Mira Mezini,et al.  Conquering aspects with Caesar , 2003, AOSD '03.

[16]  Mira Mezini,et al.  An Overview of CaesarJ , 2006, LNCS Trans. Aspect Oriented Softw. Dev..

[17]  Anand R. Tripathi,et al.  Atomic delegation: object-oriented transactions , 1991, IEEE Software.

[18]  Stephen S. Yau,et al.  Design Stability Measures for Software Maintenance , 1985, IEEE Transactions on Software Engineering.

[19]  Diane Kelly,et al.  A study of design characteristics in evolving software using stability as a criterion , 2006, IEEE Transactions on Software Engineering.

[20]  Mira Mezini,et al.  Variability management with feature-oriented programming and aspects , 2004, SIGSOFT '04/FSE-12.

[21]  Mehmet Aksit,et al.  Examples of Reusing Synchronization Code in Aspect-Oriented Programming using Composition Filters , 1998 .