|
As the size and complexity of software systems grows, so does the need for
effectivemodularity, abstraction and compositionmechanisms to improve the reuse
of software development assets during software systems engineering. This need
for reusability is dictated by pressures to minimise costs and shorten the time
to market. However, such reusability is only possible if these assets are variable
enough to be usable in different products. Variability support has thus become an
important attribute of modern software development practices. This is reflected by
the increasing interest in mechanisms such as software product lines (Clements
& Northrop, 2001) and generative programming (Czarnecki & Eisenecker 2000).
Such mechanisms allow the automation of software development as opposed to the
creation of custom ‘one of a kind’ software from scratch. By utilising variability
techniques, highly reusable code libraries and components can be created, thus
cutting costs and reducing the time to market.
A software product line is a set of software-intensive systems sharing a common,
managed set of features that satisfy the specific needs of a particular market segment
or mission and that are developed from a common set of core assets in a prescribed
way. Core assets are produced and reused in a number of products that form a
family. These core assets may be documents, models, etc., comprising product
portfolios, requirements, project plans, architecture, design models and, of course,
software components.
Software product lines provide a systematic means of managing variability in a suite of products. They have many benefits but there are three major barriers that can prevent them from reaching their full potential. First, there is the challenge of scale: a large number of variants may exist in a product line context and the number of interrelationships and dependencies can rise exponentially. Second, variations tend to be systemic by nature in that they affect the whole architecture of the software product line. Third, software product lines often serve different business contexts, each with its own intricacies and complexities. The AMPLE (http://www.ample-project.net/) approach tackles these three challenges by combining advances in aspect-oriented software development and model-driven engineering. The full suite of methods and tools that constitute this approach are discussed in detail in this edited volume and illustrated using three real-world industrial case studies. |
|