广告
广告

他们写正确的东西

120吨的航天飞机坐包围近400万磅的火箭燃料,排出有毒气体,明显不耐烦,摆脱地心引力的车载电脑控制。

他们写正确的东西
(照片:Flickr用户马修Simantov]

正确的东西,在起飞前31秒。

120吨的航天飞机坐包围近400万磅的火箭燃料,排出有毒气体,明显不耐烦,摆脱地心引力的车载电脑控制。四个相同的机器,运行相同的软件,把信息从成千上万的传感器,使数百毫秒的决定,每一个决定投票,检查250次。五分之一计算机上,使用不同的软件,应该站在控制其他四个故障。

广告
广告

在起飞前6.6秒,如果压力,泵,和温度是名义上的,电脑给光航天飞机主发动机的顺序,每个三个引擎点火间隔160毫秒,吨过冷液体燃料注入燃烧室,船摇晃发射台,地上只有螺栓。随着主引擎一百万磅的推力,其尾气收紧火焰的蓝色钻石。

然后再在起飞前0秒,如果引擎正在运行的电脑满意真的,他们以光固体火箭助推器。在不到一秒,他们达到660万磅的推力。在完全相同的时刻,电脑给打击爆炸螺栓的顺序,和450万磅的航天器电梯威严地发射台上。

这是一个棒极了的显示的硬件实力。但没有人按下按钮就可以让它发生,没有宇航员骑手操纵杆来解决航天飞机送入轨道。

广告
广告

正确的东西是软件。软件给出了命令框架的主要引擎,执行戏剧性的小肚子航天飞机后不久它扫清了塔。发动机油门的软件,以确保工艺不加速太快。它跟踪航天飞机在哪里,订单消失的固体火箭助推器,使较小的航向修正,大约10分钟后,将航天飞机送入轨道超过100英里。当软件满意在空间位置上,航天飞机的主引擎关闭订单,失重开始,一切都开始自由浮动。

但多少工作软件并不是什么使它引人注目。是什么使它非凡的的软件是如何工作的。这个软件不会崩溃。不需要重启。这个软件是没有错误的。它是完美的,完美的人类。考虑这些数据:最后三个版本的程序——每420000行长期以来只是一个错误。过去11版本的这个软件总共有17个错误。商业项目的复杂性将有5000错误。

这个软件是基于260名男性和女性的工作在一个匿名办公楼对面的约翰逊航天中心湖,德克萨斯州,休斯顿东南。他们工作的“车载航天集团”洛克希德·马丁陆战队太空任务系统的一个分支部门,和他们的实力是世界著名:航天飞机软件集团是世界上四个机构之一赢得梦寐以求的5级排名的联邦政府软件工程研究所(SEI)衡量的复杂性和可靠性他们做他们的工作的方式。事实上,基于SEI的it标准部分从船上看航天飞机集团做它的工作。

广告

组写软件的好,因为它必须是多好。每次启动航天飞机,他们的软件控制是一个40亿美元的设备,六个宇航员的生活,和国家的梦想。即使是最小的误差在空间可以有巨大的后果:轨道航天飞机以每小时17500英里的速度;缺陷导致的时机问题三分之二的第二个让航天飞机三英里偏离轨道。

NASA知道好软件。每次飞行前,泰德·凯勒,车载航天集团的高级技术经理飞往佛罗里达,他签署文件证明该软件不会危及航天飞机。如果凯勒不能去,正式的接班决定谁能在他的位置。

比尔馅饼,谁是从事太空飞行软件在过去的22年,[/ url]组理解赌注说:“如果软件不是完美的,我们的一些人去会见可能会死。

广告

软件就是一切。(它还糟透了)。

人类历史上的技术,已经成为基本的软件一样快。

几乎一切——从国际货币体系和主要电厂搅拌机和微波炉——上运行的软件。在办公大楼,电梯、灯、水、空调都由软件控制。在汽车、传输、点火正时,空气袋,甚至连门锁都由软件控制。在大多数城市的交通信号灯。几乎每一个书面交流比明信片取决于复杂的软件;每一个电话交谈和隔夜包裹递送需要。

软件就是一切。它还很差劲。

广告

说:“这就像pre-Sumerian文明布拉德·考克斯,谁写的软件下电脑和史蒂夫•乔布斯(Steve Jobs)是乔治梅森大学的一位教授。“我们构建软件的方式是在狩猎采集阶段。”

约翰•芒森软件工程师和爱达荷州大学的计算机科学教授并非如此慷慨。“洞穴艺术,”他说。“这是原始的。我们应该教计算机科学。这里没有科学。”

软件可能权力后工业世界,但创建的软件仍然是一个工业化以前的贸易。根据SEI的研究,近70%的软件组织陷入复杂的前两个级别的SEI的规模:混乱,略优于混乱。情况非常严重,一些软件先驱从微软等公司都已经破裂教软件创建(见的艺术“下降和代码我二十!”)

