Generative software development is a system-family approach, which focuses on automating the creation of system family members: a given system can be automatically generated from a specification written in textual or graphical domain specific languages.
Mapping Between Problem Space and Solution Space
Problem space: Set of domain-specific abstractions that can be used to specify the desired system-family member. For example, to specify payment methods for an electronic commerce system.
Solution space: Consists of implementation-oriented abstractions, which can be instantiated to created implementations of the specifications expressed using the domain-specific abstractions from the problem space. For example, payment methods can be implemented as calls to appropriate web services.
Generative domain model: The mapping between problem space and solution space.
The problem space consists of domain-specific concepts and their features. The specification of a given system requires the selection of features that the desired system should have. The problem space also defines illegal feature combinations, default settings, and default dependencies.
The solution space consists of a set of implementation components, which can be composed to create system implementations. A system-family architecture sets out the rules how the components can be composed.
The mapping between both spaces is defined by construction rules and optimizations.
The problem space is represented by a domain-specific language.
The solution space is represented by an implementation language.
The mapping between the spaces is a transformation that takes a program in a DSL and yields its implementation in the implementation language.