五、软件管理
软件工程项目高质量高效率的完成与其他产品的工程项目一样,不仅取决于所采用的技术、方法和工具,还决定于管理的好坏。两者相辅相成,缺一不可。就目前软件开发中的问题,更多的是管理问题。本节将集中讨论与管理方面有关的问题。
(一) 确定工作范围和资源
1.软件工作范围
软件计划的第一个任务就是确定软件的工作范围,即软件的用途及对软件的要求。其中主要包括软件的功能、性能、接口和可靠性等四个方面。计划人员必须使用管理人员和技术人员都能理解的无二义性的语言来描述工作范围。对于软件功能的要求,在某些情况下要进行求精细化,以便能够提供更多的细节,因为成本和进度的估算都与功能有关。软件的性能包括处理时间的约束、存储限制以及依赖于机器的某些特性。要同时考虑功能和性能,才能做出正确的估计。接口又可分为硬件、软件和人三类:
(1)硬件指执行该软件的硬件,如中央处理机和外部设备,以及由该软件控制的各种间接设备,如各种机器和显示设备等;
(2)软件指已有的而且必须与新开发软件连接的软件,如数据库、子程序包和操作系统等;
(3)人指**终端或输入/输出设备使用该软件的操作人员。在这三种情况下,都要详细地了解**接口的信息传递。计划人员还必须考虑各个接口的性质及复杂程度,以确定对开发资源、成本和进度的各种影响。
2.资源
(1)人员软件危机中提出的最严重的问题是缺少有经验的软件人员,人是软件开发的主要资源。这里所讨论的不是小项目,而是大项目,1、2个人是干不了的。在大项目的软件开发中,人员尤其重要。软件工程各个阶段对人员有不同的要求。开始时管理人员要用较多的精力,因为作为管理人员的决策,这时是很关键的,最后验收时也要投入较多的精力。高级技术人员同样如此。初级技术人员前期工作不多,在详细设计、编码和早期测试中参与最多,单元测试时为高峰。
(2)硬件硬件也是一种软件开发工具。硬件资源包括:
①宿主机宿主机是指在软件开发阶段使用的计算机和有关外部设备。对于一些专门的开发机构,为了能够接受更多的用户任务,并能方便地使用多种类型的开发支持工具,常备有专门的开发系统。目前很多微机都设置有单独的开发系统,而且进一步发展为专用的软件开发环境,这一部分将在第9章讨论。
②目标机运行所开发软件的计算机叫目标机,其中也包括有关的外部设备,在很多情况下,宿主机与目标机是统一的。
③其他硬件设备在进行专用软件的开发时,有时需要某些特殊的硬件资源,如开发过程控制软件时所需的A/D、D/A等专用设备。
(3)软件和硬件一样,也是一种软件开发工具。软件资源包括:
①支持软件包括范围广泛的各种工具。最基础的支持软件是操作系统、编译程序、数据库、图形包和网络软件等。它们是开发人员的必备工具。在软件生存期的各阶段还要有其它相应的支持软件:在需求分析阶段,有需求分析和生成程序;在设计阶段,有设计语言处理程序、流程图/框图生成程序和模拟程序;在编码和单元测试阶段,有动态调试程序、交叉汇编程序/编译程序和宏处理程序;在测试阶段,有测试驱动程序和测试结果分析程序等。恰当地使用支持软件,可以大大地提高软件开发的生产率和软件的质量。但是为了使支持软件能够在开发系统上运行,需要很大的工作量和费用,所以在考虑支持软件时,成本和效益两者之间的关系是一个必须考虑的重要问题。
②实用软件相当于软件库,可以结合到新的系统中去,如各种标准子程序等。实用软件现在应该说是非常丰富的,这是重用技术的基础。但重用技术的问题是如何选择重用对象、分类、建库,以及解决通用接口的机制问题,使其能适用于任一硬、软件环境。实用软件作为资源时,计划人员应认识到:如果现有软件符合要求,那么利用实用软件的费用几乎总是小于开发同等软件所需的费用;如果在与系统结合起来之前需要作某些修改,那就必须特别小心,因为修改现有软件所需费用有时会大于开发同等软件的费用。一般在计划阶段,软件资源常常被忽视,只有在开发阶段才成为头等大事。若能够及时地确定对软件资源的要求,则可以较好地对各种方案进行技术评价,并能尽早地获得所需的方案。
(二)成本估算
为了使开发项目能够在规定的时间内完成,而且不超过预算,成本估算的管理控制是关键。计算机广泛使用有35年,而高级语言应用仅30年。费用估算大约开始于50年代的第一个大型程序设计,60年代估算过于乐观,结果费用大大超支,70年代以后,费用估算才引起人们的普遍重视。由于影响软件成本的因素太多(如人、技术、环境以及政治因素等),直到最近,软件成本估算仍是一门很不成熟的技术,国外已有的技术只能作为我们的借鉴。
1.成本估算方法
有两种基本的估算方法:自顶向下和自底向上。自顶向下的方法是对整个项目的总开发时间和总工作量做出估算,然后把它们按阶段、步骤和工作单元进行分配。自底向上的方法则正好相反,分别估算各工作单元所需的工作量和开发时间,然后相加,就得出总的工作量和总的开发时间。两种方法都要求采用某种方法做出估算。有许多现成的方法可以利用,大致可分为三类:
(1)专家估算法;
(2)类推估算法;
(3)算式估算法。
(1)专家估算法这种方法依靠一个或多个专家,对要求
的项目做出估计,其精确性主要取决于两点,即专家对估算项目的定性参数的了解和他们的经验。后者类似于类推估算法。来源:www.examda.com
(2)类推估算法自顶向下的方法中,类推估算法是将估算项目的总体参数与类似项目进行直接相比得到结果。自底向上的方法中,类推是在两个具有相似条件的工作单元之间进行。
(3)算式估算法专家估算法和类推估算法的缺点在于,它们依靠带有一定盲目性的和主观的猜测对项目进行估算。算式估算法则是企图避免主观因素的影响。用于估算的算式方法有两种基本类型:(1)由理论导出;(2)由经验得出。
2.成本估算模型
(1)IBM模型1977年Walston和Felix总结了IBM联合系统分部(FSD)负责的60个项目的数据。其中源代码从400到467000行,工作量从12到11758人-月,共使用29种不同语言和66种计算机。
(2)SLIM模型1979年前后,Putnam在软件开发生存期雷利(Rayleigh)曲线模型的基础上提出SLIM商业化的成本估算模型,SLIM基本估算算式为L=C k K 1/3 t 4/3d 其中:L和t d 分别表示可交付的源指令数和开发时间(单位以年计);K是整个生存期内人的工作量(单位以人一年计),可从总的开发工作量ED=0.4K求得;C k 是根据经验数据确定的常数,表示了开发技术的先进性级别。如果软件开发环境较差(没有一定的开发方法,缺少文档和评审或批处理方式),取C k =6500;正常的开发环境(有适当的开发方法,较好的文档和评审,以及交互式的执行方式),C k =10000;而一个较好的开发环境(自动工具和技术),则取C k =12500。交换上式,可得开发工作量算式 K=L 3 C 3k t 4d 可从美国或英国买到SLIM计算程序,它除了提供开发时间和成本估算外,还提供关于风险、可行性、估算CPU时间需求及项目计划中其它有关信息。
(3)PRICE-S模型Freiman在1979年提出了另一个商业化的成本估算模型RCA PRICE-S。PRICE-S计算程序以一个未发表的启发式算法为基础,将若干成本因素作为输入,关键是生成源代码或目标代码指令的数量,然后输出成本和进度估算,以及其它可供选择的项目管理数据。另一个程序PRICE-SL可用于估算系统维护成本,根据若干个用户提供的参数,如软件的期望寿命、发展和使用率等,PRICE-SL运行时以PRICE-S的输出作为它的输入。
(4)COCOMO模型TRW开发的结构性成本模型COCOMO(Constructive Cost Model)是最精确、最易于使用的成本估算方法之一,1981年Boehm在他的著作中进行了详尽的描述。
(5)Belley-Basili元模型这种模型提供了最适用于在给定的开发环境中,工作量估算方程的开发方法。结果类似于IBM和COCOMO模型。
(6)Schneider模型上述所有模型完全是经验性的,1978年Schneider根据1977年Halstead的软件科学理论推导出几种估算方程,得到的工作量方程与幂定律算式形式相同。
3.代码行的成本估算方法
这是一种自底向上的估算方法,即从模块开始进行估算,步骤如下:
(1)确定功能首先将功能反复分解,直到可以对为实现该功能所要求的源代码行数做出可靠性的估算为止。对各子功能,根据经验数据或实践经验,可以给出极好、正常和较差三种情况下的源代码估算行数的期望值,分别用a、m、b表示。
(2)根据经验数据,确定各子功能的代码行成本
(3)计算各子功能的成本和工作量,并计算任务的总成本(元)和总工作量(人-月)
(4)计算开发时间
(5)对结果进行分析比较4.每项任务工作量的成本估算方法开发过程中,最常用的是每项任务工作量的成本估算方法。工作量可以用人-日、人-月或人-年的数量来表示。知道单位工作量的成本,就可得到估算成本。
下面仍以上节中的CAD软件包为例,估算步骤如下:
(1)确定任务 即每个功能都必须经过需求分析、设计、编码和测试工作
(2)确定每项任务的工作量,对每项任务要估算它们所需要的人-月数。
(3)找出与各项任务的对应的劳务费数据 即每个单位工作量成本(元/人-月)。因为各阶段的劳务费用不同,需求分析和概要设计阶段需要较多的高级技术人员;而详细设计、编码和早期测试则要求较多的初级技术人员。而他们的工资是不相同的。
(4)计算 计算各个工作各个阶段的成本和工作量,然后计算总成本和总工作量。
(5)分析比较 在整个开发工作量中,需求分析和设计用去了75人-月,约占全部分任务工作量的50%,说明了这项工作的重要性。劳务费反映了劳动者的成本,其中包括管理费。需求分析的劳务费(5200元/人-月)比设计、编码和单元测试都高,这也说明了这项工作的重要性。
(三) 进度安排
软件开发项目的进度安排可以有两种考虑方式。第一种,系统最终交付使用的日期已经确定,软件开发机构必须在合同规定的时间内安排;第二种,只确定了大致的年限,最后交付使用的日期由软件开发机构根据具体情况确定。后一种考虑能够对软件开发任务进行细致的分析;能够地利用资源,合理地分配工作量,但实际工作中常常遇到第一种情况,问题是软件管理人员如何在规定的期限内分配人力和
(3)n个人被组成k个小组,每个小组分配一个或多个功能,并有具体组织,协调工作由小组和软件主管共同进行。虽然对上述每一种方案都可能说出赞成或反对的理由。然而,有越来越多的证据表明,第三种方案,即正式的小组是最有效的。正式的小组的方案来源于“主程序员小组”的概念。它是由Harlan Mills首先提出,并由Baker进一步阐述的。小组的核心由一位高级工程师(主程序员)、2至5位技术人员和一位后备工程师组成。主程序员负责小组的所有技术活动的计划、协调和评审工作;技术人员负责项目的具体分析和开发;后备工程师则支持主程序员工作,必要时能代替主程序员工作,以便使项目能继续进行,而使损失最小。主程序员小组有一名或多名专家(如数据库设计或通信方面专家)、数名辅助人员(如秘书和打字员)和一名资料员参加工作。资料员同时为多个小组工作,具体完成下列工作:
(1)保存和管理所有软件配置(包括各种文档、源程序清单、数据和各种磁介质资料);
(2)协助收集和整理软件生产率数据;
(3)对可修改的模块分类及编写索引;
(4)协助小组进行调查、评价和准备文档等。主程序员小组的主要目标是发挥集体力量。因引,小组要培养从“全局”观点出发进行程序设计,把“我的”程序变为“我们的”程序;帮助消除软件的个人属性,小组可以鼓励更加彻底的评审,并在共同的工作中增加学习,从而改善软件质量。在本章的第3节中,我们曾讨论过人们在工作中有一个需要交流的问题。当采用主程序员小组这种形式时,必须会增加交换意见所需的工作量,这似乎不利于提高软件开发的生产率。然而,不管怎样组织,在软件整个开发过程的总工作量的相当一部分总是要花费在交换意见方面(如计划、分析和评审等)。虽然,小组的形式增加了内部交换意见的工作量,但是这是有组织的评审,必将减少在设计和编码中引入的错误。结果是测试工作量减少了,从而使小组有更高的生产率。当然,小组中技术人员的数量不宜过多,一般建议2~5人为好。
(五) 软件计划
软件开发过程的每一步都要生产出可交付的文档,这些文档可以用来进行评审和作为下一步工作的基础。软件计划是一份比较简短精炼的文件。它应该发给有关部门,其中包括:
(1)把该项目所确定的工作范围和所需的资源告诉软件主管部门、技术人员和该项目的需求者;
(2)有关该项目的成本估算和进度安排,应告诉软件主管部门,以便他们进行评审;来源:www.examda.com
(3)还要发给与该项目开发有关的所有人员,给他们提供有关该项目开发的总办法。软件计划应包含以下内容:
1.工作范围
(1)项目目标(2)主要功能(3)其他特性(4)开发情况
2.资源
(1)人员资源(2)硬件资源(3)软件资源(4)可利用的窗口
3.成本估算
4.进度安排
正在阅读:
小学四年级按要求改句子练习题07-02
2023年广西高考时间及进出考场时间公布附注意事项05-31
2016年广东广州银行东莞分行招聘启事03-04
2017山西省晋中市介休市招聘事业编电视播音主持人公告【4人】02-11
保护动物作文700字08-16
四年级快乐的一天作文400字左右5篇03-07
2023年银行业专业人员初级和中级职业资格考试报名简章08-25
澳洲技术移民种类05-30