广告

马克·珀克SEI技术的一名高级成员说,软件的成功使其弱点更加引人注目。“我们开发的软件产品非常复杂和非常强大。我们非常依赖它,”珀克说。”每个人都抱怨软件有多坏,所有的缺陷。如果你买了一辆车有5000个缺陷,你会非常沮丧。”

在这个软件泥沼,车载航天集团是一个例外。十年前航天飞机集团被认为是世界级的。从那时起,它有自己的错误率降低90%。

这么好,车载航天集团是非常不同的,整夜的对立面,pizza-and-roller-hockey软件程序员还是抓住了公众的想象力。这么好,车载航天集团非常普通,没有什么两样了专注、严谨,有条不紊地管理创新企业。

广告

事实上,该集团提供了一套教科书教训同样适用于程序员,特别是和生产者,一般。一看文化建立和完善的过程显示了软件编程必须成为如果软件是实现其承诺,并说明几乎任何团队操作能做些什么来提高其性能达到近乎完美的结果。

软件的成年人

“地狱航运今天继续。磨,磨,磨。我们永远不会让它。我说了吗?为什么我们总是低估我们的船运时间表吗?我只是不明白。在上午9:30;在11:30多米诺骨牌吃晚饭。和三个罐健怡可乐。”

不,它不是车载航天飞机组。道格拉斯·科普兰的“Microserf”software-fast-lane生活真实的虚构的账户。这是画面的主导软件开发世界:x世代运动t恤和分心,挤压太多英勇的代码编写成太少时间;旱冰鞋和山地自行车塞在角落;披萨盒子和星巴克杯子丢弃在会议室;从碎南瓜决斗的曲调,艾拉妮丝Morrisette Fugees。世界出名的,浪漫的,甚至不可避免的Sun Microsystems的故事,微软和网景公司。

广告

这不是车载航天集团的故事。他们的住处是白领的一项研究行人。最引人注目的是他们看起来多么普通的人。除了偶尔的航天飞机的纪念品,你可以在任何小公司或政府机构的办公室。每个人都有他或她自己的小办公室,办公室的桌子,电脑,和稀疏个人工件。人穿比较讲究服装的衣服去上班,简洁但不浮华,当然没有什么脏的。

这是严格意义上的一种8-to-5的地方——有一晚,但他们是例外。程序员是激烈的,但低调。他们中的许多人已经把在年的工作为IBM(拥有航天飞机集团到1994年),或直接在航天飞机上的软件。他们是成年人,与配偶和孩子和生活超出了他们非凡的软件程序。

文化:车载航天集团生产成熟的软件,他们是被成年人的方式。它可能不是性感,它可能不是一个编码追求个人满足,但它是未来的软件。当你准备好采取下一步——当你需要写完美的软件的软件而不是足够好,那么是时候长大了。

广告

现年48岁的泰德·凯勒集团的高级技术经理,看起来和听起来像一个小型私人高中的校长。凯勒的工作,以确保软件按时交付,所有的功能,而不考虑地盘的战斗。他是一个紧凑,秃头,爱管闲事,爱挑剔的品质任何宇航员会让人安心。他有温柔的,古怪的幽默感,与其说与外界,但与他的人群。

它出来会晤软件集团的成员和NASA同行。这是在一个小会议室举行塞满22人和一个投影仪。几次,从房间的后面,凯勒扭曲问题谈论一下代码的速度交付,或一些规范的细节,房间减轻大笑。

否则,一小时的会议是清醒和揭示,简要了解文化的窗口。首先,12房间里的22人是女性,其中许多高级管理人员或高级技术人员。车载航天飞机群,它的稳定性和专业性,似乎特别吸引女性程序员。

广告

另一方面,这是一个锻炼,细节,有条不紊的重复。会议是一个典型的美国宇航局的性能——排练一个几乎相同的会议几周了。它由走过一个巨大的包的数据和视图——图形描述软件的进度和状态。除了偶尔凯勒的旁白,基调是有效率的,几乎正式,视图-图形闪烁尽快过去他们可以读取,模糊的缩写,图表和图表。

这里的情况是一种具体的工作定义了积极推动集团完美——一个驱动器不能容忍驱使的能人。在航天飞机集团的文化,没有巨星的程序员。整个软件开发方法是故意设计不依赖于任何特定的人。

和创造力的文化同样也不能容忍,个体编码繁荣和风格的签名通宵软件世界。“人们问,这个过程不会扼杀创造力?你要做什么手册说,和你有有人在你肩膀后面注视,”凯勒说。“答案是,是的,这个过程确实扼杀创造力。”

广告

