本文共 2487 字,大约阅读时间需要 8 分钟。
软件业对软件工程期望之高,涉及高度的复杂性,高效的生产效率和质量,以及便于有效地维护和改进。但是,当前的软件工程并不能满足这些目标,现在很多开发更像手工作坊的“一种一个”的解决方案,而不像一个成熟的工程,而模型驱动和产品线工程就是应对这些问题的方法。在中介绍过现在存在多种模型驱动开发方法,而这本书主要介绍这个方法,我觉得该书的第一部分不错,提出了非常值得注意到领域工程和元程序设计,让我对产品线工程有更好的认识,所以本篇主要结合这本书来给大家介绍一下产生式编程这个方法。
在软件中,向自动化制作软件的方向转变需要经历两个步骤:
我感觉它可以作为产品线工程的一种软件工程方法,产生式编程就是设计实现组件,使之适应于通用产品线结构,同时对配置知识建模,强调如何把抽象的需求转变成特定的组件群,并且使用产生器实现配置知识,通过这些工作来解决前面说的高复杂性、高效率和高质量等问题。
Generative Programming is a software engineering paradigm based on modeling software system families such that, given a particular requirements specification, a highly customized and optimized intermediate or end-product can be automatically manufactured on demand from elementary, reusable implementation components by means ofconfigurations knowledge [CE00].
产生式领域模型
GP的目标集中于系统族,而不是一种一个的系统(one-of-a-kind system),它不是从头构造一个单独的系统族成员,而是基于一个通用的产生式领域模型。模型由三部分组成:
为重用而开发以及使用重用的开发
框架和组件现在被认为是获取软件重用的最有效的技术,但不幸地是,没有一种OO的分析和设计方法来支持它们的开发。GP包含了两个重要的完整开 发循环:一个设计和实现一个产生式领域模型(为重用而开发);另一个是使用产生式模型制作具体的系统(使用重用的开发),这个其实在我之前的blog中也介绍过。
确定一个系统族范围
为重用而进行的开发目标集中于系统族,它的第一步包括确定感兴趣的家族范围,就是说,决定应该包括哪个特征,不应该包括哪些特征。这就要求分析项目风险承担者和他们的目标、当前和潜在的市场、技术预测等等。
特征模型代表了领域工程对软件工程的重要贡献,并且对产生式程序设计来说是必须的。确定系统族范围的下一步就是确定家族成员的共同特征和差异特征,以及差异特征之间的依赖,也就是分析出产品的721。特征建模可以让我们以一种结构化的方式来记录分析的结果,支持可变性管理。它具有以下优点:
领域工程
1. 纵向领域(verticaldomain):根据系统类别而组织的领域。如预算软件、材料管理、合同管理、企业报表系统等。
2. 横向领域(horizontaldomain):根据软件部件的类别而组织的领域。比如数据关系计算引擎、报表引擎、工作流系统等。
3. 领域之间有3中类型的关系:
a) 包含:比如成本管理软件包含了材料管理系统
b) 使用:比如公司大部分软件都使用了报表引擎
c) 类似:领域之间侧重点不同,但有很多的相似性,通过深入研究一个领域,可以取得对另一个领域的更好理解。比如报表引擎中对于表达式解析和索引部分可能与数据关系计算引擎类似。
应用工程是基于领域工程的结果构建系统的过程。对一个新的具体应用做需求分析的时候是利用已有的领域模型,通过领域分析提供的各种通用功能、支持的 变量配置、提供的扩展等来描述客户需要。如果新的需求在领域模型中不存在,则可以定制,或者反馈到领域工程来扩充领域的支持范围。
GP还提供的其他一些技术,这些东西我有些看不懂,下面知识罗列一下备忘而已: