收藏 分享(赏)

第10章 计划.ppt

上传人:gnk289057 文档编号:9048134 上传时间:2019-07-22 格式:PPT 页数:76 大小:531.50KB
下载 相关 举报
第10章  计划.ppt_第1页
第1页 / 共76页
第10章  计划.ppt_第2页
第2页 / 共76页
第10章  计划.ppt_第3页
第3页 / 共76页
第10章  计划.ppt_第4页
第4页 / 共76页
第10章  计划.ppt_第5页
第5页 / 共76页
点击查看更多>>
资源描述

1、第四篇 软件项目管理 (Software Management),经理管什么?,计 划,预算,组 织,进 度,标 准,项目管理过程,软件项目管理的对象是软件工程项目。它所涉及的范围覆盖了整个软件工程过程。 为使软件项目开发获得成功,关键问题是必须对软件项目的工作范围、可能风险、需要资源(人、硬件软件)、要实现的任务、经历的里程碑、花费工作量(成本)、进度安排等做到心中有数。,软件项目管理可以提供这些信息。 这种管理在技术工作开始之前就应开始,在软件从概念到实现的过程中继续进行,当软件工程过程最后结束时才终止。,启动一个软件项目,在制定软件项目计划之前,必须明确项目的目标和范围考虑候选的解决方案

2、标明技术和管理上的要求 有了这些信息,才能确定合理、精确的成本估算,实际可行的任务分解以及可管理的进度安排。,软件人员和用户是在系统工程步骤中确定项目的目标和范围。 目标标明了软件项目的目的但不涉及如何去达到这些目的。 范围标明了软件要实现的基本功能,并尽量以定量的方式界定这些功能。 当明确了软件项目的目标和范围后,就应考虑候选的解决方案。,有了方案,管理人员和技术人员就能够据此选择一种“好的”方法,给出诸如交付期限、预算、个人能力、技术界面及其它许多因素所构成的限制。,度量,进行度量工作,是为了了解产品开发的技术过程和产品本身。度量开发过程的目的是为了改进过程,度量产品的目的是为了提高产品的

3、质量。 度量的作用是为了有效地定量地进行管理。,为有效地度量,常常需要考虑:对于过程和产品,合适的度量是什么?所收集的数据如何使用?用于比较个人、过程或产品的度量是否合理? 管理人员和技术人员可利用这些度量来了解软件工程过程的实际情况和它所生产的产品质量 。,估算,在软件项目管理过程中关键的活动就是制定项目计划。 在做计划时必须就需要的人力(以人月为单位)、项目持续时间(以年份或月份为单位)、成本(以元为单位)做出估算。 这种估算大多是利用以前的花费做为参考而做出的。,如果新项目与以前的一个项目在大小上和功能上十分类似,则新项目需要工作量、开发持续时间、成本大致与那个老项目相同。 假使项目背景

4、完全生疏,只凭过去的经验做出估算可能就不够了。 现在已有了许多用于软件开发的估算技术。其共同特点是:,事先建立软件范围以软件度量(以往的度量)为基础,以做出估算项目被分解为可单独进行估算的小块 管理人员大多使用不止一种估算技术,并用一种估算技术做为另一种估算技术的交叉检查。,风险分析,每当新建一个程序时,总是存在某些不确定性。用户要求是否能确切地被理解?在项目最后结束之前要求实现的功能能否建立?是否存在目前仍未发现的技术难题?在项目出现严重误期时是否会发生一些变更?等等。,风险分析对于软件项目管理是决定性的,然而现在还有许多项目不考虑风险就着手进行。 所谓风险分析实际上就是一系列风险管理步骤,

