8 月 1 日,金融服务公司 Knight Capital 集团 因一个软件 Bug 在不到一小时的时间内损失了 4.4 亿美元。据我所知,如果发布前进行更彻底的测试,这个 Bug 是可以避免的,但正如 《奥马哈世界先驱报》报道,该公司“匆忙开发了一个计算机程序,以便利用华尔街新的股票交易场所……并且未能充分解决其系统中的缺陷。”
在 NYTimes.com 的一篇专栏文章 中,前软件工程师兼作家 Ellen Ullman 谈到了美国证券交易委员会呼吁像 Knight 这样的公司“在部署代码更改之前充分测试其计算机系统”是不可能实现的。Ellen 写道:
首先,完全测试任何计算机系统是不可能的。否则就是误解了构成这样一个系统的要素。它不是一家公司完全创建的单一代码体。相反,它是相互插入的“模块”的集合。软件模块是从多家供应商处购买的;程序是专有的;购买者(如 Knight Capital)无法看到此代码。每个硬件也有其自己的嵌入式、不可访问的编程。由此产生的系统是缠结在一起的黑匣子,它们通过模糊不清的“接口”进行通信。接口一侧的程序员只能希望另一侧的程序员做对了。
虽然我同意 Ellen 的观点,并教导我的学生所有软件都存在某种风险,应该考虑到这一点进行评估,但我确实认为,如果这个灾难中的系统是使用开源模型而不是专有模型编写的,这些漏洞可能会被发现,发布截止日期将会如期而至(甚至为了产品的改进而推迟),并且整个事件都将避免。系统不必是“缠结的黑匣子”——它们可以是一个高效的透明管道网络。
当我提醒您 Eric Raymond 的声明“只要有足够的眼球,所有 Bug 都是肤浅的”时,我可能是在对唱诗班布道。使用开源开发模型意味着每个人都可以看到系统中其他人在做什么,并且可以更轻松地沟通更改将如何影响每个互连的模块。我并不是说可以始终找到所有 Bug,或者任何系统都是完美的,只是说使用开源模型意味着可以更快地发现问题,沟通更容易,协作更有效,并且可以更有效地修补 Bug。
我将 Knight Capital 事件视为软件(如果不是所有软件)以开放方式开发的又一个论据!
9 条评论