您编写的最重要的代码是什么?您是如何处理它的?

时间:2008-10-06 19:28:51

标签: mission-critical

换句话说:你写的代码不能失败。我有兴趣听取那些从事心脏监测,水测试,经济基础,导弹轨迹或航天飞机O2浓度等项目的人的意见。

你是如何准备编写这种代码的?从方法论,智力和情感上来说?

修改

我已经标记了这个wiki,以防代表问题阻止人们回复。我认为在这个问题上会有比现在更多的观点。

9 个答案:

答案 0 :(得分:5)

虽然我没有亲自参与其中描述的内容,但本文有望为您提出问题的精神:They Write the Right Stuff

答案 1 :(得分:5)

我为医院使用的血压测量装置写了一个驱动程序。如果“失败”,患者将不会在预定时间检查血压;如果他的血压异常,将不会触发警报(在较大的系统中)。 这样的事件可能具有临床意义。

我的方法是彻底阅读非工作环境中的规范/文档(以避免立即开始编码的诱惑),然后在工作中再次阅读。在那之后,我总结了纸上的可能状态和行为以及“流程图”算法,并注释了所有潜在的现实世界“坏事件”(电缆被拔掉,电池死亡等)。最后,我编写并重写了驱动程序三次,每次都有不同的机制(例如FSM),并比较了他们的结果。每次迭代都帮助我找出了我尚未发现的弱点。第三次改写是“官方”结果。我和我的同事一起回顾了每次迭代。

情绪准备包括说服自己,如果不可思议的事情发生,至少我不是故意疏忽 - 只是无能(旧的“我只是人类”的借口)。 ; - )

答案 2 :(得分:3)

我已经为MRI机器编写了计算机接口。它没有机会伤害最终用户,因为它只是记录管理,但它可能会给出错误的诊断或省略重要信息。

测试,大量测试。

单元测试,中高级测试。模拟所有可能的输入组合。还有很多硬件本身的测试。测试必须以完整和有条理的方式进行。它应该花费更多的时间来测试而不是写。

错误报告

必须报告所有错误并且显而易见。如果这样做不会伤害专利,那就快速失败。

对于积极让人活着的事情,情况更糟。它必须永远不会停止工作。如果失败,则需要重新启动并继续尝试。如果硬件出现故障,冗余内部也是必须的。

在错误的公司工作真的是一种困难的情况。但是,如果事情进展顺利,你资金充足,释放压力不高,这可能是一个非常有益的工作空间。 / p>

答案 3 :(得分:3)

不是答案,但是:

我有一位朋友为激光眼科手术机器编写嵌入式控制软件。当他亲自进行激光眼科手术时,他确保去找使用其公司系统的眼科医生。我非常钦佩这个家伙。我想不出我曾经写过的一款软件,其质量水平足够高,我相信我自己的视力。

答案 4 :(得分:2)

现在我正在研究一个系统的基本代码,该系统可以从医疗计费办公室的诊所和医院检索医疗患者信息。我们开始使用较小的客户端和长时间的磨合期来确保质量,但最终这些代码需要安全地处理来自不同设施的许多客户的各种报告格式。

它与你的例子的规模并不相同,但是一个错误的错误可能会导致错误的人被收费或者正确的人被解雇到一个已经解散的地址(搞砸了信用报告)或打开了人们身份盗窃,所以它仍然非常重要。哦,是的,这可能意味着医生得不到那么快的报酬。这一点也很重要,尤其是从业务角度来看,但与数据保护和完整性不在同一类中。

答案 5 :(得分:2)

我听过很多关于在NASA为太空船编写代码的过程的疯狂故事。每行代码都有大约10-20行文档,以及测试,完整修订历史等。每次发现错误时,不仅要对代码进行评估和修复,还要编写代码的整个过程,整个命令链接等被回顾以回答这个问题:“我们的流程中发生了什么错误,导致这个错误首先被包含在内?”

答案 6 :(得分:1)

我的第一个“真正的”软件工作是编写一个用于规划立体定向脑手术的GUI应用程序。测试,测试,测试......绝对没有正式的方法,工程风格的想法,只是年轻的程序员开始。当他们开始谈论使用该软件用激光控制机器人手臂时,没有任何严谨的工程方法,我有点担心,留给更多的办公用地。

答案 7 :(得分:1)

我为巴厘岛的地方政府文化和旅游部门创建了信息系统应用程序,这些应用程序安装在几个旅游区,提供有关文化,地图,住宿等的广泛信息。

如果它失败了,那么游客可能无法获得他们最需要的正确信息,被经纪人欺骗,或者在某处丢失:)

答案 8 :(得分:0)

虽然没有像核磁共振成像机或血压计这么重要,但在我为一家在线赌博提供商工作时,我确实被重写了二十一点。二十一点是迄今为止最受欢迎的在线游戏,数百万美元将通过这个软件(并且确实如此)。

我将游戏引擎与服务器和客户端分开编写,并使用测试驱动开发来确保我所假设的内容在结果中出现。我还有一个包装器“服务器”,它有控制台输出,可以让我玩。这实际上只是模仿真实的服务器界面才有用,因为玩二十一点的文本版本不是很有趣或简单(“你画了一个10.你现在有一个10和一个6,而经销商有一个6显示。[bsd]>“)

游戏仍然在某些网站上运行,据我所知,经过多年的游戏,从来没有遇到任何财务问题。