大多数 软件系统可以根据业务领域和它们支持的人物类型来划分类别,例如,定期航班预定系统、医学记录系统、证券管理系统、订单处理系统、库存管理系统等等。我们把根据系统类别而组织的领域称为纵向领域(vertical domain)。类似地,我们也可以根据 软件系统部件的功能把它们分类,例如 数据库系统、容器库、 工作流系统、GUI库、数值代码库等等。我们把根据软件部件的类别组织的领域称为横向领域(horizontal domain)。
领域工程包括领域分析、领域设计和领域实现。在应用工程(Application Engineering)中重用领域工程的结果,就是利用在领域工程中开发的可重用资源制作具体系统的过程。领域工程和应用工程是两个并行的过程。
面对日益复杂的 软件系统, 软件复用被认为是解决“ 软件危机”、提高软件开发效率和质量、实现软件产业工业化生产方式的重要途径。
软件复用的研究和实践表明,特定领域的软件复用活动相对容易取得成功。这里的领域是指一组具有相似和相近 软件需求的应用系统所覆盖的功能区域。领域的 内聚性(领域知识逻辑上的紧密相关性)和稳定性(在一定时间内,领域知识不会发生剧烈的变化)为 软件复用活动提供了可供复用的软件资产和潜在的经济利益,使得特定领域的软件复用相对容易获得成功。
软件复用包含两个重要阶段:可复用软件资产的生产和基于可复用软件资产的应用系统开发。可复用资产的获取是成功实施 软件复用计划的关键因素。只有拥有了足够的可复用资产,才有可能基于这些资产进行新应用系统的开发。
领域工程是目前可复用资产基础设施建设的主要技术手段,包含领域分析、领域设计、领域实现三个重要的活动。领域分析在对领域中若干典型成员系统的需求进行分析的基础上,考虑预期的需求变化、技术演化、限制条件等因素,确定恰当的领域范围,识别领域的共性特征和变化特征,获取一组具有足够可复用性的领域需求,并对其抽象形成领域模型;领域设计以领域需求模型为基础,考虑成员系统可能具有的质量属性要求和外部环境约束,建立符合领域需求、适应领域变化性的软件体系结构;领域实现则以领域模型和软件体系结构为基础,进行可复用 构件的识别、生产和管理。这样,基于领域工程的成果,新应用系统的开发不再是从零开始,而是建立在对分析、设计、实现等阶段的软件资产大量复用的基础上。
学术界对领域工程的系统化研究开始于八十年代初期。经过二十多年的发展,目前对于领域工程具有代表性的研究和实践工作包括:卡耐基 梅隆大学软件工程研究所早期提出的面向特征的领域分析方法和现阶段的 软件产品线方法,乔治 梅森大学提出的演化的领域生命周期模型,贝尔实验室提出的面向家族的抽象、规约和翻译的领域工程方法,韩国浦项科学与技术大学在FODA方法基础上提出的面向特征的复用方法,惠普实验室综合FODA方法和RSEB方法提出的FeatuRSEB方法,德国Fraunhofer Institute for Experimental Software Engineering的产品线 软件工程方法,以及北京大学提出的青鸟 面向对象的领域工程方法等。
产业界对 软件复用的实践活动在系统化的领域工程方法出现以前就已经开始了。但这些早期的 软件复用活动仅仅出现在少数发展十分成熟的领域内。在现阶段, 软件复用相关技术的发展为软件复用活动提供了基本的技术支持。国外一些企业,如,朗讯、惠普、飞利浦、诺基亚等,均设有专门的机构进行 软件复用及其相关技术的研究,并积极在本企业内推行软件复用的生产模式。
应该看到,即使在软件技术较先进的国家,对领域工程的研究和实践也还没有达到成熟的阶段。一方面,作为一种新的生产模式, 软件复用要求对现有的 软件开发方式做出相当的变革,这需要企业的高层决策者对软件复用有深刻的认识和坚定的支持。另一方面,现有的领域工程方法本身还不够成熟完善,在实施过程中还存在较大的风险。这些因素在很大程度上阻碍了 软件复用在产业界的广泛应用。