失败的软件开发思想或技术的一个很好的例子是什么?


9

具体来说,是什么地方群众的观念错了的例子。人们为什么首先要抓住想法?为什么这些想法被驳回了?或者这些想法仍然存在并且很好,如果是,为什么呢?

例如,我可能将CORBA(和其他类似技术)描述为试图解决软件组件之间的通信问题的事物。许多人认为有必要在各个组成部分之间定义合同。最终,HTTP + JSON为大众解决了这个问题,其他各种RPC机制(例如Thrift和Proto-bufs)也出现了。


1
看看EXXXXXXXXXXXXXXXXXTREEEEEEEEEEEEEMEE编程...
crasic

没有“群众的想法”,只有流行的想法,而且我认为关于如何做一件已经使用了足够长的时间以引起大众欢迎的事情的想法都不是“错误的”,因为显然必须解决一些问题,否则所有尝试它的人都会立即放弃。
Michael Borgwardt

2
CORBA没有失败..它仍在使用
oenone 2011年

@oenone,从某种意义上说它是一个失败,因为它没有实现通常解决互操作性问题的最初承诺,而现在它是一种利基技术。
彼得Török

HTTP JSON解决了WebServices的问题,但实际上没有解决软件的其他方面的问题!
萨拉特2011年

Answers:


11

基本上,就像在计算机之外的世界中一样,思想和技术在争夺注意力,发挥杠杆作用等。而且有些人似乎是赢家已有一段时间了,但随着《下一件大事》的出现,它逐渐变得晦涩难懂。它可能与或没有任何关系,实际上是更好的选择。见证VHS与Betamax,还是各种DVD格式之间的较近战争。

CORBA庞大,笨拙且难以使用,但它是当时某些人可以发明的最好的东西(请注意,它是在万维网-和HTTP,Java,XML等广为人知之前设计的)。而且这也是委员会设计的经典示例,他们在每个想法中都塞满了每个人的想法,以使每个人都满意,最终使它无用地(肿(至少在今天看来是这样)。更不用说它的价格了,随着FOSS的出现,价格很快就变得过高了。

最终,HTTP + JSON为大众解决了这个问题

至少对于没有看到过类似的“最终解决方案”的人最终会跌倒……最好记住,在那时,人们对CORBA也有类似的看法;-)

我觉得很容易引用CORBA的兴衰

CORBA的历史是计算机行业已经见过很多次的历史,而且当前的中间件工作,特别是Web服务,似乎将重现类似的历史。[...]

总体而言,OMG的技术采用过程必须被视为CORBA下降的主要原因。该过程鼓励委员会和政治操纵进行设计,以至于很难实现技术平庸,更不用说技术卓越了。此外,不连续的特征的添加导致建筑视觉的逐渐侵蚀。[...]

像OMG这样的民主程序特别不适用于创建好的软件。尽管存在已知的程序问题,但是该行业还是更愿意依靠大型财团来生产技术。Web服务是当前中间件的灵丹妙药,其使用的流程与OMG十分相似,并且从很多方面来看,它也受到内f,支离破碎,缺乏架构一致性,委员会设计和功能膨胀的困扰。Web服务似乎不可避免地会颁布与CORBA十分相似的历史。


现在从另一个角度来看:在阅读您的“群众思想”一词时,我想到的事情与CORBA或其他标准大不相同。这些通常是一个人或一小组的想法。我想到了臭名昭著的做法/观点,例如“牛仔编码”,“编码和祈祷”,“在我的机器上工作”等。这些都是恕我直言的真正“群众思想”,因为这几乎是任何初学者的方法开发人员本能地开始编写代码。而且它们是错误的,因为它们既不会在空间上也不会在时间上扩展-人们无法以这种方式创建大型的,可维护的,可扩展的程序。然而,我感到遗憾的是,人们尝试在世界各地的专业商店中使用这种方式仍然是一种规范,而不是例外。

另一个极端是许多经理和理论家对软件开发“正确方法”的想法,这些想法体现在诸如CMM,RUP,Waterfall等大M方法中。所有这些方法背后的想法是,您所需要的只是正确的流程,它将开始以确定性的方式自动生产高质量的软件,无论开发人员实际是谁。注意,同样的游戏也可以使用敏捷方法来玩-只是标签的改变。任何经理认为选择(并保留)其开发团队的正确成员比开发过程的重要性要小,无论发生什么过程,都注定会失败。但是,这种对过程的信念似乎仍然很普遍-也许仍在管理学院教授?


阅读该链接:亲爱的上帝,如果V1 EJB取代CORBA,因为它更简单,CORBA一定很可怕……
Michael Borgwardt

Michi Henning产品继续开发,纠正了许多CORBA的不足。
Blrfl 2011年

13

常见的人为失误的例子是瀑布模型。这是定型瀑布模型的图,该模型也出现在Winston Royce的论文“管理大型软件系统的开发”中

温斯顿·罗伊斯的瀑布模型

该图像后跟以下文本:

我相信这个概念,但是上述实现方式存在风险,并且会导致失败...在开发周期结束时进行的测试阶段是第一个事件,其时序,存储,输入/输出,传输等是有别于分析的经验。这些现象无法精确分析。例如,它们不是标准的数学物理偏微分方程的解。但是,如果这些现象不能满足各种外部约束,则始终需要进行重大的重新设计。一个简单的八进制补丁或某些孤立代码的重做将无法解决这些困难。所需的设计更改可能会造成很大的破坏,以致违反了设计所基于的软件要求,并为所有内容提供了依据。要么必须修改要求,要么需要对设计进行重大更改。实际上,开发过程已回到原点,人们可以预期进度和/或成本超支多达100%。

