阅读更多

10顶
1踩

研发管理

原创新闻 为什么项目估算偏差如此之大?

2013-09-16 17:11 by 副主编 wangguo 评论(21) 有14009人浏览
在软件开发过程中,估算是一个非常重要的环节,对于项目计划、进度控制等都具有重要的意义。但是估算也是一个比较难的“技术活”,因为是“估”,所以往往会存在一些偏差,而这些偏差对于一个项目来说,有时可能会导致多花费一些不必要的金钱,还有可能影响公司的声誉和员工的积极性。

而哪些因素会导致估算偏差呢?开发者Alex E. Fish给出了以下提示。

没有充分考虑需求

如果你没有充分考虑到所有的需求,那么估算一个任务将花费多长时间是毫无意义的。更多的需求意味着更复杂的实现,这当然也需要更多的时间来完成。

估算了测试时间,但没有估算修复时间

估算应该考虑到所有的测试时间以及修复bug的时间。单元测试、BDD(Behavior Driven Development,行为驱动开发)测试、测试人员进行手工测试,这都是需要花费时间的。并且,开发人员查找和修复bug同样也需要时间。更复杂的任务有可能会包含更多的bug,这意味着需要花费更多的时间来跟踪和修复它们。

假定开发者每天8小时都在编码

就算开发者每天上班8个小时(不加班情况下),但是这不代表8个小时都在编码,其他一些琐事往往会令生产率大大降低,比如会议、电子邮件、同事之间的IM消息、询问问题等。开发者从工作中断恢复到工作状态,往往也需要15分钟时间。有些时候,开发者一天只有2个小时的时间用于编码。

按天估算,没有按小时估算

所有的任务都应该被分解成2~16小时的块任务。这是一个很好的规则,可以让你独立地看待每个任务,并能够把所有因素都考虑在内,减少估算偏差的机会。

让非项目人员来估算

应该由参与编写软件的开发者们来进行估算。他们可以根据自身经验、开发速度对项目有一个更准确的把握。这也避免了由于A设置的进度过快,而导致B被追究责任。

忘记过去

George Santayana曾说:“忘记过去的人注定要重蹈覆辙。”如果这不是你的第一个项目,那么最好回头看看过去的项目。查找你以前曾参与过的同一领域中的类似规模/要求的项目,并将它作为一个参考点。

忽略停工期

如果项目是一个长期项目,或者开发者在夏季需要有一个假期,那么在估算时也应该考虑在内。必要时,考虑设置一个适当的缓冲期。

过于确切

将项目估算在一个确切的期限内或小时数内是不现实的,这也是无法实现的,最好的办法是估算一个范围,包括最好的情况下、最有可能的情况下、最坏的情况下的范围。

总结:要认真看待估算

估算是一个应该认真对待的工作,也是每一个开发者必备的技能。你和你的同事都应该掌握并进行实践。一个好的估算的做法是人人参与。

估计没有人喜欢估算,我个人认为这是软件开发工作中最糟糕的部分。而估算也从来都不会真正可靠或者完全准确,但还是希望上文这些内容可以为你带来一些帮助。

