软件开发

软件开发工作量如何评估?

单位自己配备了一批软件开发人员,其他部门经常提开发一些业务系统方面的需求,但到底开发这个业务系统要多少人月,升级这个功能要多少人月,怎么评估。经常出现…
关注者
203
被浏览
271,077

24 个回答

软件开发成本估算过程可进一步细分为软件规模估算工作量估算成本估算确定软件开发成本等四个过程。

其中成本估算需要对直接人力成本、间接人力成本、间接非人力成本及直接非人力成本分别进行估算。

国家标准《GB/T 36964-2018 软件工程 软件开发成本度量规范》中建议的软件开发成本估算基本流程如下图所示:



国家准中的四个估算过程,层层递进,逐步细化,最终达到科学、一致的成本估算。

一、软件规模估算

通常情况下,规模估算是软件成本估算过程的起点。

估算规模是后续计算软件项目的工作量、成本和进度的主要输入,是项目范围管理的关键,因此,在条件允许的情况下,应首先进行规模估算。

在规模估算过程中,需要注意以下情况:

1.在规模估算开始前,应根据可行性研究报告或类似文档明确项目需求及系统边界。项目需求除包含最基本的业务需求外,还应进行初步的子系统/模块划分,并对每一子系统或模块的基本用户需求进行说明,以保证可以根据项目需求进行规模预估。

2.依据项目特点和需求详细程度不同,通常估算人员在选择估算方法时应采用纳入国际标准的功能点方法进行功能规模估算,在适用IFPUG或NESMA方法时,可以根据需求的粒度和管理需要,选择预估功能点方法、估算功能点方法或者详细功能点方法。

3.若当前的项目需求极其模糊或不确定,可不进行规模估算,而直接采用类比法或类推法估算工作量和成本。

二、工作量估算

在完成规模估算后,应当开展工作量估算工作,若当前项目未开展规模估算,也可直接启动工作量估算工作。

工作量估算时,可采用方程法、类比法、类推法、功能点法:

方程法:即基于基准数据建立参数模型,通过输入各项参数,确定估算值。

类比法:即将待估算项目的部分属性与类似的一组基准数据进行比对,进而确定估算值。

类推法:即将待估算项目的部分属性与高度类似的一个或几个已完成项目的数据进行比对,并进行适当调整后确定估算值。

功能点法:从用户视角出发,通过量化系统功能来度量软件的规模,这种度量主要基于系统的逻辑设计。功能点规模度量方法在国际上的应用已经比较广泛,并且已经取代代码行成为最主流的软件规模度量方法。

在开展工作量估算的过程中,需要注意以下情况:

1.当需求极其模糊或不确定时,如果此时具有高度类似的历史项目,则可直接采用类推法,充分利用历史项目数据来粗略估算工作量。

2.当需求极其模糊或不确定时,如果此时具有与本项目部分属性类似的一组基准数据,则可直接采用类比法,充分利用基准数据来粗略估算工作量。

3.对于规模估算已经开展的项目,可采用方程法,通过输入各项参数,确定待估算项目的工作量。若客户或高层对项目的工期有明确的要求时,在采用方程法估算工作量时,工期要求有可能是方程的参数之一。

4.为追求估算的准确性,建议在条件允许的情况下,可采用两种估算方法,对估算结果进行交叉验证,若估算结果差别不大,可直接使用两种估算结果的平均值或以某种估算结果为准,若差别较大,需进行差异分析。

5.工作量的估算结果宜为一个范围而不是单一的值。

三、成本估算

在获得了工作量估算结果后,可采用科学的方法进行成本估算。

在成本估算过程中,应需要注意的情况:

1.类比法和类推法,同样适用于需求极其模糊或不确定时的成本估算;

2.间接成本是否与工作量估算结果相关取决于间接成本分摊计算方式。在绝大多数组织,项目周期越长,项目组成员越多,其分摊的间接成本就越高,此时项目的间接成本与工作量估算结果直接相关;

3.直接非人力成本通常与工作量估算结果无关,宜单独分项测算;

4. 成本估算结果,也通常为一个范围,而不是单一的值。

四、确定软件开发成本

在《软件工程 软件开发成本度量规范》中,将软件开发成本分为四类,主要是为便于对成本构成(即哪些成本属于开发成本,哪些不属于开发成本)进行清晰界定。

而在实际确定软件开发成本时,通常并不是分别测定四类成本,加和后获得总成本,而是通常采用以下两种方式确定总成本:

1.根据人力成本费率及工作量估算直接人力成本和间接成本之和,再加上直接非人力成本,获得总成本;

