软件工程Software Engineering.ppt

上传人:feelhesitate105 文档编号:389398 上传时间:2018-10-14 格式:PPT 页数:98 大小:379KB
下载 相关 举报
软件工程Software Engineering.ppt_第1页
第1页 / 共98页
软件工程Software Engineering.ppt_第2页
第2页 / 共98页
软件工程Software Engineering.ppt_第3页
第3页 / 共98页
软件工程Software Engineering.ppt_第4页
第4页 / 共98页
软件工程Software Engineering.ppt_第5页
第5页 / 共98页
亲,该文档总共98页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、软件工程 Software Engineering,第十六章 软件项目管理与计划,16.1 项目管理过程 16.2 软件项目管理的基本概念 16.3 软件开发成本估算 16.4 风险分析 16.5 进度安排 16.6 软件项目的组织 小结,16.1 项目管理过程,项目管理开始于技术工作开始之前,在软件从概念到实现的过程中持续运行,最后终止于软件工程过程结束。包括以下的几个方面: (1)启动一个软件项目 (2)成本估算 (3)风险分析 (4)进度安排 (5)追踪和控制,16.2 软件项目管理的基本概念,16.2.1软件管理的对象 在软件项目管理中,重要的是人、问题和过程三者。其中人是最重要的管理

2、对象,因为软件工程是人的智力密集的劳动。,16.2.2 软件开发中的资源,软件项目计划的第二个任务是对完成该软件项目所需的资源进行估算。图16-1把软件开发所需的资源画成一个金字塔,在塔的底部必须有现成的用以支持软件开发的工具硬件工具及软件工具,在塔的高层是最主要的资源人。,图16-2 软件开发所需的资源,(1)人力资源是最重要的资源。在安排开发活动时必须考虑人员的技术水平、专业、人数、以及在开发过程各阶段中对各种人员的需要。,对一些规模较大的项目,在整个软件生存期中,各种人员的参与情况是不一样的。图16-2画出了各类不同的人员随开发工作的进展在软件工程各个阶段的参与情况的典型曲线。,图16-

3、2 管理人员与技术人员的参与情况,(2)硬件/软件资源 硬件是作为软件开发项目的一种工具而投入的。在软件项目计划期间,考虑三种硬件资源:,宿主机(Host machine)软件开发时使用的计算机及外围设备; 目标机(Target machine)运行已开发成功软件的计算机及外围设备; 其他硬件设备专用软件开发时需要的特殊硬件资源; 宿主机连同必要的软件工具构成软件开发系统。 软件资源包括用于开发的运行平台、各种CASE工具可以帮助分析和设计软件,开发程序所有的编程语言等。,(3)可复用构件资源 为了促成软件的复用,以提高软件的生产率和软件产品的质量,可建立可复用的软件部件库。根据需要,对软件部

4、件稍做加工,就可以构成一些大的软件包。这要求这些软件部件应加以编目,以利引用,并进行标准化和确认,以利于应用和集成。,16.2.3 分解技术 当一个待解决的问题过于复杂时,可以把它进一步分解,直到分解后的子问题变得容易解决为止。然后,分别解决每一个子问题,并将这些子问题的解答综合起来,从而得到原问题的解答。,软件项目估算是一种解决问题的形式,在多数情况下,要解决的问题(对于软件项目来说,就是成本和工作量的估算)非常复杂,想一次性整体解决比较困难。因此,对问题进行分解,把其分解成一组较小的接近于最终解决的可控的子问题,再定义它们的特性。 分解技术可以分为问题分解和过程分解。,16.3 软件开发成

5、本估算,软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价,不包括原材料和能源的消耗,主要是人的劳动的消耗。 软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、组装测试到确认测试,整个软件开发全过程所花费的人工代价作为依据的。,16.3.1 软件开发成本估算方法 对软件成本的估算,主要靠分解和类推的手段进行。基本估算方法分为三类:,(1)自顶向下的估算方法 这种方法的想法是从项目的整体出发,进行类推。即估算人员根据以前已完成项目所耗费的总成本(或总工作量),推算将要开发的软件的总成本(即总工作量),然后按比例将它分配到各开发任务中去,再检验它是否能满足要求。Boeh

