『软件工程6』详解软件项目管理之软件范围与估算

软件项目管理——软件范围与估算

  • 一、软件项目计划
    • 1、目标
    • 2、步骤
  • 二、软件范围
    • 1、软件范围定义
    • 2、软件范围——引例
  • 三、影响估算的因素
  • 四、软件项目资源
    • 1、软件项目资源构成
    • 2、分析图
    • 3、人力资源
    • 4、硬件资源
    • 5、软件工具
    • 6、可复用构件
  • 五、软件工作量与成本的估算
    • 1、基于LOC估算工作量和成本
      • (1)估算步骤
      • (2)引例
      • (3)基于LOC估算的相关计算
    • 2、基于FP估算工作量和成本
      • (1)估算步骤
      • (2)引例
      • (3)基于FP估算的相关计算
    • 3、COCOMO Ⅱ模型估算
      • (1)COCOMO Ⅱ模型中项目估算的三个阶段
      • (2)COCOMO Ⅱ模型估算步骤
      • (3)基于COCOMO Ⅱ模型的计算
  • 写在最后

一、软件项目计划

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} E6a4mb

  • ④计算总LOC数(∑) —— 所有子功能的总估算变量值除以相应于该估算变量的平均生产率度量得到项目的总工作量;

    例如,若假定总的FP估算值是310,基于过去项目的平均FP生产率是 5.5 FP/PM,则项目的总工作量是:工作量 = 310/5.5 = 56 PM,即每个月需要56个人

  • ⑤给出两个历史数据 ——

    第一种:给出生产率和劳动率价格,可以算出工作量成本

    第二种:给出生产率和每行代码成本,也可以算出工作量成本

    下面通过一张图了解这两种方法分别如何计算出工作量和成本:
    基于LOC估算工作量和成本

(2)引例

系统定义评审指明,软件是在一个工作站上运行,其接口必须使用各种计算机图形设备,包括鼠标器、数字化仪、高分辨率彩色显示器和激光打印机。在这个实例中,使用LOC做为估算变量。根据系统规格说明, 软件范围的初步叙述如下

“软件将从操作员那里接收2维或3维几何数据,操作员通过用户界面CAD系统交互并控制它,这种用户界面将表现出很好的人机接口设计特性。所有的几何数据和其它支持信息保存在一个CAD数据库内。要开发一些设计分析模块以产生在各种图形设备上显示的输出。软件要设计得能被控制,并能与各种外部设备进行交互,外部设备包括鼠标器、数字化仪、激光打印机和绘图仪。”

从以上的例子可以得出:

①经过分解, 识别出下列主要软件功能:

  • 用户界面和控制功能;
  • 二维几何分析;
  • 三维几何分析;
  • 数据库管理;
  • 计算机图形显示功能;
  • 外设控制PC;
  • 设计分析模块。

②可得到如下估算表:

功能最佳值 a可能值 m悲观值 b期望值 E元/行行/PM成本(元)工作量(PM)
用户接口控制180024002650234014315327607.4
二维几何造型41005200740053802022010760024.4
三维几何造型46006900860068002022013600030.9
数据结构管理2950340036003350182406030013.9
计算机图形显示40504900620049502220010890024.7
外部设备控制2000210024502140281405992015.2
设计分析66008500980084001830015120028.0
总计33360656680144.5

从历史的基线数据求出生产率度量,即 行/PM元/行

根据复杂性程度的不同,对各功能使用不同的生产率度量值。根据估算表可得:

成本 = LOC的期望值E 乘以 元/行;

工作量 = LOC 的期望值E 除以 行/PM;

因此可得,该项目总成本的估算值为657,000元,总工作量的估算值为每个月145人。

(3)基于LOC估算的相关计算

Question:

基于LOC估算某软件项目的工作量和人工成本,假设项目的子功能有三个,估算的LOC数分别为1000,2000,3000,项目的生产率为600LOC/PM,劳动力价格为6000元/PM,则项目总的LOC数、工作量、人工成本分别为多少?写出计算公式及计算过程。

Answer:
基于LOC估算的相关计算答案

2、基于FP估算工作量和成本

(1)估算步骤

  • ①给出软件范围;

  • ②进行功能分解(无需很细);

  • ③计算五个信息域计数值;

  • ④计算总计算值(应考虑加权因子);

  • ⑤回答14个问题,算出∑Fi (Fi为复杂度校正值) ;

  • ⑥计算FP;

  • ⑦给出两个历史数据,生产率(FP/PM)、人工价(元/PM);

    工作量=总FP/生产率=PM;

    成本=工作量x人工价=元

(2)引例

