`
jiav_net
  • 浏览: 102964 次
文章分类
社区版块
存档分类
最新评论

产品设计之路:软件开发之【时间估算】

 
阅读更多

这个功能相当简单,所有你需要做的就是完成XYZ。这个应该不难吧听到这些话是,我非常气愤,而且说这些话的人几乎都是跟技术不沾边的人,或正在研究他们的第一个产品。想想他们在跟谁辩论软件开发所需要的时间?但后来我意识到,即使我自己自己的项目预测要花去多少开发时间,我也是一筹莫展。如果连我自己都做不好,我何必对那些人恼怒呢?

  真正郁闷的不是他们预估的错误。问题在于他们竟然认为自己可以做出正确的估计。作为开发人员,我们经常会发现,在软件开发的问题上,一个外行人会很自然的把复杂的事情估计的很简单、对你指指点点。

  这并不是为我们的愤怒找借口。但这引起了另外一个有趣的问题:为什么我们天生的预测复杂性的能力在遇到编程问题时会失灵?

  为了回答这个问题,让我们来认识一下我们的大脑如何估计事情的。有些事情对于一些没有经验的人也很容易预估正确,但有些事情则不然。

  即使你从来没有学过音乐,在听到别人弹斗、瑞、咪、发、搜、拉、希,你也能大概推测出这很简单,一个人不需要太高的技术就能演奏出来。同样,当欣赏了宫崎骏的《天空之城》交响曲后,你也很容易推测出,这很复杂,需要很长时间的练习才能演奏的出来。

  为什么我们能够很迅速准确的预估这两首曲子的复杂性呢?这是跟我们用来判断一个事情简单和还是复杂的方法有关的。我们的大脑有一些现成的模式来完成这些事情,首先一个就是根据速度。这种情况下,大脑会辨别每秒钟演奏的东西。根据每秒钟演奏了多少东西,我们很容易有一个直观的判断曲子的复杂度。因为用吉他演奏一首歌是一种物理过程,一种感官上的活动,我们的大脑很容易依此来推测速度,继而转换成复杂度。

  我们还有另外一个天生的推测依据:体积。想想把一个泥巴房和一栋通天大楼放在一起对比。即使一个人从来没有学过建筑学,他也能告诉你通常设计和建造一个泥巴会比设计和建造一栋大楼要简单。为什么?因为我们天生的会使用物理体积作为事物复杂性的一个指标。

  当然。上面说的这两种逻辑分析并不是总是100%的有效。但大多数情况下,人们就是这样干,而且很成功。大多数情况中,我们在对物理过程评估时,我们的大脑会对物理事物进行有效的关联,不需要依赖之前的经验。

  现在让我们来谈谈软件。当一个不懂技术的人试图对软件开发时间进行评估时,有两个很基本的直观指标在辅助他们:以体积为指标的复杂度和以速度为指标的复杂度。但他们没有意识到,软件跟他们想象的不一样。软件本质上不是有形物质。没有体积和速度。它的极小的组成部分可能会时不时的在电脑屏幕上闪现。正因为如此,当面对开发一个Android应用时(或任何类型的软件),我们的基本直观感觉失效了。

  这第一点,速度,很显然根本不可能被外行人拿来对软件进行评估。于是很自然的,他们倾向于使用体积指标进行评估。要么是根据描述文档的页数,要么是根据软件的功能用例数或特征数(曾经做过一个台湾的项目,光文档就128M,其实也都是对一些功能的描述,很好。但功能开发没什么技术难点)。

  有时候,这种评估手段确实有效!当面对一个不是很大区别的界面,没有特别的设计要求,而且很多。外行人很容易用这种方法估计出开发时间(其实很多大致相同的界面是可以复用或公用模板的,呵呵)。但是,通常情况下,对于软件开发,体积并不能真实有效的反映复杂度。

  不幸的是,对于软件的复杂度,唯一有效的推测方法是依据经验。而且还不是时时都好用。作为一个程序员,我知道,根据我之前开发过的相似的功能特征,我可以估计出现在的这些功能特征各自要多少开发时间。所以,我把总时间加起来,这就得到了完成整个项目需要的大致时间(当然这只是我美好的想法,毕竟没带过项目)。然而,事实情况中,每个项目在开发过程中都遇到二、三个瓶颈。这些瓶颈会肆意的消耗程序员的大量时间,你在遇到它们之前根本不会有所预见。它们会拖住整个项目,致使工期延后数周甚至数月(曾经在做Launcher开发的过程中,对数据UI更新界面理解欠缺,导致加班好几个晚上。)。

  这些是没有经验的人在评估复杂度时不会理解的。他们不明白在其他事情上都很灵的方法,为什么放到软件开发上就不灵了。所以,下一次当你听到有人说我想你几天时间就能把它开发出来时,不管是谁说的,都不要懊恼。深呼吸一下,告诉他你的理解,自己该干什么还干什么。

分享到:
评论

相关推荐

    软件工程之软件开发成本估算

    软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、组装测试到确认测试,整个软件开发全过程所花费的代价作为依据的。 对于一个大型的软件项目,由于项目的复杂性,开发成本的估算不是一件简单...

    信息化项目软件开发费用测算规范 (四川成都 地方标准)

    技术总监、项目经理、产品经理、程序员、码农、商务人员、销售进行软件项目开发概预算

    软件开发类投标项目全套解决方案模板

    4. 产品设计组 146 5. UI设计组 146 6. 手机端开发组 147 7. 后台系统开发组 147 8. 测试验收组 147 9. 角色和责任 147 4.1.3.3. 关键人员简历 150 4.1.4 项目管理方案 150 4.1.4.1. 项目例会 150 4.1....

    软件开发报价(含软件开发项目工作量及报价模板)的计算方法

    软什开发工作量的计算,曾有人提出以源代码行或功能点来计算,这些方法实施起来均有不少难度。目前国际上仍旧按以往经验的方式加以计算,国内各软件企业也是采用经验的方式加以估算工作量。

    软件项目进度表:协调与并行提高工作质量

     制定软件项目进度表有两种途径:其一是软件开发小组根据提供软件产品的最后期限从后往前安排时间;其二是软件项目开发组织根据项目和资源情况制定软件项目开发的初步计划和交付软件产品的日期。多数软件开发组织...

    软件工程知识点

    (1)危机现象:软件开发成本与进度估计不准确,软件产品与用户要求不一致,软件产品质量可靠性差,软件文档不完整不一致,软件产品可维护性差,软件生产率低。 (2)危机原因:软件的不可见性,系统规模庞大,生产...

    1软件工程简答.doc

    瀑布模型、原型模型、螺旋模型、增量模型、构件组装模型、统一过程模型、第四代技 术 3、产生软件危机的原因 客观:软件本身特点 逻辑部件 规模庞大 主观:不正确的开发方法 忽视需求分析 "软件开发=程序编写"的...

    软件测试开发的基本流程

    测试计划包括估算测试所需资源(如人力、设备等)、所需时间、功能点划分以及如何合理分配安排资源等。 测试用例设计:根据测试计划和任务分配,每个测试人员会设计合理的测试用例。这些用例旨在覆盖所有重要的功能...

    数据库系统应用开发方法.pdf

    优点: 对⼤型软件开发项⽬具有很好的风险控制。 缺点: 需要风险评估经验。 不普及。 3.快速原型模型 概念: 确定⽬标系统功能特点和性能需求,编写基本需求说明书,构建出可运⾏的早期版本,在⽤户的参与下经过...

    论文研究 - 经验验证的软件效率评估模型:产品运营视角

    设计类的质量要素很重要,因为它对软件的总体所需质量有重大影响。 程序的复杂性和冗长的代码严重影响了几种质量度量,尤其是最终交付软件的效率。 本文对面向对象软件的效率进行了适当的回顾,并提出了有关类设计...

    使用功能点估算模型评估软件测试的工作量

    让我们先看看软件开发,这是跟测试离得最近的工作类型。开发工程师工作大致可以分为“设计”和“编码”两步。设计一般是使用UML语言,借助类似于Rose这样的工具,绘制一些UC图、类图、ER图等 最近有位同事问我,...

    文档模版全集

    包含以下内容,设计很多行业: [例子]详细设计说明书.doc [模版]软件需求规格说明书.dot [模版]详细设计说明书.dot [模版]用例规约.dot 项目管理制度建设框架.doc ...软件开发文档.rar 项目管理表单.rar

    电子产品的设计流程.doc

    五、文档整理: 产品的代码能短则短,规范到函数级,对于一个好的产品设计流程,函数应该规范到 函数级,这样不仅有利于代码的编写也有利于维护和规范化,提高了代码的严谨性。 由于产品的使用周期大于开发周期,...

    【清华】 软件工程(完) 视频.txt

    1.1专业化软件开发 1.1.1软件工程 1.1.2软件工程的多样性 1.1.3软件工程和web 1.2软件工程人员的职业道德 1.3案例研究 1.3.1胰岛素泵控制系统 1.3.2用于心理健康治疗的患者信息系统 1.3.3野外气象站 要点 进一步阅读...

    史上最全的软件工程规范文档,软件项目过程文档样表全集

    软件项目估算表 需求调研提纲 软件项目总结报告 代码检查表 审计评审报告 界面设计报告 开发计划 用户操作手册 技术预研方案 配置管理计划 基线清单 软件产品部署申请 配置审核表 配置审核记录 质量保证计划 系统...

    (完整)电子产品的设计流程.doc

    五、文档整理: 产品的代码能短则短,规范到函数级,对于一个好的产品设计流程,函数应该规范 到函数级,这样不仅有利于代码的编写也有利于维护和规范化,提高了代码的严谨性. 由于产品的使用周期大于开发周期,我们...

    史上最全的软件工程规范文档,软件项目过程文档样表全集。

    软件项目估算表 需求调研提纲 软件项目总结报告 代码检查表 审计评审报告 界面设计报告 开发计划 用户操作手册 技术预研方案 配置管理计划 基线清单 软件产品部署申请 配置审核表 配置审核记录 质量保证计划 系统...

    基于multisim的电路设计与仿真

    Multisim是一个专门用于电子线路仿真与设计的EDA工具软件,能完成从电路的仿真设计到电路版图生成的全过程,从而为电子系统的设计、电子产品的开发和电子系统工程提供了一种全新的手段和便捷的途径。该文介绍了它的...

Global site tag (gtag.js) - Google Analytics