System family engineering seeks to exploit the commonalities among systems from a given problem domain while managing the variabilities among them in a systematic way. In system family engineering, new system variants can be created rapidly based on a set of reusable assets (such as a common architecture, components, models, etc.) [1]. Generative software development aims at modeling and implementing system families in such a way that a given system can be automatically generated from a specification written in one or more textual or graphical domain-specific languages [2–8]. In this tutorial, participants will learn how to perform domain analysis (i.e., capturing the commonalities and variabilities within a system family in a software schema using feature modeling), domain design (i.e., developing a common architecture for a system family), and implementing software generators using multiple technologies, such as template-based code generation and model transformations. The relationship to model-driven development will be also discussed. The presented concepts and methods will be demonstrated using a case study.
[1]
David M. Weiss,et al.
Software Product-Line Engineering: A Family-Based Software Development Process
,
1999
.
[2]
Paul Clements,et al.
Software product lines - practices and patterns
,
2001,
SEI series in software engineering.
[3]
Krzysztof Czarnecki,et al.
Generative programming - methods, tools and applications
,
2000
.
[4]
James Milne Neighbors,et al.
Software construction using components
,
1980
.
[5]
J. Craig Cleaveland,et al.
Building application generators
,
1988,
IEEE Software.
[6]
Jack Greenfield,et al.
Software factories: assembling applications with patterns, models, frameworks and tools
,
2004,
OOPSLA '03.
[7]
Don S. Batory,et al.
Achieving extensibility through product-lines and domain-specific languages: a case study
,
2000,
TSEM.
[8]
J. Craig Cleaveland.
Program Generators with XML and Java
,
2001
.