2.根据规模综合单价和软件规模,测算出直接人力成本和间接成本之和,再加上直接非人力成本,获得总成本。

在进行软件的规模、工作量、成本估算时应遵循以下原则:

1.在规模估算时,应根据项目特点和需求的详细程度选择合适的估算方法;

2.充分利用基准数据,采用方程法、类比法或类推法,对工作量和成本进行估算;

3.工作量和成本的估算结果宜为一个范围值;

4.在进行成本估算时,如有明确的工期要求,应充分考虑工期对项目成本的影响,可以根据项目实际情况以及工期对项目的影响程度,对成本的估算结果进行调整;

5.成本估算过程中宜采用不同的方法分别估算并进行交叉验证。如果不同方法的估算结果产生较大差异,可采用专家评审方法确定估算结果,也可使用较简单的加权平均方法;

6.在软件项目的不同场景下(如预算、招投标、项目计划和变更管理等)采用国家标准时,相关要求见国家标准中附录A。


总结:推荐使用功能点法,你具备一定的专业知识,看一下国标和FPA(功能点分析)方法,很快就能算出一个大致结果,按当地的人力成本,倒推人月就行了。

编辑于 2021-11-11 16:37

  1、需求确定的情况很少,因为客户的需求总是在变,即使确定下来,验收的时候也会提出新的问题,这个要靠项目经理沟通,用户当前的问题在这个版本中解决还是下期合同来做。因此来说,需求大体确定以后,拆分子系统组成---子系统的组成模块--细分模块组成,这个是相对粗粒度的,然后就要考虑你手头队伍对细分模块的开发实现能力,大体就知道工作量了,如果不赶工期,时间要放长,软件开发,没有一帆风顺的,肯定会有很多问题,简单来说就是常见的需求变更。

  2、评估成员工作量,首先要了解队伍组成,哪些人规划流程清晰,哪些人对技术攻关能力更好,哪些人适合测试,哪些人编码快速,哪些人对数据库精通,哪些人对界面布局更擅长,哪些人有技术的同时更善于沟通。所以通常都是更善于沟通的做组长,及时把流程清晰的告诉组员,反馈每个组员的工作进度,协同组员进度并决定何时由何人做技术攻坚,何时组织测试。

  3、项目完成以后就好统计了,每个小组的代码行数,实现的功能模块数量,供其他小组调用的模块,用时多少天,涉及多少领域等,其实这个统计不能说a组完成项目的40%,b组60%这样,比较合理的应该是在某个方面,各个小组的组成比例的表格,然后有个小组工作的总结比较合适。如代码统计,a组2w行,占40%,b组3w,占60%。 模块数量:a组6个,占60%,b组4个占40%,并附模块结构的说明。当然,各个公司的管理不一样,统计方式不一样,反正一个原则就是尽量兄弟们多说点好话,因为一个软件做成,每个环节都不能差的,再好的汽车,如果没有一个很普通的小小铁板当刹车踏板,你敢开吗。

发布于 2019-04-26 17:28

有些客户就是喜欢不停然后别人追着的


前年的一个客户要做一个小区管理系统,主要就是小区出入管理,物业啥的管理,各业主之间的交流,还有一个物品交换的平台,客户呢做这套系统找小区入驻,大概就是这么一个小程序。


当时报价是5万的,我觉得客户挺好聊的,隔一两个月我又找他问项目开始了没闲聊的,经过两三年的争斗,客户终于说最近开始落实了。


虽然金额不大,但是也不能放弃哈哈哈坚持就是胜利✌

发布于 2024-05-13 14:04

前言

我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。

LeetCode 算法到目前我们已经更新了 58 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。

不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。

难度水平:中等

1. 描述

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

2. 示例

示例 1

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2

输入:n = 1
输出:[[1]]

约束条件:

  • 1 <= n <= 20

3. 答案

class SpiralMatrixII {
    func generateMatrix(_ n: Int) -> [[Int]] {
        guard n > 0 else {
            return [[Int]]()
        }

        var num = 1
        var res = Array(repeating: Array(repeating: 0, count: n), count: n)

        for layer in 0..<n / 2 {
            let start = layer
            let end = n - layer - 1

            // top
            for i in start..<end {
                res[start][i] = num
                num += 1
            }

            // right
            for i in start..<end {
                res[i][end] = num
                num += 1
            }

            // bottom
            for i in stride(from: end, to: start, by: -1) {
                res[end][i] = num
                num += 1
            }

            // left
            for i in stride(from: end, to: start, by: -1) {
                res[i][start] = num
                num += 1
            }
        }

        // handle the center one
        if n % 2 != 0 {
            res[n / 2][n / 2] = n * n
        }

        return res
    }
}
  • 主要思想:从顺时针开始,填充数字,记住处理中间的一个。
  • 时间复杂度: O(n^2)
  • 空间复杂度: O(1)