5、其中包括风险识别、风险估计、风险优化、风险管理策略、风险解决和风险监督。这些步骤贯穿在软件工程过程中。,进度安排,每一个软件项目都要求制定一个进度安排,但不是所有的进度都得一样安排。 对于进度安排,需要考虑的是:预先对进度如何计划?工作怎样就位?如何识别定义好的任务?管理人员对结束时间如何掌握 ?,如何识别和监控关键路径以确保结束?对进展如何度量?如何建立分隔任务的里程碑。 软件项目的进度安排与任一个工程项目的进度安排基本相同。首先识别一组项目任务,再建立任务之间的相互关联,然后估算各个任务的工作量,分配人力和其它资源,制定进度时序。,追踪和控制,一旦建立了开发进度安排,就可以开始着手追踪和控

6、制活动。 由项目管理人员负责追踪在进度安排中标明的每一个任务。 如果任务实际完成日期滞后于进度安排,则管理人员可以使用一种自动的项目进度安排工具来确定在项目的中间里程碑上进度误期所造成的影响。,还可对资源重新定向 对任务重新安排 (做为最坏的结果)可以修改交付日期以调整已经暴露的问题。用这种方式可以较好地控制软件的开发。,第10章 计划,所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期之中。软件项目管理过程从一组称为项目计划的活动开始,而第一项计划活动是“估算”。,软件计划最详尽地描

7、述了软件过程,它包括采用的生命周期模型、开发组织的组织结构、责任分配、管理目标和优先级、所用的技术和CASE工具,以及详细的进度、预算和资源分配。整个计划的基础是工作量估算和完成期限估算。, 10.1 度量软件规模,为什么要对软件进行度量, 表明软件产品的质量; 弄清软件开发人员的生产率; 给出使用了新的软件工程方法和工具所得到的(在生产率和质量两方面)的效益; 建立项目估算的“基线”; 帮助调整对新的工具和附加培训的要求。,度量的方式,在物理世界中的度量有两种方式。直接度量(例如,度量一个螺栓的长度);间接度量(例如,用次品率来度量生产出的螺栓质量)。 软件度量也同样分为两类:直接度量与间接

8、度量。,软件工程过程的直接度量包括所投入的成本和工作量。 软件产品的直接度量包括产生的代码行数(LOC)、执行速度、存储量大小、在某种时间周期中所报告的差错数。 软件产品的间接度量包括功能性、复杂性、效率、可靠性、可维护性和许多其它的质量特性。,只要事先建立特定的度量规程,很容易做到直接度量软件所需要的成本和工作量、产生的代码行数等。 软件的功能性、效率、可维护性等质量特性却很难用直接度量判明,只有通过间接度量才能推断。, 10.1 度量软件规模,一、代码行技术代码行技术是比较简单的定量估算软件规模的方法。这种方法根据以往开发类似产品的经验和历史数据,估计实现一个功能需要的源程序行数。当有以往

9、开发类似项目的历史数据可供参考时,用这种方法估计出的数据还是比较准确的。把实现每个功能需要的源程序行数累加起来,就得到实现整个软件需要的源程序行数。,请多位专家估算程序的最小规模 a ,最可能的规模 m,和最大规模 b 。以三组平均值估算程序规模:,代码行技术的优点用代码行技术度量软件规模时,当程序较小时常用的单位是代码行数(LOC),当程序较大时常用的单位是千行代码数(KLOC)。 1. 代码行技术的优点 代码行是所有软件开发项目都有的“产品”,而且很容易计算; 许多现有的软件估算模型使用LOC或KLOC作为关键的输入数据; 已有大量基于代码行的文献和数据存在。 2. 代码行技术的缺点 源程

10、序仅是软件配置的一个成分,用它的规模代表整个软件的规模似乎不太合理; 用不同语言实现同一个软件产品所需要的代码行数并不相同; 这种方法不适用于非过程语言。,项目aaa-01规模为 114.1 KLOC(千代码行)工作量用了 24个人月成本为168,000元文档页数为365在交付用户使用后第一年内发现了29个错误,有3个人参加了项目aaa-01的软件开发工作。,需要注意的是,在表格中记载的工作量和成本是整个软件工程的活动(分析、设计、编码和测试),而不仅仅是编码活动。 对于每一个项目,可以根据表格中列出的基本数据计算简单的面向规模的生产率和质量的度量。,根据数据表格可以对所有的项目计算出平均值:

11、生产率 KLOCPM(人月)质量 错误数KLOC成本 元LOC文档 文档页数KLOC,二、功能点技术功能点技术依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。这种方法用功能点(FP)为单位,度量软件的规模。 1. 信息域特性功能点技术定义了信息域的5个特性,分别是输入项数(Inp)、输出项数(Out)、查询数(Inq),主文件数(Maf)和外部接口数(Inf)。,下面讲述这5个特性的含义。输入项数:用户向软件输入的项数,这些输入给软件提供面向应用的数据。输入不同于查询,查询另外计数,不计入输入项数中。输出项数:软件向用户输出的项数,它们向用户提供面向应用的信息,例如,报表、屏幕和出错

12、信息等。报表内的数据项不单独计数。查询数:所谓查询是一次联机输入,它导致软件以联机输出方式产生某种即时响应。主文件数:逻辑主文件(即数据的一个逻辑组合,它可能是某个大型数据库的一部分或是一个独立的文件)的数目。外部接口数:机器可读的全部接口(例如,磁带或磁盘上的数据文件)的数量,用这些接口把信息传送给另一个系统。,2. 估算功能点的步骤用下述三个步骤,可以估算出一个软件的功能点数(即软件规模)。 (1) 计算未调整的功能点数UFP 首先,把产品信息域的每个特性(即Inp、Out、Inq、Maf和Inf)都分类成简单级、平均级或复杂级。根据其等级,为每个特性都分配一个功能点数,例如,一个平均级的

13、输入项分配4个功能点,一个简单级的输入项是3个功能点,而一个复杂级的输入项分配6个功能点。然后,用下式计算未调整的功能点数UFP UFP=a1Inp+a2Out+a3Inq+a4Maf+a5Inf其中,ai(1i5)是信息域特性系数,其值由相应特性的复杂级别决定,如表所示。,面向功能的数据表格,(2) 计算技术复杂性因子TCF这一步将度量14种技术因素对软件规模的影响程度。这些因素包括高处理率、性能标准(例如,响应时间)、联机更新等,在表102中列出了全部技术因素,并用Fi(1i14)代表这些因素。根据软件特点,为每个因素分配一个从0(不存在或对软件规模无影响)到5(有很大影响)的值。然后,用

14、下式计算技术因素对软件规模的综合影响程度DI:技术复杂性因子TCF由下式计算TCF=0.65+0.01DI因为DI的值在070之间,所以TCF的值在0.651.35之间。,(3) 计算功能点数FP功能点数FP由下式计算:FP=UFPTCF功能点数与所用的编程语言无关,因此,功能点技术比代码行技术更合理一些。但是,在判断信息域特性复杂级别及技术因素的影响程度时,存在相当大的主观因素。, 10.2 工作量估算,计算机软件估算模型使用由经验导出的公式来预测软件开发的工作量,工作量是软件规模(LOC或FP)的函数,工作量的单位通常是人月(pm)。支持大多数估算模型的经验数据,都是从有限个项目的样本集中

15、总结出来的,因此,没有一个估算模型能够适用于所有类型的软件和开发环境。,一、静态单变量模型这类模型的总体结构形式如下:E=A+B(ev) C其中,A、B和C是由经验数据导出的常数,E是以人月为单位的工作量,ev是估算变量(LOC或FP)。此外,大多数模型都有某种形式的调整成分,使得E能够依据项目的其他特性(例如,问题的复杂程度、开发人员的经验、开发环境等)加以调整。下面是几个典型的静态单变量模型。,1. 面向LOC的估算模型 (1) WalstonFelix模型E=5.2(KLOC)0.91 (2) BaileyBasili模型E=5.5+0.73(KLOC)1.16 (3) Boehm简单模

16、型E=3.2(KLOC)1.05 (4) Doty模型(在KLOC9的情况下)E=5.288(KLOC)1.407,2面向FP的估算模型 (1) Albrecht & Gaffney模型 E=-13.39+0.0545FP (2) Kemerer模型E=60.627.72810-8FP3 (3) Maston、Barnett和Mellichamp模型E=585.7+5.12FP,二、动态多变量模型动态多变量模型也称为软件方程式,它是根据从4000多个当代软件项目中收集的生产率数据推导出来的。这种模型把工作量看作是软件规模和开发时间这两个变量的函数。动态多变量估算模型的形式如下:E=LOCB0.

17、333/P3(1/t) 4 其中, E是以人月或人年为单位的工作量; t是以月或年为单位的项目持续时间; B是“特殊技术因子”,它随着对集成、测试、质量保证、文档及管理技术的需求的增长而缓慢增加,对于较小的程序(KLOC=510),B=0.16,对于超过70KLOC的程序,B=0.39; P是“生产率参数”,它反映了下述因素对工作量的影响:, 总体的过程成熟度及管理水平; 使用良好的软件工程实践的程度; 使用的程序设计语言的级别; 软件环境的状态; 软件项目组的技术及经验; 应用系统的复杂程度。,当开发实时嵌入式软件时,典型值是P=2000;对于电信和系统软件来说,P=10000;对于商业系统

18、应用,P=28000。适用于当前项目的生产率参数,可以从历史数据导出。应该注意,软件方程式有两个独立的变量:对软件规模的估算值(用LOC表示);以月或年为单位的项目持续时间。从公式可以看出,开发同一个软件(即LOC固定)的时候,如果把项目持续时间延长一些,则可降低完成项目所需要的工作量。,三、COCOMO模型所谓COCOMO模型就是Boehm提出的构造性成本模型(COnstructive COst MOdel),它是一种层次结构的软件估算模型。下面以中级COCOMO模型为例,介绍构造性成本模型。该模型把软件开发工作量表示成代码行数(KLOC)的非线性函数:,其中: MM是开发工作量(以人月为单

19、位), C1是模型系数, KLOC是估计的代码行数(以千行为单位), a是模型指数, fi(i=1到15)是成本因素。每个成本因素都根据它的重要程度和影响大小赋予一定数值。成本因素影响所有工程项目,即使不使用COCOMO模型估算成本,也应该注意这些因素。可以把成本因素划分成产品因素、计算机因素、人员因素和项目因素等,下面简单介绍主要的成本因素。 1. 产品因素(1) 要求的软件可靠性(RELY),(2) 数据库规模(DATA) (3) 软件产品复杂程度(CPLX) 2. 计算机因素 (1) 执行时间的约束(TIME) (2) 存储约束(STOR) (3) 环境变更率(VIRT) (4) 计算机

20、换向时间(TURN),3. 人员因素 (1) 系统分析员的能力(ACAP) (2) 应用经验(AEXP) (3) 程序员的能力(PCAP) (4) 环境知识(VEXP) (5) 语言知识(LEXP),4. 项目因素 (1) 程序设计实践(MODP) (2) 软件工具(TOOL) (3) 进度约束(SCED),软件开发项目可以分成组织式、半独立式和嵌入式三种模式。对组织式软件的要求通常不苛刻,开发人员经验丰富,而且对软件的使用环境很熟悉(通常是为自己所在的组织开发软件),程序规模一般不大(小于50000行代码)。例如,简单的商业数据处理系统即属于组织式。嵌入式软件需要在很强的约束条件下运行,通常

21、和某些硬设备紧密结合在一起(例如,空中交通管理软件),对这类软件系统的要求通常十分苛刻。对半独立式软件的要求通常介于上述两类软件之间,但是这类软件的规模一般都比较大(可达300000行代码)。,表10.3列出了上述三种开发模式的模型系数和模型指数。表10.4列出了各个成本因素的实际值(称为工作量系数)。有了这两张表中的数据,就可以用式(10.3)估算工作量了。,对64个覆盖了相当广泛的应用领域的项目样本的研究,证明了中级COCOMO模型的有效性:对这些样本应用该模型,预测结果的误差在20%以内的项目约占总项目的68%。, 10.3 进度计划,项目管理者的目标是定义全部项目任务,识别出关键任务,

