language-icon Old Web
English
Sign In

Domain engineering

Domain engineering, also called product line engineering, is the entire process of reusing domain knowledge in the production of new software systems. It is a key concept in systematic software reuse. A key idea in systematic software reuse is the domain. Most organizations work in only a few domains. They repeatedly build similar systems within a given domain with variations to meet different customer needs. Rather than building each new system variant from scratch, significant savings may be achieved by reusing portions of previous systems in the domain to build new ones. Domain engineering, also called product line engineering, is the entire process of reusing domain knowledge in the production of new software systems. It is a key concept in systematic software reuse. A key idea in systematic software reuse is the domain. Most organizations work in only a few domains. They repeatedly build similar systems within a given domain with variations to meet different customer needs. Rather than building each new system variant from scratch, significant savings may be achieved by reusing portions of previous systems in the domain to build new ones. The process of identifying domains, bounding them, and discovering commonalities and variabilities among the systems in the domain is called domain analysis. This information is captured in models that are used in the domain implementation phase to create artifacts such as reusable components, a domain-specific language, or application generators that can be used to build new systems in the domain. Domain engineering is designed to improve the quality of developed software products through reuse of software artifacts. Domain engineering shows that most developed software systems are not new systems but rather variants of other systems within the same field. As a result, through the use of domain engineering, businesses can maximize profits and reduce time-to-market by using the concepts and implementations from prior software systems and applying them to the target system. The reduction in cost is evident even during the implementation phase. One study showed that the use of domain-specific languages allowed code size, in both number of methods and number of symbols, to be reduced by over 50%, and the total number of lines of code to be reduced by nearly 75%. Domain engineering focuses on capturing knowledge gathered during the software engineering process. By developing reusable artifacts, components can be reused in new software systems at low cost and high quality. Because this applies to all phases of the software development cycle, domain engineering also focuses on the three primary phases: analysis, design, and implementation, paralleling application engineering. This produces not only a set of software implementation components relevant to the domain, but also reusable and configurable requirements and designs. Given the growth of data on the Web and the growth of the Internet of Things, a domain engineering approach is becoming relevant to other disciplines as well. The emergence of deep chains of Web services highlights that the service concept is relative. Web services developed and operated by one organization can be utilized as part of a platform by another organization. As services may be used in different contexts and hence require different configurations, the design of families of services may benefit from a domain engineering approach. Domain engineering, like application engineering, consists of three primary phases: analysis, design, and implementation. However, where software engineering focuses on a single system, domain engineering focuses on a family of systems. A good domain model serves as a reference to resolve ambiguities later in the process, a repository of knowledge about the domain characteristics and definition, and a specification to developers of products which are part of the domain. Domain analysis is used to define the domain, collect information about the domain, and produce a domain model. Through the use of feature models (initially conceived as part of the feature-oriented domain analysis method), domain analysis aims to identify the common points in a domain and the varying points in the domain. Through the use of domain analysis, the development of configurable requirements and architectures, rather than static configurations which would be produced by a traditional application engineering approach, is possible. Domain analysis is significantly different from requirements engineering, and as such, traditional approaches to deriving requirements are ineffective for development of configurable requirements as would be present in a domain model. To effectively apply domain engineering, reuse must be considered in the earlier phases of the software development life cycle. Through the use of selection of features from developed feature models, consideration of reuse of technology is performed very early and can be adequately applied throughout the development process. Domain analysis is derived primarily from artifacts produced from past experience in the domain. Existing systems, their artifacts (such as design documents, requirement documents and user manuals), standards, and customers are all potential sources of domain analysis input. However, unlike requirements engineering, domain analysis does not solely consist of collection and formalization of information; a creative component exists as well. During the domain analysis process, engineers aim to extend knowledge of the domain beyond what is already known and to categorize the domain into similarities and differences to enhance reconfigurability.

[ "Component-based software engineering", "Software construction" ]
Parent Topic
Child Topic
    No Parent Topic