透视软件开发过程中的难点

作者:田占海

1 引言
如果你是一个程序员,可能常常为不能按时完成任务而苦恼。如果你是一个项目经理,可能会觉得开发符合预算和进度要求的软件简直难于上青天。实际上,软件项目常常严重超期或超出预算仍是困扰着绝大多数软件机构的难题。据美国一份评估报告显示,17个主要的国防部软件合同中,平均28个月的进度计划推迟了20个月才完成。一个4年应该完成的任务,7年还未提交,其中没有一个项目按时完成。由于存在软件问题,B1轰炸机的部署被推迟了,同样的原因,580亿美元的A12飞机计划也被部分取消了。持续了二三十年的软件危机为什么愈演愈烈?软件开发为什么如此之难?本文试结合作者的体会对软件开发的困难之处做一剖析,并提出一些建议。
2 困难所在
2.1 极大的复杂性
大多数大型软件软件产品由几十甚至几百万行源代码构成,例如:Windows95操作系统由大约1100万行代码组成。每一行代码都可能影响到程序的其它部分,并且各个部分之间都可能互相影响。这样一个错综复杂的巨大系统当中,每一个小小的错误都可能导致整个系统崩溃。有些大型软件,例如Windows,可能是人类曾经建造过的最复杂的事物之一,从古至今最复杂的建筑都无法与之相比。
2.2 高度的不确定性
一个软件项目从一开始就存在许多不确定性因素。其一:用户需求很难确定。这是因为软件开发者很难详细了解用户的需求,甚至用户在看到产品之前也不清楚自己到底需要什么,所以从项目开发的自始至终都可能会有新的需求提出,致使系统结构不断修改,最终面目全非。其二:设计不完全可以预测。有时,一个设计时认为可行的方案,在实现时可能行不通,或者最初的设计方案存在很大的缺陷而没有及时发现,或者突然一个设计时没有料到的技术难点阻挡了项目的进度。从设计到实现实际上有着很大的不可预测性。其三:用户需求不断变化,如果最初的用户需求没有了解的很清楚,可能整个项目很快就会陷在不断变化的需求之中不能自拔。其四:客观条件的不确定性。在项目的进展过程中,可能会有人员的流动,可能会有资源的调整,可能会有这样或那样的客观条件的限制而阻挡了项目的正常进行。在这样高度的不确定之中,在较早阶段精确估计一个项目不只是很难地,甚至是不可能的。
3 造成工期延误的原因
3.1 开发人员的过分乐观
许多开发人员倾向于一切都会进展顺利,这种盲目的自信对于项目开发来说是不对的。如果按照最乐观的估计,可能绝大多数任务都不能按时完成,因为在软件开发中不确定因素实在太多了。对于任务的复杂性和难度,对于自己能支配的时间,对于可能的突发事件的干扰等没有清楚的认识和估计,即使对自己的时间表作出保证,也可能常常无法按时交货。

时间: 2024-11-05 18:55:26

透视软件开发过程中的难点的相关文章

软件开发过程中的审查 (Review)

软件开发过程中的审查 (Review)   希望别人做些什么->定义出流程 希望别人做出正确的结果->定义出审查制度    软件开发项目中包括很多的审查动作,贯穿于整个开发过程.个人认为审查主要有以下目的: 1.尽早排查出潜在的问题(Potential Risk/Issue)   经过其他人的参与,以不同的视角提出不同的看法,会有类似头脑风暴的效果,集思广议来查找工程师未能注意的问题. 2.保持良好且有效的双向沟通   很多时候沟通并不充分,总有许多以为明白,实际并不明白的情况.组织管理人员需

软件开发过程中90%的公司会遇见的问题

软件开发过程中公司常遇见的问题1.项目进度难以掌控,客户希望能随时了解产品研发进度及查看现有功能.2.能力评估以及项目评估,研发能力无法数据化来决定项目接单能力,而往往开发公司又承诺太多,到最后无法实现.3.需求变化快,客户的需求,产品经理的需求,开发的实现,需求在不断变化,难以快速响应,项目返工严重影响项目质量.4.沟通成本高,异地交付.异地办公.异地沟通,甲乙双方就像是在进行一场异地恋,存在时间.空间等制约因素,效率低且成本高.5.研发流程乱,在研发过程管理当中没有协调管理好各方的工作,一旦

