专利名称:一种基于过程仿真技术进行软件项目进度控制的方法
技术领域:
本发明涉及一种基于项目执行仿真技术的软件项目进度控制方法,该方法特别适用于规模较大,风险较多,不确定性较高的项目缓冲分配和项目进度控制,如大型软件开发项目等,属于计算机软件工程领域。
背景技术:
随着信息技术的应用领域不断扩展,软件产品的规模不断增大,复杂度也越来越高。这导致软件项目控制的难度也越来越大。软件项目进度滞后、成本超支的情况依旧屡见不鲜。近年来,软件开发的主流模式已由小规模的手工作坊式开发转向诸如软件外包等形式的跨地域、跨组织的协作软件开发。软件产品与生倶来的高复杂性导致软件开发过程相对传统工业生产过程具有更高的不确定性。频繁的计划变更将严重影响软件开发效率,增加额外的工作量和沟通成本。同时,计划变更所带来的大量沟通协调工作也会给项目带来新的风险。如何制定出符合项目特点的、稳定的进度安排是确保软件项目成功的关键。因此如何减少计划变更,提高项目执行的稳定性是软件工程领域的热点问题。稳定的项目计划将大大提高协作开发效率,降低开发成本。尤其对于软件外包等协作型软件开发公司而言,稳定的项目进度安排和执行能力将提高其行业竞争力。
大规模软件产品开发项目的特点在于其极高的不确定性,由此带来的项目风险直接关系到项目成败。本发明风险驱动的项目缓冲分配方法旨在通过综合考虑软件项目的风险因素、任务之间的工作产品约束和人力资源约束(项目中各任务之间的约束关系的介绍参见
文献Lizi Xie, A Project Scheduling Method Based on Human Resource Availability, In: Proc.Of the 20th International Conferences on Software Engineering and knowledge engineering, SanFrancisco:Knowledge Systems Institute,2008, Pages:161-166),将有限的可用项目缓冲分配到各个任务中。通过风险暴露度和风险叠加性相结合的方法量化任务的风险权重(关于风险暴露度参见文献Karlsson J, Wohlin C, Regnell B. An evaluation of methods for prioritizingsoftware requirements. Information and Software Technology, 1997, Volume39(14-15),939-947)。在项目规模较大,任务数量较多的大型软件开发项目中,为任务进行合理的缓冲分配和进度安排是很难完成的。本发明通过对复杂环境下的项目缓冲自动分配,并使用风险驱动的项目执行仿真对项目进度安排进行仿真执行和分析(利用计算机仿真技术在项目管理中提供决策支持有很多己有成果,参见专利200810119283.6预测需求易变性对软件项目影响的仿真方法及系统,中国科学院软件研究所),对项目执行效果进行有效预测。
发明内容
针对上述问题,本发明的目地在于提供一种基于过程仿真技术进行软件项目进度控制的方法。该方法通过基于对项目任务的风险影响权重进行合理的量化表示和对任务关系的分析,将有限的可用项目缓冲进行自动的优化分配,实现科学的进度安排;通过计算机模拟技术对项目计划进行模拟执行,预测风险对项目的影响以及计划变更的频率;最终获得最佳的项目工期安排以及对项目执行情况的预测。本发明包括一种风险驱动的缓冲分配系统和一种基于过程仿真的项目执行分析系统。本发明具有极高的实用价值,能够提高项目的缓冲利用效率,控制计划变更频率,提高项目执行的稳定性。
本发明的技术方法为
一种基于过程仿真技术进行软件项目进度控制的方法,其步骤为
1) 输入一项目计划信息,包括项目信息、任务理想工期、人力资源分配信息、任务之间的工作产品约束及风险信息;
2) 约束关系生成模块遍历任务集中的每个任务,根据工作产品约束和人力资源分配信息确定任务间的进度约束关系;
3) 进度安排生成模块根据任务间的进度约束关系和任务理想工期,生成任务的理想进度安排;
4) 关键链分析模块搜索理想进度安排,确定出项目中的关键任务链和非关键任务链;
5) 项目缓冲分配模块计算选定关键任务链上每个任务风险缓冲权重,并根据风险缓冲权重计算该选定关键链上每个任务的可分配缓冲时间;
6) 项目缓冲分配模块根据任务之间的进度约束关系和时间先后,调整非关键任务链上任务的可用缓冲时间,输出缓冲分配结果;
7) 项目仿真执行模块按照给定的缓冲范围和仿真次数,对缓冲分配结果执行仿真;
8) 对多次仿真项目执行的平均计划变更点数和平均执行工期进行统计,并自动绘制统计9) 根据统计图确定项目计划的最佳进度安排。所述项目信息包括项目的任务集合、人力资源集合、可用缓冲时间、风险列表;所述风险的特性包括原子性、独立性、叠加性、无时效性。
所述进度约束关系包括完成—完成、完成一开始、开始一开始、开始一完成。
所述理想进度安排的生成方法为首先系统根据任务之间的约束关系,确定每个任务的前置任务集合和后置任务集合;然后,当某任务的前置任务不为空时则将该任务的计划开始日期设为前置任务的最晚结束日期,如果某任务的前置任务为空时则将该任务的计划开始日期设为项目计划开始日期;将任务的计划结束日期设为计划开始日期与理想执行时间之和。
所述关键链分析模块中采用关键路径算法确定出项目中的关键任务链和非关键任务链,其方法为根据所述进度约束关系,将任务集合表示为一个以任务为节点、任务理想工期为各边长的有向无环图;从任务集合的根任务开始,按照任务关系,搜索所有可达项目结束的任务路径;从任务路径中选择任务工期之和最长的一条路径作为项目关键任务链,其它路径作为非关键任务链。
所述每个任务风险缓冲权重的计算方法为累计所选关键链上所有风险的暴露度对任务执行工期的影响,以该影响值作为该任务的风险缓冲权重;所述暴露度为风险的影响和概率的乘积。
所述方法采用基于离散事件的仿真方法对缓冲分配结果执行仿真。所述对缓冲分配结果执行仿真的方法为
1) 根据任务之间的约束关系,确定每个任务的前置任务集合和后置任务集合;
2) 取出任务集合中的当前可模拟执行任务集合;
3) 对当前可模拟执行任务集合中的每个任务,按照计划开始日期先后模拟风险发生情况,计算模拟执行的实际工期;如果延期天数大于可用缓冲,则记录一次计划变更点,并将任务状态标记为已模拟执行;
4) 如果任务的计划结束日期有变更,则取该任务的后置任务集合,判断该变更是否会对其后续任务造成影响,每个后续任务的计划开始日期的变更和计划结束日期的变更均记为一个计划变更点;依次处理,直到最后处理的任务后置任务集合为空。
所述判断任务变更是否对其后续任务造成影响的方法为如果当前任务延期,且延期日期晚于后续任务的开始日期,则后续任务需要进行计划变更,如此递归,统计变更影响,直到项目末尾。
所述缓冲分配结果以甘特图的形式输出;所述统计图包括计划变更变化趋势图、平 均执行工期变化趋势图和计划变更/执行工期对比趋势图。
如图l所示,本发明的技术方案主要包括如下两大功能模块
A风险驱动的自动化项目缓冲分配模块,该模块接受用户输入的项目信息(如任务信 息、风险信息、人力资源分配信息、可用项目总缓冲天数等),自动按照风险权重将项目 缓冲分配到关键任务之上,输出优化的项目进度安排。该模块内部进行项目缓冲分配的大 致流程如下
1用户信息输入->2系统自动分析任务之间的约束关系->3系统自动进行理想进度安排 ->4系统自动分析项目关键链->5系统自动进行缓冲分配->6系统自动处理非关键链任务 ->7系统输出缓冲分配结果
B基于过程仿真的自动化项目模拟执行和分析模块,该模块根据风险信息对给定项目 进度安排进行自动化的仿真执行,同时采集计划变更和项目工期两项基本数据,最后自动 对仿真执行的结果进行统计分析,将统计结果以图形化方式展现给用户,供项目管理人员 做出项目决策。该模块内部对项目进行仿真执行和数据采集分析的大致流程如下
1系统自动分析任务约束关系->2系统自动査找当前可仿真执行任务集合->3系统自动 仿真单个任务执行->4系统自动仿真任务计划变更对后续任务的影响->5如果当前无可仿 真执行任务则仿真结束,否则循环执行该流程->系统自动生成数据统计分析图
以上两个模块对数据进行处理时均是风险驱动的,系统在风险特性的表达上采取如下 的四维定义
维度l、风险的原子性每个风险要么发生一次要么不发生。对于可能发生N次的风
险,系统将其分解表达为N个单独的风险。
维度2、风险的独立性只考虑独立的风险,风险之间的相关关系不做考虑。
维度3、风险的叠加性发生在同一个任务上的多个风险对任务进度所产生的影响是
叠加进行的。比如任务^存在n个风险(AAA....凡),则所有风险都发生情况下的任
务工期为
7i./£r><n(d"i)) 公式{1}
维度4、风险的无时效性系统认为某个任务的风险在任务执行过程中任意时间发生,
对任务进度所造成的影响是相同的。在对项目进行执行仿真时,任务之间考虑如下的约束关系
软件开发项目中不同任务间存在前驱后继的进度约束关系,任务间的四种进度约束关 系为完成一完成(Finish-Finish, FF),完成一开始(Finish-Start, FS),开始一开始(Start-Start, SS),开始一完成(Start-Finish, SF)。在软件开发项目中以FS型约束最为常见。该约束的 具体表现是一个任务必须当其他某些任务完成后才可以开始。在软件开发过程中,造成这 种进度约束关系的原因主要有两个
1工作产品约束
如果任务的执行需要其他任务提交相应的工作产品作为输入,那么该任务与其他任务 之间存在FS型约束关系。比如系统设计任务和设计评审任务之间就存在这种约束关系, 因为设计评审任务的执行需要系统设计任务完成并提交相关工作产品(设计文档)。
2资源约束
如果某任务的执行需要其他任务完成以释放必要的资源,那么该任务与这些任务之间 也会存在FS型约束关系。
本发明的积极效果为
本发明包括风险驱动的项目缓冲分配模块以及风险驱动的项目执行仿真和分析模块。 对于给定的项目信息集合,系统能够自动实现项目缓冲的优化分配并通过项目仿真对项目 进度安排的执行效果进行预测和分析。在项目规模较大,任务较多时,该方法能为用户提 供最佳工期安排以及对项目执行情况的预测,具备极高的实用价值。本发明能够帮助软件 企业确定合适的项目缓冲长度和缓冲分配方案,提高项目缓冲的利用效率,对确保项目计 划执行的稳定性,减少计划变更,控制项目成本等方面提供了有力的系统支持。
图l本发明的系统结构示意图2系统用户界面示意图3缓冲分配后的项目进度安排示意图4仿真执行后计划变更情况和平均执行工期情况对比分析图。
具体实施例方式
下面结合附图进一步详细的描述本发明的具体实施方式
。 一、本发明的系统结构本发明的系统架构图如图l所示。框架分为工具层和模型层。项目经理将项目信息输 入系统,然后査看自动化缓冲分配结果和项目执行仿真结果。在工具层,风险驱动的项目 缓冲分配模块提供自动的项目缓冲分配和进度安排功能,风险驱动的项目执行仿真模块则 提供自动化的项目仿真执行和数据统计分析功能。在底部的模型层中,软件项目模型对框 架中各个模块的实现和具体运作提供底层的描述支持,同时对系统的后台数据库操作提供 支持。
1工具层
该层提供了基本的图形显示系统和用户输入输出访问界面,核心模块包括风险驱动的 项目缓冲分配模块和风险驱动的项目执行仿真模块。系统可以提供自动化的缓冲优化分配 与项目执行仿真以及仿真数据分析等功能。
2模型层
该层提供了对系统所设计的所有数据的抽象描述,以及数据存储的数据库访问支持。 二、风险驱动的项目缓冲分配模块
该模块实现了对项目缓冲的自动优化分配。分配期间综合考虑各任务不同的风险影响
权重。该模块自动进行缓冲分配的七个工作流程和涉及的技术方案详解如下 1信息输入
用户输入项目计划,包括项目信息、任务理想工期、人员信息、人员分配情况、任务 之间的工作产品约束及风险信息。项目信息包括项目的任务集合、人力资源集合、可用 缓冲时间、风险列表。
该流程中,系统通过图形化的系统界面实现良好的用户输入与输出。项目负责人或用 户将项目计划录入风险驱动的项目缓冲分配系统,用户界面如图2所示。
2约束关系设定
约束关系生成模块根据任务之间的工作产品约束和任务之间的人力资源约束确定任 务之间的前驱后继关系。
约束关系生成模块确定资源约束关系时釆用遍历算法,对任务集合中的每个任务,分 析其他任务与该任务之间是否存在资源约束。如果存在,则设定前驱后继关系。具体判定 资源约束关系的方法如下
(r.柳 > ,.柳)A(r.鹏rv.鹏* (*) => / e r.p"re 公式{2}
上述公式是指如果任务T在任务t结束之后开始,而且两个任务的人力资源集合的交
集不为空,则这两个任务之间存在资源约束关系。3理想进度安排
进度安排生成模块根据任务之间的约束关系和任务的理想执行时间,在暂不考虑风险 因素的前提下,形成任务的理想进度安排。该安排的总工期称为理想项目工期。本步骤确 定了在不考虑风险情况下所有任务的理想开始日期和结束日期。
该流程中采用的具体处理算法如下
如果r.Prera-鄉lj7VRSD-P.P5D } 公式{3}
上述算法是指当某任务的前置任务不为空时则将该任务的计划开始日期设为前置任 务的最晚结束日期,如果某任务的前置任务为空时则将该任务的计划开始日期设为项目计 划开始日期。表达式中设计的符号定义请参考说明书后面的附录1。
7wz) = r.柳+n 公式{4}
上述算法是指将任务的计划结束日期设为计划开始日期与理想执行时间之和。
4分析关键链
关键链分析模块分析理想进度安排中的项目关键任务链,关键任务链是指在项目的理 想工期安排中,从项目开始到项目结束中历时最长的一段任务路径。在项目理想工期安排 的进度图中通过关键路径搜索算法得到项目进度的关键任务链。如果项目计划存在多条关 键链则随机选择其中之一进行处理。
在该流程中,关键链分析模块确定项目关键链采用如下基于遍历的搜索算法-
1理想进度安排中,各任务已经按照约束关系设定好其前驱后继关系。根据该约束关 系,任务集合可以被表示为一个以任务为节点,任务理想工期为各边长的有向无环图。
2从任务集合的根任务开始,按照前途后继的任务关系,搜索所有可达项目结束的任 务路径。
3从任务路径中选择任务工期之和最长的一条路径。如果存在多条最长路径,则随机 选择其中一条作为项目关键链。 5缓冲分配
项目缓冲分配模块按照任务之间的约束关系,自动依次为全部的关键链任务分配缓 冲,该分配的详细流程分为如下四部分 (1)计算任务风险缓冲权重。 基于风险暴露度的风险缓冲权重量化方案如下
如果所选定的关键链上存在n个任务^,&…。,记任务^的风险缓冲权重RW(RiskWeight)为
r'j^-r,./五rxunw.A./x7M户+i)卜1} 公式{5}
上述公式中风险的I (影响)和P (概率)的乘积称为风险的暴露度,公式的含义是指 累计所有风险的暴露度对任务执行工期的影响,以该影响值作为该任务的风险缓冲权重。 影响值越大则该任务的不确定性越高,需要的缓冲时间越多。
(2) 计算任务的可分配缓冲天数。 基于关键链的确定任务缓冲天数的方案如下-
任务r'的分配缓冲天数为
》", 公式{6}
上述公式根据任务的风险缓冲权重对可用项目缓冲P.PB进行分配。风险缓冲权重较
高的任务将获得较多的缓冲时间,风险缓冲权重较小的任务将获得较少的缓冲时间。
函数^")为对x取整运算。当x的小数部分大于等于0.5时对x取上整,当x的小数
部分小于0.5时对x取下整。由上定义可知2X^"^,即缓冲分配后,选定的关键链上 各个任务的缓冲之和等于项目的总可用缓冲。
(3) 调整任务的计划结束曰期。
调整任务的计划结束日期,将任务A的计划结束日期更新为
r,.卿=T^SD+r^r+r, 公式{7}
上述算法将任务的计划结束日期设定为任务的计划开始日期与任务理想执行时间、可 用缓冲三者之和。
(4) 调整后续任务的计划工期。
根据步骤3中的方法递归调整任务T'所有后续任务的计划开始日期和计划结束日期。
处理非关键链任务
项目缓冲分配模块在确定所有关键任务的可用缓冲之后,开始对非关键链任务进行自 动化处理。基于尽早开始策略的确定非关键链任务工期的方案如下-
按照任务之间的约束关系和时间先后,依次处理所有的非关键链任务,调整非关键链 任务的可用缓冲时间为其计划结束日期和其后继任务的最早开始日期之间的时间跨度,直 到所有的非关键链任务均调整完毕。项目缓冲分配模块釆用尽早开始策略处理非关键链任
务。传统工业过程中为了避免库存开销采用及时生产(JIT)思想安排最佳任务开始日期。软件开发有别于工业生产,软件生产的库存开销很小,可以不去考虑。,而软件开发过程的不 确定性较大,因此在我们的方法中,确定关键链任务进度时采取尽早开始策略,这样可以
降低非关键链任务的进度出现异常时对关键链的冲击。 具体处理方法如下
根据公式{2}重新计算非关键链任务的计划开始日期
7输出缓冲分配结果
项目缓冲分配模块分配结果以甘特图的形式输出自动优化缓冲分配后的项目进度安
排,供用户査看。如图3所示。
三、风险驱动的项目仿真执行模块
该模块按照给定的缓冲范围和仿真次数,实现了对项目计划执行的自动化仿真,在仿 真时对项目执行数据(计划变更点数,执行工期等度量点)进行采集和统计分析并给出图 示,如图4所示。系统的核心仿真算法可归类为基于离散事件的仿真方法。该模块的处理 流程和所釆用的技术方案详解如下
1分析任务的资源约束关系
系统自动分析任务之间的资源约束关系,确定每个任务的前置任务集合和后置任务集 合。资源约束关系判定方法如下
<formula>formula see original document page 12</formula>上述判定方法是指如果任务T在任务t结束之后开始,而且两个任务的人力资源集合 的交集不为空,则这两个任务之间存在资源约束关系。 2获得当前可仿真执行任务集合 系统自动查找任务集合中的当前可仿真执行任务集合。 判定某任务是否为可仿真执行任务的方法如下
<formula>formula see original document page 12</formula>
上述定义是指项目的任务集合中的任务T,如果T的前置任务均执行过或T的前置任 务为空,则任务T为当前可仿真执行。 3仿真单个任务执行
对当前可仿真执行任务集合中的每个任务T按照计划开始日期先后仿真风险发生情况,计算仿真执行的实际工期。如果延期天数大于可用缓冲,则记录一次计划变更点,并 将任务状态标记为己仿真执行。(一次计划变更可能包括多个计划变更点,为了便于统计, 我们只记录计划变更点的数量)。
该流程的详细处理算法参见附录2。
4仿真任务计划变更对其后续任务的影响
如果T的计划结束日期有变更,则取任务T的后置任务集合,判断该变更是否会对其 后续任务造成影响,每个后续任务的计划开始日期的变更和计划结束日期的变更均记为一 个计划变更点。依次处理,直到最后处理的任务后置任务集合为空。该手段能够很好的模 拟单任务变更对整体项目的波动性影响。
该流程的详细处理算法参见附录2。 5判断是否继续进行仿真
继续执行自动处理流程2,直到当前可仿真执行的任务集合为空。 6生成数据统计分析图
系统根据对多次仿真项目执行的平均计划变更点数和平均执行工期进行统计分析,并 自动绘制计划变更变化趋势图、平均执行工期变化趋势图和计划变更/执行工期对比趋势 图。通过这些统计图,项目管理人员可以很方便的获得最佳工期安排以及对项目执行情况 的预测,进而提高软件项目计划执行的可靠性。
附录l:说明书中涉及到的符号以及缩写的解释说明
尸(两.ec,) = (/W,尸幼,尸尸A尸5,ra……}
-PN (ProjectName):项目名称
-PSD (Plan Start Date):项目计划开始日期
-PFD (Plan Finish Date):项目计划结束日期
-PB(ProjectBuffer):项目可用缓冲,单位天
-TS (Task Set):项目包含的任务集合。 re-M……r }
—r(to&)爿7W,尸幼,尸fZ),ra5,/Er,五,c尸,fflis,Prer&尸owra,i 5......}这里的任务是指正EE相关标准
中,工作分解结构(WBS)里的底层工作包,其成本、工作量、工期、工作产品和资源需求 等属性是较为明确的。
…TN (Task Name):任务名称PSD (Plan Start Date):任务计划开始日期
—PFD (Plan Finish Date):任务计划结束日期。T.PFD=T.PSD+T.IET+T.TSB
--TSB (Task Scheduled Buffer):任务所分配的可用缓冲天数
--IET (Ideal Execution Time):理想情况下(不考虑风险)该任务需要的执行天数 E(Executed):用来标识该任务是否被仿真执行过。取值为true表示该任务已被仿真 执行过,取值为false表示该任务未被仿真执行过。
--CC(Critical Chain):用来标识该任务是否位于选定的项目关键链之上。取值为true 表示该任务是关键任务,取值为false表示该任务不是关键任务。
--HRS (Human Resource Set):分配给任务的人力资源集合
ffltS =卿,朋2,朋3……朋J
—-HR(HumanResource)={HN, ......}人力资源属性可以根据需要进行扩展,这里只列
出人员姓名。
-——HN(HumanName):人力资源姓名
—PreTS (Pre-Task Set):前置任务集合,当前任务如果要开始,则其前置任务必须已经 结束。
—PostTS(Post-Task Set):后置任务集合,如果当前任务不结束就不能开始执行该集合 中的任务。后置任务集合可以通过前置任务集合关系得到,这里为了后期缓冲分配和仿真 执行的描述方便,单独列出。
--RS (Risk Set):对任务进度产生影响的风险集合
—R (Risk) ={RN, I,P……} —-—RN(RiskName):风险名称
-I(Impact)讽险对任务进度的影响程度 —-Probability):风险可能发生的概率
附录2:风险驱动的项目仿真执行模块中步骤3和步骤4的详细处理算法
我们对该工具中涉及的"计划变更点"做出如下解释
定义计划变更点如果某任务在仿真执行过程中,计划开始日期或计划结束日期发 生变化,则记录一个计划变更点,如果计划开始日期和计划结束日期都发生变化,则记录 两个计划变更点。3仿真单个任务执行
对当前可仿真执行任务集合中的每个任务T按照计划开始日期先后仿真风险发生情 况,计算仿真执行的实际工期。如果延期天数大于可用缓冲,则记录一次计划变更点,并 将任务状态标记为已仿真执行。(一次计划变更可能包括多个计划变更点,为了便于统计, 我们只记录计划变更点的数量)。该处理过程的伪代码表示如下
Function SimTaskExcutation(Task T) {
numOfPlanChangePointi;〃用于统计计划变更点数的计数器
actualDurion = GetDelayedDayForATask(task);
actualFinishDate = T.PSD +actualDurion;
if (actualFinishDate〈T.PFD) T.PFD=actualFinishDate;
if (actualFinishDate〉T.PFD)
{
T.PFD=actualFinishDate;
numOfPlanChangePoint ++;〃任务延期,记录变更点 numOfPlanChangePoint += getPlanChangeForTaskDelay(task);〃分析该延期
对后续任务的影响
T.E=true;
return numOfPlanChangePoint;} Function GetActalDuration (Task T)该函数随机仿真风险发生情况,根据风险的叠加性 计算风险发生情况下对项目工期的影响,并返回该仿真工期长度。
4仿真任务计划变更对其后续任务的影响
如果T的计划结束日期有变更,则取任务T的后置任务集合,判断该变更是否会对其 后续任务造成影响,每个后续任务的计划开始日期的变更和计划结束日期的变更均记为一 个计划变更点。依次处理,直到最后处理的任务后置任务集合为空。该处理过程的伪代码 表示如下
Function getPlanChangeForTaskDelay (Task T) { planChange=0; if (T.PostTS--O)) return 0; for each t曰T.PostTS {ifT.PFD>t.PSD
{ planChange++; delay=T.PFD-t.PSD; t.PSD-T.PFD;〃计划开始日期推迟,
记录变更点
if delay〉t,TSB {
t.PFD=t.PFD+delay-t.TSB;
t.TSB=0;
^肌010^6++;}//计划结束日期推迟,记录变更点 else t.TSB=t.TSB-delay
卩18!1(:1101^6+=经61 1011(:1131^6 01:丁331^61&7(^11^13310;〃递归处理所有后
续任务
return planChange; }
权利要求
1.一种基于过程仿真技术进行软件项目进度控制的方法,其步骤为1)输入一项目计划信息,包括项目信息、任务理想工期、人力资源分配信息、任务之间的工作产品约束及风险信息;2)约束关系生成模块遍历任务集中的每个任务,根据工作产品约束和人力资源分配信息确定任务间的进度约束关系;3)进度安排生成模块根据任务间的进度约束关系和任务理想工期,生成任务的理想进度安排;4)关键链分析模块搜索理想进度安排,确定出项目中的关键任务链和非关键任务链;5)项目缓冲分配模块计算选定关键任务链上每个任务风险缓冲权重,并根据风险缓冲权重计算该选定关键链上每个任务的可分配缓冲时间;6)项目缓冲分配模块根据任务之间的进度约束关系和时间先后,调整非关键任务链上任务的可用缓冲时间,输出缓冲分配结果;7)项目仿真执行模块按照给定的缓冲范围和仿真次数,对缓冲分配结果执行仿真;8)对多次仿真项目执行的平均计划变更点数和平均执行工期进行统计,并自动绘制统计图;9)根据统计图确定项目计划的最佳进度安排。
2. 如权利要求1所述的方法,其特征在于所述项目信息包括项目的任务集合、可用缓 冲时间、人力资源集合、风险列表;所述风险的特性包括原子性、独立性、叠加性、 无时效性。
3. 如权利要求1所述的方法,其特征在于所述进度约束关系包括完成一完成、 完成一开始、开始一开始、开始一完成。
4. 如权利要求1所述的方法,其特征在于所述理想进度安排的生成方法为首先系统根 据任务之间的约束关系,确定每个任务的前置任务集合和后置任务集合;然后,当某 任务的前置任务不为空时则将该任务的计划开始日期设为前置任务的最晚结束曰期, 如果某任务的前置任务为空时则将该任务的计划开始日期设为项目计划开始日期;将 任务的计划结束日期设为计划开始日期与理想执行时间之和。
5. 如权利要求1所述的方法,其特征在于所述关键链分析模块中采用关键路径算法确定 出项目中的关键任务链和非关键任务链,其方法为根据所述进度约束关系,将任务集合表示为一个以任务为节点、任务理想工期为各边长的有向无环图;从任务集合的 根任务开始,按照任务关系,搜索所有可达项目结束的任务路径;从任务路径中选择 任务工期之和最长的一条路径作为项目关键任务链,其它路径作为非关键任务链。
6.如权利要求1所述的方法,其特征在于所述每个任务风险缓冲权重的计算方法为累 计所选关键链上所有风险的暴露度对任务执行工期的影响,以该影响值作为该任务的 风险缓冲权重;所述暴露度为风险的影响和概率的乘积。
7. 如权利要求1所述的方法,其特征在于采用基于离散事件的仿真方法对缓冲分配结果 执行仿真。
8. 如权利要求7所述的方法,其特征在于所述对缓冲分配结果执行仿真的方法为1) 根据任务之间的约束关系,确定每个任务的前置任务集合和后置任务集合;2) 取出任务集合中的当前可模拟执行任务集合;3) 对当前可模拟执行任务集合中的每个任务,按照计划开始日期先后模拟风险发生情 况,计算模拟执行的实际工期;如果延期天数大于可用缓冲,则记录一次计划变更 点,并将任务状态标记为已模拟执行;4) 如果任务的计划结束日期有变更,则取该任务的后置任务集合,判断该变更是否会 对其后续任务造成影响,每个后续任务的计划开始日期的变更和计划结束日期的变 更均记为一个计划变更点;依次处理,直到最后处理的任务后置任务集合为空。
9. 如权利要求8所述的方法,其特征在于所述判断任务变更是否对其后续任务造成影响 的方法为如果当前任务延期,且延期日期晚于后续任务的开始日期,则后续任务需 要进行计划变更,如此递归,统计变更影响,直到项目末尾。
10. 如权利要求1所述的方法,其特征在于所述缓冲分配结果以甘特图的形式输出;所述 统计图包括计划变更变化趋势图、平均执行工期变化趋势图和计划变更/执行工期对 比趋势图。
全文摘要
本发明公开了一种基于过程仿真技术进行软件项目进度控制的方法,属于计算机软件工程领域。本发明方法为1)根据输入的项目计划信息,确定任务间的进度约束关系和理想进度安排;2)搜索理想进度安排,确定出项目中的关键任务链和非关键任务链;3)按照任务之间的约束关系,依次为全部的关键任务分配缓冲;4)项目仿真执行模块按照给定的缓冲范围和仿真次数,对缓冲分配结果执行仿真;5)对多次仿真项目执行的平均计划变更点数和平均执行工期进行统计,确定项目计划的最佳进度安排。本发明能为用户提供最佳工期安排,提高项目缓冲的利用效率,对确保项目计划执行的稳定性,减少计划变更,控制项目成本等方面提供了有力的系统支持。
文档编号G06F9/44GK101630252SQ200910088448
公开日2010年1月20日 申请日期2009年7月7日 优先权日2009年7月7日
发明者青 王, 谢利子 申请人:中国科学院软件研究所