中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 软件工程 > 综合文章
软件为什么失败
作者:未知 时间:2005-09-13 19:44 出处:ChinaUnix.net 责编:chinaitpower
              摘要:软件为什么失败

本文选自:赛迪网 

我从事软件开发工作已经有三年了,这三年中,亲眼所见,亲耳所闻,报纸,杂志,网络上有各种各样软件项目开发的经验和教训,总的感觉是,成功的少,而失败的多,有的是部分失败,有的是完全失败,那么软件为什么会失败呢? 

对于这个问题的回答,有各种各样的答案,总结起来,大概是这么几种: 


用户需求变化太快,无法把握 
选用技术路线有误,遇到了技术难关 
项目管理错误,软件失去了控制 
由于某些人员变化而引起项目失败. 


目前为止,一般都笼统地总结成"由于软件工程的水平低下",然后开出的药方就是"采用软件工程的模式进行开发",可是具体来说,软件工程又有许多流派,许多模型,许多方法,而且这些方法又都是相互矛盾,相互抵触的,又该何去何从呢?于是开发人员就这样陷入了软件开发的泥潭之中,左冲右突,不能自拔,越是大型项目,时间越长,人员越多,情况就越是如此. 

我认为,问题的本质并不在于上面提到的几种原因,而在于在软件开发的过程中,人与人的关系被人为地扭曲了,这才是造成许多软件项目失败的根本原因.下面详细说明人与人的关系是如何一步一步被扭曲的. 

一.开发商和客户的关系 

本来开发商和客户之间是软件产品的提供者和使用者之间的关系,一个卖东西,一个买东西,两者之间的关系是平等的,公平交易,童叟无欺,这才是两者之间的正常合理的关系,可是现在呢? 

现在开发商和用户之间的关系是严重不平等的,开发商为了得到订单,往往委屈求全,放弃自己应该坚持的原则,在竞标时相互压价,甚至采用某些不够光明正大的手段来得到订单,自己把自己放到了一个被动的地位.许多开发商都有这样的口号"以客户为中心",他们不仅是这样说的,而且也是这样做的,问题是,一种不平等的关系,能够长期坚持下去吗?我从网上看到说,某个项目竞标,某开发商提供的标书有一大箱子,需要两个人才能抬到会场上.请问,这种标书有谁会看呢?难道开发商连这点起码的常识都没有了吗?既然没有人看,那么为什么要写呢?难道开发商真的以为客户会傻到不知道你在欺骗他吗?那么写这种标书欺骗的是谁呢?恐怕是自己欺骗自己吧! 

考察这种不正常的情况出现的原因,既有开发商的原因,又有用户的原因. 

开发商的原因,一方面是经济大环境的影响,大家都这样干,随大流而已,另一方面就是企图用这种方式来讨好客户,给客户留一个好影响,这样才好拿到订单. 

而客户的原因,则往往出于对于计算机的无知和恐惧,唯恐自己吃亏上当担责任,所以天生对开发商不够信任,有敌对情绪,心理上有挑毛病,找问题的倾向. 

结果就是这样,麻杆打狼,两头害怕,两者在开始接触的时候,就小心翼翼,唯恐出现问题,一旦发生冲突,开发商就盲目退却,而客户就得寸进尺,最后事情弄的一团糟. 

开发商怕得罪客户,却没有认识到有时和客户冲突是不可避免的,客户怕开发商来欺骗自己,于是一次一次进行试探,开发商越让步,客户越认为自己受到了欺骗.开发商的让步往往换不来客户的信任,而是换来了客户的更加不信任.由于开发商自己不相信自己,自己欺骗自己,最后也无法得到客户的信任. 

毕竟软件开发是由开发商来完成的,那么就应该也必须由开发商来决定项目的进展和内容,可是现在却往往由于客户的压力而妥协,放弃自己的原则,这样来做软件开发,能成功吗?失败是必然的,成功才是侥幸. 

