<转>软件项目估算之代码行估算方法

简介:
现在软件在大多数基于计算机的系统中已成为最昂贵的部分,如果 软件成本估算的误差很大,就会使盈利变成亏损。

  软件项目估算是一种解决问题的形式,在多数情况下,要解决的问题非常复杂,想一次性整体解决比较困难。因此,对问题进行分解,把其分解成一组较小的接近于最终解决的可控的子问题,再定义它们的特性。

  估算技术一般有代码行(LOC)和功能点(FP)估算法,这是两种不同的估算技术,但有许多共同特性。项目计划人员首先给出一个有界的软件范围的叙述,再由此尝试着把软件分解成一些小的可分别独立进行估算的子功能。然后对每一个子功能估算其LOC或FP(即估算变量)。接着,把基线生产率度量用做特定的估算变量,导出子功能的成本或工作量。将子功能的估算进行综合后就能得到整个项目的总估算。

  LOC或FP估算技术对于分解所需要的详细程度是不同的。当用LOC作为估算变量时,功能分解是绝对必要的且需要达到很详细的程度。而估算功能点所需要的数据是宏观的量,当把FP当做估算变量时所需要的分解程度可以不很详细。LOC是直接估算的,而FP是通过估计输入、输出、数据文件、查询和外部接口的数目,以及复杂性校正值间接地确定的。除去所用到的估算变量,项目计划人员必须对每一个分解的功能提出一个有代表性的估算值范围。利用历史数据或凭实际经验,计划人员对每个功能分别按乐观的、可能的、悲观的三种情况给出LOC或FP估计值。

  为了反映开发特性的影响,应当随时修正平均生产率。

  1 LOC(Lines of Code,代码行)估算代码尺寸

  把项目划分为若干个功能,分别计算每个功能的代码长度,所有功能代码行之和即项目的代码长度。

  LOC估算表包括:

  每个功能的代码长度估算值=(乐观值+4*可能值+悲观值)/6

  估算工作量=代码总估算长度/估算生产率

  估算总成本=日薪*估算工作量

  估算行成本=估算总成本/估算代码长度

  估算生产率由经验获得

  2 FP(功能点)估算代码尺寸

  项目的功能点数是几个测量参数(用户输入数、用户输出数、用户查询数、文件数、外部接口数)的功能点之和。

  用户输入数:计算每个用户输入,它们向软件提供面向应用的数据。输入应该与查询区分开来,分别计算。

  用户输出数:计算每个用户输出,它们向软件提供面向应用的信息。这里,输出是指报表、屏幕、出错信息,等等。一个报表中的单个数据项不单独计算。

  用户查询数:一个查询被定义为一次联机输入,它导致软件以联机输出的方式产生实时的响应。每一个不同的查询都要计算。

  文件数:计算每个逻辑的主文件(如数据的一个逻辑组合,它可能是某个大型数据库的一部分或是一个独立的文件)。

  外部接口数:计算所有机器可读的接口(如磁带或磁盘上的数据文件),利用这些接口可以将信息从一个系统传送到另一个系统。

  FP估算表包括:

  每个测量参数的估算FP计数=估算值*加权因子

  项目估算FP=各参数FP计数之和*复杂度调整因子

  估算生产率由经验获得

  估算工作量=项目估算FP/估算生产率

  估算总成本=日薪*估算工作量

  单个FP估算成本=估算总成本/估算FP

 

本文转自灵动生活博客园博客,原文链接:http://www.cnblogs.com/ywqu/archive/2010/02/22/1671092.html ,如需转载请自行联系原作者

   

相关文章
|
9月前
|
安全 UED
HTTP 代理 IP 使用中的速度与安全性的权衡
随着科技和互联网的发展,越来越多企业使用代理服务。本文介绍了用户使用HTTP代理IP后体验感变差的几个原因,包括延迟增加、带宽上限、服务器负载高、数据包丢失、安全性问题和兼容性问题。希望这些信息能帮助用户解决问题。
175 1
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于YOLOv8的PCB缺陷检测识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目基于YOLOv8实现PCB缺陷检测,提供一站式解决方案。包含完整训练代码、标注数据集、预训练权重及PyQt5图形界面,支持图片、文件夹、视频和摄像头四种检测模式。项目开箱即用,适合科研、工业与毕业设计。核心功能涵盖模型训练、推理部署、结果保存等,检测类型包括缺孔、鼠咬缺口、开路、短路、飞线和杂铜。项目具备高性能检测、友好界面、灵活扩展及多输入源支持等优势,未来可优化模型轻量化、多尺度检测及报告生成等功能。
基于YOLOv8的PCB缺陷检测识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
|
Docker 容器 Linux
幻兽帕鲁存档迁移问题心得_告别存档丢失_进入就掉线
你是不是也遇到了存档文件迁移后,还是让你创建新角色,或者是迁移后没几秒就掉线,我也遇到了一样的问题,花了好半天终于解决了,这里记录分享一下。
8242 4
幻兽帕鲁存档迁移问题心得_告别存档丢失_进入就掉线
|
消息中间件 NoSQL 数据处理
如何进行实时数据处理:技术深度剖析
【8月更文挑战第25天】实时数据处理是现代企业不可或缺的能力之一,它要求系统具备高吞吐量、低延迟、高可用性和可扩展性。通过合理的架构设计、技术选型和持续优化,可以构建出满足业务需求的实时数据处理系统。未来,随着技术的不断进步和应用场景的不断拓展,实时数据处理将在更多领域发挥重要作用。
|
存储 监控 Java
深入剖析堆和栈的区别及其在内存管理中的影响
深入剖析堆和栈的区别及其在内存管理中的影响
|
前端开发 UED 开发者
神秘的 CSS 属性 “position: sticky” 究竟有何魔力?带你彻底理解粘性定位的奇妙世界!
【8月更文挑战第20天】在前端开发中,CSS的粘性定位(`position: sticky`)是一种结合了相对与固定定位优点的强大工具。它使元素能在特定条件下相对定位,达到指定阈值时转为固定定位,非常适合制作“吸顶”导航栏等。例如,设置`position: sticky; top: 0;`能让导航栏滚动至顶部时固定显示。此特性不仅限于导航栏,还可应用于侧边栏等,增强布局灵活性与用户体验。尽管如此,仍需注意不同浏览器间的兼容性和可能的布局冲突。
469 0
|
JavaScript Java 测试技术
基于微信小程序的小说阅读系统的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的小说阅读系统的设计与实现(源码+lw+部署文档+讲解等)
265 0
|
监控 安全 网络虚拟化
|
机器学习/深度学习 监控 PyTorch
PyTorch模型训练:优化器与损失函数的选择
【4月更文挑战第17天】PyTorch中的优化器(如SGD, Adam, RMSprop)和损失函数(如MSE Loss, Cross Entropy Loss)对模型训练效果有显著影响。优化器选择应基于任务复杂度和数据规模,SGD适合简单任务,而Adam和RMSprop适用于复杂情况。损失函数选择依赖于任务类型,MSE Loss用于回归,Cross Entropy Loss用于分类。实践中,应尝试不同组合,调整学习率,监控训练过程,并使用验证集优化模型。
|
编解码 移动开发 算法
分享177个安卓游戏源码,总有一款适合你
分享177个安卓游戏源码,总有一款适合你
1519 0