某项目有5个信息域计数和1个算法计数,如下图所示。假设已知该项目的两个历史数据,分别为:生产率为4FP/PM,人工价为3000元/PM,试计算出复杂度校正值∑Fi,工作量和成本的值。

测量参数计数值权重(加权因子)求和
输入数404160
输出数255125
查询数12448
文件数4728
外部接口数4728
算法60318
总计数值569
复杂度调整因子0.84
特征点478

由上图可知:

  1. 复杂度调整因子为0.84,即0.65+0.01∑Fi=0.84,由此可计算出复杂度校正值∑Fi=19;

  2. 若要得到工作量,需先求功能点FP,即:FP=总计数值x(0.65+0.01∑Fi)=569x0.84=478FP;

  3. 工作量Efficiency=总FP生产率=478FP4FP/PM≈120PM工作量Efficiency = \frac{总FP}{生产率}=\frac{478FP}{4FP/PM}≈120PM EfficiencyFP=4FP/PM478FP120PM

  4. 成本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:

基于FP估算的相关计算答案

写到这里,对基于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的具体数值表:

不同类型对象的复杂度加权

复杂度加权
对象类型简单中等困难
屏幕123
报表258
3GL构件10

不同水平的开发者经验和不同开发环境成熟度下的生产率

因素影响
开发者的经验/能力非常低正常非常高
环境成熟度/能力非常低正常非常高
PROD47132550

(3)基于COCOMO Ⅱ模型的计算

Question:

使用COCOMO II模型来估算构造一个简单的ATM软件所需的工作量和人工成本(单位分别是人月和元),该软件产生11个屏幕(有3个简单,3个中等,5个困难),10个报表(有4个简单,6个困难),72个构件,复用度为20%,假设开发者的经验能力为高,环境的成熟度能力为低,劳动力价格为5000元/PM。则NOP、生产率能力PROD、工作量E和人工成本C分别为多少。写出计算公式及计算过程。

Answer:
基于COCOMO Ⅱ模型的相关计算答案

写在最后

创作不易,如果这篇文章对你有用,记得点赞收藏哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【翻译】.NET 5 Preview8发布

今天,.NET 5预览8发布了,对于.NET5.0的功能开发已经完成了,这必须要排除待处理的bug,预览8是最后一次预览版本。预计11月正式的.NET5.0版本发布之前还将发布两个正式之前的候选版本,这篇文章描述了.NET5.0版本中的一系…

7-1 页面置换算法--FIFO (50 分)(思路详解)

一:题目 先初始化页面大小,和物理块数。连续输入页面的逻辑地址,以“-1”作为结束标志,采用FIFO页面置换算法、固定分配局部置换分配策略。输出该页面的页号和页内位移,若该页不在内存,并且还有剩余的物理块&#xff…

7-2 页面置换算法--LRU (50 分)

一:题目(思路详解运行时错误解决) 先初始化页面大小,和物理块数。连续输入页面的逻辑地址,以“-1”作为结束标志,采用LRU页面置换算法、固定分配局部置换分配策略。输出该页面的页号和页内位移,若该页不在内存,并且还…

『软件测试3』八大典型的黑盒测试方法已来袭,快快接住!

文章目录一、等价类划分法1、定义2、等价类划分法步骤3、设计测试用例步骤4、案例:学生选修课程二、边界值分析法1、边界值分析法概述2、设计测试用例3、边界值设计原则三、错误推测法1、错误推测法概述2、错误推测法基本思想四、因果图设计法1、因果图设计法概述2、…

使用Jenkins来发布和代理.NetCore项目

Back toStudy!注:书接上文,上回《【CI/CD系列】使用Docker安装Jenkins》咱们说到了使用Docker镜像的方式,来建立Jenkins服务,用来持续集成和持续发布项目,但是上一篇文章有两个问题:01创建的容器不能操作和…

数据库课设(足球联赛管理系统)

一:前言 如果有关注博主的粉丝,可能会发现贴心杰又缺更好几天了,但是我是宠粉杰啊,怎么可能会忘了我的宝贝粉丝呢,只不过是临近期末,各种大作业课设如期而至,这几天我在写数据库课设&#xff0…

.NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中

前言笔者最近在开发和维护一个.NET Core 项目,其中使用几个非常有意思的.NET Core 相关的扩展,在此总结整理一下。EF Core 性能调优如果你的项目中使用了 EF Core, 且正在处于性能调优阶段,那么了解 EF Core 生成的 SQL 语句是非常关键的。那…

695.岛屿的最大面积(026)BFS