结论就是,在软件开发中,应当以开发商为中心,而不是以客户为中心,客户的意见只是参考和借鉴,而不是金科玉律,不应该害怕和客户发生冲突,而应该分析冲突产生的原因,把冲突看成问题的征兆,而不是单纯来消除冲突本身. 

打个比喻,开发商好比医生,而客户好比病人,病人有病来找医生,那么医生开药方时能否由病人来决定呢?病人如果对医生的医术有怀疑,拒绝和医生合作,自己的病只能加深,而不能治愈. 

开发商和客户之间的关系,是一种良好的合作关系,而不应该是尔虞我诈的生意场上的竞争关系,双方的目标是一致的,而不是对立的.双方之间的矛盾是共同利益基础上的矛盾,而不是不可调和的敌我矛盾,必欲去之而后快.否定了这一点,软件是不可能成功的. 

我们通常提到的"需求经常变化",往往是开发商和客户之间没有摆正相互关系所造成的,需求并没有变化,而是开发商接受了客户提出的错误需求,而不敢提出异议,等到木已成舟,才发现双方的理解有问题. 

二.销售人员和技术人员之间的关系 

俗话说,屁股决定大脑,一个人担任的角色不同,他考虑问题自然会更多考虑到自己的切身利益,至于这样做可能会给同事带来的麻烦,就管不了那么多了.在开发商内部,销售人员和技术人员之间的关系也非常奇特.在许多公司,为了提高销售人员的工作积极性,对销售人员采用提成的方式进行奖励,而将底薪定得很低,这样一来,销售人员为了拿到项目的订单,往往会屈从于客户的压力,许下许多难以兑现的诺言,或者由于对于技术的不了解而随意答应客户的要求.等到合同签订完毕,进入项目开发阶段时,客户会拿这些诺言来要求开发人员进行兑现,结果是开发人员非常被动,对销售人员怨气冲天,于是告诉客户这些要求无法满足,而客户也勃然大怒,你们这些人怎么一拿到钱就变了脸了呢?问题就是,由于销售人员不考虑技术人员将来的实现,从而许下了过高的诺言,这样做的结果也许可以拿到订单,可是由于销售人员和技术人员的口径不一样,最后客户无所适从,感到自己受到了欺骗,接着将一腔怒火发到了技术人员头上,两者之间的合作和信任关系逐渐变成了对抗和欺骗的关系. 

有一天,有人对我说了个笑话,说计算机公司里三分之一是干活的,三分之一是混饭的,三分之一是骗子.最后的三分之一就是指销售,请问,当公司的销售被别人当成骗子时,岂不代表整个公司是骗子?和骗子做生意可能成功吗?项目的失败不也很正常了吗? 

销售人员和技术人员应该是一个自行车的两个轮子,他们的关系必须是相互合作,相互支持的,而不应该是互相拆台,相互对抗的,一旦他们之间相互对抗,那么就会给整个公司的声誉带来灾难性的后果. 

三.项目管理者和开发人员之间的关系 

项目管理者和开发人员之间的关系,本来应该是相互团结,相互帮助,共同面对问题的关系,可是许多项目管理者把这种关系扭曲成了管理与被管理的强制性关系,用种种规章制度,种种管理方法来强迫开发人员接受,把自己放到了开发人员的对立面,和开发人员离心离德,甚至还美其名曰"量化管理,科学管理".在这种糟糕的管理下,开发人员没有任何办法,要么被动接受糟糕的管理,要么辞职以抗议.一旦一个项目发生了这种情况,它想成功就非常难了. 

这种问题原来并不明显,现在随着各种MBA,印度经验,软件工厂等似是而非的理论的泛滥,许多人,尤其是许多根本不懂软件开发的管理者,更加变本加历,用近乎苛刻的手段来加强对开发人员的管理,提出种种令人发笑的量化指标来对开发人员进行度量,还加上理论的依据,对于敢于反抗他们这种做法的开发人员,一律以开除来解决问题,造成的一个非常荒诞的现实就是,许多公司里宁愿使用刚刚毕业没有任何经验的学生,不要有工作经验的工程师,美其名曰:易于管理,哈,容易上当受骗而已.请问,在这种管理者和开发人员之间的关系作用下,软件项目有可能获得成功吗? 

