This is a research project involving the Software Productivity Group
, led by Paulo Borba at the Informatics Center / UFPE, and the Software Technology Group
, led by Mira Mezini at the Technische Universitšt Darmstadt
The software product line engineering paradigm puts the focus on the design and implementation of software system families rather than individual software applications. In the context of this paradigm, programming language support for modelling and managing commonalities and variability in the domain of a product-line at the implementation level is becoming ever more important. Object-oriented languages, while being the mainstream technology today, have important limitations with respect to appropriate support for product line engineering. Aspect-oriented languages address some of these limitations, but not all. Furthermore, aspect-oriented languages bring up new issues that need to be addressed for their potential to be exploited effectively. Advancing the state of the art of object-oriented and aspect-oriented languages with respect to their support for software product lines as well as empirically investigating their applicability in the context of real product line projects will be the focus of the joint research work to be supported by this project.
State of the art in language support for software product-line development
A software product line (SPL) is a set of software intensive systems that share a common, managed set of features satisfying the specific needs of a particular market segment and that are developed from a common set of core assets in a prescribed way . Software product lines are rapidly emerging as a viable and important software development paradigm allowing companies to realize order-of-magnitude improvements in time to market, cost, productivity, quality, and other business drivers. Software product line engineering can also enable rapid market entry and flexible response, and provide a capability for mass customization. Core assets involved in a product line are produced and reused in a number of products that form a family. Core assets may be documents, models etc. comprising product portfolios, requirements, project plans, architecture, design models and, of course, software components.
Among other factors, e.g., business relevance, marketing etc., enabling technology for the product-line software development paradigm is of key importance for its success. The focus of this project is on programming languages as a key enabling technology. We observe that object-oriented languages, which are the mainstream programming languages today, do not properly support the product line paradigm. The reason is that the modularization and variation mechanisms are too low level for the needs of product line development.
The main modularization unit of object-oriented languages is a class and their built-in mechanism to model variability is subtype polymorphism. However, in the context of product lines, features are a more natural unit of modularization and variation than classes. Feature-specific code often cuts across class and package boundaries, thus requiring the use of pre-processors to wrap feature-specific code fragments in #if-#endif statements. While the use of pre-processors can be made to work in practice, it is hardly an adequate substitute for proper programming language support. Among the important properties sacrificed are: static typing of feature modules, separate compilation of feature modules and specifications of feature modules that are independent of the compositions in which they are used (a property critical for reusability) but nevertheless adaptable to accommodate the particular needs of a deployment context. In other words: (a) classes are too low-level as the unit of variability for product lines and (b) incremental variation mechanisms that operate at the level of collaborating classes are required.
Motivated by these observations, concepts such as collaboration modules, virtual types, family polymorphism and mixins, as well as crosscutting composition mechanisms based on aspect-oriented programming have been proposed. Aspect-oriented programming also provides means to modularise technical crosscutting concerns, separated from the core domain functionality. However, the use of aspects results in a loss of some benefits of modular programming, like the parallel development of modules, and the ease of understanding and change of the code.
The potential of these concepts to advance the state-of-the-art in product line implementation technology has recently started to be investigated in several research works and in the context of empirical studies. For instance, a combination of feature-oriented and aspect-oriented techniques is very appropriate for supporting product-line development. However, both these technologies also have their limitations. The focus of research in this project will be on addressing these limitations.
Copyright © 2008-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback