软件工程 第12章 软件项目计划与管理.ppt
《软件工程 第12章 软件项目计划与管理.ppt》由会员分享,可在线阅读,更多相关《软件工程 第12章 软件项目计划与管理.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十二章 软件项目计划与管理第十二章第十二章 软件项目计划与管理软件项目计划与管理【本章重点】软件项目的计划与组织软件成本估算及控制方法软件工程标准与软件文档【学习目标】掌握软件项目计划与组织方法理解软件成本估算及控制方法了解软件工程标准与软件文档12.1 软件项目的计划与组织12.2 软件成本估算及控制12.3 软件工程标准与软件文档12.4 小结12.5 习题【教学内容】12.1 软件项目的计划与组织12.1.1 软件开发的进度计划12.1.2 软件开发的组织机构12.1.3 软件人员配备12.1.1 软件开发的进度计划 不论从事何种技术性项目,实际情况都是在实现一个大目标之前往往必须完成
2、数以百计的小任务(也成为作业)。这些任务中有一些是处于“关键路径”之外的,其完成时间如果没有严重拖后,则不会影响整个项目的完成时间;其他任务则处于关键路径之中,如果这些“关键任务”的进度拖后,则整个项目的完成日期就会拖后。没有一个普遍适用于所有软件项目的任务集合,因此,一个有效的软件过程应该定义一组适合于所从事的项目的“任务集合”。一个任务集合包括一组软件工程工作任务、里程碑和可交付的产品。为一个项目所定义的任务集合,必须包括为最终获得高质量的软件产品而应该完成的所有工作,但是同时又不能让项目组负担不必要的工作。软件项目的进度安排是一项活动,它通过把工作量分配给特定的软件工程任务,并规定完成各
3、项任务的起、止日期,从而将估算的工作量分布于计划好的项目持续期内。1 1交付日期的确定交付日期的确定 交付日期的确定对软件开发项目的进度安排至关重要。一般有以下两种考虑方式:系统最终交付使用的日期已经确定。只确定了大致的期限,最后交付使用的日期由软件开发 机构根据具体情况确定。这种方式能够对软件开发任务进行细微的分析,并能够最好地利用资源和合理地分配工作量。在实际工作中,多为第一种情况。而这种情况大多是由软件开发机构以外的某些人决定,并强加给软件开发机构的项目开发者和管理者。在软件行业中,这种过于不现实的项目完成期限已司空见惯。有时决策者还认为这样的交付日期是十分合理的。但是,常识告诉我们合理
4、与否必须由完成工作的人们来判断。12.1.1 软件开发的进度计划2 2进度安排的基本原则进度安排的基本原则 对软件工程项目的进度安排,上面已经讨论过,可以从两个不同的视角来观察。一个是基于计算机系统的最终发布日期已经确定,而且不能改变。软件开发机构在这个约束下把工作量分布在预先确定的时间框架内;另一个是,假定大致的时间界限已经讨论过,但是最终的发布日期由软件开发机构来设定。通常第一种情况发生的频率远远高于第二种情况。与软件工程的其他领域一样,有如下一些基本原则可以指导软件项目的进度安排:划分 必须把项目划分成若干个可以管理的活动和任务,这些活动和任务 由所采用软件过程模型定义。为了完成项目划分
5、,对产品和过程都需要 进行分解。相互依赖性 必须确定划分出的各个活动或任务之间的相互依赖性。某些任务必 须顺序完成,而其他的任务可以并发进行。有些活动只有在其他活动产生的工作产品完成之后才能够开始,而其他的活动可以独立地进行。12.1.1 软件开发的进度计划时间分配 必须给每个任务都分配一定数量的工作单位(例如,若干人天的工作量)。此外,必须为每个任务都指定开始日期和结束日期,在确定这些日期时既要考虑各个任务之间的相互依赖性,又要考虑开发人员每日工作时间的长短(全职还是兼职)。工作量确认 每个项目都是指定数量的人员参与工作。在制定进度计划时,项目管理者必须确保在任意时段中分配给任务的人员数量,
6、不超过项目组中的人员数量。例如,为一个项目分配了3名人员(即每天可分配的工作量伟3人/天),如果在某一天中需要完成7项并发任务,每个任务需要0.5人/天的工作量,则在这种情况下所分配的工作量就大于可供分配的工作量。定义责任 每个任务都应该指定具体的责任人。定义结果 每个任务都应该有一个定义好的输出结果。对于软件项目而言,输出通常是一个工作产品(例如,一个模块的设计结果)或工作产品的一部分。通常把多个工作产品组合成一个“可交付产品”。定义里程碑 应该为每个任务或每组任务指定一个项目里程碑。当一个或多个工作产品经过质量评审且得到确认时,就标志着一个里程碑的完成。12.1.1 软件开发的进度计划3
7、3工作量分配工作量分配 估算出总的工作量以后,就需要一个进行各个阶段工作量模型。R.S.Pressman提出了一种称做40/20/40的工作量分配规则,即前期工作(计划、需求分析、总体设计和详细设计阶段)和后期工作(测试阶段)各占40%,编码阶段占20%。这里强调要重视前期和后期工作。前期工作容易被忽视,主要原因是:管理人员认为不开始编码工作就算没有进行,他们不了解前期工作的重要性;技术人员往往也急于编码,认为写出代码任务就算完成了。后期工作也容易被忽视,认为编码出来就完事了,对测试工作要占这么大的工作量没有思想准备。所以要制定好进度计划,就要研究软件工作的规律,前期基础工作没做好,将会给后期
8、工作带来很大困难,往往使工程进度一拖再拖,难以坚持,有的不得不中途夭折。12.1.1 软件开发的进度计划 这种工作量分配规则只能作为一般的指导原则,每个项目的具体工作量分配,要由各个项目的特点来决定。大量的统计数据表明:用于项目计划的工作量很少超过2%3%,除非提交给开发机构的项目计划费用极大,并具有高风险。需求分析占项目工作量的10%25%,用于分析或原型开发的工作量应与项目的规模和复杂性成正比例地增长。通常有20%25%的工作量用于软件设计。用于设计评审和其后选代的工作量也必须考虑在内。由于软件设计已投入了不少的工作量,其后的编码工作一般困难很少,有15%20%的工作量就能够完成。测试和随
9、后的纠错要占用软件开发工作量的3040%。软件的重要性决定了所需的测试工作量。如果软件的质量非常重要,且人命关天,其工作量一般要占用更大的百分比。12.1.1 软件开发的进度计划4 4进度安排进度安排 软件项目的进度安排与其他任何多任务工作的进度安排几乎没有什么不同。所以,一般的项目安排技术和工具不需做大的修改就可用于软件项目的进度安排。Pressman在2001年出版的实践者的研究方法一书中提出:程序评价与评审技术(Program Evaluation and Review Technique,PERT)和关键路径方法(Critical Path Method,CPM)是两种用于软件开发项目
10、进度安排的方法。这两种方法都由早期的项目计划活动中已经差生的信息来驱动的。这些信息包括对工作量的估算。产品功能的分解。恰当的过程模型和任务集合选择。任务的分解。12.1.1 软件开发的进度计划 任务间的相互依赖性可以使用任务网络来定义。任务有时也称为项目工作分解结构(Work Breakdown Structure,WBS),其定义可以是产品的整体,也可以是单个功能。PERT和CPM方法都为软件计划者提供定量工具,其中包括:确定关键路径,决定项目持续时间的任务链。通过使用静态模型为单个任务进行最有可能的时间估算。为特定的任务定义一个时间“窗口”计算其边界时间 在软件项目进度安排中,边界时间计算
11、很有用。例如,一个功能设计推迟,可能进一步使其他功能设计延迟。12.1.1 软件开发的进度计划 Rigge描述了一些可以从PERT或CPM网络中得到的边界时间:一个任务的最早开始时间是在其所有的前置任务在最短可能的时间完成时。一个任务的最晚开始时间是不延期项目的最小完成时间。最早结束时间为最早开始时间与任务持续时间之和。最晚结束时间为最晚开始时间与任务持续时间之和。总浮动量是在任务保证进度的前提下,安排任务时所允许的富余时间的总和。这是网络关键路径在进度安排中的运用。边界时间计算导致关键路径的确定,并为管理者提供任务完成时评价进展的量化方法。PERT和CPM方法已经在个人计算机的自动工具中实现
12、。这样的工具使用容易。12.1.1 软件开发的进度计划5时间表和项目表 当建立软件项目进度时间表时,计划者可从一组任务(工作分解结构)开始。如果使用自动工具,可以用任务网络或任务大纲输入工作分解结构。然后,为一个任务输入工作量、持续时间和开始时间。另外,每一个项目都可以分配给特定的个人。作为这些输入的结果,产生一个时间表(timeline chart),也叫甘特图(Gantt chart)。可以为整个项目开发一个时间表,也可以为各个项目功能或各个项目工作者分别开发时间表。表12-1给出了时间表的格式。该图部分地描述了一个新的字处理软件产品中强调概念范围任务的软件项目进度安排。所有项目任务概念范
13、围都列在左边任务栏中,水平条说明了每个任务的持续时间。当多个时间条在同一个时间段出现时,则蕴含着任务之间存在并发。菱形表示里程碑。一旦输入了为生成时间表所需的信息,大多数的软件项目进度安排工具都会生成项目表(project chart)(见表12-2)。项目管理者如果要跟踪项目进度,可同时使用时间表和项目表。12.1.1 软件开发的进度计划表12-1 一个时间表的例子表12-2 一个项目表的例子12.1.1 软件开发的进度计划12.1.2 软件开发的组织机构 软件项目成功的关键是具有高素质的软件开发人员。然而大多数软件产品规模都很大,以至单个软件开发人员无法在给定期限内完成开发工作,因此,必须
14、把多名软件开发人员组织起来,使他们分工协作共同完成开发工作。如何组织参加软件项目的人员,使他们发挥最大的工作效率,对成功地完成软件项目至关重要。开发组织采用什么形式,要针对软件项目的特点来决定,同时也与参与人员的素质有关。人的因素是不容忽视的参数。对于国情、体制、人员的工作习惯等都应作具体分析。了解并参考国外的做法是必要的,但无论如何不应简单地搬用。12.1.2 软件开发的组织机构n1组织原则n在建立项目组织时应注意到以下原则:尽早落实责任:在软件项目工作的开始,要尽早指定专人负责。使他有权进行管理,并对任务的完成负全责。减少接口:在开发过程中,人与人之间的联系是必不可少的,存在着通信路径。一
15、个组织的生产率是和完成任务中存在的通信路径数目是互相矛盾的。因此,要有合理的人员分工、好的组织结构、有效的通信,减少不必要的生产率的损失。责权均衡:软件经理人员所负的责任不应比委任给他的权力还大。12.1.2 软件开发的组织机构n2组织结构的模式n通常有三种组织结构的模式可供选择:按课题划分的模式(Project Format)n把软件人员按课题组成小组,小组成员自始至终参加所承担课题的各项任务。他们应负责完成软件产品的定义、设计、实现、测试、复查、文档编制、甚至包括维护在内的全过程。按职能划分的模式(Functional Format)n把参加开发项目的软件人员按任务的工作阶段划分成若干个专
16、业小组。要开发的软件产品在每个专业小组完成阶段加工(即工序)以后,沿工序流水线向下传递。例如,分别建立计划组、需求分析组、设计组、实现组、系统测试组、质量保证组、维护组等。各种文档资料按工序在各组之间传递。这种模式在小组之间的联系形成的接口较多,但便于软件人员熟悉小组的工作,进而变成这方面的专家。12.1.2 软件开发的组织机构矩阵行模式(Matrix Format)这种模式实际上是以上两种模式的复合。一方面,按工作性质,成立一些专门组,如开发组、业务组、测试组等;另一方面,每一个项目又有它的经理人员负责管理。每个软件人员属于某一个专门组,又参加某一项目的工作。例如,属于测试组的一个成员,他参
17、加了某一项目的研制工作,因此他要接受双重领导(一是测试组,一是该软件项目的经理)。如图12-1所示。矩阵形结构组织的优点是:参加专门组的成员可在组内交流在各项目中取得的经验,这更有利于发挥专业人员的作用。而且各个项目有专人负责,有利于软件项目的完成。12.1.2 软件开发的组织机构3程序设计小组的组织形式 通常任为程序设计工作是按独立方式进行的,程序人员独立地完成任务。但这并不意味着互相之间没有联系。人员之间联系的多少和联系的方式与生产率直接相关。程序设计小组内人数少,如23人,则人员之间的联系比较简单。但在增加人员数目时,相互之间的联系复杂起来,并且不是按线性关系增长。并且,已经进行中的软件
18、项目在任务紧张,延误了进度的情况下,不鼓励增加新的人员给予协助。除非分配给新成员的工作是比较独立的任务,并不需要对原任务有更细致的了解,也没有技术细节的牵连。有人认为,在已经延误进度的软件项目中增加新的人员,只会使任务进一步拖延。12.1.2 软件开发的组织机构n 小组内部人员的组织形式对生产率也有影响。现有的组织形式有三种。主程序员制小组(Chief Programmer Team)n 小组的核心由1位主程序员(高级工程师)、2至5位技术员、1位后援工程师组成。这程序员负责小组全部技术活动的计划、协调与审查工作,还负责设计和实现项目中的关键部分。技术员负责项目的具体分析与开发,以及文档资料的
19、编写工作。后援工程师协助和支持主程序员的工作,为主程序员提供咨询,也做部分分析、设计和实现的工作。并在必要时能代替主程序员工作,以便使项目能继续进行。主程序员制小组还可以聘请一些专家(例如通信专家或数据库设计专家)、辅助人员(例如,打字机和秘书)、软件资料员协助工作。资料员可同时为多个小组服务,并完成下列工作:保存和管理所有软件配置元素。即文档资料、源程序清单、数据和磁介质资料等;协助收集和整理软件生产率数据;对可复用的模块进行分类及编写索引;协助小组进行调查、评价和准备文档等。资料员起着一个管理员、协调员的作用,此外他还潜在地起着软件配置评价者的作用。参看图12-2。12.1.2 软件开发的
20、组织机构图12-1 软件开发组织的矩阵形式图12-2 主程序员小组的成员12.1.2 软件开发的组织机构 主程序员制的开发小组突出了主程序员的领导。强调主程序员与其他技术人员的直接联系。总的来说简化了人际通信,参看图12-3(a)。这种集中领导的组织形式能否取得好的效果,很大程度上取决于主程序员的技术水平和管理才能。美国的软件产业中大多数是主程序员制的工作方式。图12-3 三种不同的小组结构(上排的三种为结构形式,下排的三种为通信路径)12.1.2 软件开发的组织机构民主制小组(Democratic Team)在民主制小组中,遇到问题,组成成员之间可以平等地交换意见,参见图12-3(b)。工作
21、目标的制定及做出决定都由全体成员参加。虽然也有一位成员当组长,但工作的讨论、成果的检验都公开进行。这种组织形式强调发挥小组每个成员的积极性,要求每个成员充分发挥主动精神和协作精神。在讨论时尊重每个成员,充分听取他们的意见,并要求大家互相学习,在组内形成一个良好合作的工作氛围。但有时也会因此削弱了个人的责任心和必要的权威作用。有人认为这种组织形式适合于研制时间长、开发难度大的项目。日本在发展计算机事业中,组织软件开发大多采用这种形式的开发小组,取得了很好的效果。他们强调发挥每位小组成员的积极性,要求每个成员充分发挥主动精神和协作精神,也创造了一个尊重每个成员的良好工作环境。由于小组成员在工作上能
22、够很好地配合,因而做到了较长时间稳定的人员合作关系。这样的小组形式避免了美国因软件人员频繁流动对工作造成的严重干扰。12.1.2 软件开发的组织机构层次式小组(Hierarchical Team)在层次式小组中,组内人员分为三级:组长(项目负责人)1人负责全组工作,包括任务分配、技术评审和走查、掌握工作量和参加技术活动。他直接领导2至3名高级程序员,每位高级程序员通过基层小组,管理若干位程序员。这种组织结构只允许必要的人际通信。比较适用于项目就是层次式结构的课题。参看图12-3(c)。这种组织结构比较适合项目本身就是层次结构状的课题。因为这样可以把项目按功能划分成若干个子项目,把子项目分配给基
23、层小组,有基层小组完成。例如,具有三个子项目的课题由具有三个基层小组的层次式小组完成。基层小组的领导与项目负责人直接联系。通常基层小组的人数不超过10人。因而,一个大型项目需要划分成若干层。这种组织方式比较适合于大型软件项目的开发。以上三种组织形式可以根据实际情况,组合起来灵活运用。例如,较大的软件项目也许是把主程序员小组组织成层次式结构;也许基层小组的领导又是一个民主制小组的成员。总之,软件开发小组的主要目的是发挥集体的力量进行软件研制。因此,小组培养从“全局”的观点出发进行程序设计,消除软件的“个人”性质,并促进更充分的复审,小组提倡在共同工作中互相学习从而改善软件的质量。12.1.3 软
24、件人员配备 如何合理地配备人员,也是成功地完成软件项目的切实保证。所谓合理地分配人员应包括:按不同阶段适时任用人员,恰当掌握用人标准。1项目开发各阶段所需人员一个软件项目完成的快慢,取决于参与开发人员的多少。在开发的整个过程中,多数软件项目是以恒定人力配备的。如图12-4所示。图12-4 软件项目的恒定人力配备12.1.3 软件人员配备 图12-6中的人力需求曲线就是Rayleigh-Norden工作量分布曲线。该曲线表示需求定义结束后的软件生存期(包括运行和维护)内的工作量分布情况,它也是投入人力与开发时间关系曲线。按此曲线,需要的人力随开发的进展逐渐增加,在编码与单元测试阶段达到高峰,以后
25、又逐渐减少。如果恒定地配备人力,在开发的初期,将会有部分人力资源用不上而浪费掉。在开发的中期(编码与单元测试),需要的人力又不够,造成进度的延误。这样在开发的后期就需要增加人力以赶进度。因此,恒定地配备人力,对人力资源是比较大的浪费。为合理地安排人力,可利用Rayleigh-Norden曲线计算开发时间t所需要的人力资源:12.1.3 软件人员配备 其中,Y为在达到时刻t以前需要投入的全部人力数(人年),K为整个生存期内需要投入的总人力数(人年):为开发时刻的最大值,根据以往的开发经验,td大约与软件开发的收尾期相重合。由上式可以推导出 其中的K(总工作量)和td(开发时间)可以由下面的软件方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 第12章 软件项目计划与管理 12 软件 项目 计划 管理
限制150内