6、m给出一个参考例子,参看表16-3。,表16-3 软件开发各阶段工作量的分配,(2)自底向上的估计法 这种方法的想法是把待开发的软件细分,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到软件开发的总工作量。,(3)差别估计法 这种方法综合了上述两种方法的优点,其想法是把待开发的软件项目与过去已完成的软件项目进行类比,从其开发的各个子任务中区分出类似的部分和不同的部分。类似的部分按实际量进行计算,不同的部分则采用相应的方法进行估算。,16.3.2 软件开发成本估算的经验模型 开发成本估算模型通常采用经验公式来预测软件项目计划所需要的成本、工作量和进度。,(1)IBM模型 利用

7、最小二乘法拟合,得到如下估算公式:E = 5.2L0.19 D = 4.1L0.36 = 17.47E0.35S = 0.54E0.6 DOC = 49L1.01 其中,L是源代码行数(以KLOC计),E是工作量(以PM计),D是项目持续时间(以月计),S是人员需要量(以人计),DOC是文档数量(以页计)。,(2)Putnam模型 这是1978年Putnam提出的模型,是一种动态多变量模型。该模型的基础是假定在软件开发的整个生存期中工作量有特定的分布。它把项目的资源需求当做时间的函数。,根据对一些大型项目的统计分析,软件开发工作量分布可用图16-4所示的曲线表示。该曲线被称为Rayleigh-

8、Norden曲线。,图16-4 大型项目的工作量分布情况,利用该曲线得到如下的经验公式:L=CkK1/3td4/3 其中,td是开发持续时间(以年计),K是软件开发与维护在内的整个生存期所花费的工作量(以人年计),L是源代码行数(以LOC计),Ck是技术状态常数,它反映出“妨碍程序员进展的限制”,并因开发环境而异。,(3)COCOMO模型(Constructive Cost Model) Barry Boehm提出的一种软件估算模型的层次体系。称为结构型成本估算模型。是一种比较精确、易于使用的综合成本估算方法。,该模型首先将分为三个层次: 基本的COCOMO模型:只是将工作量(成本)作为程序规

9、模的函数进行计算。 中级的COCOMO模型:除了工作量以外,还将对产品、硬件、人员及项目属性的主观评价作为“成本驱动因子”加入估算模型中。 高级的COCOMO模型:除了中级模型的因素外,还加入了成本驱动因子对软件开发的每一个过程的影响的评估。,对于项目属性来说,COCOMO规定了三种项目属性: 组织型(Organic):较小、较简单的软件项目。项目组人员经验丰富,对软件的使用环境很熟悉,受硬件的约束较少,程序的规模不是很大(5万行)。 嵌入型(Embadded):此种软件要求在紧密联系的硬件、软件和操作的限制条件下运行的软件。比如航天用控制系统属此种类型。 半独立型(Semidetached)

10、:对此种软件的要求介于上述两种软件之间,但软件规模和复杂性都属于中等以上,最大可达30万行。,表16-1基本COCOMO模型系数表,16.4 风险分析,风险分析实际上是4个不同的活动:风险识别,风险估计,风险评价和风险驾驭。,16.4.1 风险识别 可用不同的方法对风险进行分类。从宏观上来看,可将风险分为项目风险、技术风险和商业风险。,项目风险包括潜在的预算、进度、个人(包括人员和组织)、资源用户和需求方面的问题,以及它们对软件项目的影响。,技术风险包括潜在的设计、实现、接口、检验和维护方面的问题。此外,规格说明的多义性、技术上的不确定性、技术陈旧、最新技术(不成熟)也是风险因素。,商业风险主

11、要有以下几种: (1)建立的软件虽然很优秀但不是真正所想要的(市场风险); (2)建立的软件不适用整个软件产品战略; (3)销售部门不清楚如何推销这种软件; (4)失去上级管理部门的支持; (5)失去预算或人员的承诺(预算风险); (6)最终用户的水平。,16.4.2 风险估算 风险估算,又叫风险预测。使用两种方法来估计每一种风险风险发生的可能性和概率。,通常,项目计划人员与管理人员、技术人员一起,进行4种风险估算活动: (1)建立一个尺度或标准来表示一个风险的可能性; (2)描述风险的结果; (3)估计风险对项目和产品的影响; (4)确定风险估计的正确性。,参看图16-5,风险影响和出现概率

12、对联驾驭参与有不同的影响。一个具有较高影响权值但出现概率极低的风险因素应当不占用很多有效管理时间。然而,具有中等到高概率的高影响的风险和具有高概率的低影响的风险,就必须进行风险的分析。,图16-5 风险与驾驭参与,16.4.3 风险评价 在风险分析过程中进行风险评价的时候,应当建立一个三元组:ri,li,xi 其中,ri是风险,li是风险出现的可能性(概率),而xi是风险的影响。,图16-6用图示来表示这种情况。如果因为风险的一个组合引出造成项目成本和进度超出的问题,将有一个水准(在图中用曲线表示),当超出时,将导致项目终止(图中封闭区域)。,图16-6 风险参照水准,在做风险评价时,按以下步

