估算软件规模.docx
- 文档编号:2453862
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:12
- 大小:23.74KB
估算软件规模.docx
《估算软件规模.docx》由会员分享,可在线阅读,更多相关《估算软件规模.docx(12页珍藏版)》请在冰点文库上搜索。
估算软件规模
-ffa
13.1估算软件规模
13.2工作量估算
13.3进度计划
13.4人员组织
13.5质量保证
13.6软件配置管理
13.7能力成熟度模型
在经历了若干个大型软件工程项目的失败之后,人们才逐渐认识到软件项目管理的重要性和特殊性。
事实上,这些项目的失败并不是由于从事软件开发工作的软件工程师无能,正相反,他们之中的绝大多数是当时杰出的技术专家。
这些工程项目的失败主要是因为管理不善。
所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。
软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期之中。
软件项目管理过程从一组项目计划活动开始,而制定计划的基础是工作量估算和完成期限估算。
为了估算项目的工作量和完成期限,首先需要估算软件的规模。
13.1估算软件规模
13.1.1代码行技术
代码行技术是比较简单的定量估算软件规模的方法。
这种方法依据以往开发类似产品的经验和历史数据,估计实现一个功能所需要的源程序行数。
当有以往开发类似产品的历史数据可供参考时,用这种方法估计出的数值还是比较准确的。
把实现每个功能所需要的源程序行数累加起来,就可得到实现整个软件所需要的源程序行数。
代码行技术的主要优点是,代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数。
代码行技术的缺点是:
源程序仅是软件配置的一个成分,用它的规模代表整个软件的规模似乎不太合理;
用不同语言实现同一个软件所需要的代码行数并不相同;这种方法不适用于非过程语言。
为了克服代码行技术的缺点,人们又提出了功能点技术。
13.1.2功能点技术
功能点技术依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。
这种方法用功能点(FP)为单位度量软件规模。
1.信息域特性
■”■■■
功能点技术定义了信息域的5个特性,分别是输入项数(Inp)、输出项数(Out)、查询数(Inq)、主文件数(Maf)和外部接口数(Inf)。
下面讲述这5个特性的含义。
2.估算功能点的步骤
举例:
用3个步骤,可估算出一个软件的功能点数(即软件规模)。
(1)计算未调整的功能点数UFP
(2)计算技术复杂性因子TCF
(3)计算功能点数FP
13.2工作量估算
软件估算模型使用由经验导出的公式来预测软件开发工作量,工作量是软件规模(KLOC或FP)的函数,工作量的单位通常是人月(pm)。
支持大多数估算模型的经验数据,都是从有限个项目的样本集中总结出来的,因此,没有一个估算模型可以适用于所有类型的软件和开发环境。
注:
简要介绍:
静态单变量模型、动态多变量模型、COCOMO2
模型
13.3进度计划
不论从事哪种技术性项目,实际情况都是,在实现一个大目标之前往往必须完成数以百计的小任务(也称为作业)。
这些任务中有一些是处于“关键路径”(回顾之前相关知识)之外的,其完成时间如果没有严重拖后,就不会影响整个项目的完成时间;其他任务则处于关键路径之中,如果这些“关键任务”的进度拖后,则整个项目的完成日期就会拖后,管理人员应该高度关注关键任务的进展情况。
一个有效的软件过程应该定义一个适用于当前项目的任务集合。
一个任务集合包括一组软件工程工作任务、里程碑和可交付的产品。
为一个项目所定义的任务集合,必须包括为获得高质量的软件产品而应该完成的所有任务,但是同时又不能让项目组承担不必要的工作。
项目管理者的目标是定义全部项目任务,识别出关键任务,跟踪关键任务的进展状况,以保证能及时发现拖延进度的情况。
为达到上述目标,管理者必须制定一个足够详细的进度表,以便监督项目进度并控制整个项目。
13.3.1估算开发时间
估算出完成给定项目所需的总工作量之后,接下来需要回答的问题就是:
用多长时间才能完成该项目的开发工作?
对于一个估计工作量为20人月的项目,可能想出下列几种进度表:
1个人用20个月完成该项目;
4个人用5个月完成该项目;
20个人用1个月完成该项目。
但是,这些进度表并不现实,实际上软件开发时间与从事开发工作的人数之间并不是简单的反比关系。
通常,成本估算模型也同时提供了估算开发时间T的方程。
重点:
研究项目组规模与项目组总生产率的关系。
举例:
说明项目组规模与生产率的关系。
13.3.2Gantt图
首先通过一个非常简单的例子引出这种工具。
例:
假设有一座陈旧的矩形木板房需要重新油漆。
这项工作必须分3步完成:
首先刮掉旧漆,然后刷上新漆,最后清除溅在窗户上的油漆。
假设一共分配了15名工人去完成这项工作,然而工具却很有限:
只有5把刮旧漆用的刮板,5把刷漆用的刷子,5把清除溅在窗户上的油漆用的小刮刀。
怎样安排才能使工作进行得更有效呢?
一种做法是首先刮掉四面墙壁上的旧漆,然后给每面墙壁都刷上新漆,最后清除溅在每个窗户上的油漆。
显然这是效率最低的做法,因为总共有15名工人,然而每种工具却只有5件,这样安排工作在任何时候都有10名工人闲着没活干。
这时:
同学们可能已经想到,应该采用“流水作业法”,也就是说,首先由5名工人用刮板刮掉第1面墙上的旧漆(这时其余10名工人休息),当第1面墙刮净后,另外5名工人立即用刷子给这面墙刷新漆(与此
同时拿刮板的5名工人转去刮第2面墙上的旧漆),一旦刮旧漆的工人转至瞬3面墙而且刷新漆的工人转到第2面墙以后,余下的5名工人立即拿起刮刀去清除溅在第1面墙窗户上的油漆,……。
这样安排每个工人都有活干,因此能够在较短的时间内完成任务。
假设木板房的第2、4两面墙的长度比第1、3两面墙的长度长一倍,此外,不同工作需要用的时间长短也不同,刷新漆最费时间,其次是舌川日漆,清理(即清除溅在窗户上的油漆)需要的时间最少。
可以使用Gantt图描绘上述流水作业过程:
在时间为零时开始刮第1面墙上的旧漆,两小时后刮旧漆的工人转去刮第2面墙,同时另5名工人开始给第1面墙刷新漆,每当给一面墙刷完新漆之后,第3组的5名工人立即清除溅在这面墙窗户上的漆。
13.3.3工程网络
Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具。
它具有直观简明和容易掌握、容易绘制的优点,但是Gantt图也有3个主要缺点:
(1)不能显式地描绘各项作业彼此间的依赖关系;
(2)进度计划的关键部分不明确,难于判定哪些部分应当是主攻
和主控的对象;
(3)计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费。
13.3.4估算工程进度
举例:
在前面例子的基础之上,利用工程网络估算工程进度。
补充:
计算最迟时刻LET使用下述3条规则:
(1)考虑离开该事件的所有作业;
(2)从每个作业的结束事件的最迟时刻中减去该作业的持续时
间;
(3)选取上述差数中的最小值作为该事件的最迟时刻LET。
13.3.5关键路径
强调:
关键路径上的事件(关键事件)必须准时发生,组成关键路径的作业(关键作业)的实际持续时间不能超过估计的持续时间,否则
工程就不能准时结束
工程项目的管理人员应该密切注视关键作业的进展情况,如果关键事件出现的时间比预计的时间晚,则会使最终完成项目的时间拖后;如果希望缩短工期,只有往关键作业中增加资源才会有效果。
13.3.6机动时间
不在关键路径上的作业有一定程度的机动余地一一实际开始时间可以比预定时间晚一些,或者实际持续时间可以比预定的持续时间长一些,而并不影响工程的结束时间。
一个作业可以有的全部机动时间等于它的结束事件的最迟时刻减去它的开始事件的最早时刻,再减去这个作业的持续时间:
机动时间=(LET)结束-(EET)开始-持续时间
13.4人员组织
软件项目成功的关键是有高素质的软件开发人员。
然而大多数软件的规模都很大,单个软件开发人员无法在给定期限内完成开发工作,因此,必须把多名软件开发人员合理地组织起来,使他们有效地分工协作共同完成开发工作。
为了成功地完成软件开发工作,项目组成员必须以一种有意义且有效的方式彼此交互和通信。
如何组织项目组是一个重要的管理问题,管理者应该合理地组织项目组,使项目组有较高生产率,能够按预定的进度计划完成所承担的工作。
经验表明,项目组组织得越好,其生产率越高,而且产品质量也越好。
现有的软件项目组的组织方式很多,通常,组织软件开发人员的方法,取决于所承担的项目的特点、以往的组织经验以及管理者的看法和喜好。
下面介绍3种典型的组织方式:
民主制程序员组、主程序员组、现代程序员组。
比较以上三种组织方式的特点。
13.5质量保证
13.5.1软件质量
概软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。
更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。
注:
上述定义强调了下述的3个要点:
.「・
(1)软件需求是度量软件质量的基础,与需求不一致就是质量不咼。
(2)指定的开发标准定义了一组指导软件开发的准则,如果没有遵守这些准则,几乎肯定会导致软件质量不高。
(3)通常,有一组没有显式描述的隐含需求(例如,软件应该是容易维护的)。
如果软件满足明确描述的需求,但却不满足隐含的需求,那么软件的质量仍然是值得怀疑的。
13.5.2软件质量保证措施
软件质量保证(softwarequalityassurance,SQA勺措施主要有:
于非执行的测试(也称为复审或评审),基于执行的测试(即以前讲过的软件测试)和程序正确性证明。
复审主要用来保证在编码之前各阶段产生的文档的质量;基于执行的测试需要在程序编写出来之后进行,它是保证软件质量的最后一道防线;程序正确性证明使用数学方法严格验证程序是否与对它的说明完全一致。
重点:
审查
审查过程包括下述5个基本步骤:
(1)综述。
由负责编写文档的一名成员向审查组综述该文档。
在综述会结束时把文档分发给每位与会者。
(2)准备。
评审员仔细阅读文档。
最好列出在审查中发现的错误的类型,并按发生频率把错误类型分级,以辅助审查工作。
这些列表有助于评审员们把注意力集中到最常发生错误的区域。
(3)审查。
评审组仔细走查整个文档。
和走查一样,这一步的目的也是发现文档中的错误,而不是改正它们。
通常每次审查会不超过90分钟。
审查组组长应该在一天之内写出一份关于审查的报告。
(4)返工。
文档的作者负责解决在审查报告中列出的所有错误及问题。
(5)跟踪。
组长必须确保所提出的每个问题都得到了圆满的解决(要么修正了文档,要么澄清了被误认为是错误的条目)。
必须仔细检查对文档所做的每个修正,以确保没有引入新的错误。
如果在审查过程中返工量超过5%,则应该由审查组再对文档全面地审查一遍。
审查组由4人组成。
组长既是审查组的管理人员又是技术负责人。
审查组必须包括负责当前阶段开发工作的项目组代表和负责下一阶段开发工作的项目组代表,此外,还应该包括一名SQA小组的代表。
审查是检测软件错误的一种好方法,利用审查可以在软件过程的早期阶段发现并改正错误,也就是说,能在修正错误的代价变得很昂贵之前就发现并改正错误。
因此,审查是一种经济有效的错误检测方法。
4.程序正确性证明
测试可以暴露程序中的错误,因此是保证软件可靠性的重要手段;但是,测试只能证明程序中有错误,并不能证明程序中没有错误。
因此,对于保证软件可靠性来说,测试是一种不完善的技术,人们自然希望研究出完善的正确性证明技术。
正确性证明的基本思想是证明程序能完成预定的功能。
因此,应该提供对程序功能的严格数学说明,然后根据程序代码证明程序确实能实现它的功能说明。
介绍证明的基本思想:
如果在程序的若干个点上,设计者可以提出关于程序变量及它们的关系的断言,那么在每一点上的断言都应该永远是真的。
假设在程序的P1,P2,Pn等点上的断言分别是
a
(1),a
(2)…,a(n),其中a
(1)必须是关于程序输入的断言,a(n必须是关于程序输出的断言。
为了证明在点P和Pi+1之间的程序语句是正确的,必须证明执行这些语句之后将使断言a(i变成a(i+1)。
如果对程序内所有相邻点都能完成上述证明过程,贝S证明了输入断言加上程序可以导出输出断言。
如果输入断言和输出断言是正确的,而且程序确实是可以终止的(不包含死循环),则上述过程就证明了程序的正确性。
补充:
目前已经研究出证明PASCAL和LISP程序正确性的程序系统,正在对这些系统进行评价和改进。
现在这些系统还只能对较小的程序进行评价,毫无疑问还需要做许多工作,这样的系统才能实际用于大型程序的正确性证明。
13.6软件配置管理
软件配置管理是在软件的整个生命期内管理变化的一组活动。
具体地说,这组活动用来:
①标识变化;②控制变化;③确保适当
地实现了变化;④向需要知道这类信息的人报告变化。
软件配置管理不同于软件维护。
维护是在软件交付给用户使用后才发生的,而配置管理是在软件项目启动时就开始,并且一直持续到软件退役后才终止的一组跟踪和控制活动。
软件配置管理的目标是,使变化更正确且更容易被适应,在必须变化时减少所需花费的工作量。
1361软件配置
1.软件配置项
.■iR-i.■
软件过程的输出信息可以分为3类:
①计算机程序(源代码和可执行程序);②描述计算机程序的文档(供技术人员或用户使用);③数据(程序内包含的或在程序外的)。
上述这些项组成了在软件过程中产生的全部信息,我们把它们统称为软件配置,而这些项就是软件配置项。
2.基线
基线是一个软件配置管理概念,它有助于我们在不严重妨碍合理变化的前提下来控制变化。
IEEE把基线定义为:
已经通过了正式复
审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。
简而言之,基线就是通过了正式复审的软件配置项。
13.6.2软件配置管理过程
软件配置管理是软件质量保证的重要一环,它的主要任务是控制变化,同时也负责各个软件配置项和软件各种版本的标识、软件配置审计以及对软件配置发生的任何变化的报告。
具体来说,软件配置管理主要有5项任务:
标识、版本控制、变
化控制、配置审计和报告。
13.7能力成熟度模型(重点)
能力成熟度模型(capabilitymaturitymode,CMM),是用于评价软件机构的软件过程能力成熟度的模型。
最初,建立此模型的目的主要是,为大型软件项目的招投标活动提供一种全面而客观的评审依据,发展到后来,此模型又同时被应用于许多软件机构内部的过程改进活动中。
能力成熟度模型的基本思想是,由于问题是由我们管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高软件的生
产率和质量。
能力成熟度模型有助于软件开发机构建立一个有规律的、成熟的软件过程。
改进后的软件过程将开发出质量更好的软件,使更多的软件项目免受时间和费用超支之苦。
CMM把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。
这5个成熟度等级定义了一个有序的尺度,用以测量软件机构的软件过程成熟度和评价其软件过程能力,这些等级还能帮助软件机构把应做的改进工作排出优先次序。
注:
成熟度从“1级”到“5级”,反映出一个软件机构为了达到从一个无序的、混乱的软件过程进化到一种有序的、有纪律的且成熟的软件过程的目的,必须经历的过程改进活动的途径。
每一个成熟度级别都是该软件机构沿着改进其过程的途径前进途中的一个台阶,后一个成熟度级别是前一个级别的软件过程的进化目标。
CMM的每个成熟度级别中都包含一组过程改进的目标,满足这些目标后一个机构的软件过程就从当前级别进化到下一个成熟度级别。
下面介绍这5个级别的特点。
1.初始级
软件过程的特征是无序的,有时甚至是混乱的。
几乎没有什么过程是经过定义的(即没有一个定型的过程模型),项目能否成功完全取决于开发人员的个人能力。
2.可重复级
软件机构建立了基本的项目管理过程(过程模型),可跟踪成本、进度、功能和质量。
已经建立起必要的过程规范,对新项目的策划和管理过程是基于以前类似项目的实践经验,使得有类似应用经验的软件项目能够再次取得成功。
3.已定义级
软件机构已经定义了完整的软件过程(过程模型),软件过程已经文档化和标准化。
所有项目组都使用文档化的、经过批准的过程来开发和维护软件。
这一级包含了第2级的全部特征。
在第3级成熟度的软件机构中,有一个固定的过程小组从事软件过程工程活动。
当需要时,过程小组可以利用过程模型进行过程例化活动,从而获得一个针
对某个特定的软件项目的过程实例,并投入过程运作而开展有效的软件项目工程实践。
4.已管理级
软件机构对软件过程(过程模型和过程实例)和软件产品都建立了定量的质量目标,所有项目的重要的过程活动都是可度量的。
该软件机构收集了过程度量和产品度量的方法并加以运用,可以定量地了解和控制软件过程和软件产品,并为评定项目的过程质量和产品质量奠定了基础。
这一级包含了第3级的全部特征。
处于4级成熟度的软件机构的过程能力可以概括为,软件过程是可度量的,软件过程在可度量的范围内运行。
这一级的过程能力允许软件机构在定量的范围内预测过程和产品质量趋势,在发生偏离时可以及时采取措施予以纠正,并且可以预期软件产品是高质量的。
5.优化级
软件机构集中精力持续不断地改进软件过程。
这一级的软件机构是一个以防止出现缺陷为目标的机构,它有能力识别软件过程要素的薄弱环节,并有足够的手段改进它们。
在这样的机构中,可以获得关于软件过程有效性的统计数据,利用这些数据可以对新技术进行成本/效益分析,并可以优化出在软件工程实践中能够采用的最佳新技术。
这一级包含了第4级的全部特征。
这一级的软件机构可以通过对过程实例性能的分析和确定产生某一缺陷的原因,来防止再次出现这种类型的缺陷;通过对任何一个过程实例的分析所获得的经验教训都可以成为该软件机构优化其过程模型的有效依据,从而使其他项目的过程实例得到优化。
这样的软件机构可以通过从过程实施中获得的定量的反馈信息,在采用新思想和新技术的同时测试它们,以不断地改进和优化软件过程。
处于5级成熟度的软件机构的过程能力可以概括为,软件过程是可优化的。
这一级的软件机构能够持续不断地改进其过程能力,既对现行的过程实例不断地改进和优化,又借助于所采用的新技术和新方法来实现未来的过程改进。
补充:
一些统计数字表明,提高一个完整的成熟度等级大约需要花18个月到3年的时间,但是从第1级上升到第2级有时要花3年甚至5
年时间。
这说明要向一个迄今仍处于混乱的和被动的行动方式的软件机构灌输系统化的方式,将多么困难。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 估算 软件 规模