英文原文:Poor developer estimations AKA Guesstimation
10
1
评论 共 21 条 请登录后发表评论
1 楼 ansjsun 2013-09-16 17:49
真实情况是2-16个小时内的估算也是很难的.很多具有调研性的东西时间都是不定的..如果估算可以随时无范围的修改.也就没有了估算的意义...总结:估算就是扯淡..

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • iOS 国密SM4 OC

    之前上传资源出了问题 ,这次重新上传。 扩展NSString, 新增国密SM4加密、解密...方便广大iOS开发的新人朋友们使用。不过使用时,要注意加密解密过程中的字符填充,否则可能会与安卓和后台加密、解密的结果不一样。

  • 初学者:oc项目创建注意事项

    作为初学者,我觉得有必要整理记录一下我的创建项目当中遇到的问题首先注意以下文件:第一:info.plist这个文件,PrefixHeader.pch预编译文件需要设置访问路径,另外,这两个文件及Assets.xcassets、main.m文件最好...

  • 从制作OC形象到导入Unity并让角色动起来

    这里记录一下新人第一次从Vroid捏OC,导入blender转fbx,以及导入Unity通过修改官方的Third Person Controller来让角色动起来这个过程中所踩的坑,也顺便整理一下这一路的开发思路。这里许多地方都是参考了各路大佬...

  • oc引导windows蓝屏_NUC8x黑苹果抄作业续集,快速迁移OC+升级Big Sur

    如果觉得本文对你有帮助,欢迎「➕关注➕点赞➕收藏」鼓励一下新人。 以后我会分享更多有趣的数码、游戏、家居好物和玩机技巧,让小白也能享受科技的乐趣。 最后是惯例的 GIF 小彩蛋环节,我们下次更新见~

  • oc中block的本质及底层原理

    //新人只看上面这块就行了 struct __main_block_impl_0 { struct __block_impl impl; struct __main_block_desc_0* Desc; __Block_byref_i_0 *i; // by ref __main_block_impl_0(void *fp, struct __main_block_...

  • 04 OC 字典 Dictionary

    1、#pragma mark 作标记 用 如:#pragma mark - 不可变字典  ————————————————————不可变字典 NSDictionary————————————————————— ...

  • flutter混编(iOS - OC篇) --一些问题的处理

    关于今天受到的气引发感想 关于那位很牛逼的程序猿–是近期在掘金自称程序之王的人,不可否认他的代码的确很强,看他的资料能学到东西,但是人品确实不咋样,在群里以怼新人为乐。我进过很多开发群,但是这个人和这...

  • oc常见误区

    1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然...

  • iOS-OC命名规范

    IOS开发(OC)中的命名规范    正文:通过读写大量代码我有自己的一套编程思路和习惯,自认为自己的编码习惯还是不错的,代码结构也算清晰,因为我一直以来都是代码看的多写的多,但是总结的比较少,知识...

  • 03 OC之数组NSArray

    /**************** 不可变数组 Immutable Array****************/ 1、数组的创建  NSString *s1 = @"hello";  NSString *s2 = @"good";  NSString *s3 = @"morning";    //注意 最后的

  • 05 OC之 集合 Set的使用

    *********************** 不可变集合 Immutable Set***********************   1、创建对象集合set  NSSet *set1 = [[NSSet alloc] initWithObjects:str1,str2, nil]; ...arrayWithO

  • 02 OC之 字符串的使用

    ————————————————NSString(不可变字符串)———————————————— 1、字符串的拼接 [[NSString alloc] initWithFormat:@“hhhh%@”,@“pinjie”];...2、字符串的比较 ( == 比较的是...

  • OC内存管理之—引用计数

    但是在OC中没有垃圾回收机制,其实在OC中对内存的管理是依赖对象引用计数器来进行的:在OC中对象的声明方式都是为一个指针分配对象堆空间。在每一个OC对象内部都有一个与之对应的整数变量(retainCount),叫做...

  • 为什么OC语言很难

    Cocoa/Cocoa-Touch是解释这个的唯一途径,作为Objective-C的新人,你可以去咨询它。  历史:  纵向看来,Apple公司领导着Objective-C语言的发展与维护,包括Objective-C运行时,Cocoa/Cocoa-Touch框架以及Objective...

  • Argo CD ApplicationSet 新人上手实践

    $ oc logs -l app.kubernetes.io/name=argocd-applicationset-controller | grep generated time="2021-04-01T01:25:31Z" level=info msg="generated 0 applications" generator="&{0xc000745b80 0xc000118000 0xc...

  • OC 基础

    随着iOS平台开发的职位的增加,笔试、面试也越来越有“套路”,这里我总结了一些面试题,多数是Objective-C的基础知识,适合于面试新人,答案是我自己答的,不准确的地方,欢迎指出。 1. Object-c的类可以多重...

  • 2022 金蝶 Java 四面面经(已OC)

    MySQL 中 一条 SQL 语句的执行流程 从执行流程的层面说说如何优化一条 SQL 语句的查询速度,发生在哪个部分 多表联合查询的时候,SQL 语句的执行流程 目前正在学习什么知识 反问:新人培训体系是怎么样的 技术三面 ...

  • 基于C++开发的WEB服务器,支持C/C++、Python、Java等多语言混合开发WEB应用

    基于C++开发的WEB服务器,支持C/C++、Python、Java等多语言混合开发WEB应用

  • 基于STM8单片机的TM1615七段数码管驱动(模拟I2C).zip

    基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助

  • 基于STM8单片机的电位器输入控制继电器输出实验.zip

    基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助

Global site tag (gtag.js) - Google Analytics