The industry of software-intensive systems is facing today both economical and technical challenges. On one hand, shrinking
budgets and sharp competition require to reduce significantly development and maintenance costs, shorten lead time, and improve
predictability. On the other hand, the size and complexity of systems have dramatically increased in the past few years and
have brought considerable technological problems. In order to face these issues, major changes are required regarding the
way software products are developed.
A promising approach, which is gaining wide acceptance, is to replace traditional development models by product-line development.
Traditional life cycle models have originally been conceived under the assumption that they apply to the development of individual
software products, inhibiting the sharing of common assets between projects. Product-line development is based on a different
approach, which naturally promotes and supports software reuse. In a productline approach, products addressing a same domain
are regarded as a whole and developed as members of a product family.
More precisely, a software product-line is a collection of products sharing a common set of features that address the specific
needs of a given business area
The development of core assets is generally termed as domain engineering. The development of new products from the set of
reusable assets is generally called application engineering. The whole process is allowed by an adequate organization and
a coordinated management.
There is a number of specific practices that are needed to develop and exploit the core assets in a product-line. These practices
are not always mature and most of the time only emerging in the context of one-shot developments, that is the developments
of single products with no reuse in mind. The levels of reusability and adaptability required by the product-line approach
bring additional complexity and formidable challenges with regard to the current technology. Such complexity is today almost
not dealt with, and requires significant improvements for the current state-of-the-art in software engineering.
The SEI (Software Engineering Institute) has listed the essential practices required to produce core assets and products in
a product-line and to manage the process at multiple level [1].