域工程
域工程是在新软件系统生产中重复域知识的整个过程。这是系统软件重复使用和产品线工程中的关键概念。系统软件重复使用的关键想法是域。大多数组织仅在几个领域工作。他们反复在给定域内具有变化以满足不同客户需求的范围内建立相似的系统。与其从头开始构建每个新的系统变体,不如通过重复域中的先前系统以构建新的系统来实现大量节省。
识别域,界限并发现域中系统之间的共同点和变异的过程称为域分析。这些信息是在域实现阶段使用的模型中捕获的,以创建诸如可重复使用的组件,特定于领域的语言或可用于在域中构建新系统的应用程序生成器。
在ISO26550:2015定义的产品线工程中,域工程得到了应用程序工程的补充,应用工程处理了从产品线中得出的单个产品的生命周期。
目的
域工程旨在通过重复使用软件工件来提高开发软件产品的质量。域工程表明,大多数开发的软件系统不是新系统,而是同一字段中其他系统的变体。结果,通过使用域工程,企业可以通过使用先前软件系统的概念和实现并将其应用于目标系统,从而最大程度地利用利润并减少上市时间。即使在实施阶段,成本的降低也很明显。一项研究表明,使用特定于域的语言允许代码尺寸(包括符号数量和符号数量)减少超过50%,而代码总数将减少近75%。
域工程专注于捕获软件工程过程中收集的知识。通过开发可重复使用的工件,可以在新的软件系统中以低成本和高质量重复使用组件。由于这适用于软件开发周期的所有阶段,因此域工程还侧重于三个主要阶段:分析,设计和实施,并行应用程序工程。这不仅产生了一组与域相关的软件实现组件,还可以重复使用且可配置的要求和设计。
鉴于网络上数据的增长和物联网的增长,域工程方法也与其他学科有关。 Web服务深层链条的出现突出了服务概念是相对的。由一个组织开发和运营的Web服务可以由另一个组织用作平台的一部分。由于服务可以在不同的情况下使用,因此需要不同的配置,因此服务家庭的设计可能受益于域工程方法。
阶段

域工程(如应用程序工程)包括三个主要阶段:分析,设计和实施。但是,在软件工程专注于单个系统的地方,域工程专注于系统家庭。一个良好的领域模型可以作为对稍后在此过程中解决歧义的参考,有关域特征和定义的知识存储库,以及对属于域的一部分的产品开发人员的规范。
域分析
域分析用于定义域,收集有关域的信息并产生域模型。通过使用特征模型(最初被认为是面向特征域分析方法的一部分),域分析旨在识别域中的共同点和域中的变化点。通过使用域分析,可以开发可配置的需求和体系结构,而不是传统的应用程序工程方法产生的静态配置。
域分析与需求工程有显著不同,因此,传统的衍生需求方法对于开发可配置需求的开发无效,如域模型中所示。为了有效地应用域工程,必须在软件开发生命周期的早期阶段中考虑重复使用。通过使用开发功能模型的特征选择,对技术的重复使用的考虑非常早,可以在整个开发过程中充分应用。
域分析主要来自从过去的经验中产生的工件。现有系统,其工件(例如设计文档,需求文档和用户手册),标准和客户都是域分析输入的潜在来源。但是,与需求工程不同,域分析不仅包括信息的收集和形式化;也存在创造性的组成部分。在域分析过程中,工程师旨在将域的知识扩展到已经知道的知识之外,并将域分类为相似性和差异,以增强可重构性。
域分析主要产生域模型,代表域内系统的常见和不同属性。域模型通过充当设计这些组件的基础,以可配置的方式来协助建筑和组件的创建。一个有效的域模型不仅包括域中的变化和一致的特征,而且还定义了域中使用的词汇,并在系统中定义了概念,思想和现象。功能模型将概念分解为所需的和可选功能,以产生一组完全正式的可配置要求。
域设计
域设计采用在域分析阶段产生的域模型,并旨在产生通用体系结构,域中的所有系统都可以符合该模型。就像应用程序工程使用功能和非功能性要求来生成设计一样,域工程的域设计阶段采用了在域分析阶段开发的可配置要求,并为系统家族提供了可配置的标准化解决方案。域设计旨在产生架构模式,尽管需求配置不同,但仍解决了域内整个系统中常见的问题。除了在域设计过程中开发模式外,工程师还必须注意确定模式的范围以及与模式相关的级别。上下文的局限性至关重要:过多的上下文导致模式不适用于许多系统,而太小的上下文导致模式不足以实现,无法有用。有用的模式必须经常重复且高质量。
域设计的目的是满足尽可能多的域要求,同时保留开发功能模型提供的灵活性。该体系结构应足够灵活,以满足域内的所有系统,同时足够刚性以提供一个可靠的框架来基于解决方案。
域实现
域实现是创建一个过程和工具,以有效地在域中生成自定义程序。
批评
域工程被批评过多地专注于通用软件功能的“重新使用”或“工程”,而不是专注于“工程使用”,以使个人的世界观,语言,语言,,或将上下文集成到软件的设计中。