软件项目管理——软件范围与估算
对于一项工程来说,每个工程在它开始施工之前都会有一个工程范围和估算。而软件也不例外,每一个软件在开始开发前,都会有一个相对应的软件范围。同时在开发前也要对该软件进行一个合理的估算,以便能对软件有一个更好的把握方向。
在接下来的这篇文章中,将讲解软件项目管理中的软件范围与估算。
一、软件项目计划
1、目标
软件项目计划的目标是提供一个框架,使得管理人员对资源、成本和进度做出合理估算。 这些估算应当在项目开始时的一个有限的时间段内做出,并且随着项目的进展定期进行更新。
2、步骤
(1) Scoping(范围)—— 确定软件范围;
(2) Estimation(估算)—— 估算资源、工作量、成本;
(3) Risk(风险)—— 风险管理;
(4) Schedule(进度)—— 进度安排;
(5) Control strategy(控制策略)—— 指定控制策略。
二、软件范围
1、软件范围定义
(1) 估算开始时,应对功能进行评价,并适当细化以提供更详细的细节。
(2) 由于成本和进度的估算都与功能有关,因此常常采用某种程度的功能分解。
(3) 软件范围包括功能、性能、约束、接口和可靠性,无二义和可理解。
2、软件范围——引例
思考这样一个问题:针对这个软件的范围描述,请找出软件范围的功能、性能、约束、接口等。
考虑开发一个驱动传送带分类系统(CLSS)的软件,对该软件的范围陈述如下:
(1) 传送带分类系统将沿传送带移动的盒子进行分类,每个盒子由一个包含零件号的条形码来标识,并在传送带的末端分送到六个箱子中的一个,这些盒子要通过一个由条形码阅读器和一台PC所组成的分类站。
(2) 分类站的PC连接到一个分流器上,它把盒子分送到不同的箱子中,盒子以随机的顺序通过且其间的距离相同,传送带以每分钟5英尺的速度移动。
(3) CLSS软件以和传送带速度一致的时间间隔接受来自条形码阅读器的信息。条形码数据被解码成盒子的标识格式,软件将在最多可容纳1000个条目的零件号数据库中进行检索,以确定当前在阅读器(分类站)位置的盒子应该放到哪个箱子中。
(4) 该箱子的信息被传送到分流器,以把盒子放进合适的箱子中,每个盒子所放进的箱子的记录均被保存起来以供以后提取及报告。
(5) CLSS软件同时也接受来自脉冲流速计的输入,用于使控制信号与分流器同步,根据分类站和分流器之间产生的脉冲数,软件将产生一个控制信号给分流器,以适当地定位盒子。
通过分析,这个过程将产生如下功能:
- 读取条形码输入
- 读取脉冲流速计
- 解码零件编码数据
- 检索数据库
- 确定合适的箱子
- 产生分流器的控制信号
- 维护盒子目的地的记录
性能取决于传送带的速度,对于每个盒子的处理必须在下个盒子到达条形码阅读器之前完成。
约束条件包括:
- 盒子以随机的顺序通过且其间的距离相同,传送带以每分钟5英尺的速度移动;
- CLSS软件以和传送带速度一致的时间间隔接受来自条形码阅读器的信息;
- 控制信号与分流器同步。
接口:条形码阅读器,分流器,PC等
三、影响估算的因素
软件项目管理过程开始于项目计划,在做项目计划时,重要的一项活动就是估算。
那么,影响估算的因素有哪些呢?
- 复杂性越高,估算的风险就越高。
- 项目的规模越大,开发工作量越大,估算的风险越高。
- 项目的结构化程度越高,进行精确估算的能力就能提高,而风险将减少。
- 历史信息的有效性也影响估算的风险。历史信息越有效, 总的风险就越少。
- 如果对软件项目的作用范围还不是十分清楚,或者用户的要求经常变更,也会增加估算的风险。
- 计划人员应当要求在软件系统的规格说明中给出完备的功能、性能、接口的定义。
四、软件项目资源
软件项目计划的第二个任务是对完成该软件项目所需的资源进行估算。
1、软件项目资源构成
(1) 最基本的、重要的资源——人员;
(2) 现成的用意支持软件开发的工具——硬件工具;
(3) 现成的用于支持软件开发的工具——软件工具(CASE);
(4) 可复用构件。
2、分析图
接下来对各构成要素进行一一分析。
3、人力资源
(1) 在考虑各种软件开发资源时,人是最重要的资源;
(2) 在安排开发活动时必须考虑人员的技术水平、专业、人数、以及在开发过程中对各阶段人员的需要;
(3) 对于一些规模较小的项目,只要向专家做些咨询,也许一个人就可以完成所有的软件工程步骤;
(4) 对一些规模较大的项目,在整个软件生存期中,各种人员的参与情况是不一样的。
以下通过一张图了解各阶段人员对软件生命周期的共享度。
4、硬件资源
硬件是作为软件开发项目的一种工具而投入的,分别包含以下三种类型:
(1)宿主机(Host)—— 软件开发时使用的计算机及外围设备;
(2)目标机(Target)—— 运行已经开发成功软件的计算机及外围设备;
(3)其它硬件设备 —— 专用软件开发时需要的特殊硬件资源;
5、软件工具
软件工程人员在软件开发期间使用了许多软件工具来帮助开发,这种软件工具集叫做计算机辅助软件工程(CASE)。分别包括:
(1) 业务系统计划工具集;
(2) 项目管理工具集;
(3) 支援工具 —— 文档生成工具、网络系统软件、数据库、电子邮件、通报板,以及配置管理工具;
(4) 分析和设计工具;
(5) 编程工具;
(6) 组装和测试工具;
(7) 原型化和模拟工具;
(8) 维护工具;
(9) 框架工具 —— 这些工具能够提供建立集成项目支撑环境(IPSE)的框架。
6、可复用构件
(1)可复用的软件资源,被称为构件。可复用构件分别包含:
- 成品(off-the-shelf)构件:已存在的构件,能够从第三厂商获得,被准备用于当前的项目,并已被完全确认。
- 具有完全经验的构件:当前项目成员在这些构件上有丰富的经验。
- 具有部分经验的构件:与当前项目相关,但需做实质性的修改;项目成员对此构件的经验有限。
- 新构件:为满足项目组的特定需要而专门开发的软件构件。
(2)使用可复用构件时,应考虑:
- 成品构件能够满足项目的需求 —— 采用!因为
低成本和低风险
。 - 具有完全经验的构件可以使用,但在项目计划中应反映出来 —— 修改和集成的风险可接受。
- 具有部分经验的构件使用时必须详细分析 —— 如果要大量的修改,所需的成本可能超过开发新构件的成本。
五、软件工作量与成本的估算
在软件成本和工作量的估算中,不确定因素非常大,包括人、技术、环境、政治等因素都会影响估算结果。
软件项目的估算能够通过一系列系统化的步骤,在可接受的风险范围内提供估算结果。
对于每一个可用的软件成本估算的选择,其效果好坏取决于用于估算的历史数据!
先用一张图了解软件工作量和成本的估算方法。
接下来讲解三种估算方法。
1、基于LOC估算工作量和成本
(1)估算步骤
- ①给出软件范围 —— 项目计划人员可对每一个分解的功能提出一个有代表性的估算值范围;
- ②进行功能分解 —— 利用历史数据或凭实际经验(当其它的方法失效时),对每个功能分别按最佳的、可能的、悲观的三种情况给出LOC或FP估计值 ,记作a、m、b;
- ③估算每一个子功能 —— 计算LOC或FP的期望值 E;
E=(a+4m+b)6E = \frac{(a+4m+b)}{6}E=6(a+4m+b) - ④计算总LOC数(∑) —— 所有子功能的总估算变量值除以相应于该估算变量的平均生产率度量得到项目的总工作量;
例如,若假定总的FP估算值是310,基于过去项目的平均FP生产率是 5.5 FP/PM,则项目的总工作量是:工作量 = 310/5.5 = 56 PM,即每个月需要56个人
- ⑤给出两个历史数据 ——
第一种:给出生产率和劳动率价格,可以算出工作量和成本;
第二种:给出生产率和每行代码成本,也可以算出工作量和成本。
下面通过一张图了解这两种方法分别如何计算出工作量和成本:
(2)引例
系统定义评审指明,软件是在一个工作站上运行,其接口必须使用各种计算机图形设备,包括鼠标器、数字化仪、高分辨率彩色显示器和激光打印机。在这个实例中,使用LOC做为估算变量。根据系统规格说明, 软件范围的初步叙述如下:
“软件将从操作员那里接收2维或3维几何数据,操作员通过用户界面与 CAD系统交互并控制它,这种用户界面将表现出很好的人机接口设计特性。所有的几何数据和其它支持信息保存在一个CAD数据库内。要开发一些设计分析模块以产生在各种图形设备上显示的输出。软件要设计得能被控制,并能与各种外部设备进行交互,外部设备包括鼠标器、数字化仪、激光打印机和绘图仪。”
从以上的例子可以得出:
①经过分解, 识别出下列主要软件功能:
- 用户界面和控制功能;
- 二维几何分析;
- 三维几何分析;
- 数据库管理;
- 计算机图形显示功能;
- 外设控制PC;
- 设计分析模块。
②可得到如下估算表:
功能 | 最佳值 a | 可能值 m | 悲观值 b | 期望值 E | 元/行 | 行/PM | 成本(元) | 工作量(PM) |
用户接口控制 | 1800 | 2400 | 2650 | 2340 | 14 | 315 | 32760 | 7.4 |
二维几何造型 | 4100 | 5200 | 7400 | 5380 | 20 | 220 | 107600 | 24.4 |
三维几何造型 | 4600 | 6900 | 8600 | 6800 | 20 | 220 | 136000 | 30.9 |
数据结构管理 | 2950 | 3400 | 3600 | 3350 | 18 | 240 | 60300 | 13.9 |
计算机图形显示 | 4050 | 4900 | 6200 | 4950 | 22 | 200 | 108900 | 24.7 |
外部设备控制 | 2000 | 2100 | 2450 | 2140 | 28 | 140 | 59920 | 15.2 |
设计分析 | 6600 | 8500 | 9800 | 8400 | 18 | 300 | 151200 | 28.0 |
总计 | 33360 | 656680 | 144.5 |
③从历史的基线数据求出生产率度量,即 行/PM 和 元/行。
④根据复杂性程度的不同,对各功能使用不同的生产率度量值。根据估算表可得:
成本 = LOC的期望值E 乘以 元/行;
工作量 = LOC 的期望值E 除以 行/PM;
因此可得,该项目总成本的估算值为657,000元,总工作量的估算值为每个月145人。
(3)基于LOC估算的相关计算
Question:
基于LOC估算某软件项目的工作量和人工成本,假设项目的子功能有三个,估算的LOC数分别为1000,2000,3000,项目的生产率为600LOC/PM,劳动力价格为6000元/PM,则项目总的LOC数、工作量、人工成本分别为多少?写出计算公式及计算过程。
Answer:
2、基于FP估算工作量和成本
(1)估算步骤
- ①给出软件范围;
- ②进行功能分解(无需很细);
- ③计算五个信息域计数值;
- ④计算总计算值(应考虑加权因子);
- ⑤回答14个问题,算出∑Fi (Fi为复杂度校正值) ;
- ⑥计算FP;
- ⑦给出两个历史数据,生产率(FP/PM)、人工价(元/PM);
工作量=总FP/生产率=PM;
成本=工作量x人工价=元
(2)引例
某项目有5个信息域计数和1个算法计数,如下图所示。假设已知该项目的两个历史数据,分别为:生产率为4FP/PM,人工价为3000元/PM,试计算出复杂度校正值∑Fi,工作量和成本的值。
测量参数 | 计数值 | 权重(加权因子) | 求和 |
输入数 | 40 | 4 | 160 |
输出数 | 25 | 5 | 125 |
查询数 | 12 | 4 | 48 |
文件数 | 4 | 7 | 28 |
外部接口数 | 4 | 7 | 28 |
算法 | 60 | 3 | 18 |
总计数值 | 569 | ||
复杂度调整因子 | 0.84 | ||
特征点 | 478 |
由上图可知:
- 复杂度调整因子为0.84,即0.65+0.01∑Fi=0.84,由此可计算出复杂度校正值∑Fi=19;
- 若要得到工作量,需先求功能点FP,即:FP=总计数值x(0.65+0.01∑Fi)=569x0.84=478FP;
- 工作量Efficiency=总FP生产率=478FP4FP/PM≈120PM工作量Efficiency = \frac{总FP}{生产率}=\frac{478FP}{4FP/PM}≈120PM工作量Efficiency=生产率总FP=4FP/PM478FP≈120PM
- 成本Cost=工作量×人工价=120PM×3000元/PM=360000元成本Cost = 工作量×人工价=120PM×3000元/PM=360000元成本Cost=工作量×人工价=120PM×3000元/PM=360000元
(3)基于FP估算的相关计算
Question:
基于FP估算某软件项目的工作量和人工成本,假设项目的输入数、输出数、查询数、文件数、接口数分别为59、20、10、5、2,加权因子取平均值4、5、4、10、7,14个问题的回答取值总和为15。那么该项目的总计数值是多少?项目的功能点FP又是多少?假设项目的生产率为16FP/PM,劳动力价格为6000元/PM,则工作量和人工成本分别为多少?写出计算公式及计算过程。
Answer:
写到这里,对基于LOC和FP的估算做个小结:
- 这两种类型的估算的基本思想都是,先计算出LOC和FP的值,然后根据组织生产率和每个劳动力价格(人工价)的历史数据,估算总成本和工作量。
- 如果在估算的时候,遇到估算差别很大时,一般有以下两种原因:①项目的范围未能被充分理解或被误解;②基于问题的估算技术中所使用的的生产率数据对于该应用是不合适的,或是太陈旧了,或是被无用了。
3、COCOMO Ⅱ模型估算
(1)COCOMO Ⅱ模型中项目估算的三个阶段
阶段 | 时间 | 功能描述(此阶段要做什么) |
应用组装阶段(Application Composition) | 早期、确定系统性能时 | ①利用应用点application point来进行估算规模;②利用原型来解决高风险问题。 |
早期设计阶段(early design) | 需求稳定,体系结构已建立时 | ①研究可选的体系结构和概念;②用功能点funtion point来做估算规模。 |
体系结构后阶段(post architecture) | 软件在构造中,知道更多系统信息时 | ①以FP、LOC作为估算单位。 |
补充说明应用点知识:
应用点,即对象点。一种间接的软件测量,其计算需要使用以下三个元素:
- 用户界面上的屏幕数screens;
- 报表数reports;
- 建造应用可能需要的构件数3GLcomponents。
(2)COCOMO Ⅱ模型估算步骤
- ①计算屏幕数、报表数和构件;
- ②计算对象点OP,即∑(三个计算值×加权因子);
- ③计算NOP=OP × (1-复用度) ;
- ④查表得到生产率参数的值PROD;
- ⑤工作量E=NOP/PROD;
- ⑥给出一个历史数据:人工价(元/PM);
- ⑦成本=E×人工价。
以下给出对象点和PROD的具体数值表:
图 不同类型对象的复杂度加权
复杂度加权 | |||
对象类型 | 简单 | 中等 | 困难 |
屏幕 | 1 | 2 | 3 |
报表 | 2 | 5 | 8 |
3GL构件 | 10 |
图 不同水平的开发者经验和不同开发环境成熟度下的生产率
因素 | 影响 | ||||
开发者的经验/能力 | 非常低 | 低 | 正常 | 高 | 非常高 |
环境成熟度/能力 | 非常低 | 低 | 正常 | 高 | 非常高 |
PROD | 4 | 7 | 13 | 25 | 50 |
(3)基于COCOMO Ⅱ模型的计算
Question:
使用COCOMO II模型来估算构造一个简单的ATM软件所需的工作量和人工成本(单位分别是人月和元),该软件产生11个屏幕(有3个简单,3个中等,5个困难),10个报表(有4个简单,6个困难),72个构件,复用度为20%,假设开发者的经验能力为高,环境的成熟度能力为低,劳动力价格为5000元/PM。则NOP、生产率能力PROD、工作量E和人工成本C分别为多少。写出计算公式及计算过程。
Answer:
六、写在最后
关于软件项目管理中的软件范围与估算就讲到这里啦!如有不理解或有误的地方也欢迎评论区评论或私信我交流~