有公司在做软件规模估算时,采用了经验法估计了代码行,又设置了难度系数,重用率,重用规模系数三个调整参数。如果初始估计规模为1KLOC,难度系数为1.1,重用率为20%,重用规模系数为50%,则调整后的规模为:1*1.1*(1-20%)+1*20%*50%=0.88+0.1=0.98KLOC。

我看到该估算方法后认为有些复杂,而且不好理解,有可能是做了无用功了,所以我想通过数据进行检验看看调整后的规模是否比初始的规模估计更准确,如果不如初始的规模估计更准确,则可以放弃三个调整系数。该公司A部门有11个历史项目的数据,有初始的规模估计、调整后的规模估计、以及实际规模见下表:

初始规模估计

难度系数

重用率

重用规模系数

调整后规模估计

实际规模

调整前-实际

调整后-实际

调整前离差平方和

调整后离差平方和

60

1.1

0%

0%

66

55

5

11

25

121

200

1.1

20%

100%

216

230

-30

-14

900

196

180

0.8

20%

100%

151.2

145

35

6.2

1225

38.44

100

0.8

0%

0%

80

75

25

5

625

25

80

0.7

0%

0%

56

80

0

-24

0

576

50

1.2

0%

0%

60

50

0

10

0

100

60

1.2

0%

0%

72

80

-20

-8

400

64

100

1.2

0%

0%

120

110

-10

10

100

100

240

1

0%

0%

240

260

-20

-20

400

400

230

1.3

0%

0%

299

270

-40

29

1600

841

100

1.3

0%

0%

130

110

-10

20

100

400

标准差

18

13

如何判断调整前与调整后估算的准确性呢?

1 在表格中增加了这么几列:

调整前-实际=初始规模估计-实际规模

调整后-实际=调整后规模估计-实际规模

调整前离差平方和=调整前-实际的平方

调整后离差平方和=调整后-实际的平方

2 在表格中计算两个统计量:

调整前离差的标准差=SQRT(调整前离差平方和/项目个数)=18

调整后离差的标准差=SQRT(调整后离差平方和/项目个数)=13

因为前者大于后者,所以调整前的估计准确性不如调整后的准确性高。

3 对调整前后的残差做箱线图对比:

可以看到调整后的箱体整体趋势更接近于0,也说明调整后比调整前更准确。

从箱线图中还可以观察到,调整前的规模估计大都比实际值偏小,估计偏乐观。

有意思的是,同样采用该方法的另外一个部门B的历史数据发现,在B部门内,大家估计的结果偏悲观。但是也是调整后比调整前更准确。

历史项目的度量数据没有证明我的假设,因此就姑且让客户坚持他们定义的估算方法,不做调整。

如何比较两种估算方法的准确性?相关推荐

  1. 基于python实现车辆测速两种的方法

    基于python实现车辆测速两种的方法 姓名:黄镜轩 院系:机电工程学院 班级:车辆工程1班 联系方式:QQ - 3326078070 本文参考了: 案例-使用python实现基于opencv的车辆识 ...

  2. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  3. R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况

    R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况 目录

  4. mysql workbench kernelbase.dll_电脑出现kernelbase.dll错误的两种解决方法

    KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...

  5. 使用定制的NSDictionary的方法,对NSArray进行排序(附:数组排序两种常见方法)

    NSArray中存放的是NSDictionary,可以使用策略的方法对NSDictionary进行定制,增加比较的方法.然后调用NSArray的sortUsingSelector方法对数组进行排序,这 ...

  6. Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同:

    Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同: 1. 相同点: a) 都是使用异步提交的方式: b) 默认都是使用POST方式来提交数据 ...

  7. java代码二进制转为十六进制_Java 中二进制转换成十六进制的两种实现方法

    Java 中二进制转换成十六进制的两种实现方法 每个字节转成16进制,方法1 /** * 每个字节转成16进制,方法1 * * @param result */ private static Stri ...

  8. python ioc di_Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法

    Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法 第一中方法:在xml文件中注入: (1)开源的轻量级的应用开发框架 特点:a.简化开发:b.解耦:c.集成: 原理对象与对象之 ...

  9. Json返回时间中出现乱码问题的两种解决方法

    Json返回时间中出现乱码问题的两种解决方法 参考文章: (1)Json返回时间中出现乱码问题的两种解决方法 (2)https://www.cnblogs.com/hanyinglong/archiv ...

最新文章

  1. eigen跟踪MILTracker
  2. 关于HTML5中Canvas的宽、高设置问题
  3. java 超时集合_确定性监视器脉冲/等待并在 生产环境 者 - 消费者集合中实现超时...
  4. 使用tableView崩溃
  5. (91)多人投票器(五人投票器)
  6. 【算法】插值查找算法
  7. 网卡vlan标签_硬核来了,VLAN揭秘!!!
  8. Python学习-logging
  9. 2022年华数杯数学建模
  10. xp系统打印机服务器win7连接不了,xp连不上win7的打印机,win7连接打印机
  11. 网络文化经营许可证这样办,省时又便捷!
  12. 网站木马修复网站漏洞修复方案
  13. 删除Windows10在语言栏出现“未知区域设置(qaa-latn)”
  14. c语言atol是什么缩写,C语言atol函数的可移植版本疑问
  15. 创建数据库报错--MySQL server is running with the --super-read-only option
  16. 动态使用element-plus 的图标
  17. urllib和urllib2区别
  18. Java编程专题思维导图
  19. Python excel提取表格信息整理到word中
  20. 使用Python辅助ArcGIS出图-使用ArcToolbox

热门文章

  1. We're sorry but *** doesn't work properly without JavaScript enabled. Please enable it
  2. SpringBoot返回首字母大写的参数对象
  3. bzoj1797 最小割唯一性问题
  4. 想知道华为手机电池是否正常,按下这几个数字就可以了,亲测有效
  5. 重写VueRouter的push|replace
  6. 狙击小米+高通?余承东为首款7nm麒麟980打Call!
  7. 值得领悟的小故事34个
  8. html5合并单元格边框线,table边框表头单元格空间合并等设置,
  9. matlab符号代入subs运算慢加速——使用matlabFunction函数
  10. matlab函数代入求值,matlab中,如何把带有符号的式子代入到一个函数中去?