基于系统动力学方法的软件过程建模与仿真

来源 :计算机时代 | 被引量 : 0次 | 上传用户:dark709
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:软件开发质量很大程度上取决于软件过程。软件过程涉及到众多相互关联和反馈的因素,特别是与人和组织行为有关的软因素,但在离散型传统建模方法中难以得到准确反映。文章介绍了基于系统动力学的连续型软件过程建模与仿真方法,并以Brooks法则作为实例描述了该方法的基本要素和优势。文章还对系统动力学方法应用于软件过程不同领域的研究加以回顾,并给出了今后的几个主要研究方向。
  关键词:软件过程;系统动力学;建模;仿真
  
  引言
  
  如今软件所扮演的角色越来越重要,而与此同时也伴随着相关的许多问题:如费用超支、进度延期、质量低下等。这迫使人们对软件开发的关注点从软件设计开发的技术方面过渡到对技术和管理两方面并重。软件过程已经成为软件工程学中一个研究热点。研究表明软件工程的两大目标:减少费用和提高软件质量,都在很大程度上取决于软件过程的质量。
  在现实开发中,软件系统的复杂性通常有着各种形式,主要表现为:系统不确定性和随机性、复杂的动态行为和反馈机制。过程的变更通常耗费巨大,而且后果对软件开发组织的影响很大。因此,采用一些合适的方法和技术来辅助用户尤为重要。软件过程建模和仿真就是其中一种比较合适的方案。软件建模有着多种方法,目前比较常用的是类似于工作流系统的针对软件开发过程分阶段进行的离散性建模方法。这种方法有其优点,但难以表达例如开发人员的经验、项目进度带来的压力、连续加班的疲劳程度等一直变化着的因素,以及这些相互关联的因素之间的因果关系和反馈回路对软件开发结果的影响。例如,项目进度的落后会增加开发人员的压力,激励他们提高生产率,项目组可能会选择加班以希望赶上进度。高压力下的加班一般会提高单位时间内的产量,但同时也会增加人员的疲劳程度,这样很有可能增加出错率,最终导致质量保证工作和返工的增加,并且当疲劳程度到达一定时候将降低生产率,最终很有可能赶不上进度。软件开发中这些经常被忽略的软因素对项目的成败有着重要影响,系统动力学作为一种连续性建模方法,能很好地解决这些问题。
  
  1 软件过程建模与仿真
  
  软件过程可以被定义为“针对构思、开发、部署和维护软件产品的一系列相关的政策、组织结构、技术、程序和工件”。软件开发过程是一个复杂的动态系统,有着巨大的结构复杂度和规模。这些复杂性促成了系统的一些违背直觉的行为,使得系统行为难以靠人的经验来精确评价。这些系统有一些共同特性,比如有多个相互关联的组件构成,表现出复杂的动态行为和反馈回路,组件间的非线性关系和软数据操作。
  软件开发涉及到管理相关的(如:人力资源,预算,调度,计划和控制等)和生产相关的(如:软件设计、编码、测试、验证和确认等)众多因素,比如:劳动力量,预算,项目完成成绩,人员生产率,产生的错误数,检测到的错误数,可供雇佣的劳动力数量等。这些变量相互影响,形成互动和反馈循环。软件过程建模是经常采用的一种基本手段。模型是现实世界或者概念化的复杂系统的一种抽象,通过减少或者去除不影响相关行为的细节,它设用来展示实际系统的主要特性。结合过程模型,应用计算机仿真技术来进行软件过程研究有着如下优势:
  (1)大多数复杂的、现实世界的系统都存在众多关系复杂的元素,难以光靠一个不能运行的模型来表达并用以进行分析。而仿真是一种可行的研究方法。
  (2)仿真允许研究者去估计实际系统在一些假设的操作环境下的性能。
  (3)能够通过仿真对多种候选方法进行对比,以决定哪种能更好地符合需求。
  (4)在仿真中,研究人员能够比真实试验更好地控制实验条件。
  (5)仿真允许研究人员以较短的时间去研究一个现实中需要很长时间来完成的事情。
  基于建模的目标不同,应该根据各种建模方法的特点来采用不同的建模技术进行软件过程研究。有时候根据建模需求并不需要关注每一个实体的每一个属性,而是要能够简单清晰地观察某些因素对系统层次上的影响,辅助管理者在整体层面上对项目做出决策。例如,连续型仿真建模方法就适合于策略分析、初始估算、长期趋势、高层(全局)视角观测。系统动力学就是一种典型的连续型建模方法。
  


  
  2 系统动力学方法及其应用实例
  
  2.1系统动力学方法
  系统动力学方法由MIT的Forrester开发,是一种针对强调系统模型结构特性的复杂问题解决之道。系统动力学主要依赖两种技术来构建模型:一是因果循环图(causal loop diagram),通过原因和结果关系来概念化系统,使得反馈回路得以显现。二是流图(now diagram),采用流(flow)、流率(flow rate)、存量(stock)、水平(Ievel)、辅助变量(auxiliary),常量(constant)和延迟(delay)等来表达系统。存量表示可以随着时间累计或者消耗的元素;水平表示存量在某个给定时间点上的元素数量;流率描述存量的变化。系统动力学是采用连续的时间模拟方法,在模拟中,时间被划分成预先设定好的时间间隔。模型变量在每个时间间隔的结束时计算,随着时间调整它们的行为。例如,在软件项目中,经验被认为是影响生产率的一个重要因素,经验水平值随着项目进展不断提高,同时,疲劳程度、进度压力将影响到生产率,但可能会起反作用,系统动力学方法连续模拟这些变量的相互作用,进行生产率的动态估算。
  
  2.2应用实例:Brooks法则
  在软件工程领域,有一个著名的Brooks法则,即在进度落后的项目中雇用新手加入以希望赶上进度,结果使得项目进度更加落后。下面我们将通过系统动力学模型和仿真来研究增加人手对生产率、总人月数和项目持续时间的影响。
  建模首先要对问题域了解清楚,找出系统中的主要组成和因果结构关系。图1是因果关系图。一旦项目经理发现项目进度落后,积压增加,就开始招聘新员工,增加员工数量。员工数量的增加带来的直接影响是提高生产率以及通信和培训的代价,而通信和培训的代价的增加又会直接导致生产率的降低。生产率的提高会加大进度,减少项目积压。通过图1的因果关系图的分析,我们会发现众多元素形成一个反馈循环,增加员工对生产率的影响既有积极的也有消极的影响,因此难以直接通过定性分析来得出结论,结果如何还需要通过仿真的定量数据来说明。
  图2是采用系统动力学建模仿真工具PowerSim建立的Brooks法则的系统动力学模型。需求会逐步被开发成产品,所以随着时间流逝,需求将减少而已经开发的软件数量不断增加。在本模型中,软件生产效率由多个因素共同决定,其中包括标准生产效率、通信损耗和开发人员的数量。开发人员的总数=新人员数量+有经验人员数量一负责培训新人员的有经验人员数量。通讯损耗为总人数的一个非线性函数,这里采用Abdel-Hamid模型中的数据(0.6*人数n的平方)。另外还假定一个有经验 人员可以培训4个新员工,training overhead取值为25%。Assimilation delay表示—个新员工培训为能胜任工作的有经验人员的平均时间为20天。标准生产效率(Nominal productivity)为1,表示每把一个需求任务转化为软件产品需要1个标准化人天。在本模型中,新员工的生产效率为标准生产效率的0.8倍,而有经验员工的生产效率为标准生产效率的1.2倍。
  在我们的仿真运行中,设定初始条件为20个有经验员工去开发5000个需求任务的项目,结果显示为图3、图4中的reference曲线。总时间需要278天,总共耗费5500人天,生产效率为一条平行直线,值为18.24任务/天。
  假设项目经理在开发过程中想加快项目进度,在100天的时候开始增加10名新的开发人员,仿真结果显示为图3、图4中的current曲线。总时间反而需要299天,总共耗费7870人天,平均生产效率曲线在100天时有个显著下降,然后再逐步上升,最后在为16.56任务/天时达到稳定。从结果对比中我们不难看出由于急剧增加的通讯损耗和培训新员工而占用有经验员工的正常开发时间,导致生产效率的下降。结果是项目进度并没有提前,而开发费用却急剧增加了。
  图3和图4只是显示了模型仿真运行的某一个场景,反映了在某些情况下Brooks法则的正确性。事实上我们还可以通过调整增加人员的数量和进入时间来预测其他场景下的项目开发结果,从而选择相对较优的一个。比如,如果在100天的时候增加5个人,总时间能稍微较少一点,需要275天,但共耗费需要6295人天。
  上面描述的Brooks法则模型只是一个经过简化的模型,但还是能够比较好地说明增加新开发人员对项目的影响。更符合实际软件开发过程的模型还需要进一步细化。例如,新人员开发出来的产品其缺陷率往往比有经验人员开发出来的要高,这样将增加项目返工的工作量。当然还有如前面提到过的进度压力、质量保证手段等其他因素的影响。
  
  3 基于系统动力学的软件过程相关模型
  
  3.1 AbdeI-Hamid模型
  Abdel-Hamid模型是把系统动力学运用到软件工程领域的第一个系统比较完备的模型,它的目标是研究项目管理政策和活动在软件开发中的作用。Abdel-Hamid模型被划分为4个主要子系统,包括人力资源管理、软件生产、项目计划和控制。人力资源子系统针对软件开发人员,其管理内容包括人员雇佣、解雇、人员流动以及培训。软件生产子系统为不同的开发活动分配可用的开发人员,比如培训、设计、编码、测试、返工和质量保证。该子系统还处理团队动机、开发人员疲劳程度、生产率消耗因素,比如通信和返工等。软件控制子系统测量软件生产活动,描述针对这些测量的管理措施。该子系统控制加班时间,进度压力和资金耗费等。软件计划子系统提供软件项目的初始化参数值,比如项目规模、初始团队规模、预期结束时间等。该子系统同样控制着高层管理人员对雇佣新员工的意愿等。
  通过对模型仿真运行结果的研究,Abdel-Hamid等人在项目花费、进度估算、质量保证的经济性质,和项目人员管理等方面得出了很多有趣的结论,例如:
  (1)在软件项目估算中更精确的估算,结果不一定会更好,因为不论原始估算进度如何,进度总是趋向于超过预计的。
  (2)采用类比的方法来进行软件估算通常使得进度比本来所需要的要长。
  (3)坚持过紧的进度会因劳动力的原因而增加费用。
  
  3.2软件过程领域中的其他应用模型
  基于系统动力学的建模和仿真已经被成功应用到很多领域,但在软件工程领域还没有得到广泛应用。其主要原因为相对物理系统来说,人和组织行为更难以精确建模,本节将从不同的应用方向介绍相关研究。
  项目管理项目估算是软件开发管理的一个必须的环节,而且估算对项目的开展有着重要影响。基于系统动力学的项目管理由于考虑到了过程的动态性,通常能够比一般基于统计历史数据的估算模型要更精确合理。Dynamic COCOMO就是在COCOMO模型的基础上提出的结合系统动力学的估算模型。在项目进度控制方面,结合系统动力学的模型能够更好地考虑到任务之间的相关性、有限的资源和可能的返工循环带来的延迟,因此比传统的项目管理方法更能反映现状。
  教育培训由于组织系统中的各种因素之间存在复杂的关联,经常会遇到一些违背直觉的现象。遇到问题如果只是简单地采取一些应对手段通常并不能取得预期效果,Brooks法则就是一个很好的例子。一般的教育方法很难说清问题本质原因,而利用仿真模型则可以进行有效的阐明。基于系统动力学仿真模型的教育培训还能使相关人员参与到仿真的软件开发活动中,去分析深层次原因。通过更改和设置不同参数,如雇佣率等来研究不同方法的结果,增强决策支持的能力。另外借助模型还能实现分布式培训,增强凝聚力和培训效果,节约费用。
  风险管理项目通常会因为需求变更、人员变动、资金削减等原因而显得很脆弱。基于系统动力学的仿真有助于在项目早期识别风险,通过定量的预测决策变化带来的后果,能够帮助设计出更客观、低风险的策略。
  过程改进在传统方法中,改变或者新增一个过程主要由操作经验决定。这种方式通常费用很高而且风险很大。建模仿真可以在一定程度上预见一个过程的运行状态。这种洞察力能够帮助过程设计者评估候选方案。这种基于数据的客观方法通常比主观评价方法更具有说服力。
  开发方法系统动力学仿真建模还被运用到辅助验证新的开发方法论的有效性中。比如为极限编程Xp的开发过程建模,被用来研究采用Xp方法时需求变更带来的费用变化。
  
  4 结束语
  
  软件开发是一个复杂的过程,采用系统动力学方法来对软件过程进行建模能很好地描述各个组成要素问的动态关联,尤其是对传统建模方法难以精确描述的软性因素,它以一种连续的方式从定性和定量两个方面对软件过程进行建模和仿真。因此系统动力学对软件过程的多个领域都能提供有效的策略支持。但该方法还不够成熟,在以下各方面还需要做进一步的研究。 工业数据分析与模型验证。建模和仿真的有效性主要取决于模型的有效性。组织模型需要处理人和其他难以量化的问题;不仅收集数据困难,而且这些数据的重现性也难以得到保证;模型只是现实世界的一种简化,因此它不可能完全和实际情况相一致。对已有工业数据进行分析,来验证模型是一个值得关注的课题。
  多建模方法结合。当今研究的一个主要方向是如何结合离散型过程模型,比如侧重工件生产流程的基于工作流的过程建模。采用连续性建模方法为动态环境和行为建模,使用离散模型来为过程步骤、任务和资源建模。 模型的可用性和重用性。另外一个问题是如何制定容易裁减和重用的模型。显然如果模型过于简单,将难以反映所关注问题,但过于庞大和复杂则难以应用和开发。单纯的减小模型规模不是长久之计。
