1、第13章 软件项目管理,13.1 估算软件规模 13.2 工作量估算 13.3 进度计划 13.4 人员组织 13.5 质量保证 13.6 软件配置管理 13.7 能力成熟度模型,软件项目管理概述,软件项目管理:为获得项目的成功,而对其生命周期内的一切活动所实施的计划、组织、安排、调度和控制等一系列措施和过程。 软件项目管理的目标:保证在规定的时间和预算的经费内,成功地开发出令用户满意的高质量的软件产品。 软件项目管理过程:估算项目规模(大小);估算项目的工作量;制定项目进度计划;实施人员组织;实施质量控制;实施配置管理等活动。,软件项目管理现状和重要性: 软件工程管理始于20世纪70年代,美
2、国国防部立项专门研究,其结果发现:70%的项目是因为管理不善而不能很好的完成,并不是因为技术原因。这表明要取得软件工程项目的成功,管理比技术更重要,尤其是大型复杂项目。 20世纪90年代,美国的实际调查表明只有10%的软件能够按规定完成。也就是说,还有90%的项目不能按规定完成。 95年美国取消810亿美元的软件项目,其中大约31%的项目未做完就取消了,53%的项目延期50%的时间。,软件工程项目的特点: 软件产品的逻辑特性:软件是知识产品,本身是不可见的,开发进度和效率难以控制,产品质量也难以度量等; 软件产品的复杂特性:软件系统的复杂程度是超乎想象,开发过程难以控制和度量。如宇宙飞船的软件
3、系统源代码多达2000万行,若按照100 00行/人年,则需要2000人年的工作量。 上述特点决定了软件项目的管理是非常必要和重要的。,13.1 估算软件规模 13.1.1 代码行技术,代码行技术:是以估算的程序代码行数作为将要开发项目的软件源程序行数,而定量度量软件规模的方法。特点是简单易用。 基本思想:依据以往开发类似产品的经验和历史数据,分别估计实现软件各个功能所需要的源程序行数,然后把实现每个功能所需要的源程序行数累加起来,作为实现整个软件所需要的源程序行数。,具体估算方法:为了增强估计准确性,可请多名有经验的软件工程师分别做出估计。每个人都估计程序的最小规模(a)、最大规模(b)和最
4、可能的规模(m),分别算出这3种规模的平均值之后,再用下式计算程序规模的估计值:L= (13.1)用代码行技术估算软件规模时,当程序较小时常用的单位是代码行数(LOC),当程序较大时常用的单位是千行代码数(KLOC)。,代码行技术的主要优点:代码是所有软件开发项目都具有的“产品”,而且很容易计算代码行数。 代码行技术的缺点:1)源程序仅是软件配置的一个成分,用它的规模代表整个软件的规模似乎不太合理;2)用不同语言实现同一个软件所需要的代码行数并不相同;3)这种方法不适用于非过程语言。,13.1.2 功能点技术,功能点技术是一种依据软件的信息域特性和软件的复杂程度来估算软件规模的技术。这种方法用
5、功能点(FP)为单位度量软件规模。 1. 从需求分析考虑系统信息域的5个(类 )特性 1)用户输入项数(Inp):用户向软件提供面向应用的输入数据项数。输入与查询分开计算; 2)用户输出项数(Out):软件向用户提供面向应用的输出数据项数。这里,输出是指报表、屏幕和出错信息等。注意:一个报表中的单个数据项不单独计算。,3)用户查询数(Inq):一个查询被定义为一次联机输入、它导致软件以联机输出方式产生实时响应。每一个不同的查询都要计算。 4)主文件数(Maf):系统使用的逻辑主文件的数目(即数据的一个逻辑组合,它可能是大型数据库的一部分或是一个独立的文件)。 5)外部接口数(Inf):与其它系
6、统进行数据交换的全部接口的数量,用这些接口可以把信息从一个系统传送给另一个系统(如互相读取文件)。,2. 估算功能点的步骤 估算出一个软件的功能点数(即软件规模),步骤如下: 1) 计算未调整的功能点数UFP 首先,按照简单、中等和复杂三级难易程度对信息域的每个特性(即Inp、Out、Inq、Maf和Inf)进行分级,并统计出各类信息特性的个数;其次,根据各个等级为每个信息特性分配一个功能点数,如表13-1所示。然后,用下式计算未调整的功能点数UFP: 其中:i=1,2,5;j=1,2,3。aij为第i类第j级别的信息特性的功能点数,cij为第i类第j级别的信息特性的个数。,表13-1 信息域
7、特性功能点数表,2)计算技术复杂性因子TCF 为了描述技术因素(开发难易程度)对软件规模的影响,这一步度量14种技术因素对软件规模的影响程度。这些因素在下表13-2中列出,并用Fi(1i14)代表这些因素。,表13-2 技术因素表,一般将每个因素对软件的影响程度划分为6级,分别无、微、轻、中、大、重,其影响程度也分别用值0(无影响)、1、2、3、4、5(有很大影响)来度量,值越大,则对软件影响程度越大。见下页表。然后,用下式计算技术因素对软件规模的综合影响程度DI:DI=,技术复杂性因子TCF由下式计算:TCF=0.65+0.01DI 因为DI的值在070之间,所以TCF的值在0.651.35
8、之间。 3) 计算功能点数FP 用下式计算功能点数FP: FP=UFPTCF 功能点数与所用的编程语言无关,看起来功能点技术比代码行技术更合理一些。但是,在判断信息域特性复杂级别和技术因素的影响程度时,存在着相当大的主观因素。,应用举例:,假设有一单位的职工工资管理系统,通过需求分析得到的DFD如下图所示,求出其功能点数。,解:1)由上图可知:用户输入数为4,即密码、打印工资、工资录入和错误按键;用户输出数为3,即查询信息、工资报表和出错信息;用户查询数为1,即工资查询;文件数为1,职工工资表;外部接口为2,即人事查询、职工信息。假设各信息特性的复杂性均取简单级,则未调整功能点数为:UFP=3
9、X4+4X3+3X1+7X1+5X2=44 2)再取技术因素分布表如下,可求得技术因素综合影响程度:DI=5+4+0+1+1+3+2+0+1+1+3+2+2+3=28 求得技术复杂因子:TCF=0.65+0.01XDI=0.93 3)最后求得:FP=UFPXTCF=44X0.93=40.92 结论:假若1个功能点需要60行源代码,则工资管理系统需要40.92X60= 2455.2LOC。类似地,功能点文档页数、成本数、错误数等也可估算。,13.2 工作量估算,工作量:指软件开发所需要人力资源的多少和时间的长短,一般使用单位:人年或人月。工作量估算模型使用由经验导出的公式来预测软件开发工作量,且
10、为软件规模(KLOC或FP)的函数,单位通常取人月(pm)。 13.2.1 静态单变量模型 这类模型的总体结构形式如下: E=A+B(ev)C 其中,A、B和C是由经验数据导出的常数,E是以人月为单位的工作量,ev是估算变量(KLOC或FP)。下面给出几个典型的静态单变量模型。,1. 面向KLOC的估算模型 (1) Walston_Felix模型E=5.2(KLOC)0.91 (2) Bailey_Basili模型E=5.5+0.73(KLOC)1.16 (3) Boehm简单模型E=3.2(KLOC)1.05 (4) Doty模型(在KLOC9时适用)E=5.288(KLOC)1.047,2
11、. 面向FP的估算模型 (1) Albrecht & Gaffney模型E=-13.39+0.0545FP (2) Maston,Barnett和Mellichamp模型E=585.7+15.12FP,13.2.2 动态多变量模型,动态多变量模型把工作量看作是软件规模和开发时间这两个变量的函数。动态多变量估算模型的形式如下: E=(LOCB0.333/P)3(1/t)4 (13.2) 其中,E是以人月或人年为单位的工作量;t是以月或年为单位的项目持续时间;B是特殊技术(质量保证)因子(随着对测试、质量保证、文档及管理技术的需求的增加而缓慢增加),对于较小的程序(KLOC=515),B=0.16
12、 ;对于超过70 KLOC的程序,B=0.39;P是生产率水平参数,反映生产能力因素对工作量的影响,包括如下因素:,总体过程成熟度及管理水平; 使用良好的软件工程实践的程度; 使用的程序设计语言的级别; 软件环境的状态; 软件项目组的技术及经验; 应用系统的复杂程度。 P作为生产率参数一般取值方法为:1)开发实时嵌入式软件时,P的典型值为2000;2)开发电信系统和系统软件时,P=10000;3)对于商业应用系统来说,P=28000。,从动态多变量模型可以看出:E=(LOCB0.333/P)3(1/t)4 如果质量技术要求越高(B越大),生产率/力水平越低(P越小),要求的工期越紧(t越小),
13、则工作量将急剧增加;反之,工作量将变小。,13.2.3 COCOMO2模型,COCOMO是构造性成本模型(COnstructive COst MOdel)的英文缩写。1981年Boehm在软件工程经济学中首次提出了COCOMO模型。1997年Boehm等人提出的COCOMO2模型,是对COCOMO模型的改进,反映了十多年来现代软件成本估计方面所积累的经验。 COCOMO2给出了3个层次的软件开发工作量估算模型,这3个层次的模型在估算工作量时,对软件细节考虑的详尽程度逐级增加。 COCOMO2 三个层次的估算模型分别是:,1)应用系统组成模型:这个模型主要用于估算构建原型的工作量,模型名字暗示在
14、构建原型时大量使用已有的构件。 2)早期设计模型:这个模型适用于体系结构设计阶段。 3)后体系结构模型:这个模型适用于完成体系结构设计之后的软件开发阶段。,17个成本因素的确定:Boehm把17个成本因素划分成产品因素、平台因素、人员因素和项目因素4个大类。每个成本因素都根据它的重要程度和对工作量影响大小被划分为6个等级:甚底、低、正常、高、甚高、特高,并赋予相应的数值,称为工作量系数,即成本因素影响工作量的大小程度,具体见表13.3(见书310页)所示。,模型指数b值的计算:COCOMO2使用了项目先例性、开发灵活性、风险排除度、项目组凝聚力和过程成熟度5个分级因素Wi(1i5),其中每个因
15、素都划分成从甚低(Wi=5)到特高(Wi=0)的6个级别来确定b的值,详件下表。计算b值的公式为:b= (13.4)由此可计算b的取值范围为1.011.26。,COCOMO2 模型指数b的分级因素及其级别划分,模型指数b分级模型的5个分级因素: 1)项目先例性:本分级因素指出,开发组织对该项目的新奇程度。 2)开发灵活性:分级因素反映,为了实现预先确定的外部接口需求和为了及早开发出产品而需要增加的工作量。 3)风险排除度:这个分级因素反映了重大风险已被消除的比例。在多数情况下,这个比例和指定了重要模块接口(即选定了体系结构)的比例密切相关。,4)项目组凝聚力:这个分级因素表明了开发人员相互协作
16、时可能存在的困难。 5)过程成熟度:这个分级因素反映了按照能力成熟度模型(见13.7节)度量出的项目组织的过程成熟度。 模型系数a值的确定:工作量方程中模型系数a的典型值为3.0,在实际工作中应该根据历史经验数据确定一个适合本组织当前开发的项目类型的数值。,13.3 进度计划,进度计划:为完成一个软件项目所包含的各项任务/活动而所规划的时间安排 制定进度计划的基本步骤: 任务分解:将软件工程项目分解为成易管理易实施的任务/作业集; 任务关系:确定任务间的相互依赖关系顺序、并发和独立; 工作量分配:分配(估算的)工作量到各项任务/作业; 资源约束:在进行时间分配时应考虑资源约束,如人员数量、仪器
17、设备等; 时间分配:为每项任务或作业指定开始和终止时间; 制定进度计划:制定、绘制进度计划表或图,工作量分配方案: 40-20-40规则 “40-20-40规则”的含义是:在整个软件开发过程中,编码工作量越占20%,编码前的工作量占40%,编码后的工作量占40%。 基于软件生命周期的详细分配方案:项目计划阶段:2-3%;需求分析阶段:10-25%;设计阶段:20-25%;编码阶段:15-20%;测试和调试阶段:30-40%。,13.3.1 估算开发时间,开发时间:完成一个项目的开发工作所需要的时间期限。 开发时间估算模型:由工作量估算模型同时提供了开发时间模型如下: 1) Walston_Fe
18、lix模型: T=2.5E0.35 2) 原始的COCOMO模型: T=2.5E0.38 3) COCOMO2模型: T=3.0E0.33+0.2(b-1.01) 4) Putnam模型: T=2.4E1/3 其中:E是开发工作量,以人月为单位;T是正常开发时间,以月为单位。 结论:开发时间T与开发人数成反比,在软件开发项目中是相对成立,而绝对不成立。一般软件项目的开发时间最多可以减少到正常开发时间的75%。,项目组规模与项目组生产率的关系 : 设项目组成员P人,则每个人与其他成员的通信路径1P-1,假设一个组员的个人生产率(不与其他人通信)为L,而每条通信路径导致生产率减少,则得组员个人平均
19、生产率为:Lr=L- (P-1)r 其中,r是对通信路径数的度量,0r1。 对于一个规模为P人的项目组而言,总生产率为:Ltot=PL- (P-1)r 当给定L、 、r值,总生产率是项目组规模P的函数,由此也可以很容易推出Ltot的极值点,以确定总生产率最高的项目组规模。,举例说明:假设个人最高生产率为500LOC/月(即L=500),每条通信路径导致生产率下降10%(即 =50)。如果每个组员都必须与组内所有其他组员通信(r=1),则项目组规模与生产率的关系为:Ltot=P500-50(P-1) =500P-50P2+50P=550P-50P2 由此式推导出P取5.5人时,总生产率可取最大值
20、1512。 Boehm根据经验指出:软件项目的开发时间最多可以减少到正常开发时间的75%。如果要求一个软件系统的开发时间过短,则开发成功的概率几乎为零。,13.3.2 Gantt图,Gantt(甘特)图是历史悠久、应用广泛的制定进度计划的工具,下面通过一个非常简单的例子介绍这种工具。 举例:假设有一座陈旧的矩形木板房需要重新油漆。这项工作必须分3步完成:首先刮掉旧漆,然后刷上新漆,最后清除溅在窗户上的油漆。假设一共分配了15名工人去完成这项工作,然而工具却很有限:只有5把刮旧漆用的刮板,5把刷漆用的刷子,5把清除溅在窗户上的油漆用的小刮刀。怎样安排才能使工作进行得更有效呢?即工作进度更快呢?,
21、设想工作流程及进度计划: 1)最低效率的安排方法:先刮掉四面墙壁上的旧漆,然后给每面墙壁都刷上新漆,最后清除溅在每个窗户上的油漆。 2)采用“流水作业法”:依此连续地刮一面,刷一面,清除一面。 3)是否还有更好、更有效的进度计划?待工程网络讲完后再解答。,假设木板房的第2、4两面墙的长度比第1、3两面墙的长度长一倍,此外,不同工序需要用的时间长短也不同,刷新漆最费时间,其次是刮旧漆,清理需要的时间最少。表13.5列出了估计每道工序需要用的时间。 表13.5 工序时间表(小时),用Gantt图描绘上述油漆房子的流水作业过程或进度计划,直观清晰、简明易懂,整个工程共计22小时。图13.1 旧木板房
22、刷漆工程的Gantt图,Gantt图描绘进度计划,直观清晰、简明易懂,但各个作业之间的相互依赖关系不清楚。图13.1 旧木板房刷漆工程的Gantt图,13.3.3 工程网络,工程网络技术是一种被广泛应用于制定工程进度计划的技术方法。工程网络技术实际是PERT技术的别称计划评审技术(Pragram Evaluation & Review Technique)。 20世纪50年代后期,美国海军和洛克希德公司首次提出这种技术,并将其成功的应用于北极星导弹的研究和开发项目中。几十年来,它在许多工程领域获得了广泛的应用,久而久之也将PERT技术也称之为工程网络技术。 下面介绍PERT技术工程网络技术,洛
23、克希德马丁公司简介 洛克希德马丁公司目前是全球第一大国防承包商,总部设在弗吉尼亚州。该公司创建于1913年,1938年改名洛克希德公司。1995年,洛克希德公司和马丁玛丽埃塔公司合并,更名为洛克希德马丁公司。 洛克希德马丁公司的主要产品有包括P38“闪电“战斗机在内的数种型号的战斗机、包括U2间谍侦察机在内的数种型号的侦察机、包括C130系列军用运输机在内的数种型号的军用运输机及L1011“三星“客机、“北极星“潜艇发射弹道导弹、B26“掠夺者“轰炸机、岸基反潜机P3系列、导弹和空间系统、数据收集和处理系统、军用电子系统、飞行训练辅助设备、火控系统和空中交通管制设备等。 2002年,在新的国际
24、形势和全球反恐战争导致需求增加的情况下,洛克希德马丁公司的销售业绩实现大幅度增长,全年净销售额达266亿美元,比2001年增长11。其中美国政府从该公司购买的产品金额达该公司销售总额的80。,工程网络技术是以图形工具的方式描绘项目进度计划,描绘项目的任务分解以及各个任务彼此间的依赖关系,分析计算每项任务的开始时间和结束时间等。 使用工程网络技术制定项目进度计划的步骤如下:出现 1)建立工程网络图(PERT图); 2)计算工程网络图中事件的最早发生时刻EET和最迟发生时刻LET; 3)确定关键路径; 4)计算机动时间,合理调配资源制定进度计划。,1、工程网络图(PERT图)的图符组成: 箭头:在
25、工程网络中用箭头表示项目的作业/任务和完成作业/任务的过程(如刮旧漆,刷新漆等),显然作业既消耗资源又需要持续一定时间。 圆圈:用圆圈表示事件,仅仅表明一个作业/任务的开始或结束时间点,因此它不消耗时间和资源。 在工程网络图中,事件用数字编号来标识,作业用开始的事件编号和结束事件的编号来标识。为了直观起见,也直接在箭头上方标注作业名称来表示箭头代表的作业。 图13.2是旧木板房刷漆工程的工程网络。,1-2刮第1面旧漆;2-3刮第2面旧漆;2-4刷第1面新漆;3-5刮第3面旧漆;4-6刷第2面新漆;4-7清理第1面窗户;3-4虚拟作业(虚箭头表示);等等。 图13.2 旧木板房刷漆工程的工程网络
26、,绘制工程网络图要点解释: 1)按照作业流程及依赖关系依次绘制标识作业(箭头)的事件:如图中作业1-2表示刮第1面墙上旧漆,作业2-3表示刮第2面墙上旧漆,作业2-4表示给第1面墙刷新漆等等。 2)搞清作业之间的依赖性:在工程网络图中,事件显式地标识作业之间的依赖关系。箭头进入的事件表示该作业的结束,箭头离开的事件表示该作业的开始;只有当进入一个事件的所有作业都完成后,离开该事件的箭头代表的作业才能开始。 3)虚线箭头表示虚拟作业:虚拟作业是事实上并不存在的作业,引入虚拟作业是为了显式地表示作业之间的依赖关系。,2、计算每个事件的最早发生时刻EET和最迟发生时刻LET 步骤:1)将完成每个作业
27、需要的持续时间标注在箭头上方,虚拟作业 标注为0;2)计算每个事件的EET和LET,分别记入事件圈内,格式如下图:,计算EET的规则:EET表示事件可以发生的最早时间,通常将图中第一个事件的EET定义为0,其它事件EET按照从左到右的顺序计算。 1) 考虑进入该事件的所有作业; 2) 对于每个作业都计算它的持续时间与起始事件的EET之和; 3) 选取上述和数中的最大值作为该事件的最早时刻EET。 对于油漆工程网络图的EET计算结果,如图13.3所示。,1,0,2,6,10,11,5,3,4,8,7,9,2,4,2,4,3,6,3,6,1,2,1,2,0,0,0,0,旧木板房刷漆工程的PERT图
28、,事件2只有一个作业进入,只有当1-2完成才开始,所以EET2,2,事件3也只有一个作业进入,只有当2-3完成才开始,所以EET246,6,6,8,12,12,15,15,21,23,事件4有两个作业进入(2-4,3-4),只有当两者都完成后事件4才能开始,所以EET=max2+3,6+0=6,按此方法,不难沿着PERT图从左到右顺序算出每个事件的EET,计算事件LET的规则:最迟时刻表示在不影响工程竣工时间的前提下,该事件最晚可以发生的时刻。按惯例,最后一个事件(工程结束)的最迟时刻就是它的最早完成时刻。其他事件的最迟时刻在工程网络上从右至左按逆作业流的方向计算。计算最迟时刻LET使用下述3
29、条规则: (1) 考虑离开该事件的所有作业; (2) 从每个作业的结束事件的最迟时刻中减去该作业的持续时间; (3) 选取上述差数中的最小值作为该事件的最迟时刻LET。 图13.3中每个圆圈内右下角的数字就是该事件的最迟时刻。,2,6,2,1,0,0,2,6,10,11,5,3,4,8,7,9,4,2,4,3,6,3,1,2,1,0,0,0,0,旧木板房刷漆工程的PERT图,按惯例,事件11的LET与EET相同,都是23,2,6,6,8,12,12,15,15,21,23,23,逆作业流方向,接着是计算事件10的LET,离开它的作业只有10-11,持续时间为2,而它的LET为23,因此事件10
30、的LET=23-2=21,21,类似地,事件9的LET=21-1=20,20,事件8有两个离开它的作业8-9和8-10,因此LET=min20-0,21-6=15,15,按此方法,不难沿着PERT图从右到左的逆序算出每个事件的LET,18,12,11,6,6,2,图13.3 旧木板房刷漆工程的完整的工程网络,3 关键路径,关键路径:在工程网络图中,最早时刻和最迟时刻相同的事件定义了关键路径(耗时最长的路径)。关键路径用粗线箭头表示。 关键路径的含义:关键路径上的事件(关键事件)必须准时发生,组成关键路径的作业(关键作业)的实际持续时间不能超过估计的持续时间,否则工程就不能准时结束。 管理人员的
31、关注点:工程管理人员应该密切注视关键作业的进展情况,如果关键事件出现的时间比预计的时间晚,则会使最终完成项目的时间拖后。,关键路径,旧木板房刷漆工程 完整PERT图,4 作业机动时间,机动时间:作业的开始时间或结束时间可以适当调整的时间期限。 在工程网络图中,不在关键路径上的作业有一定程度的机动时间实际开始时间可以比预定时间晚一些,或者实际持续时间可以比预定的持续时间长一些,而并不影响工程的结束时间。作业机动时间计算公式:机动时间=(LET)结束-(EET)开始-作业持续时间 在工程网络中,每个作业的机动时间写在该作业箭头下面的括弧里。 对于前述油漆旧木板房的例子,计算得到的非关键作业的机动时
32、间列在表13.6中。掌握机动时间,可以有效调配项目资源,合理制定进度计划。,图13.3 旧木板房刷漆工程的完整的工程网络,5 合理制定进度计划 在制定进度计划时仔细考虑和利用工程网络中的机动时间,往往能够安排出既节省资源又不影响最终竣工时间的进度表。例如,根据刮第3、第4面墙上旧漆和给第1面墙刷新漆的作业都有机动时间,而且机动时间之和大于清理前三面墙窗户的需要的工作时间,因此,有可能使用10人在同样的时间内(23小时)完成全部任务。图13.4中的Gantt图描绘了其中的一种方案。,图13.4 旧木板房刷漆工程改进的Gantt图之一,软件工程项目进度计划的制定: )自顶向下的分解:项目分解为阶段
33、,阶段分解为任务,任务分解为更小的步骤或作业;项目、阶段、任务、步骤有紧密的依赖关系; )分配每项任务的工作量,根据人力分配情况,可以进一步确定每项任务的持续时间; )从上述两步确定的作业之间的依赖关系和持续时间,利用工程网络和Gantt图可以制定出合理的进度计划。,13.4 人员组织,1、人员组织的重要性: 有效地组织参与工程的各类人员,使项目开发活动和相互协作从无序走向有序,这是软件工程项目、特别大型项目取得成功的基本保证; 合理地组织参与项目的各类人员,以最大限度地增强项目组的凝聚力和发挥每个人的创造能力(知识产品的特性,知识创新),对于项目取得成功具有十分重要作用。,2、人员组织规律
34、参与项目的人员可以分为以下五类: 高级管理人员:负责决策或确定公司的发展计划和项目选择等重大问题; 项目负责人:负责某一具体项目,计划、组织和控制软件开发人员; 开发人员:负责开发一个产品项目的专门技术人员; 客户:负责说明或解释待开发软件需求的人员; 最终用户:软件发布为产品后的使用者。 如何合理组织上述5类人员是项目成功的关键。下面介绍组织规律:,1)Rayleigh-norden曲线 下述Rayleigh曲线本来是解释某些科学现象的。1958年,Norden发现该曲线可用来说明科研和项目开发过程中的人力资源需求。1976年,Putnam有发现在软件生命周期各个阶段所需要的人力资源分配具有
35、与此曲线有着十分相似的形状。Td大致为软件开发完成时间,左右两侧面积4:6,即计划、开发占人力40%,运行维护占60%。,2)各类人员的参与程度曲线(开发过程) 在软件项目开发过程中,参与项目开发的各类人员的的分布曲线如下图所示。显然,不同人员在不同阶段的参与程度不同。,3)两条定律 软件开发的人员时间权衡定律:Putnam在对Rayleigh曲线进行大量研究的基础上,导出了Putnam工作量多变量动态模型:E=K/T4。即开发工作量与开发时间的4次方成反比,这一结论称之为“软件开发的人员时间权衡定律”此结论说明:如果软件开发适当延长时间,则可以减少软件开发工作量;反之,将急剧增加工作量。 B
36、rooks定律:向一个已延期的软件项目追加开发人员,可能使项目完成得更晚。原因是:开发人员以算术级增加,则通信以几何级数增长。 上述两个定律说明:开发时间宁可长一些,开发人员一定要少而精。,3、人员组织形式 1)层次模式:层次模式是一种传统管理结构,每一层向其上层报告工作并管理下层人员。一般大型软件组织采用这种结构,如下图:,层次模式组织结构,图13.7 大型项目的技术管理组织结构,图13.8 包含分散决策的组织方式,2)矩阵模式:矩阵模式实际是层次模式的扩展,一方面每个项目有一个经理,负责整个项目管理;另一方面,每个项目又分为若干个阶段,每一阶段又接受接受阶段经理管理。大型软件组织采用这种结
37、构,如下图:,矩阵模式组织结构,3)民主小组(开发或程序小组) 民主小组一般又5-7人组成,其中一任兼任组长,或名誉组长。这种小组提倡“无我程序设计”,人人把小组开发的程序看成是“我们的”程序,而不是“我的”程序。遇到问题时,群策群力、平等协商和交换意见,可以发挥和调动每个组员的积极性和创造性。因为,“无责任”机制则发现错误变成一种主动自觉的行动。目前日本大公司多采用这种编组。特点:适应于开发时间长、难度大的课题。在我国最适应预研性课题。,民主小组结构图,组员,信道,4)主程序员组 美国IBM公司在20世纪70年代初期开始采用主程序员组的组织方式。采用这种组织方式主要出于下述几点考虑: (1)
38、 软件开发人员多数比较缺乏经验; (2) 程序设计过程中有许多事务性的工作,例如,文档管理、测试数据准备、信息存储和更新等; (3) 多渠道通信很费时间,将降低程序员的生产率。,主程序员组核心人员的分工如下所述: (1)主程序员既是成功的管理人员又是经验丰富、技术好、能力强的高级程序员,负责设计和指导其他程序员完成详细设计和编码工作。 (2)后备程序员实际上是备用主程序员。作用是协助主程序员工作并且在必要时(生病、出差或“跳槽”)接替主程序员的工作,平时主要是设计测试方案、分析测试结果及独立于设计过程的其他工作。 (3)编程秘书负责完成与项目有关的全部事务性工作,例如,维护项目资料库和项目文档
39、,编译、链接、执行源程序和测试用例。,5)现代程序员组,现代程序员组是把主程序员组的责任和权利分配在两个人身上。技术组长:一个技术负责人,负责小组的技术活动;行政组长:一个行政负责人,负责所有非技术性事务的管理决策。,现代程序员组结构图,13.5 质量保证 13.5.1 软件质量,软件质量的定义:软件质量就是“软件满足需求、标准和规范等特性的程度和能力。 客观地讲,软件产品质量的度量和描述是十分复杂的,不同的人站在不同的立场和用途上可以提出不同的质量要求。如用户、技术开发人员、管理人员等。由此可见,软件质量是用诸多方面诸多特性来综合描述的。 质量评价因素:评价或度量软件质量的各种特性也叫做评价
40、因素或评价指标。如下图13.9给出了通常软件质量评价的基本因素.,图13.9 软件质量因素与产品活动的关系,13.5.2 软件质量保证措施,1. 软件质量保证的措施 1、基于非执行的测试,也称为复审或评审。复审主要用来保证在编码之前各阶段产生的文档的质量; 2、基于执行的测试,即以前讲过的软件测试。基于执行的测试需要在程序编写出来之后进行,它是保证软件质量的关键措施; 3、程序正确性证明。程序正确性证明使用数学方法严格验证程序是否与对它的说明完全一致。,2. 参加软件质量保证工作的人员 1)软件工程师:通过采用先进的技术方法和度量,进行正式的技术复审以及完成计划周密的软件测试来保证软件质量。
41、2)SQA小组:责任是辅助软件工程师以获得高质量的软件产品。从事软件质量保证活动主要有: 计划,监督,记录,分析和报告。简而言之,SQA小组的作用是,通过确保软件过程的质量来保证软件产品的质量。,3. 技术复审和审查方法 1)技术复审的必要性 及早发现问题、避免错误向后传播,降低开发成本。 统计数字表明,在大型软件产品中检测出的错误,60%70%属于规格说明错误或设计错误,而正式技术复审在发现规格说明错误和设计错误方面的有效性高达75%。 正式技术复审包括:走查(walkthrough)和审查(inspection)等具体方法。,2)走查复审方法 组织形式:走查组由46名成员组成。以走查规格说
42、明的小组为例,成员至少包括一名负责起草规格说明的人,一名负责该规格说明的管理员,一位客户代表,以及下阶段开发组(在本例中是设计组)的一名代表和SQA小组的一名代表(组长)。 为了能发现重大错误,走查组成员最好是经验丰富的高级技术人员。,走查步骤: 分发材料:把被走查的材料预先分发给走查组每位成员,走查组成员应该仔细研究材料。 制定表格:制定两张表:一张表是他不理解的术语,另一张是他认为不正确的术语。 走查:走查组组长引导该组成员走查文档,力求发现尽可能多的错误并记录上述两张表中。走查的时间最长不要超过2小时,这段时间应该用来发现和标记错误,而不是改正错误。,走查方式: 有两种。 参与者驱动法:
43、参与者按照事先准备好的列表,提出他们不理解的术语和认为不正确的术语。文档编写组的代表必须回答每个质疑,要么承认确实有错误,要么对质疑做出解释。 文档驱动法:文档编写者向走查组成员仔细解释文档。走查组成员在此过程中不时针对事先准备好的问题或解释过程中发现的问题提出质疑。这种方法可能比第一种方法更有效,往往能检测出更多错误。经验表明,使用文档驱动法时许多错误是由文档讲解者自己发现的。,3)审查方法 审查组织形式:审查组由4人组成:组长既是审查组的管理人员又是技术负责人,当前阶段开发工作的项目组代表,负责下一阶段开发工作的项目组代表,一名SQA小组的代表。 审查的基本步骤: 综述:由负责编写文档的一
44、名成员向审查组综述该文档。在综述会结束时把文档分发给每位与会者; 准备:评审员仔细阅读文档,列出在审查中发现的错误及其类型,并按发生频率把错误类型分级,以辅助审查工作。,审查:评审组仔细走查整个文档,发现记录文档中的错误。通常每次审查会不超过90分钟。组长应该在一天之内写出一份关于审查的报告。 返工:文档的作者负责解决在审查报告中列出的所有错误及问题; 跟踪:组长必须确保所提出的每个问题都得到了圆满的解决,要么修正了文档,要么澄清了被误认为是错误的条目。必须仔细检查对文档所做的每个修正,以确保没有引入新的错误。如果在审查过程中返工量超过5%,则应该由审查组再对文档全面地审查一遍。,4)程序正确
45、性证明 测试可以暴露程序中的错误,因此是保证软件可靠性的重要手段;但是,测试只能证明程序中有错误,并不能证明程序中没有错误。因此,对于保证软件可靠性来说,测试是一种不完善的技术,人们自然希望研究出完善的正确性证明技术。 在20世纪60年代初期,人们已经开始研究程序正确性证明的技术,提出了许多不同的技术方法。人工证明程序正确性,对于评价小程序可能有些价值,但是在证明大型软件的正确性时,不仅工作量太大,更主要的是在证明的过程中很容易包含错误,因此是不实用的。,本节小结,1、进度计划的制定:工具与步骤,时间估算,工作量分配,工程网络技术,GANTT图等。 2、人员组织:组织结构和规模。 3、软件质量保证:质量评估要素或指标体系,质量控制方法。作业题:2、4、7、10、11、12,