我个人并不反对尝试性的使用各种开发方法来进行管理,也不反对MBA来管理开发人员,我反对的是软件开发中的强权行为,完全剥夺了开发人员应当具有的对于项目的发言权和建议权,完全不考虑软件开发作为高强度脑力劳动的特殊性,用外行来管理内行并不可怕,可怕的是这个外行偏偏认为自己是内行,这才是事情的可怕之处.外行就是外行,不能因为处在管理者的位置上,就认为自己一下子变成了内行,谁敢反对我谁就走人,用这样的人来管理软件开发,怎么可能成功呢? 

项目管理者和开发人员并没有本质的区别,他们只是所处的岗位不同,担任的责任不同而已,在软件开发的问题上,尤其在具体的技术细节上,往往管理者不甚精通,如果他不能吸纳开发人员的智慧,而是自己一个人拍脑袋来做决策,那么失败就在眼前了. 



总的来说,在软件开发中,无论采用那种模型,那种工具,都离不开人的参与,离不开人与人之间的关系,如果不能正确对待人与人之间的关系,把本来正常的,平等的,合作的人与人之间的关系变成了不正常的,不平等的,对抗的人与人之间的关系,那么还希望项目能够成功,无异于缘木求鱼,南辕北辙了.如果人与人之间可以相互信任,相互理解,相互支持,相互合作,那么没有什么事情是办不成的,而如果人与人之间相互欺骗,相互猜忌,相互诋毁,相互斗争,那么没有什么事情是可以办成的. 

<<大话西游>>中唐僧说,我们师徒四人这次西天取经,之所以不能够成功,原因就是我们不够团结.依我看来,软件开发之所以出现这么多问题,根本的原因也是人们不团结.

 无双 回复于:2003-07-10 19:41:19


这几天都是你们天个在忙

我只是灌灌水

 蓝色键盘 回复于:2003-07-10 18:59:30
老大,辛苦了哦


最好派一下版面,呵呵

现在本版就你和我,kao!

 无双 回复于:2003-07-10 19:06:04
还是看看以前的软件生命周期好

觉得里面分析的很多

 无双 回复于:2003-07-10 19:07:43
我转的名科那几篇对每个步骤出现的问题都作了详细的解释

真能学懂的话项目应该做得比较顺利了

 蓝色键盘 回复于:2003-07-10 19:23:10
偶有时间去看看你的帖子。
最近太忙了,几乎没时间上来,今天算是轻松一些。

c/c++版辛苦你了哦,无双兄!

 无双 回复于:2003-07-10 19:49:19
不过对一些比较简单的问题
总是回答也不是办法

google没有用
man 没有看

这样的问题回答了也还会再出现
论坛应该引导大家学习的方法

如果都不能引导大家自己学习 那么天天都会有同样的问题

 wangrujun 回复于:2003-07-10 19:49:47
[quote:e85e3614e8="无双"]我转的名科那几篇对每个步骤出现的问题都作了详细的解释

真能学懂的话项目应该做得比较顺利了[/quote:e85e3614e8]     

是真的吗?嘻嘻

 无双 回复于:2003-07-10 20:06:43
看到里面提到的风险预测 
在普通软件开发中大家经常忽略

但是风险确实存在
所以早点发现风险就可以想办法

 harry202 回复于:2003-07-10 23:59:50
对照目前手头项目,偶楼主的观点不是太全面,不能覆盖到所有情况。
比如,给自己公司开发的大型软件项目,楼主的分析就不能用了。

 一无所有 回复于:2003-07-11 12:57:15
任何观点也好,技术也好,
  它们的适用程度都是有限的。
  只是希望大家可以对症下药,少犯错误。

 CCBZZP 回复于:2003-07-11 14:15:44