其他文献
我院2009年5月至2011年3月行腹腔镜联合胆道镜保胆术52例,手术顺利,术后患者恢复良好。现报告如下。1资料与方法1.1一般资料本组患者52例。其中男23例,女29例;年龄17-59岁,平均41.2
利率是宏观经济的重要指标,也是货币政策的主要工具之一。市场经济体制的建立与金融市场的完善,要求利率引导市场货币的流量和流向,发挥调节货币资金供求的功能。但从我国的现实
【正】 如今,大如发财树、巴西木、铁树,小如竹语、万年青等观赏植物长驻写字楼和机关事业单位,装点出风情各异、赏心悦目的景致。一串红、万寿菊等普通花卉则在路边争奇斗艳
摘 要: 通过理论分析对全局和分布式索引架构进行了比较,分析了分布式全局索引架构所能够应对的数据规模的上界和分布式局部索引架构在特定数据规模下相应最优的机群规模等。可以证明,在海量数据背景条件下,由于需要求交集的查询结果数据量过大,会导致全局索引架构在查询结果求交集阶段处理时间过长,以致信息检索系统不能满足用户对系统响应时间的需求,因此局部索引架构会成为在面对海量数据时信息检索系统的必然选择。  
我科于2009年10月至2010年10月对80例肛门病患者应用复方亚甲蓝创面注射、盐酸丁卡因胶浆创面外敷予以肛门术后镇痛,取得了满意效果,现报告如下.
目的研究茜草双酯-羟丙基-β-环糊精包合物制备工艺。方法采用正交实验设计,以包合率为指标评价包合物制备工艺。结果最佳包合条件为:茜草双酯与羟丙基-β-环糊精摩尔比为1∶2
会计收益信息与现金流量信息之比较胡禾笛一、收益信息与现金流量信息的历史探源本世纪30年代之前,财务会计的重心是资产负债表,30年代以后收益才逐渐得到重视。鉴于这种情况,在资产
规范财政收入形式之探究在国外,政府收入就是我们常说的财政收入,因为,政府的收入都要纳入预算管理,在老百姓眼中,只要是政府收的都是税。而在我国则不同,政府的收入分为税收收入、
摘 要: 采用水印套图与分栏相结合的方法设计了一种可任意增删改试卷内容而无损布局的试题模版。实现了将试题内容一次性导入并自动生成试卷。给出了模板设计的思路和具体方法,并总结了该模板的优点。  关键词: 模版; 套图; 分栏; 布局  中图分类号:TP391.1 文献标志码:A 文章编号:1006-8228(2013)05-01-02  An exam paper template in Micro