软件企业追求长远的发展,通常采用产品线模型及系统演化策略,它实质上是用架构技 术构建产品线,并在此基础上借助复用技术持续演化,不断地推出新产品,满足市场追求产 品升级换代的需求。
一、复用与产品线
软件产品线是指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某 个特定市场或任务的具体需要,是以规定的方式用公共的核心资产集成开发出来的。即围绕 核心资产库进行管理、复用、集成新的系统。
核心资产库包括软件架构及其可剪裁的元素, 更广泛地,它还包括设计方案及其文档、用户手册、项目管理的历史记录(如预算和进度)、 软件测试计划和测试用例。
可复用的资 产非常广,包括以下几点。
1 | 需求 |
二、基于产品线的架构
软件产品线架构是针对一系列产品而设计的通用架构,并在此基础上,进一步将系列产 品共用的模块事先实现,供直接重用;将架构用框架的形式予以实现,供定制使用。这就是 通常所说的“平台”。
产品线架构较之单个产品架构,有如下三点特别之处:
(1)产品线架构必须考虑一系列明确许可的变化;
(2)产品线架构一定要文档化;
(3)产品线架构必须提供“产品创建者指南”(开发指南),描述架构的实例化过程。
产品线的软件架构应将不变的方面提出来,同时, 识别允许的变化,并提供实现它们的机制。通常应考虑三个方面。
(1)确定变化点
(2)支持变化点
(3)对产品线架构的适宜性进行评估。
三、产品线的开发模型
开发(确定)产品线的方法有两种模型:
(1)“前瞻性”产品线:利用在应用领域的经验、对市场和技术发展趋势的了解及商业 判断力等进行产品线设计,它反映了企业的战略决策。通常是自上而下地采用产品线方法。
(2)“反应性”模型:企业根据以前的产品构建产品家族,并随着新产品的开发,扩展
架构和设计方案,它的核心资产库是根据“已经证明”为共有、而非“预先计划”为共有的 元素构建的。通常是自下而上地采用产品线方法。
四、特定领域软件架构
架构的本质在于其抽象性。它包括两个方面的抽象:业务抽象和技术抽象。其中业务抽 象面向特定的应用领域。
特定领域软件架构(Domain Specific Software Architecture,DSSA)可以看做开发产品线 的一个方法(或理论),它的目标就是支持在一个特定领域中有多个应用的生成。
DSSA 的 必备特征有:
(1)一个严格定义的问题域或解决域;
(2)具有普遍性,使其可以用于领域中某个特定应用的开发;
(3)对整个领域的合适程度的抽象;
(4)具备该领域固定的、典型的在开发过程中的可复用元素。
从功能覆盖的范围角度理解 DSSA 中领域的含义有两种方法:
(1)垂直域。定义了一个特定的系统族,导出在该领域中可作为系统的可行解决方案的一个通用软件架构。
(2)水平域。定义了在多个系统和多个系统族中功能区域的共有部分,在子系统级上涵盖多个系统(族)的特定部分功能。
DSSA 的活动阶段如下。
(1)领域分析:主要目标是获得领域模型。即通过分析领域中系统的需求(领域需求),确定哪些需求是被领域中的系统广泛共享的,从而建立领域模型。
(2)领域设计:这个阶段的目标是获得 DSSA,它是一个能够适应领域多个系统的需求的一个高层次的设计。由于领域模型中的领域需求具有一定的变化性,DSSA 也要相应地 具有变化性,它可以通过表示多选一的、可选的解决方案等来做到这一点。
(3)领域实现:主要目标是依据领域模型和 DSSA 开发与组织可复用信息。这些复用 信息可以是从现有系统中提取得到的,也可能通过新的开发得到。这个阶段可以看作复用基 础设施的实现阶段。
领域模型的主要作用如下:
(1)领域模型为需求定义了领域知识和领域词汇,这较之单一的项目需求更有较好的 大局观;
(2)软件界面的设计往往和领域模型关系密切;
(3)领域模型的合理性将严重影响软件系统的可扩展性;
(4)在分层架构的指导下,领域模型精化后即成为业务层的骨架;
(5)领域模型也是其数据模型的基础;
(6)领域模型是团队交流的基础,因为它规定了重要的领域词汇表,并且这些词汇的定义是严格的、大家共同认可的。
五、架构及系统演化
架构虽然为系统的变化提供了一定的自由度,但是系统的较大变化必然导致架构的改变。 架构(系统)演化是指向既定的方向、可控地改变。架构(系统)演化可以形成产品线,反 过来,架构(系统)可以在规划的产品线中进行演化。
架构(系统)演化过程包含 7 个步骤:
(1)需求变动归类。首先,必须对用户需求的变化进行归类,使变化的需求与已有构 件对应。对找不到对应构件的变动,也要做好标记,在后续工作中,将创建新的构件,以对 应这部分变化的需求。
(2)制订架构演化计划。在改变原有结构之前,开发组织必须制订一个周密的架构演 化计划,作为后续演化开发工作的指南。
(3)修改、增加或删除构件。在演化计划的基础上,开发人员可根据在第(1)步得到 的需求变动的归类情况,决定是否修改或删除存在的构件、增加新构件。最后,对修改和增 加的构件进行功能性测试。
(4)更新构件的相互作用。随着构件的增加、删除和修改,构件之间的控制流必须得 到更新。
(5)构件组装与测试。通过组装支持工具把这些构件的实现体组装起来,完成整个软 件系统的连接与合成,形成新的架构。然后,对组装后的系统整体功能和性能进行测试。
(6)技术评审。对以上步骤进行确认,进行技术评审。评审组装后的架构是否反映需 求变动,符合用户需求。如果不符合,则需要在第(2)到第(6)步之间进行迭代。
(7)产生演化后的架构。在原来系统上所作的所有修改必须集成到原来的架构中,完 成一次演化过程。