22、跟踪关键任务的进展状况,以保证能及时发现拖延进度的情况。为了做到这一点,管理者必须制定一个足够详细的进度表,以便监督项目进度,并控制整个项目。软件项目的进度安排是一项活动,它通过把工作量分配给特定的软件工程任务,并规定完成各项任务的起、止日期,从而将估算的工作量分布于计划好的项目持续期内。,一、基本原则 下述的基本原则能够指导软件项目的进度安排。 1. 划分 2. 相互依赖性 3. 时间分配 4. 工作量确认 5. 定义责任 6. 定义结果 7. 定义里程碑,二、Gantt图Gantt图(甘特图)是历史悠久、应用广泛的进度计划工具,下面通过一个非常简单的例子介绍这种工具。,图10.1 旧木板房

23、刷漆工程的Gantt图,为了醒目地表示里程碑,可以在Gantt图中加上菱形标 记,一个菱形代表一个里程碑,如图10.2所示。,图10.2 标有里程碑的Gantt图,三、工程网络上节介绍的Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具。它具有直观简明和容易掌握、容易绘制的优点,但是Gantt图也有三个主要缺点: 不能显式地描绘各项作业彼此间的依赖关系; 进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象; 计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费。,当把一个工程项目分解成许多子任务,并且它们彼此

24、间的依赖关系又比较复杂时,仅仅用Gantt图作为安排进度的工具是不够的,不仅难于做出既节省资源又保证进度的计划,而且还容易发生差错。工程网络是制定进度计划时另一种常用的图形工具,它同样能描绘任务分解情况以及每项作业的开始时间和结束时间,此外,它还显式地描绘各个作业彼此间的依赖关系。因此,工程网络是系统分析和系统设计的强有力的工具。,在工程网络中用箭头表示作业(例如,刮旧漆,刷新漆,清理等),用圆圈表示事件(一项作业开始或结束)。注意,事件仅仅是可以明确定义的时间点,它并不消耗时间和资源。作业通常既消耗资源又需要持续一定时间。图10.3是旧木板房刷漆工程的工程网络。图中表示刮第1面墙上旧漆的作业

25、开始于事件1,结束于事件2。用开始事件和结束事件的编号标识一个作业,因此“刮第1面墙上旧漆”是作业12。,图10.3 旧木板房刷漆工程的工程网络 图中:12刮第1面墙上的旧漆;23刮第2面墙上的旧漆; 24给第1面墙刷新漆;35刮第3面墙上旧漆; 46给第2面墙刷新漆;47清理第1面墙窗户; 58刮第4面墙上旧漆;68给第3面墙刷新漆; 79清理第2面墙窗户;810给第4面墙刷新漆; 910清理第3面墙窗户;1011清理第4面墙窗户; 虚拟作业:34;56;67;89。,在工程网络中的一个事件,如果既有箭头进入又有箭头离开,则它既是某些作业的结束又是另一些作业的开始。例如,图10.3中事件2既

26、是作业12(刮第1面墙上的旧漆)的结束,又是作业23(刮第2面墙上旧漆)和作业24(给第1面墙刷新漆)的开始。也就是说,只有第1面墙上的旧漆刮完之后,才能开始刮第2面墙上旧漆和给第1面墙刷新漆这两个作业。因此,工程网络显式地表示了作业之间的依赖关系。,在图10.3中还有一些虚线箭头,它们表示虚拟作业,也就是事实上并不存在的作业。引入虚拟作业是为了显式地表示作业之间的依赖关系。例如,事件4既是给第1面墙刷新漆结束,又是给第2面墙刷新漆开始(作业46)。但是,在开始给第2面墙刷新漆之前,不仅必须已经给第1面墙刷完了新漆,而且第2面墙上的旧漆也必须已经刮净(事件3)。也就是说,在事件3和事件4之间有