樓上的互相PP

 thinkeryy 回复于:2003-07-11 16:38:43
我最头痛的就是客户需求的不断改变,简直没完没了。又推不掉。他们的认为在软件产品完成(验收通过)以前追加需求是理所当然的,累啊!

 blogliou 回复于:2003-07-11 17:06:39
这篇文章算是说到点子上了,绝对正确!  以我十年经验证明.

 odin_free 回复于:2003-07-18 21:07:51
总的来说,在软件开发中,无论采用那种模型,那种工具,都离不开人的参与,离不开人与人之间的关系,如果不能正确对待人与人之间的关系,把本来正常的,平等的,合作的人与人之间的关系变成了不正常的,不平等的,对抗的人与人之间的关系,那么还希望项目能够成功,无异于缘木求鱼,南辕北辙了.如果人与人之间可以相互信任,相互理解,相互支持,相互合作,那么没有什么事情是办不成的,而如果人与人之间相互欺骗,相互猜忌,相互诋毁,相互斗争,那么没有什么事情是可以办成的. 
 
这个赞同

 he_xiaoyuan 回复于:2003-07-19 09:47:15
其实项目经理的才能决定项目的成功与否,只有
项目经理的英明决定才能造就项目的成功。项目
经理的任何失误都将导致项目的流产,比如对
开发人员的目前状态(包括基本技能指数,生活
环境,心理状况等)了解不够,对客户的需求变化
把握不到位,对最终项目实施现场环境(比如具体
网络环境)考虑不够,等等。
当然,项目经理也是人,忙不过来的。那没办法,
拿的钱多,操的心当然要多了。
==个人观点==

 一无所有 回复于:2003-07-19 13:56:12
项目干系人都很重要。
  当你不重视它的时候,往往就会成为你项目的瓶颈。

 无双 回复于:2003-07-19 22:44:21
项目的每一步都有风险 并且需要各方面的配合
所以失败不会只是经理一个人的事

当然经理的责任最大

 threehair 回复于:2003-07-22 23:40:11
[quote:2858a17934="odin_free"]总的来说,在软件开发中,无论采用那种模型,那种工具,都离不开人的参与,离不开人与人之间的关系,如果不能正确对待人与人之间的关系,把本来正常的,平等的,合作的人与人之间的关系变成了不正常的,不平等的,对抗的人与人?.........[/quote:2858a17934]     
同意楼上说法
以我三年的维护和开发经验来看,我觉得存在开发者和使用者之间的分歧很大。一般的使用者总觉得电脑是万能的,希望电脑可以做一切工作;而开发者常常会高估使用者的电脑知识。

 morning_leaf 回复于:2003-07-23 13:40:23
我感觉失败最大的原因有二:
1)需求模糊,需求变化太快;
没有明确需求就开始开发了,所以下发的任务就可能不是真正要求的;
或者需求周期很短,但开发周期很长(还没有开发成功,需求就变化了);
2)项目太大;子项目间的接口没有处理好;子项目变更时,没有考虑到其对整个项目的影响;

 一无所有 回复于:2003-07-24 11:53:18
[quote:44914c8b35="morning_leaf"]我感觉失败最大的原因有二:
1)需求模糊,需求变化太快;
没有明确需求就开始开发了,所以下发的任务就可能不是真正要求的;
或者需求周期很短,但开发周期很长(还没有开发成功,需求就变化了);
2)项目太大..........[/quote:44914c8b35]     
  需求总是确定的,
    所谓需求变化是对客户需求的理解发生了变化。

 无双 回复于:2003-07-24 12:13:41
那如果开始的时候与客户交往比较少 这样得到的需求就是模糊不情的

另外清楚的需求以客户以后需要的扩展都知道后 设计的架构会更好 而不是每次提出新需求都要考虑重构

 lqy009 回复于:2003-08-01 17:30:59
需要人与人之间进行充分交流,并且达到互相信任,这一点,老外做得倒是比较好的,人家在很多方面是实事求是的 !

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有