二:思路 1.这里的遍历数据方式为BFS广度遍历 2.当我们遇到一个‘1’的时候,我们就遍历他的左右上下(邻接点),如果是1那就入队,直到队列 为空为止。 3.我们记录每个岛屿的面积是采用 我们设置初始值为1,当每遇到一个邻…

『软件工程8』软件项目进度安排与跟踪,一招学会计算关键路径

项目进度安排与跟踪一、项目进度安排的定义及原则1、进度安排的定义2、进度安排的基本原则二、通信开销1、通信开销的定义2、通信路径计算3、案例分析三、工作量分配1、40-20-40规则2、工作量分配图例3、工作量分布推荐四、项目进度安排方法1、关键路径方法(CPM,Critical Path …

await,async 我要把它翻个底朝天,这回你总该明白了吧

一:背景1. 讲故事await,async 这玩意的知识点已经被人说的烂的不能再烂了,看似没什么好说的,但我发现有不少文章还是从理论上讲述了这两个语法糖的用法,懂得还是懂,不懂的看似懂了过几天又不懂了&#xff0…

栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!

详解栈在前端中的应用一、栈是什么二、栈的应用场景三、前端与栈:深拷贝与浅拷贝1、JS数据类型(1)js数据类型的分类(2)js数据类型的定义和存储方式(3)js数据类型的判断方式2、深究浅拷贝和深拷贝…

计网课设 模拟实验拓扑

一:前言 幸福的是考完两科了,抽出时间赶紧赶赶课设,两周遇到了好多事,开心的,烦心的,一堆堆的压过来,但庆幸自己迷失不太久,又能继续学习了 二:实验概览 1:实验拓扑图 2:实验要求…

快醒醒,C# 9 中又来了一堆关键词 init,record,with

一:背景1. 讲故事.NET5 终于在 2020-08-25 也就是前天发布了第八个预览版,这么多的预览版搞得我都麻木了,接踵而来的就是更多的新特性加入到了 C# 9 中,既然还想呆在这条船上,得继续硬着头皮学习哈,这一篇跟…

7-1 字母统计图 (10 分)(思路+详解)

一&#xff1a;题目 摆放在面前的是一小段英文文章。 afeng希望你能帮他统计一下每个小写字母出现的次数。 最后再以柱状图的形式(参照输出样例)输出出来。 输入格式: 输入第一行为一个正整数N(N<100)&#xff0c;表示文章的行数。 随后为N行文本。 输出格式: 由若干行组…

了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

js基础知识中的作用域和闭包一、作用域1、作用域、自由变量简介&#xff08;1&#xff09;作用域定义&#xff08;2&#xff09;作用域实例演示&#xff08;3&#xff09;自由变量定义&#xff08;4&#xff09;自由变量实例演示2、作用域链简介&#xff08;1&#xff09;作用域…

张朝阳一天只睡4小时?不知道,反正我每天都睡足7小时

这是头哥侃码的第213篇原创周末&#xff0c;一个很久没联系过的朋友突然在微信上发给我一个链接。我打开一看&#xff0c;原来是搜狐老板张朝阳近日发表的一个有关睡眠的神论&#xff0c;大致是说他每天只睡四小时&#xff0c;白天状态还特别好&#xff0c;每天员工到公司的时候…

Istio 1.7——进击的追风少年

2020 年 8 月 21 日&#xff0c;Istio 发布了 1.7 版本。除了介绍新版本的主要更新内容外&#xff0c;本文会重点分析 Istio 团队在产品更新策略上的激进态度和举措。是稳扎稳打做好向后兼容&#xff0c;带给用户所承诺的易用性&#xff1b;还是快刀斩乱麻&#xff0c;做进击的…

7-2 港口审查 (15 分)

一:题目 afeng是一个港口的海关工作人员&#xff0c;每天都有许多船只到达港口&#xff0c;船上通常有很多来自不同国家的乘客。 afeng对这些到达港口的船只非常感兴趣&#xff0c;他按照时间记录下了到达港口的每一艘船只情况&#xff1b;对于第i艘到达的船&#xff0c;他记…

【BCVP更新】StackExchange.Redis 的异步开发方式

有哪些习惯坚持LESS IS MORE,SIMPLER IS BETTER THAN MORE你一定会有很大的收获各种小问题&#xff1f;如果你之前用过Redis的话&#xff0c;肯定会使用过StackExchange.Redis&#xff0c;我之前很久就用过&#xff0c;在.netfw的时候&#xff0c;当时并发还比较小&#xff0c;…

map容器实现一对多

一&#xff1a;需求描述 我们希望一个数字或则其他字符串可以对应 一串数&#xff0c; #include<iostream> #include<map> #include<vector> using namespace std; int main(){map<int,vector<int> > m;map<int,vector<int> >:: i…