Generative Programming and Component Engineering

GPCE Tutorial #2 (GP2)

"Problems We Can Solve with Power-Generics" by Stan Jarzabek, National University of Singapore

Date: Oct 22, afternoon


Repetitions are common in software. Genericity is a prime strategy to avoid repetitions. STL is a hallmark example of benefits that can be gained by exploiting software similarities and representing them in generic form. Can we replicate STL success in other application domains, e.g., business systems, in which we also observe much similarity?

The concept of power-generics addresses this question, trying to reach beyond what we can achieve with conventional generic design mechanisms, such as type-parameterization. The goal of power-generics is to let a programmer avoid redundancies whenever a programmer wishes to do so. The basic requirement for power-generics is to represent in a generic form any group of similar program structures of any kind and granularity, from similar classes, to recurring similar patterns of collaborating classes/components, to modules and subsystems.

Why are such power-generics useful and interesting? Power-generics let us exploit the benefits of non-redundancy and simplification in any domain where we observe substantial repetitions. They also open a sea of new possibilities for software engineering methods, in particular for software reuse via Product Line approach. Reuse goal is to exploit similarities in a family of software systems to boost productivity. Power-generics can help us build generic representation for a family of similar systems, extending the reuse capabilities of current Product Line Architectures based on components and architectures, whereby genericity is applied only in ad hoc way. In this context, power-generics have a role to play in defining effective strategies for variability management in Product Lines, and extending reuse benefits from product development to its evolution (maintenance).

The concept of power-generics creates a much missed bridge between programming language mechanisms and software engineering goals, such as reusability or maintainability.

In this tutorial, we bring power-generics from the concept to realization. Our solution is based on meta-level program decomposition, unrestrictive parameterization, and generation. It is realized by simple transformations at a meta-level program representation, with XVCL technique (XML-based Variant Configuration Language, xvcl.comp.nus.edu.sg).

XVCL program transformations are text-based, and have no regard to the rules of the underlying programming language. This makes validation of transformations in conventional sense difficult, if not impossible. A programmer has to understand a meta-program, as well as a concrete program, and properly relate one to another. He/she has to debug the program derivation process, as well as a concrete program.

On the other hand, power-generics with XCL bring attractive and unique engineering benefits, in terms of improved maintainability, reusability and software complexity management, in general. These benefits have been confirmed in industrial applications and lab studies. Empirical and analytical studies shed light on the sources of the observed benefits, as well as trade-offs and limitations involved in our realization of the power-generics concept. The also explain the difficulties of realizing power-generics with programming language mechanisms, as well as with component-based and architectural approaches.

In the tutorial, we discuss advantages and compromises involved in realizing power-generics with techniques such as XVCL. We revisit the issue of programming language support for software engineering goals. We compare XVCL with related approaches such as AOP, FOP and Java annotations. We also discuss automated detection in software systems of large-granularity similar program structures, as candidates for power-generics solutions, so-called structural clones.


Half day tutorial.

Required experience / target audience

The audience should have basic understanding of software design and development. No prior knowledge of a specific programming technologies is required. The target audience includes academic faculty, students and researchers, software practitioners, project leaders, analysts and designers.

Bio speaker

Stan Jarzabek is an Associate Professor at the Department of Computer Science, School of Computing, National University of Singapore. He spent 12 years of his professional career in industry and 20 years in academia. Stan is interested in all aspects of software design, in particular techniques for design of adaptable, easy to change (high-variability) software. He is an author of a book Effective Software Maintenance and Evolution: Reuse-based Approach, Taylor & Francis CRC Press, 2007, and published over 90 papers in international journals and conference proceedings (his recent paper received the ACM Distinguished Paper Award). Stan was a Principal Investigator in a multi-national collaborative project involving universities (NUS and the University of Waterloo) and companies in Singapore and Toronto.