该算法题解的仓库: LeetCode-Swift

点击前往 LeetCode 练习

关于我们

我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。

发布于 2023-08-29 19:43

你是干嘛的?项目经理都说4人月了,你跟着瞎掺和什么?

你们单位到底谁说了算?

我们一般都是把详细计划做出来,然后每个小计划再去讨论到底花多少时间,工作量在哪里,难点在哪里。

建议题主 找找软件工程方面的书看看。

手机快速回复,恕我不发链接。

发布于 2014-11-03 09:19

一个工作或者是项目的工作量的评估,会牵涉到的因素确实比较多。根据我的经验,罗列几种因素,比如使用的方法或者工具、开发者的熟悉程度、以及(部门之间的)利益关系、对项目的理解评估人员的个性。基于各种因素考量最后出现的工作量评估会有比较大的区别。

1.使用的方法或者是工具

对与一个项目,A有些现成的模块,B需要重新开始搭建,A和B对完成时间的评估自然不一样。

或是对于开发一个网站,假设合理的工作量是,做前台展示页面需要1个月,后台管理需要1个月。A会评估为1个月,等前台上线之后,再同步开始做后台管理。B可能会认为需要2个月,B认为前后台都完成,才是工作完成。

2.开发者的熟悉程度

这个容易理解,如果是一般对语言或是技术掌握不熟悉的人,花费的时间和返工的时间、沟通的时间自然就要长一点

3.(部门之间的)利益关系

公司之间的外包项目,服务方就倾向于时间长一点,考虑的因素是假设用户需求会有一部分变化或者希望从中多賺钱。公司的部门之间也是类似,营销部门总是希望越快越好,但是开发部门总是认为营销部门没有更早提出需求等等。

4.对项目的理解或者评估人员的个性

同样一个项目,类似微信,如果1000个用户数和1千万的用户数,做法上会有非常大的区别。

发布于 2014-11-17 13:56

  在当今数字化时代,APP已经成为人们生活中不可或缺的一部分。对于内蒙古草原来说,开发一款具有地方特色的APP,不仅能为当地特色产业的发展提供新的动力,也能够通过数字化的方式,将传统草原文化传承下去并推广到更广泛的受众群体中。

  一、内蒙古APP开发的意义

  内蒙古APP的开发,具有重要的意义:

  推广草原文化:通过APP,可以向更多人介绍内蒙古草原的文化、历史和特色产业,推动草原文化的传承和发展。

  促进旅游发展:APP可以提供旅游路线推荐、酒店预订、特色美食介绍等服务,吸引更多游客前来内蒙古旅游,推动当地旅游产业的发展。

  带动相关产业:APP可以与内蒙古的特色产业相结合,如草原畜牧业、手工艺品制作等,为相关产业带来更多的商机和销售渠道。

  二、内蒙古APP开发的技术实现

  在开发内蒙古APP时,需要考虑以下技术实现:

  前端开发:前端页面应采用响应式设计,适应不同屏幕尺寸的设备。前端开发语言可选用HTML5、CSS3、JavaScript等。

  后端开发:后端服务器可选用Node.js、Python等语言编写,数据库可选用MySQL、MongoDB等。

  数据库设计:数据库设计应考虑到用户信息、景点信息、酒店信息等重要数据,建立相应的数据模型。

  API接口设计:为了实现各种功能,如景点信息查询、酒店预订等,需要设计相应的API接口。

  三、内蒙古APP开发的流程

  在开发内蒙古APP时,需要遵循以下流程:

  需求分析:明确APP的功能需求、目标用户和业务逻辑。

  设计阶段:根据需求分析结果,进行UI设计、交互设计以及页面布局。

  编码阶段:根据设计稿进行前端、后端开发,并实现相应的功能模块。

  测试阶段:进行功能测试、性能测试、兼容性测试等,确保APP的稳定性和可用性。

  上线阶段:将APP发布到各大应用商店,供用户下载使用。

  四、内蒙古APP开发的注意事项

  在开发内蒙古APP时,需要注意以下事项:

  安全性:确保用户信息和数据的安全性,防止数据泄露和黑客攻击。

  可维护性:采用易于维护的代码结构和设计模式,保证APP的可维护性。

  跨平台性:考虑不同操作系统的兼容性,以实现跨平台推广。

  用户体验:优化交互设计和页面布局,提高用户的满意度。

  与传统文化的结合:在开发APP时,要注意与内蒙古传统文化的结合,既要满足现代人的需求,也要传承和弘扬传统文化。

  五、未来展望

  随着移动互联网的持续发展,内蒙古APP开发的未来市场前景广阔。通过深入挖掘地方特色资源,创新功能模块,优化用户体验,内蒙古APP将在旅游、文化等领域发挥更大的作用,推动内蒙古草原数字化转型,助力地方经济发展。同时,也将为更多人了解和体验内蒙古草原文化提供新的途径,连接传统与现代,让更多人领略到内蒙古草原的独特魅力。