13、骤执行: (1)为项目定义风险参照水准; (2)尝试找出在每个ri,li,xi和每个参照水准之间的关系; (3)预测参照点组以定义一个终止区域,用一条曲线或一些易变动区域来界定; (4)努力预测复合的风险组合将如何形成一个参照水准。,16.4.4 风险驾驭和监控 所有的风险分析活动都只有一个目的建立处理风险的策略。风险驾驭是指利用某些技术,如原型化、软件自动化、软件心理学、可靠性工程学以及某些项目管理方法等设法避开或转移风险。,例如,假如人员的频繁流动是一项风险ri,基于过去的历史和管理经验,频繁流动可能性的估算值li为0.70(70%相当高),而影响xi的估计值是:项目开发时间增加15%,总

14、成本增加12%,给出了这些数据之后,建议可使用以下风险驾驭步骤:,(1)与现在在职的人员协商,确定人员流动的原因(如,工作条件差,收入低,人才市场竞争等); (2)在项目开始前,把缓解这些原因(避开风险)的工作列入已拟定的驾驭计划中。 (3)当项目启动时,做好人员流动会出现的准备。采取一些办法以确保人员一旦离开时项目仍能继续(削弱风险);,(4)建立项目组,以使大家都了解有关开发活动的信息; (5)制定文档标准,并建立一种机制以保证文档能够及时产生; (6)对所有工作组织细致的评审(以使更多的人能够按计划进度完成自己的工作); (7)对每一个关键性的技术人员,要培养后备人员。,图167表示风险

15、驾驭步骤要写进风险驾驭与监控计划RMMP(Risk Management and Monitoring Plan)。RMMP记叙了风险分析的全部工作。RMMP的主要内容在表16-12中列出。,图16-7 风险驾驭与监控,表16-12 风险驾驭与监控计划概要,一旦制定出RMMP,软件项目也开始时,风险监控就开始了。风险监控的三个主要目标是: (1)判断一个预测的风险事实上是否发生了; (2)确保针对某个风险而制定的风险消除步骤正在合理地实施; (3)收集可用于将来的风险分析的信息。,16.5 进度安排,软件开发项目的进度安排有两种考虑方式: (1)系统最终交付日期已经确定,软件开发部门必须在规定

16、期限内完成; (2)系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定。,16.5.1 软件开发小组人数与软件生产率 一个估计有33000LOC,需要花费12个人年的软件可以用8个人工作1.3年完成。如果把完成时间延长到1.75年,根据Putnam软件方程,可得:K = L3/(Ck3td4)3.8人年,这表明,如果把完成时间延长6个月,就可以把人员数从8个减少到4个。这种结果不一定可靠,但可以帮助我们在制定进度时作出定性的分析。经验表明,软件开发小组的规模在28人左右为宜。,16.5.2 任务的确定与并行性 当参加同一软件工程项目的人数不止一人的时候,开发工作就会出现并行情形

17、。图16-9表示了一个典型的由多人参加的软件工程项目的任务图。,图16-9 软件项目的并行性,在图16-9中可以看到,软件开发进程中设置了许多里程碑。里程碑为管理人员提供了指示项目进度的可靠依据。当一个软件工程任务成功地通过了评审并产生了文档之后,就完成了一个里程碑。,16.5.3 制定开发进度计划 在制定软件的开发进度计划时,有一种常用来估计在整个定义与开发阶段工作量分配的简单方案,称为402040规则。该规则表明在开发过程中,编码的工作量仅占20%,编码前的工作量占40%,编码后的工作量占40%。,在制定进度计划时,我们可以参照前面介绍的经验模型中对工作量的估计。如果利用基本COCOMO模

18、型或其他公式,可参照表16-13所示的进度分配百分比值表:,表16-13 进度分配百分比表,按此比例确定各个阶段工作量的分配,从而进一步确定每一阶段所需的开发时间,然后在每个阶段,进行任务分解,对各个任务再进行工作量和开发时间的分配。一直到项目负责人认为较好控制的水平。表16-14是利用基本COCOMO模型,给出的一个较为准确的进度安排例子,表16.14 更精确的进度分配表,16.5.4 进度安排的图形方法 在具体的制定软件项目的进度安排时,有很多的方法。甚至可以将任何一个多重任务的安排方法直接应用到软件项目的进度安排上。常用的有表格法和图形法。,在图示法中,必须明确标明各个任务的计划开始时间

