10th International Conference on Software Reuse, 25 - 29 May 2008, Beijing China.

Tutorial 1 :

Variability Management for Product Lines with a Generative Technique:  Reuse Beyond Components by Exploiting Software Similarity Patterns

Reported by Stan Jarzabek and Hongyu Zhang>>

     Component-based and architecture-centric techniques are the basic means to achieve reuse via Software Product Line (SPL) approaches. Component platforms providing various mechanisms for component reuse gain popularity.

 

    Advanced platforms (e.g., .NET or JEE) also start incorporating unconventional generative mechanisms for injection of aspect code that affects (crosscuts) many components. Aspect code seamlessly extends functionality of base components with extra, context-specific functionality such as logging, synchronization or persistence.

 

     In this tutorial, we show how much higher levels of reuse can be achieved by applying XVCL  [1] (http://xvcl.comp.nus.edu.sg) that supports not only aspects, but also other powerful mechanisms for handling variability in software, such as change propagation and generic design. These generative mechanisms allow us to streamline non-local customizations with system-wide impact, that spread over component configurations. They also help us unify multiple similar component versions with generic, adaptable meta-components. These strategies can replace labor-intensive manual customizations for reuse with semi-automated customizations, increasing productivity during derivation of custom systems from a reusable component base (a Product Line Architecture, PLA).  XVCL approach can reduce the complexity of a PLA, and simplifies its evolution by orders of magnitude as compared to conventional component-based PLAs. The approach works for common services such as aspects, as well as at application domain layers of user interfaces or business logic, which are. particularly difficult to componentize for reuse.

 

    Example of PL problems we address in the tutorial: Industrial SPLs may involve thousands of features. Features are often inter-dependent in complex ways, affecting many components in a PLA.  Such variability requires a mechanism to manage one-to-many, complex mappings between variant features and affected components. Conventional component-based and architecture-centric approaches do not have explicit mechanisms to manage that. The symptoms of the problem include explosion of similar component versions and difficulties to find, customize and integrate component configurations during derivation SPL members. Other problems include: the difficulty to reuse already implemented features when deriving new SPLC members, difficulty to enhance existing products with product-specific features without disconnecting them from the PLA, and difficulty to propagate upgrades of the PLA to SPL members without loosing product-specific customizations.

 

    In the tutorial, we show how the above problems can be tackled by complementing architecture/component approaches with a generative technique of XVCL The idea of the approach is to build generic, adaptable software structures, with explicit record of customizations required to accommodate variant features in their legal combinations into SPL members. XVCL helps us to build such generic structures, which become a core of PLA representation. Concrete, executable components of a custom SPL member are derived  from XVCL-based PLA. Differences among SPL members caused by variant features are specified as deltas from these generic structures, and automatically propagated to SPL members.

 

    The approach to reuse presented in the tutorial has been applied in lab studies and industrial projects [1][2].

References

1.     Jarzabek, S. Effective Software Maintenance and Evolution: Reuse-based Approach, Taylor & Francis CRC Press, 2007

2.     Pettersson, U., and Jarzabek, S. “Industrial Experience with Building a Web Portal Product Line using a  Lightweight, Reactive Approach,” ESEC-FSE'05, European Software Engineering Conference and ACM SIGSOFT Symposium on the Foundations of Software Engineering, ACM Press, September 2005, Lisbon, pp. 326-335