发布于 2023-09-04 17:35

软件项目工作量和成本估算一般分专家经验法、WBS法、类比类推法、参数方程法。而专家经验法和WBS法都是基于人的经验的一种定性的方法。好处是这种方法简单可行,但是存在的问题也比较明显:1、方法不可复制,对专家的依赖性很强; 2、受专家局限性影响,针对同一个项目不同的专家给出的数额可能相差几倍; 3、估算过程不可见,基本是个黑盒。4、估算结果经不起推敲,缺乏科学性,完全依赖于专家个人的经验。类比类推法依赖于过去有过同类项目的数据,所以局限性比较强。我推荐的是参数法。工业和信息化部2013年发布的标准《软件研发成本度量规范》主要也是这种方法。第一步,按照国际相关标准度量软件项目的规模并根据项目属性对规模进行调整;第二步,根据行业基准数据发布的生产率(功能点耗时率)或者本组织的历史数据,并根据项目特点选取调整参数,计算出工作量(人月),第三部,用工作量乘以人月费率得出软件开发成本。目前一直采用这种方法。但是这种方法要自己学习还是有一定难度。有专门的培训,你可以去了解一下。软件工程造价师的培训。还有一本公开出版物《软件研发成本度量规范释义》,有兴趣可以去买下,各大网店也都有卖,我买过,还挺不错的。

发布于 2017-05-26 09:34

软件任务评估,我认为用时间来评估是不靠谱的。原因,非常简单,给你举一个例子,两个相同量的任务,如果你先评任务A,你评了一个人月,最后你只花了半个月,那么你评B的时候,你就会估算为半个月而不是一个月,你会发现,这样算下来你的速度不是增加了,而是减少了。之前你用半个月完成了一个月的工作,而现在你用半个月完成半个月的工作,速度下降了。这样会导致一个状况,就是开发人员在评估的时候,她他会尽量把时间往长了估,以体现他的高效,然而还没有办法来约束,比如通过delphi法。因为每个人对一个任务的完成时间的想法都是非常不同的且无法达成一致。你认为一个月,他认为半个月,还有人认为是两个月,还不能说别人的想法是错的。

有一个很好用的技术叫 故事点 story point,它是通过对比的方式,来评出任务的难度大小,完全不去考虑开发时间,只是从体量上和需要付出的资源上去考虑一个任务的大小。它没有单位,是一个相对值。在最开始我们可以找一个比较小的任务,大约大家都认为1/2天可以完成的任务,把它的故事点定为1,然后用其他任务去跟这个任务做比较,如果觉得其他的任务是这个任务难度的两倍,那么点数就是2,吐过是3倍,就是3,如果是5倍,就是5点。用费布纳奇数列来表示。

想要上手这样的评估方法,是需要适应一段时间的,努力让自己不去思考一个任务的开发时间,而是从它的难度和体量上去考虑。对任务进行评估的时候,最好采用团队的方式,就是大家一起来评,然后用delphi法或者平均数的方法计算出点数。

根据我这些年的经验来看,这个方法非常准确。通过点数以及开发时间,可以计算出开发人员的速度,再用这个速度去推未开发任务的时间,基本上都是准确的。

发布于 2020-06-04 18:58

这是个专业活,因为非标。和评估人员经验和水平、开发团队水平、用户软件期望等均有很大关系。还有和用户的认知也有极大关联(比如由于专业限制,用户可能无法理解一个简单的站内搜索和baidu/google搜索的区别)。第3方评估 dev.hireview.cn可试试,不过私以为对于过于复杂的需求,或是用户自己还不知道要做什么的,就不太合适了:)

发布于 2020-10-10 16:56

“你那个18W的单子合同签了没?你外包给我吧,我给你5W”收到一条私信,内容是这样的,给我气笑了,上次说了那个18W的软件定制开发的项目之后,很多人都说我这个价格是白菜价,根本不赚钱的,技术工资都不够,有时候我都疑惑,到底是谁说的价格太低,又是谁认为价格太高?是不是程序员都嫌价格太低,而客户都嫌价格太高,也就是说收钱的觉得价格太低了,出钱的觉得价格太高了。