19、、完成时间;各个任务完成的标志(即文档编写和评审);各个任务与参与工作的人数、各个任务与工作量之间的衔接情况;完成各个任务所需的物理资源和数据资源。,甘特图(Gantt Chart)是常用的多任务安排工具。用水平线段表示任务的工作阶段,用垂直线表示当前的执行情况;线段的起点和终点分别对应着任务的开工时间和完成时间;线段的长度表示完成任务所需的时间。,图16-10给出一个具有5个任务的甘特图(任务名分别为A、B、C、D、E)。从甘特图上可以很清楚地看出各子任务在时间上的对比关系。,图16-10 甘特图,16.5.5 项目的追踪和控制 软件项目管理的一项重要工作就是在项目实施过程中进行追踪,对过程

20、进行严格的控制。可以用不同的方式进行追踪:,定期举行项目状态会议。在会上,每一位项目成员报告他的进展和遇到的问题。 评价在软件工程中所产生的所有评审的结果。 确定由项目的计划进度所安排的可能选择的正式的里程碑。 比较在项目资源表中所列出的每一个项目任务的实际开始时间和计划开始时间。 非正式地与开发人员交谈,以得到他们对开发进展和刚冒头的问题的客观评价。,16.6 软件项目的组织,16.6.1 软件项目管理的特点 (1)软件项目的特点 1)智力密集,可见性差 2)单件生产 3)劳动密集,自动化程度低 4)软件工作渗透了人的因素,(2)软件管理的主要职能 软件管理的主要职能包括: 1)制定计划:规

21、定待完成的任务、要求、资源、人力和进度等。 2)建立组织:为实施计划,保证任务的完成,需要建立分工明确的责任制机构。 3)配备人员:任用各种层次的技术人员和管理人员。 4)指导:鼓励和动员软件人员完成所分配的工作。 5)检验:对照计划或标准,监督和检查实施的情况。,16.6.2 软件项目组织的建立 通常有三种组织的模式可供选择: 1)按课题划分的模式(Project Format) 2)按职能划分的模式(Functional Format),3)矩阵形模式(Matrix Format) 结合前面两种模式的优点,就形成了距阵形模式。一方面,按工作性质,成立一些专门组,如开发组、业务组、测试组等;

22、另一方面,每一个项目又有它的经理人员负责管理。每个软件人员属于某一个专门组,又参加某一项目的工作。,例如,属于测试组的一个成员,他参加了某一项目的研制工作,因此他要接受双重领导(一是测试组,一是该软件项目的经理)。如图16-15所示。,图16-15 软件开发组织的矩阵形模式,程序设计小组的组织形式 在程序设计小组中典型的有三种组织形式。 1)主程序员制小组(Chieg Programmer Team),小组的核心由1位主程序员(高级工程师)、2至5位技术员、1位后援工程师组成,另外还可以有部分辅助人员(资料员)。 参看图16-16。,图16-16 主程序员小组的组织,主程序员制的开发小组强调主

23、程序员与其他技术人员的直接联系,简化了技术人员之间的横向通信,参看图16-17(a)。这种组织制度的工作效果的好坏很大程度上取决于主程序员的技术水平和管理才能。,图16-17 三种不同的小组结构 (上排的三种为结构形式,下排的三种为通信路径),2)民主制小组(Democratic Team) 在民主制小组中也设置一位组长,但是每当遇到问题,组内成员之间可以平等地交换意见,参见图16-17(b)。,3)层次式小组(Hierarchical Team) 如图16-17(c),在层次式小组中,组内人员分为三级:组长(项目负责人)1个负责全组工作。他直接领导2至3名高级程序员,每位高级程序员通过基层小