27、依赖关系,或者说在作业23(刮第2面墙上旧漆)和作业46(给第2面墙刷新漆)之间有依赖关系,虚拟作业34明确地表示了这种依赖关系。注意,虚拟作业既不消耗资源也不需要时间。,四、估算进度画出类似图10.3那样的工程网络之后,系统分析员就可以借助它的帮助估算工程进度了。为此需要在工程网络上增加一些必要的信息。首先,把每个作业估计需要使用的时间写在表示该项作业的箭头上方。注意,箭头长度和它代表的作业持续时间没有关系,箭头仅表示依赖关系,它上方的数字才表示作业的持续时间。其次,为每个事件计算下述两个统计数字:最早时刻EET和最迟时刻LET。这两个数字将分别写在表示事件的圆圈的右上角和右下角,如图10.

28、4左下角的符号所示。,图10.4 旧木板房刷漆工程的完整的工程网络(粗线箭头是关键路径),事件的最早时刻是该事件可以发生的最早时间。通常工程网络中第一个事件的最早时刻定义为零,其他事件的最早时刻在工程网络上从左至右按事件发生顺序计算。计算最早时刻EET使用下述三条简单规则: 考虑进入该事件的所有作业; 对于每个作业都计算它的持续时间与起始事件的EET之和; 选取上述和数中的最大值作为该事件的最早时刻EET。,事件的最迟时刻是在不影响工程竣工时间的前提下,该事件最晚可以发生的时刻。按惯例,最后一个事件(工程结束)的最迟时刻就是它的最早时刻。其他事件的最迟时刻在工程网络上从右至左按逆作业流的方向计

29、算。计算最迟时刻LET使用下述三条规则:考虑离开该事件的所有作业; 从每个作业的结束事件的最迟时刻中减去该作业的持续时间; 选取上述差数中的最小值做为该事件的最迟时刻LET。,五、关键路径图10.4中有几个事件的最早时刻和最迟时刻相同,这些事件定义了关键路径,在图中关键路径用粗线箭头表示。关键路径上的事件(关键事件)必须准时发生,组成关键路径的作业(关键作业)的实际持续时间不能超过估计的持续时间,否则工程就不能准时结束。,六、机动时间不在关键路径上的作业有一定程度的机动余地实际开始时间可以比预定时间晚一些,或者实际持续时间可以比预计的持续时间长一些,而并不影响工程的结束时间。一个作业可以有的全

30、部机动时间等于它的结束事件的最迟时刻减去它的开始事件的最早时刻,再减去这个作业的持续时间: 机动时间=(LET)结束-(EET)开始-持续时间对于前述油漆旧木板房的例子,计算得到的非关键作业的机动时间列在表10.6中。,在工程网络中每个作业的机动时间写在代表该项作业的箭头下面的括弧里(参看图10.4)。在制定进度计划时仔细考虑和利用工程网络中的机动时间,往往能够安排出既节省资源又不影响最终竣工时间的进度表。,图10.5 旧木板房刷漆工程改进的Gantt图之一,例:开发三个模块A、B、C。A为公用模块,B、C的测试须等A的调试完成后进行。A的编码需6天,测试8天,调试6天。B的编码需7天,测试8天,调试6天。C利用已有的模块,须先理解原模块8天,再修改8天,测试9天,调试7天。最后三模块集成测试需5天完成。,(1) 标出 Lasting Time,(2) 标出 EST: = 从起点始,所有进入事件的 EST+LT 中最大的,(3) 标出 LST: = 从终点(EST = LST)始,所有离开事件的 LSTLT 中最小的,(4) 标出 ST: = 终点LST 起点EST LT,(5) 标出Critical Path: 即EST = LST的所有事件组成的路径,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报