Domain engineering is a process for creating an application engineering environment that supports the rapid development of software within a family of application programs. Domain engineering is commonly divided into domain analysis and domain implementation. The fundamental units in domain engineering are decisions. During domain analysis, decisions are identified, analyzed, and categorized as commonalities or variabilities. Commonalities are decisions made during domain analysis about what is common across a family of application systems. Variabilities are decisions made during application development (generation-time and compile-time variabilities) or application use (run-time variabilities). Program generators are tools for creating application programs from specifications. Generation-time variabilities determine the content of the specification language input to a program generator. The commonalities, domain implementation decisions, and compile-time and run-time variabilities largely determine the scope and implementation of the program generator and the generated programs.
Example 2.1: Example text