在本文的稍后部分,Royce提出了替代的过程模型,其中涉及在当前阶段和上一个阶段之间进行迭代,以及在需求分析设计与设计代码测试之间的另一个循环。他还确定了许多文档以及在哪些阶段应完成这些文档,并主张客户参与以及每个阶段中的多个瀑布,以包括分析,测试和使用所有涉及的工件。实际上,Royce讨论的内容可能被认为是敏捷方法的早期方法-尽管仍然非常受计划驱动,但它是敏捷运动的基础。

我不知道为什么人们会停在第一个瀑布上。我想他们喜欢冒险和失败。


6
人们之所以选择第一种瀑布方法,是因为它与建筑40层摩天大楼的土木工程项目极为相似。建造摩天大楼时,要求和约束非常清晰,不容错过,并且任何主要方面都不会改变。分析和设计(架构)必须完整而透彻,没有解释的余地​​。该建筑物必须按规格建造,最后检查人员必须进场并检验成品。软件几乎从未如此清晰,因此瀑布模型为何会失败。
maple_shaft

2
@maple_shaft我发现这很有趣,因为Winston Royce是第一个在软件项目上讨论使用此模型并创建当今每个人都熟悉的图的人,但是人们并没有继续阅读以了解他为什么不应该这样做。用于软件项目。如果最先提出这个想法的人说这是一个不好的想法,不仅说明原因,而且指出正确的做法,为什么人们仍然选择抓住这个想法?我想知道这是否与来自数学和电气工程背景的第一批软件工程师有关。在EE中,这种方法行得通吗?
Thomas Owens

1
瀑布模型并不是完全错误的:它正确地确定了开发软件项目的一般阶段并对其进行逻辑排序。它没有意识到的事实是,软件项目可以迭代和模块化地编写,因此,瀑布模型描述的步骤可以针对整个系统的各个迭代和/或组件以各种配置执行。
tdammers 2011年

3
@托马斯·欧文斯(Thomas Owens),“如果最初写这个主意的人说这是一个不好的主意,不仅要说明原因,而且要指出正确的做法,为什么人们仍然选择抓住这个主意?” 现代资本主义之父亚当·斯密(Adam Smith)在自由和纯市场上写了宣言,但随后在他的书中继续谈到公司的概念可能有多危险,以及他们如何颠覆政府以有利于他们的方式影响市场。人们通常会忽略一个概念的某些部分,他们要么不理解,要么违背了他们对正确概念的先入之见。
maple_shaft

2
“为什么人们不停在第一个瀑布上,我不知道。我想他们喜欢冒险并招致失败。” 恕我直言,这是完全相反的。人们通常喜欢感觉自己处于对局势的掌控之中,而流程图和精心设计的方法使他们感到安全。由于这些进程和图表以前在很多其他方面帮助他们,他们认为(错在这种情况下),这将解决在SW开发相同的方式太...
彼得Török

4

从更高的抽象级别自动生成代码,或者自动编程

维基百科的文章在某种程度上缺乏历史信息,但是自从程序员比计算机变得昂贵以来,这一直是管理者的梦想。

在开发了诸如Fortran和Cobol之类的高级语言之后,出现了针对特殊领域的语言(如报告编写)的开发。 EasytrieveSAS是两个示例。

在1980年代的CASE工具中风靡一时。CASE代表计算机辅助软件工程。人们认为,严格应用工程原理将使软件开发更快。这些工具没能赶上的主要原因,除了费用外,还在于工具有效运行所需的高水平数据标准化。

互联网在1990年代崭露头角。Internet促进的编程类型激增。程序员需要以很少见的方法,以前所未有的速度处理插图,地图,照片和其他图像以及简单的动画。生产这些物体的技术数量成倍增加。自动编程的梦想消失了。

将编程外包到较便宜的位置是减少程序员成本的剩余方法之一。外包的问题包括通信问题和规格问题。


1
另外,还宣传了SQL和Visual Basic,以允许非程序员编写程序。
肖恩·麦克米兰

2

正式方法

曾几何时,有人提出可以证明软件是正确的。(这种想法是,测试不能表明没有错误,但可以证明。)不幸的是,为程序设计证明有一些主要缺点:

  • 比编写程序要困难和耗时。
  • 它必须覆盖整个程序,这意味着您需要任何库,操作系统等的证明。
  • 不能证明没有错误,因为这些错误可能是偶然引起的。

这个概念在70年代非常流行。

链接:http : //en.wikipedia.org/wiki/Formal_methods http://c2.com/cgi/wiki?ProofOfCorrectness http://c2.com/cgi/wiki?PractitionersRejectFormalMethods


3
形式方法不仅仅是证明。从您提到的大量数学和使用定理证明到涉及使用UML和OCL进行建模并在Z中创建形式规范的更轻量级方法。是的,引入任何级别的形式方法都会增加时间和成本,但是如果您要构建这种软件可能会导致人员死亡或伤害(从起搏器到飞机再到导弹),花费更多的时间和精力来尽可能地进行验证,这可能意味着生与死之间的差异。
Thomas Owens

@托马斯:很好。正式方法确实在一些即将死亡的项目中得到采用。但是,它们肯定不是无错误软件的灵丹妙药。
肖恩·麦克米伦

绝对。它们在任务和生命攸关的软件中占有不同的位置,具体取决于系统。毕竟,没有银弹。
Thomas Owens
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.