一个 Bug,数百万美元的损失:开源解决方案的论据

尚无读者喜欢这个。
annoying bugs

Opensource.com

8 月 1 日,金融服务公司 Knight Capital 集团 因一个软件 Bug 在不到一小时的时间内损失了 4.4 亿美元。据我所知,如果发布前进行更彻底的测试,这个 Bug 是可以避免的,但正如 《奥马哈世界先驱报》报道,该公司“匆忙开发了一个计算机程序,以便利用华尔街新的股票交易场所……并且未能充分解决其系统中的缺陷。”

NYTimes.com 的一篇专栏文章 中,前软件工程师兼作家 Ellen Ullman 谈到了美国证券交易委员会呼吁像 Knight 这样的公司“在部署代码更改之前充分测试其计算机系统”是不可能实现的。Ellen 写道:

首先,完全测试任何计算机系统是不可能的。否则就是误解了构成这样一个系统的要素。它不是一家公司完全创建的单一代码体。相反,它是相互插入的“模块”的集合。软件模块是从多家供应商处购买的;程序是专有的;购买者(如 Knight Capital)无法看到此代码。每个硬件也有其自己的嵌入式、不可访问的编程。由此产生的系统是缠结在一起的黑匣子,它们通过模糊不清的“接口”进行通信。接口一侧的程序员只能希望另一侧的程序员做对了。

虽然我同意 Ellen 的观点,并教导我的学生所有软件都存在某种风险,应该考虑到这一点进行评估,但我确实认为,如果这个灾难中的系统是使用开源模型而不是专有模型编写的,这些漏洞可能会被发现,发布截止日期将会如期而至(甚至为了产品的改进而推迟),并且整个事件都将避免。系统不必是“缠结的黑匣子”——它们可以是一个高效的透明管道网络。

当我提醒您 Eric Raymond 的声明“只要有足够的眼球,所有 Bug 都是肤浅的”时,我可能是在对唱诗班布道。使用开源开发模型意味着每个人都可以看到系统中其他人在做什么,并且可以更轻松地沟通更改将如何影响每个互连的模块。我并不是说可以始终找到所有 Bug,或者任何系统都是完美的,只是说使用开源模型意味着可以更快地发现问题,沟通更容易,协作更有效,并且可以更有效地修补 Bug。

我将 Knight Capital 事件视为软件(如果不是所有软件)以开放方式开发的又一个论据!

User profile image.
Nicole C. Baratta (Engard) 是红帽公司的高级内容策略师。她获得了 Drexel 大学的 MLIS 学位和 Juniata College 的文学学士学位。Nicole 担任 ChickTech Austin 的主管志愿者。Nicole 以其众多出版物而闻名,包括她的著作《Library Mashups》、《More Library Mashups》和《Practical Open Source Software for Libraries》。

9 条评论

测试软件是不够的。它必须在股票交易中使用的所有其他软件存在的情况下进行测试。否则,任何事情都可能发生。这是一个例子,甚至不涉及计算机;所有操作都是自动的,并且基于当地条件。结果:3000 万人断电 12 小时。

http://en.wikipedia.org/wiki/Northeast_blackout_of_1965

一个关键点是,即使源代码不是外部开放的,也可以遵循开源方法。Knight Capital 集团可以与供应商和自己的开发团队一起使用内部开源(正如 <a href="http://en.wikipedia.org/wiki/CollabNet">CollabNet 创造了这个概念</a>)。基本上,您使用内部开放的代码和协作来实践开发。您 <a href="https://www.theopensourceway.org/wiki/Stuff_everyone_knows_and_forgets_anyway#Do_not_forget_to_release_early_and_release_often">尽早且频繁地发布</a>。您使非开发团队成员可以观看项目、测试早期版本、集思广益以帮助避免灾难性错误等等。

正如 Nicole 指出的那样,构建在开源之上可以获得浅层 Bug 的所有好处,而构建一个也是开源的解决方案意味着浅层 Bug 最终可能是您自己的。从内部开源模型开始,可以帮助组织学习如何以 <a href="https://www.theopensourceway.org/">开源方式</a> 行事,因此他们在外部协作进行软件项目时会更加熟练和大胆。

专栏文章中真正困扰我的一句话是“<em>没有不含 Bug 的代码体</em>”。

首先,借用伟大的 Edsger Dijkstra 的一句话,术语“Bug”的使用是不诚实的,并且转移了程序员对故障的责任,而 Bug 更恰当地称为“错误”,而有错误的程序更恰当地称为“错误的”。

但在更广泛的层面上,我认为可悲的是,作为一个社会,我们已经变得如此习惯和麻木于软件故障,以至于我们没有像期望道路和桥梁、汽车和飞机、电力基础设施和水处理设施那样,对计算机程序抱有相同的质量标准。

我喜欢开源的地方在于它为软件背后的工程提供了责任制。开源开发人员的优势在于,他们可以利用这种开放性,同时将自己的工作保持在更高的标准,从而在他们的代码中建立更多的 <em>信心</em>。

您也可以对“typo”这个词进行同样的抱怨。它们都来自同一件事,即人类的易错性。是的,我认为可悲的是,作为一个社会,我们已经变得如此习惯和麻木于写作失败,以至于我们没有像期望道路和桥梁、汽车和飞机、电力基础设施和水处理设施那样,对文学抱有相同的质量标准。 :)

我还想补充一点,虽然没有算法可以证明软件的正确性,但如果您正确使用正确的工具,您可以拥有非常严密的软件。我首先想到的是 SPARK ( http://en.wikipedia.org/wiki/SPARK_(programming_language) ),它是 Ada 的一个子集,可以用来正式证明软件的正确性。
当然,您可能会在代码的形式规范中犯错误,但我预计在代码和规范中犯两个互补错误的概率(以便它们通过形式检查)非常低...

我同意之前的评论,现在“Bug”在任何软件中都是理所当然的。
但是,我发现这导致了两个著名的论点——闭源和开源代码。如果闭源代码如此安全和优越,因为没有人可以看到代码来利用它。那么,为什么当闭源代码以“可利用”的方式发布时,供应商会担心呢?
如果操作系统、APP 等等编写正确,我看不到任何查看源代码的担忧。两个人可能不会以相同的方式编写,有时“开放”地接受建议会给您比仅仅“狭隘”地看待一个小部件更广阔的全局视角。
我发现当个人的贡献得到赞赏时,协作努力会产生更好的结果。在现实世界中,这与事实相去甚远,大多数时候,一个人想被提升为独角戏或独揽荣耀。

如果您认为所有代码都布满 Bug,那么您为什么要乘坐飞机,或者更重要的是,信任交通信号灯?无论是开源还是闭源,测试和质量控制都是绝对必要的,并且在延迟的项目中经常被最小化。也许,事实上,苹果和 Oracle 有一些东西,拥有其产品中的所有东西,从硬件、操作系统、编译器到开发的代码。

附言:我应该使用“缺陷”而不是“Bug”这个词。我的错误。。。

我有点不同意作者的断言。开源并不一定意味着软件的缺陷更少。如果足够多的 компетентных 人员检查了源代码,并且更改由 компетентной 团队管理,那么开源软件可能会更少缺陷。

闭源专有软件有动力把事情做好——否则他们的产品将卖不出去,他们最终可能会面临诉讼的错误一方。

Creative Commons License本作品根据 知识共享许可协议 署名-相同方式共享 3.0 未本地化版本获得许可。
© . All rights reserved.