软件开发的价格一直以来都是大家关心的问题,而没有人正面的去说到底是什么费用才合适,我认为软件开发的价格,首要考虑的是客户的预算,比如客户预算10W,提出了自己的想法,但是销售觉得你这个功能得100个W,那客户一听觉得我这个创业还没开始就结束了。

因为每个人对于消费,他都是有自己的预算的,跟买车买房一样,我不知道这个房子多少钱,但我肯定有自己的规划和想法,比如我喜欢5层的别墅,但是我的预算只够买个平层,作为软件开发公司,不可能答应给客户5层别墅,最后因为预算低了,给一个茅草屋,这样就是忽悠。

我认为第一步是给客户分析他的功能想法,将他的每一个想法拆解开,然后分析每个功能会涉及多少的难点,或者说如果预算只有10W,那再进一步的将功能提出来,把这个软件的主体功能来做第一期,然后再计划上第二期或者第三期,在签合同之前,把这些东西都清晰明确的告知客户,以后开发也好,不开发也好,根据他自己的情况和运营状态来决定,而且功能和费用在前期都计划过了,这样后期也不会有误会,而且市场是瞬息万变的,尤其是互联网行业变化是非常多的,一次性的投入太大的成本和太多的功能,有可能在市场并不认可,这样就增加了前期的创业负担。

发布于 2022-12-14 14:43

拆分:

方案很简单,负责庞大的东西是无法评估过工作量的。唯一的办法就拆分,洗到每个功能点,程度是能给出时间。

然后汇总统计

当然还跟团队的技术有关。

发布于 2016-10-19 14:30

将系统按模块划分,每个模块需要多少时间,加上之前沟通的时间和测试、实施的时间,综合在一起的时间多算上30%,是系统总时间。人员水平有高低,按平均算。

如果有技术难点和需求变更,还多需要时间

发布于 2015-05-07 16:17

在不同阶段,可能有不同的评估方式

在投标及方案阶段,估工作量更多比较倚重个人经验或历史估算法(有类似的参考项目),更多是基于粗的工作范围去评估。这个工作量评估结果是为了支撑售前用的

在项目立项后的计划阶段,工作量评估会基于前面工作范围分解出的wbs进行评估,同时考虑deadline、技术难点、需求变更风险等等因素。

在实际开发过程中,工作量评估还需要根据多种实际情况随时使用,不同的开发模式或开发模式也是影响工作量评估的因素之一

发布于 2016-06-12 13:29

甲方计算程序员的工作量和研发成本可以通过以下几个步骤进行:


1. 确定工作量估算方法:

- 功能点估算:根据软件的功能需求来估算工作量。

- 代码行估算:根据预期的代码行数来估算工作量。

- 经验法估算:基于历史项目数据和类似项目的经验来估算工作量。


2. 考虑人员能力和角色差异:

- 根据不同角色(如程序员、高级程序员、系统分析员等)的工作效率和专业能力,调整工作量估算。

- 例如,高级程序员的工作量可能是标准工作量的 1.5 倍,而项目管理人员的工作量可能是标准工作量的 3 倍。


3. 考虑项目特性和复杂度:

- 项目的规模、复杂度、技术难度等因素都会影响工作量的估算。

- 使用复用系数(τ)来调整工作量,如果项目可以复用现有的组件或模块,可以减少工作量。


4. 考虑间接成本和直接成本:

- 间接成本(如管理成本、设施成本等)与工作量估算结果相关,需要根据项目周期和团队规模进行分摊。

- 直接成本(如人力成本、设备成本等)直接与工作量相关,需要单独计算。


5. 进行成本估算:

- 在获得工作量估算结果后,采用科学的方法进行成本估算。

- 考虑类比法和类推法,特别是在需求不明确时的成本估算。


6. 进行交叉验证和差异分析:

- 如果条件允许,采用两种估算方法对结果进行交叉验证。

- 若估算结果差别较大,需进行差异分析,找出原因并调整估算。


7. 考虑风险和不确定性:

- 设置风险系数来考虑项目执行过程中可能遇到的不确定性和风险。

- 根据项目特性和企业能力,合理设置风险系数。


通过上述步骤,甲方可以较为准确地计算出程序员的工作量和研发成本。重要的是要结合项目的具体情况,灵活运用不同的估算方法和工具,以提高估算的准确性和可靠性。

发布于 2024-04-05 11:25