换一种说法:你写了哪些不会失败的代码。我很想听听那些从事心脏监测、水测试、经济基本面、导弹轨迹或航天飞机上氧气浓度等项目的人的来信。
你是如何准备编写这种代码的:方法上、智力上和情感上?
编辑
我已经标记了这个 wiki,以防代表问题阻止人们回复。我认为在这个问题上会有比以往更多的观点。
换一种说法:你写了哪些不会失败的代码。我很想听听那些从事心脏监测、水测试、经济基本面、导弹轨迹或航天飞机上氧气浓度等项目的人的来信。
你是如何准备编写这种代码的:方法上、智力上和情感上?
编辑
我已经标记了这个 wiki,以防代表问题阻止人们回复。我认为在这个问题上会有比以往更多的观点。
虽然我个人并未参与其中所描述的内容,但这篇文章有望有助于您提出问题的精神: 他们写的是正确的东西。
我为医院使用的血压测量设备编写了一个驱动程序。如果“失败”,患者将不会在预定的时间检查他的血压;如果他的血压异常,则不会触发警报(在更大的系统中)。这样的事件可能具有临床意义。
我的方法是在非工作环境中彻底阅读规范/文档(以避免立即开始编码的诱惑),然后在工作中再次阅读。之后,我在纸上总结了可能的状态和动作,并“流程图”了一个算法,并注释了所有潜在的现实世界“坏事件”(电缆被拔掉、电池没电等)。最后,我将驱动程序编写和重写了 3 次,每次都使用不同的机制(例如 FSM),并比较了它们的结果。每次迭代都帮助我发现了我尚未发现的弱点。第三次改写是“官方”结果。我和我的同事一起回顾了每一次迭代。
情绪准备包括说服自己,如果发生不可想象的事情,至少我不是故意疏忽——只是无能(古老的“我只是人类”的借口)。;-)
我已经为 MRI 机器编写了计算机界面。它没有机会伤害最终用户,因为它只是记录管理,但它可能会给出错误的诊断或遗漏重要信息。
测试,很多很多的测试。
单元测试,中级和高级测试。模拟所有可能的输入组合。还对硬件本身进行了大量测试。测试必须以完整和有条理的方式进行。测试应该比写作花费更多的时间。
错误报告
所有错误都必须报告并且显而易见。如果这样做不会损害专利,那就快失败吧。
对于积极维持一个人活着的东西来说,情况甚至更糟。它绝不能停止工作。如果失败,则需要重新启动并继续尝试。如果硬件发生故障,冗余内部也是必须的。
在错误的公司工作真的会很困难。但是,如果事情进展顺利,你有充足的资金并且释放压力不高,这可能是一个非常有回报的工作空间。
不是真正的答案,但是:
我有一个朋友为激光眼科手术机编写嵌入式控制软件。当他自己进行激光眼科手术时,他一定会去看使用他公司系统的眼科医生。我非常钦佩这个人。我想不出我写过的软件质量水平高到我相信自己的视力。
现在,我正在为一个系统开发一些基本代码,该系统从诊所和医院为医疗计费办公室检索医疗患者信息。我们从一个较小的客户端开始,并使用较长的磨合期来确保质量,但最终此代码需要安全地处理来自不同设施的多个客户端的各种报告格式。
它与您的示例的规模不完全相同,但是一个严重的错误可能会导致向错误的人收费或向正确的人收费到一个已失效的地址(搞砸信用报告)或使人们容易被盗,所以它仍然很漂亮危急。哦,是的,这可能意味着医生不会很快得到报酬。这也很重要,尤其是从业务角度来看,但与数据保护和完整性不同。
我听说过关于在 NASA 为航天飞机编写代码的过程的疯狂故事。每行代码大约有 10-20 行文档,还有测试、完整的修订历史等。每次发现 bug 时,不仅是评估和修复代码,而是编写代码的整个过程,整个命令审查链等以回答以下问题:“我们的过程中发生了什么错误,导致该错误首先被包含在内?”
虽然没有什么比 MRI 机器或血压监测仪更重要的了,但当我为一家在线赌博提供商工作时,我确实得到了重写 Blackjack 的机会。二十一点是迄今为止最受欢迎的在线游戏,数百万美元将通过这个软件(并且确实如此)。
我将游戏引擎与服务器和客户端分开编写,并使用测试驱动开发来确保我的假设在结果中得到体现。我还有一个包装“服务器”,它有控制台输出,可以让我玩。这实际上只是因为它模仿了真实的服务器界面而有用,因为玩文本版本的二十一点不是很有趣也不是很容易(“你画了一个 10。你现在有一个 10 和一个 6,而庄家有一个 6显示。[bsd] >")
该游戏仍在一些网站上运行,据我所知,经过多年的游戏,从未出现过任何财务问题。
我的第一个“真正的”软件工作是编写一个用于计划立体定向脑部手术的 GUI 应用程序。测试,测试,测试……绝对没有正式的方法,工程风格的思想,只有年轻的程序员在努力。当他们开始谈论使用软件来控制带有激光的机械臂时,没有任何严肃的工程方法,我有点担心,离开了更多的办公室。
我为巴厘岛当地政府文化和旅游部门创建了信息系统应用程序,安装在多个旅游目的地,提供有关文化、地图、住宿等的广泛信息。
如果它失败了,那么游客可能无法获得他们最需要的正确信息,被经纪人欺骗,或者在某个地方迷路了 :)