,正是这一点——你不能让人们自由软件代码,驾驶宇宙飞船,然后,对人民的生活取决于它,试图修补它一旦在轨道上。“休斯顿,我们有一个问题,可能会使好电影;它没有办法写软件。”人将他们的创造力改变过程,”凯勒说,“不改变软件。”

紧束缚组实践可以使摇滚乐的塞壬之歌软件世界难以抗拒。奎因拉尔森,34岁,曾在去年1月7年来航天软件当他离开去上班在博伊西微米技术,爱达荷州,自动化制造微米内存芯片。

在微米,拉尔森是给定任务自动化的锯切完成芯片晶圆切成合适的大小。搞砸了这个项目,你破坏了宝贵的晶片。

广告

“这是我决定要做什么,”拉尔森说。“没有会议,没有记录。“他自由;这是一个真正的踢。但拉尔森的思维方式,文化没有关注,正确的东西。“速度是最大的事情,”他说。“工程师们会说,这些是我们的首要任务,我们需要告他们尽可能快。“但拉尔森得到的印象是,工程师不太关心完成的软件是如何工作的。“基本上,他们想要快速的软件——把它出门。”

拉尔森在8月中旬开始回到飞船集团。“这里的人们只是最高的水准,”他说,在他回来的第一天在清楚湖。

它的过程

他们如何编写正确的东西?

答案是,它的过程。该集团最重要的创造不是完美的软件他们写道——这是他们发明的过程写完美的软件。

它允许他们正常生活的过程中,设定最后期限他们见面,保持预算,提供软件,正是它的承诺。的过程定义了这些程序员平原的东南部郊区休斯顿知道其他人在软件世界仍在摸索。这是任何创造性的过程,提供了一个模板的企业寻找一个方法来产生一致的质量和持续改善。

这个过程可以减少到4个简单的命题:

1。产品只是产品的计划。车载航天飞机群,大约三分之一的过程编写软件之前有人写一行代码。NASA和洛克希德·马丁公司集团同意在最微小的细节关于新代码应该做的一切——他们提交论文的理解,,的特异性和精度通常发现在蓝图。什么规格的改变没有双方的协议和理解。和编码器更改一行代码不规范仔细描述变化。需要升级的软件允许航天飞机导航和全球定位卫星,这一变化涉及到只有1.5%的项目,或6366行代码。一个变化的规范运行2500页,体积比手机厚书。当前程序的规范填写30卷,40000页。

说:“我们的要求几乎是伪代码,威廉·r·Pruett为NASA管理软件项目。“他们说,你必须做的正是这一点,正是这种方式,鉴于这种情况,这种情况下。”

这个精心设计的过程本身就足够让航天飞机组织类本身,爱达荷大学的约翰·芒森说。大多数组织进入甚至大项目没有blueprint-like详细地规划软件必须做什么。程序员已经开始编写一个程序之后,客户忙着改变其设计。结果是混乱的,昂贵的编程代码不断改变和感染错误,即使它被设计。

“大多数人选择把钱花在错误的过程,“芒森说。“在现代软件环境中,80%的软件的成本花在编写软件之后第一次——他们不明白正确的第一次,所以他们花时间鞭打。在航天飞机,他们第一次做对。他们不改变不改变的软件蓝图。这就是为什么他们的软件是如此完美。”

2。最好的团队合作是一个良好的竞争。在软件集团,有子组和亚文化。但是可以在其他组织分裂的办公室政治实际上是一个至关重要的过程的一部分。

中央组分解成两个关键团队:程序员——坐着写代码的人,单独的人试图找到代码中的缺陷。这两个机构报告老板和功能分离对立下逐客令。开发团队应该完全交付错误代码,所以完美的测试人员发现任何缺陷。测试组应该是圆头的代码与飞行场景和模拟,发现尽可能多的缺陷。结果是汤姆·彼得森所说的“友好关系对立。”

“他们在竞争谁来找到错误,”凯勒说。“有时他们像猫和狗一样战斗。开发者想抓住所有他们自己的错误。审核员发火,“嘿,放弃它!你正在远离我们的时间来测试软件!”

开发人员甚至开始自己的正式检查代码的精心主持会议,严格的校对工作,他们希望将混淆测试人员。审核员,反过来,认为他们值得表扬一些错误发现之前他们甚至开始测试。说:“从验证组的角度来看,帕特McLellan,高级经理,“我们意识到,如果没有独立验证小组,开发人员将更趋向宽松。就我们组的存在让他们多加小心。”

友好竞争的结果:航天飞机集团现在发现85%的错误在正式测试开始之前,NASA和项目交付之前的99.9%。

3所示。数据库软件基础。有软件。还有下面的数据库软件,两个巨大的数据库,百科全书式的全面性。

一个是代码本身的历史——带注释的每一行,显示每一次改变,为什么要改变,改变时,改变的目的是什么,规范文档细节的变化。项目所发生的一切都记录在主人的历史。每一行代码的谱系——它的原因是它是对每个人都是立即可用。