艾伟也谈项目管理,找出软件开发过程中的BUG,你需要火眼金睛

1)Bug大都出现在程序员的编码过程中.测试人员工作之一就是找出Bug,面对那些难以被人发现的Bug,测试人员通常会采取哪些手段?以您的经验,对广大测试人员有什么好的建议?对于开发人员,您有什么建议让他们减少Bug的产生? 之所以难以发现,大多是测试案例不够完整,检查测试案例是否全面覆盖了需求,等价类划得是不是够细有助于发现更多的问题. 如果已经发现的问题大多是猜测法发现的,那么惨了,这是一个天马行空的测试,所有的BUG都将是难以发现的BUG,碰运气吧.如果你真的是在这个不幸的团队,别伤心,你有

对日软件开发过程中的质量管理

质量管理活动背景 开发人员对委托方提供的设计资料的理解程度直接影响着开发进度和质量,从过去的产品质量数据分析结果来看,编程错误和对设计资料的理解错误是产生质量问题的两个主要原因. 特别是对设计资料的理解错误如不从一开始就采取措施进行预防,对程序本身及其他程序的质量将可能产生较大的影响.针对这一点,系统开发事业本部大连开发部开 展了以"预防/消除设计资料理解错误"为主题的质量控制(QC)活动.随着活动开展的深入,质量控制逐渐取得了明显的成效. "预防/消除设计资料理解错误&qu

软件开发中的同行评审

在<浪潮之巅>这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格.吴军老师所描述的内容,其实就是软件开发过程中的同行评审流程. 对于同行评审,我有相当的体会.之前在某大公司工作的时候,我参与了多个软件版本的维护工作,发现不同版本程序质量差别很大.究竟是什么原因造成的?细究之后才发现,程序质量高的项目组在最终提交版本之前,无一例外都做了一件事情,

谈谈如何应对软件开发中的需求变更

令人烦恼的需求变更     在软件开发中,大家都会遇到过这样的问题:客户的一个新想法,就推翻了之前与客户经过再三讨论而确认定下来的需求.如果是功能性需求变更还会让人容易接受一些,毕竟功能性需求不实现的话,是会大大影响到软件产品的质量.但是一些非功能性的变更会让人很头疼,许多是看起来无关痛痒的.鸡毛蒜皮的变更,却是极为令人无语和无奈,甚至是烦恼和厌恶的.     (1)什么是软件需求?     在IEEE中,软件需求的定义是:用户解决问题或达到目标所需的条件或功能.一般包含业务需求.用户需求.功能

《软件需求工程(第2版)》一2.3 需求工程在软件开发中的地位

2.3 需求工程在软件开发中的地位 2.3.1 需求工程对软件开发的影响 从软件工程提出的各种开发模型中可看出,需求工程是软件开发过程中的一个阶段.有些改进的开发模型,如快速原型模型也是因用户需求问题而提出的.需求工程处于软件开发的开始阶段,提供了软件项目其余部分得以实施的根基.显然,如果在开发的后期出现错误,受到影响的只是与后期阶段相关的工作,修正错误通常也是相对容易的事情.然而,如果错误出现在开始的阶段,而且没有立即发现和纠正,那么所有后续阶段的工作都是在错误的基础上进行的,修正错误的成本将

安卓,iOS游戏开发过程中动画编辑一般选用什么软件?

问题描述 安卓,iOS游戏开发过程中动画编辑一般选用什么软件? 通过解压别人的游戏,发现序列帧动画全部基于最小尺寸,但是这样的话播放过程中肯定会出现位移现象.是不是对每一帧的坐标进行设置? 解决方案 不知道你说的出现位移现象是什么.当然没有必要保存整个画面,而只要画面中的基本元素,并且计算坐标贴图.

[转载]SCRUM软件开发过程

这些天看到一本书<Agile Project Management with Scrum>,感觉很不错,于是在网上找了些相关的资料. SCRUM方法如下: 由Ken Schwaber和 Jeff Sutherland 提出,旨在寻求充分发挥面向对象和构件技术的开发方法,是对迭代式面向对象方法的改进,名称来自英式橄榄球(在比赛中每个队员都应时刻保持对场上全局的判断,然后通过集体行动,奋力实现同一目标──胜利).SCRUM方法最初实践于Easel公司(1993年),现已被数十家公司数百个项目开发中