24、组,管理若干位程序员。,16.6.3 人员配备 在不同的软件开发阶段,应该合理地配备人员,这也是成功地完成软件项目的切实保证。在各个阶段对人员的数量、技术水平的需求是不同的。如图16-18所示的就是各阶段对人员的需求情况。,图16-18 软件项目人力配备情况,图16-18中的人力需求曲线就是在前面介绍Putnam模型时曾引入的Rayleigh-Norden工作量分布曲线。该曲线表示需求定义结束后的软件生存期(包括运行和维护)内的工作量分布情况,它也是投入人力与开发时间的关系曲线。,为合理地安排人力,可利用Rayleign-Norden曲线计算开发时间t所需要的人力资源:dY/dt = (Kt/

25、td2)exp (t2/2td2) (K0,td0) 其中,Y为在达到时刻t以前需要投入的全部人力数(人年),K为整个生存期内需要投入的总人力数(人年):td = dY/dt 为开发时刻的最大值,根据以往的开发经验,td大约与软件开发的收尾期相重合。,由上式可以推导出Y = K 1exp (t2/2td2 ) 其中的K(总工作量)和td(开发时间)可以由下面的软件方程得到:L = CkK1/3td4/3 (Ck0) 其中,L是前面介绍的开发规模(LOC),Ck是技术状态常数。,根据软件开发各阶段对人力的需求情况,配备人员时应该遵循如下的原则: 1)重质量:软件项目是技术性很强的工作,任用少量有

26、实践经验、有能力的人员去完成关键性的任务,常常要比使用较多的经验不足的人员要更有效。 2)重培训:花力气培养所需的技术人员和管理人员是有效解决人员问题的好方法。 3)双阶段提升:人员的提升应分别按技术职务和管理职务进行,不能混在一起。,对项目经理人员的要求 软件经理人员是工作的组织者,他的管理能力的强弱是项目成败的关键。除去一般的管理要求外,他应具有以下能力: 1)把用户提出的非技术性要求加以整理提炼,以技术说明书形式转告给分析员和测试员。 2)能说服用户放弃一些不切实际的要求,以便保证合理的要求得以满足。 3)能够综合用户的需求,归结为“需要什么”,“要解决什么问题”。 4)同用户和上级有很

27、强的沟通能力,能清晰明白的了解对方的思想和表达自己的思想。,评价人员的条件 软件项目中人的因素越来越受到重视。因此对开发人员的评价也显得越来越重要。需要有一个好的方法来了解开发人员的管理能力和技术水平。人员素质的优劣常常影响到项目的成败。一个好的开发人员应该在以下的几方面有较好的表现: 1)牢固掌握计算机软件的基本知识和技能。 2)善于分析和综合问题,具有严密的逻辑思维能力。 3)工作踏实、细致,不靠碰运气,遵循标准和规范,具有严格的科学作风。 4)工作中表现出有耐心、有毅力、有责任心。 5)善于听取别人的意见,善于与周围人员团结协作,建立良好的人际关系。 6)具有良好的书面和口头表达能力。,

28、小结,一个好的项目管理方法对软件开发的成功有至关重要的。软件的项目管理有它自己的特点,主要体现在软件开发是一个智力密集、单件生产、劳动密集的活动,并且人的因素在其中有着重要的地位。,软件项目管理的过程主要包括启动一个软件项目、对软件开发做风险估计,并采取各种策略驾驭和避免风险,保证软件的成功,准确估计软件的开发成本,制定软件开发计划的进度安排,在开发后对进度进行严格的控制,保证软件能按计划进行。,要驾驭风险,首先要识别风险。通过对风险分类,并检查各种风险项目来识别风险,对风险的重要性要进行评估,并对重要的20%的风险要建立风险驾驭策略。,对进度的控制也是项目管理的重要内容,制定计划后,用图形制

29、定进度表是一种直观的方法,项目开始后,要经常使用各种方法对进度进行追踪,控制,并进行各种资源的调配,保证项目按计划完成。,习题:,1在一个信息系统组织中,你被指派为项目管理者。你曾经作过类似的项目,但规模要小些。需求分析已经完成。你会选择哪种小组结构?为什么? 2现在有一个项目,要求管理学生的成绩,分析学生的成绩情况。如果你是项目管理者,请写出该问题的范围描述。 3我们在估算开发成本时,都将代码行作为生产率的重要依据。你有反对它的证据吗? 4在软件开发中有哪些资源?有哪些特性来描述资源?,5说明在软件开发的各个阶段中,对高级技术人员、初级技术人员和管理人员的需求情况? 6简单叙述本书中描述软件开发成本的几个模型的内容。总结它们的共同特征。 7你认为在软件开发中,如果没有风险分析,会有哪些严重的后果? 8风险分析的主要内容有哪些?请列举几种书中没介绍过的风险情况。,9风险估算和软件开发是否继续进行的关系是什么? 10开发小组的组织有哪些类型? 11在软件开发过程中,应如何配备人力资源? 12软件项目管理的特点是什么?,谢谢,

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

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1