其他数据库-错误的数据库是一种纪念碑车载航天集团从事其工作的方式。这是写作时所记录的每一个错误或工作软件,回到近20年。每一个错误,错误被发现时的数据库记录;命令集显示什么错误;谁发现了它;活动是怎么回事的时候发现,测试,培训,或逃跑。它跟踪误差是如何引入程序;错误如何设法绕过过滤器设置在每一个阶段捕获错误,为什么没有发现在设计吗?在开发过程中检查吗?在验证? Finally, the database records how the error was corrected, and whether similar errors might have slipped through the same holes.

集团有如此多的数据积累它如何工作,编写软件程序,模型编码过程。像计算机模型预测天气,编码模型预测有多少错误集团应该在编写每一个新版本的软件。一如既往地,如果程序员和测试人员发现太少的错误,每个人工作过程,直到现实和预测匹配。

“我们别让任何东西走,”帕蒂·桑顿说,一名高级经理。“我们所做的恰恰相反:我们让一切打扰我们。”

4所示。不只是修复错误,修复任何允许的错误放在第一位。

这个过程是如此普遍,它负责任何错误——如果有一个软件缺陷,必须有毛病的方式编写的,东西是可以纠正的。任何错误没有发现在规划阶段中溜走至少有一些检查。为什么?检查过程中有什么问题吗?一个问题需要被添加到一个清单吗?

重要的是,错误的避免指责人。过程假定指责——它的过程分析发现为什么以及如何通过一个错误。同时,责任是一个团队的概念:从来没有一个人是只负责撰写或检查代码。“你不要因犯错误而受到惩罚,”马约莉Seiter说,一名高级技术人员。“如果我犯了错,和其他人进行我的工作,我不是一个人。我不是指责。”

泰德·凯勒回报的方法提供了一个例子,涉及航天飞机远程机械臂。:“我们为船员培训交付软件Keller说,“允许宇航员操纵臂,处理负载。当手臂到达某一个点,它只是停止了移动。”

的软件是困惑,因为编程错误。远程的手腕手臂接近一个完整的360度旋转,导致软件缺陷计算认为,手臂已经过去的一个完整的旋转——软件知道是不正确的。四舍五入的问题做一个普通的数学问题的答案,但它揭示了一连串的其他问题。

说:“虽然这不是关键,凯勒,“我们回去,问其他的代码可能会有相同的问题。“他们发现八这种情况在代码中,其中7人,四舍五入函数并不是一个问题。”其中一个涉及高增益天线指向程序,”凯勒说。“这是主天线。如果它已经开发了这个问题,它可能会中断与地面通信在一个关键时刻。这是一个更多的严重。”

过程的工作方式,它不仅发现软件中的错误。的过程中发现错误的过程。

只是一个软件问题

在处女航的b - 2轰炸机不会飞,但它只是一个软件问题。新丹佛机场月晚开放和数百万美元超过预算,因为它的行李处理系统不正常工作,但它只是一个软件问题。今年春天,欧洲航天局的新阿丽亚娜5火箭发射的少女爆炸,因为软件问题。联邦政府的主要机构——从美国国税局国家气象局——与项目年困扰和数亿美元预算,经常因为简单的软件问题。软件是越来越普遍,越来越重要,但它不似乎越来越可靠。

与世界其他国家的斗争基础,车载航天飞机群边缘接近完美的软件。不可否认他们有很多优于其他国家的软件。他们有一个单一的产品:一个程序,一个宇宙飞船飞行。他们了解他们的软件紧密,他们越来越熟悉它。该组织有一个客户,一个聪明的一个。和钱不是关键的约束:团体每年3500万美元的预算是一个微不足道的NASA派,但dollars-per-line基础上,这使得集团在美国最昂贵的软件组织。

的观点:航天飞机过程是如此极端,对于完美的追求是如此的专注,它揭示了什么要求实现持续执行。航天飞机群的最重要的事情——提前仔细规划软件,编写任何代码,直到设计完成,制作没有变化没有支持蓝图,保持完全准确记录的代码——并不昂贵。这个过程并不是火箭科学。它的标准除了软件工程实践几乎在每一个工程学科。

张贴在会议室的墙上,车载航天集团的非正式口号捕获的本质保持专注于过程:“你越早落后,更多的时间你将不得不迎头赶上。”

查尔斯•菲什曼(fish@nando.net)是一个作家位于罗利北卡罗来纳州。

广告
广告
广告

关于作者

查尔斯•菲什曼快公司屡获殊荣的贡献者,是作者的一大步:不可能的任务,德赢提款我们飞往月球。他的专属50-part系列,50天月亮,将会在6月1日至7月20日在这里出现。

更多的