洪 蕾,谢 锐
(1. 金陵科技学院软件工程学院,江苏 南京 211169;2. 上海交通大学网络信息中心,上海 200240)
软件需求分析表示通过非形式的需求陈述变换为完备的需求设定,并将需求设定变换为对应的软件功能约束条件[1,2]。需求分析是软件工作的核心要素,是软件研发的初始阶段,一个软件的成功开发多数取决于软件需求策略的有效性与全面性[3]。集成化软件是凭借应用需求将多个软件合并在一起协同工作的软件类型,具有巨大的发展空间与研究意义[4,5]。
软件需求工程的研究较为繁琐,用户需求牵涉要素众多,致使软件研发存在较多复杂性问题;需求工程涉及人员较多,譬如软件用户、问题领域专家、项目管理人员等。此类人员通常拥有不同背景知识,沟通比较困难;用户对问题的描述不完整,与预期设定的软件需求相悖。针对上述问题,相关领域进行了大量研究,目前常用的方法主要有基于用例的软件需求建模方法和基于特征组合的软件需求建模方法,虽然现有方法均能够实现软件需求的分析与响应,但是还存在以下问题:软件并发事务响应时间较长,软件执行效率不高以及负载均衡效果不佳,不能有效使集成化软件更加符合用户操作需求变化,提升软件整体的运行质量。
对集成化软件而言,当前仍旧缺少合适的技术与方式来完成用户需求与软件需求间的完美匹配。为此提出一种基于目标驱动的集成化软件需求建模方法。将负载均衡作为软件目标驱动,优化软件的协同能力,采用数据储存层、中间层与应用层完成集成化软件需求模型构建。
负载均衡是解决处理器之间公平配发工作,得到最优响应时间、资源利用率与吞吐量的机制,因此,考虑集成化软件需求时要着重注意负载均衡情况[6]。集成化软件板块的初始化问题与装箱问题的原理相似,将资源大小收敛关系的解析式定义为
(1)
式(1)代表第j个处理器内安置的软件板块不高于处理器相对资源剩余数量,xij是第i个软件板块处于第j个处理器内部,一个软件板块只能存在于某个通用处理器内。
将物理机负载情况描述成
Load(j)=Pj/Rj
(2)
式中,Pj是第j个处理器内安置的软件板块个数,Rj是第j个处理器可安置个数的负载最高值。
处理器的负载均衡使用负载资源标准差来定义,构建以下目标函数
(3)
(4)
则负载均衡适应度函数为
(5)
适应度函数值越高,集成化软件负载均衡度越低,证明处理器资源分布标准差越低,也就是软件负载分布较为平均,这时的集成化部署策略相对完善。
集成化软件中协同与分布式系统内的任务分配与调配问题逐步受到多方关注,也就是在多项式时间中不能利用穷举法探寻最佳解。本文采用遗传算法来更好地优化目标驱动理念下的软件负载均衡问题。
2.2.1 种群初始化
种群规模表示随机一代种群的个体数量,个体数目对遗传算法多样性具有重要影响,个数越多,种群多样性越好,但同时也会增加计算次数,导致运行速率缓慢,倘若个数较少,极易出现早熟问题。早熟就是在遗传计算初始阶段,部分个体适应度很高,遗传运算时此个体处于下一代的概率较多,减少了交叉与变异操作对多种群的影响,不能确保获得准确的种群多样性,丢失了全局最优解。除了要明确种群大小,还要筛查初始化种群:任意生成一条染色体,收敛染色体资源利用率,维持负载处于[Load1,Loadh]之内。设置初始种群染色体数量是S,软件板块个数是n。
2.2.2 遗传算子优化
遗传算子经过选择、杂交与突变来实现繁衍新种群的目标,本文从选择算子、交叉算子与变异算子优化等方面完成遗传算子优化。选择机制是遗传算法内的重要操作项目,其核心是按照相应方式任意挑选个体留存到下一代。凭借个体适应度大小与准则,在第N代群体内择取出某些拥有良好状态的遗传个体迭代至下一代(N+1)群体内。在整个选择流程中,个体适应度越高,被挑选至下一代的几率越高。
根据适应度函数大小排序全部染色体,运用精英个体留存模式,挑选匹配程度最大的个体,剔除匹配性差的个体。采用轮盘赌方法[7],若各染色体进入下一代进化的几率等于适应度值和种群个体适应度总和的比率。设个体k适应度为Fk,种群为NP,那么个体k被选择的几率是
(6)
轮盘赌选择法的计算过程为:
生成一个随机概率,记作
P=rand(1)Pi
(7)
其中,P表示随机概率,rand(1)代表轮盘循环周期。如果Pl-1
(8)
交叉算子操作流程中,在种群内任意挑选两条染色体,同时产生一个任意数值当作时间点,将各个染色体划分成两部分,交换处于此时段右边部分产生全新的种群后代。使用多点交叉形式[8],帮助增强种群多样性,提升获得优质染色体的概率,最大限度优化遗传算法的局部搜寻性能与约束性,详细过程为:
挑选父代染色体A、B,使用任意数值明确首个交叉方位点o,然后循环交叉;将父代染色体A第Y个基因作为起始点,得到并交换和第Y个基因处于B内方位相对的基因值a,再获得相对于B内相同方位的基因值b,并实施交换。反复执行此项操作,在染色体A中探寻基因b,直至在B内找出A的首个基因值为止,循环交叉终止。若在全部搜寻流程中,在另外的染色体内没有找出对应的基因,那么交换处于该方位的基因。
变异操作是把种群内的各条染色体使用概率Pm采取突变。变异概率较低不易生成全新个体,变异概率过高也会扰乱基因遗传整个流程,破坏原有的优质基因。按照遗传学定理,基因突变是低概率事件,遗传算法中的变异算子对种群影响要低于交叉算子,通常设置变异概率低于0.25。变异算子需要处理两个重要问题:怎样确立变异方位与怎样完成基因变异[9,10]。变异算法和基因编码模式相关。使用单点变异策略,在基因编码内随机选择一个点,使用随机概率实现变异计算,计算的变量为变异概率Pm然后在rand(1) 利用计算迭代数量终止计算,但在最佳个体适应度为固定临界值不再产生改变时,也就是最佳个体适应度与群体适应度不再继续上升,计算也会停止,通常把代数规划为60~110代。停止迭代后,即可得到最优响应时间、资源利用率与吞吐量结果,实现预期集成化软件负载均衡目标。 融合负载均衡目标驱动策略,创建一个集成化的软件需求模型(Integrated Software Requirement Model,ISRM),经过扩充工程项目管理系统(Engineering Project Management System,EPMS),在软件需求建模过程中引入获得用户信息与描述用户信息的功能,让所建软件可以快速有效得到用户实际需求。该需求建模工具描述了过程模型到需求模型的变换原则,实现二种不同模型间的自主变换。ISRM体系架构共包含三部分:数据储存层、中间层与应用层,详情参考图1。 图1 ISRM软件模型体系架构 数据储存层可实现对工程项目管理系统拓展数据、数据流图及相关语义数据的保存。中间层能实现对信息的核心操作,也就是实现数据流图的自主生成和正文属性编辑等任务。中间层中,SGEG表示结构化图像编辑工具,具有结构交互式架构化图像编辑能力。应用层内涵盖工程项目管理系统与数据流图编辑两个程序。工程项目管理系统的关键性能是构建过程模型并快速优化过程模型不足,为了最大化实现集成化软件需求,对需求模型采取拓展操作,增添了面向用户取向的功能,最终使用Auto-Generator代码器完成需求转变任务。 本文使用该工具构造了Auto-Generator代码生成器,完成对数据流图的操作,同时把图形数据自主保存至订单管理系统。ADO(ActiveX Data Objects)数据对象为Microsoft数据库程序研发的应用层接口,是一种新型的高层数据库访问机制,利用ADO接口即可访问保存于关联数据库内的数据流图信息。数据流图组成接口是集成化软件需求建模的核心要素,能支撑对数据流图的各类操作控制和逻辑关系梳理。该子板块运用合成技术,经过调配SGEG、ADO供应的接口实现数据层中的数据库及正文属性控制。Auto-Generator代码器调配数据流图组成接口实现过程模型向对应数据流图变换的任务。此项工作过程以COS(Component Object Model,组件对象模型)构件的模式存在,COS是一个进程内构件,通过工程项目管理系统对此构建实施处理,实现需求转变功能,转变结果会产生一个数据流图信息。 数据流图编辑能够实现数据流图的编绘、预览及属性定义书写等工作,自主获取数据字典等一系列相关需求文本档案。数据流图编辑程序的整体结构如图2所示。 图2 数据流图编辑器结构示意图 集成化软件需求模型核心技术包含COM构件与合成技术,构件是能够重复使用的软件构成部分。前面内容涉及的自主变换工具Auto-Generator代码器是一个COM构件。融合COM构件与工程项目管理系统的原因在于:工程项目管理系统是一个体积较大的系统,在采取拓展时,若大量修改系统代码会导致系统运行出现问题,产生错误数据。因此,工程项目管理系统仅需调配接口函数就能实现过程模型至需求模型的变换,方便集成化软件最终的建立与应用。 对所提方法进行仿真分析,仿真环境为体积较小的个人计算机进行测验,建模环境为VC++6.0编译器,图形编制工具为MATLAB。首先分析目标驱动中的集成化软件负载均衡性能优劣,判断方法是否完成预期的目标驱动工作。设置原始虚拟机个数为150,物理机个数为25。由前文可知本文目标驱动即为软件负载均衡优化,因此,验证负载均衡优化前后集成化软件资源占用率方差之间的差别,如图3所示。 图3 集成化软件资源负载均衡前后对比 从图3看出,集成化软件进行负载均衡优化后,能够取得良好的负载均衡效果,大幅增强集成化软件的协同运行能力,可实现软件与用户之间良好的交互性。 为验证所提方法的可靠性,将本文方法与基于用例的软件需求建模方法和基于特征组合的软件需求建模方法进行对比分析。首先,比较三种方法响应时间,仿真结果如图4所示。 图4 三种方法的软件并发事务响应时间 从图4可知,本文方法响应时间要低于两个传统方法,响应时间控制在30s上下,符合用户对集成化软件反应速度的要求,证明本文方法建立的ISRM需求模型能够充分融合用户实际需要,提高了集成化软件适用性。 分别标记集成化软件中的四个程序为P1、P2、P3、P4,P1,程序执行时间采用时间计数器记录下的时间作为基准,其余程序利用硬件周期计数器得到执行基准时间。表1是三种方法对用户需求执行效率检测数据。 表1 三种方法下的软件执行效率对比/s 从表1看出,不论处于何种程序中,本文方法下的集成化软件执行时间都是最接近最佳执行基准时间的。这是因为方法构建软件需求模型时,运用Auto-Generator代码器完成需求转变任务,有效捕获用户实际需要,快速执行对应任务,也表明所提方法优越性,在不同执行程序中均可完成预期用户操作需求。 为了给用户提供更加迎合自身操作需求的集成化软件,设计基于目标驱动的集成化软件需求建模方法。该方法引入用户信息并准确描述用户信息深层含义,将负载均衡作为软件优化目标,通过数据储存层、中间层与应用层三层架构得到集成化软件需求模型。接下来会进一步改进建模语言,让模型变得更为精简,具备更强的实用性。2.3 集成化软件需求建模方法实现
3 仿真研究
4 结论