it-swarm.cn

为什么软件没有汽车那么可靠?

我有一个用户问我这个问题。我们知道汽车坏了,但是那是由于物理原因(除非涉及软件!)。

我试图回答说,软件是一个年轻的行业,但是用户反驳说:“汽车行业难道不是比更少的人变得更加稳定和可靠吗?”。

我还试图回答说软件更复杂,但是用户反驳说,构成汽车的零件有成千上万。通常,设计和制造汽车的人都非常了解其组件,但最终他们仍然会共同努力。

所以,为什么软件不像汽车那么可靠?

65
Alex Angas

您提出这个问题的前提是完全不正确的:软件并非没有汽车那么“可靠”。有十亿亿的设备连续24年不间断地运行嵌入式软件,持续了数年之久。哎呀,其中一些是in汽车,并控制/监视引擎。那么,如果汽车本身依靠软件,那么软件又怎么会比汽车不那么可靠呢?

183
GrandmasterB

我设计软件和机械零件。

这是复杂性。

因为现代软件中有数百万个“零件”。

软件部分非常复杂,并且有很多状态。机械的非运动部件没有状态。

机械运动部件具有其位置(一个变量)。

一个正在运行并使用1Mb RAM)的程序具有一百万个字节的状态。这比任何普通的机械系统都多得多的状态。

将会有永远不会被测试的状态组合,因为它们很少发生。在机械系统(例如汽车)中,很容易检查操作过程中机械零件是否相互碰撞。我在工作中使用的机械CAD软件会自动执行。

如果您是用看不见的,不可触摸的零件制造机器的,并且有数百万个相互丢失的活动零件,那就像是一个简单的程序。

甚至“ hello world”也可以在操作系统上运行。旧的8位系统和小型计算机操作系统非常简单,因此非常可靠。

诸如DLL和共享库之类的内容在病毒更新或软件安装过程中被替换,因此感兴趣的程序无法正常工作。有点像将汽车轮胎换成自行车轮胎。库函数的某些Edge状态会干扰(不要按程序预期的方式运行)。

用Java)这样的语言编写的程序,一旦不允许它们在对象之间进行许多未经设计的交互(指针重用,数组边界溢出),通常就相当可靠了。
当您将操作系统与静态库一起使用时,程序一旦运行就可以正常工作(但根据状态的大小,仍然会有很多Edge条件)。

Dave Parnas撰写了有关通过减小程序状态来提高软件的可靠性的文章。严格的函数式编程人员通过强制执行单个静态分配来完成相同的工作。

115
Tim Williscroft

这是消费者选择的问题。

如果消费者要求软件像我的本田思域(与我的老福特小牛)一样可靠,那就可以了。一些组织要求可靠且可靠的软件,通常是嵌入式软件,有时是对安全至关重要的事情,例如太空飞行和空中交通管制。该软件仍然不是完美的,但汽车也不是完美的。

但是,客户要求他们的软件具有其他质量,并且大多数人不愿意为功能可能较少,当然更昂贵的软件付费,而仅仅因为它更可靠而以后才发货。

56
David Thornley

组成汽车的零件有成千上万。

如果只有一台计算机(和相关软件)就这么简单。

电脑有多少GB的内存?数十亿个触发器?一个TB的磁盘?几百万个“运动中”的零件?

该软件可能正在运行成千上万的代码行或成千​​上万的代码行。加上许多(或更多)单元测试和工具。

不。“汽车也很复杂”的论点是铺张的。软件比汽车复杂得多。

25
S.Lott

在过去的一个世纪中,使内燃机运转的原理以及构成汽车的所有组件都没有太大变化。当然,已经有了进化上的改进和混合动力汽车,但是基本组成部分是相同的。您拥有发动机,传动系统等。甚至概念车和超级昂贵的布加迪威龙都采用相同的基本结构制造。简而言之,设计汽车是众所周知的问题

与开发软件进行对比。

  • 客户在开始时并不知道他们想要什么。他们开始谈论豪华飞机,但是当他们意识到成本时,他们希望您以脚踏踏板车的成本来建造它。
  • 从构思到概念车的设计需要花费数年的时间,而从概念车到制造则需要花费更多的时间。您上一次拥有软件的奢侈是什么时候?
  • 汽车零件是金属铸造件,但是软件组件经常会改变形状和界面。
  • 制造过程完全不同。对于汽车,零件是批量生产的,相同的零件可用于不同的车辆。使用软件,几乎所有东西都是手工制作的,因为否则东西就不合适了。

简而言之,有许多原因使汽车比软件更“可靠”。我刚想到了一对。

20
Berin Loritsch

汽车是可靠的。大多数软件也是如此。

但是...定制汽车和定制软件都有问题。

任何真正的汽车发烧友,只要拥有经过改装的1970年肌肉车,修修补补和微调,并且会出现故障,而且如果他保留原始设置,也不会遇到各种愚蠢的问题。但是...那他就没有增压器了...

19
CaffGeek

由于您驾驶的汽车已经制造了很多次,因此构造过程非常精细,因此可以在生产线上反复制造同一辆汽车。

如果这是一种从头开始建造的,独一无二的,复杂的Edge赛车,那么它的可靠性将远不可及。例如,看看一级方程式赛车的故障率要高多少。每场比赛一到两次崩溃很常见。

新软件永远是一次性的。程序员以前从未编写过什么代码。在这种情况下,要获得真正的高质量,将涉及大多数产品无法承受的成本。每个非平凡的新软件实际上都是原型。

顺便说一句,这是将传统工程技术应用于软件工程的灾难的主要原因之一。

16
Alb
  1. 汽车制造商在生产“最终”产品之前会弄清楚整个规格。
  2. 汽车使用者不会做出设计师没有想到的愚蠢的事情。
  3. 汽车每年(通常)仅“更新”一次(通常),而大多数软件预计每年会更新多次。

我可以继续,但是我的浏览器感觉像是要崩溃了...

13
Glen Solsberry

实际上有一个非常简单的原因。

赚钱的软件就是赢得市场份额的软件。通常,将某软件推向市场的公司(first)将获得大部分市场份额,即使他们的软件不是特定市场上的最佳产品也是如此。 。

因此,重点在于尽快和不完美的软件发布,而不是后来的完美软件。

10
Robert Harvey

到目前为止,我都喜欢大多数答案。这是我的想法。

汽车的故障成本比软件更严重

汽车故障可能会导致生命损失。即使是不危及生命的车辆故障,也给用户带来了极大的不便。软件故障只是意味着生产支持中的一些不良问题必须加班。如果那个人是一名全职免税员工,那么天哪,这根本就不那么昂贵。实际上,质量差和管理不善会得到奖励,因为免费加班实际上减少了每小时的人工成本!

当然,这取决于所用软件的类型(为武器系统,航空电子设备或医疗系统供电的软件也可能对生命产生影响),但是汽车要花很多钱,并且要经常使用,以至于可靠性下降。相当明显和痛苦。软件故障通常具有解决方法。

另一个想法:汽车看起来很可靠,但是即使汽车运行良好,它们也有一定的维护成本,而且从文化上讲,这是人们所关心的,甚至是关心汽车的人的骄傲支出。另一方面,软件在安装时通常已经损坏,并且经常需要随时间进行更改,但是从文化上讲,没有人愿意为维护付费。

5
Bernard Dy

好吧,汽车在他们的大部分历史中都不太可靠,而且肯定有一个学习曲线。汽车已经大规模生产了大约60年,而软件仅大规模生产了大约20-25年。基本上,我的意思是说,足够多的群众购买/使用它,并且确实有很大的动力去寻找如何完善创建它的过程。

4
dsimcha

我喜欢将Car视为应用程序。操作系统是运行应用程序的道路。

道路和汽车之间的接口定义明确。经过良好的测试,并经过广泛的向后兼容性检查(这很容易,因为接口很简单)。但是即使如此,您仍然存在一些向后兼容性问题。 “ Farrie”类型的汽车很难在“泥泞道路”类型的道路上行驶。

即使如此,您的OS就像道路需要不断维护一样。架起桥梁。汽车挂在雪地上,毁坏了道路,例如应用程序损坏并损坏了操作系统使用的磁盘和文件。

应用程序将在一个OS上编写。但是通常,它们必须运行不同版本的OS(不同类型的道路)。因此,只要在正确的OS(高速公路)上运行,您经过超级优化的应用程序就可以顺利运行并且没有问题,而其他通用(简单)代码则可以在所有类型的道路上正常运行。

定义了应用程序和操作系统之间的接口,但该接口非常复杂,并且始终会略有波动。特别是因为我们允许用户使用扩展名修改自己的操作系统。如果政府允许用户修改道路,将会发生更多的交通事故。

当您开始限制用户修改OS的能力时,应用程序的可靠性几乎可以变成坚不可摧。查看所有这些嵌入式设备。我们不允许用户靠近他们的操作系统,否则您不能连续不断地以24/7全天候正常运行。

因此,我要说的不是软件不可靠。更像是说用户正在高速公路上为应用程序挖洞。 嘿,您的应用程序刚好撞到了我去年挖出的孔,忘了

4
Martin York

这是一个愚蠢的问题(不是您提出的,而是原始人提出的)。

这听起来像我父亲(技工)讨厌计算机,却整天都在eBay上度过。

这就像在问“为什么树比飞蛾更可靠?”。

首先,我拥有30台(是的,超过30台)计算机,而商店中没有一个是。我刚花了1400美元在修车上。去算一下汽车维修店和计算机维修店的数量。再次,愚蠢的比喻。

汽车由钢制成,计算机由塑料制成。汽车在任何天气条件下均可工作,计算机专为室内使用而设计。

我的Commodore 64(26岁)可以正常工作,并且没有维修。我的两辆车(不到10年)都进行了广泛的维修。给我看一辆拥有数千年使用小时的汽车,它已经使用了26年,仍能像出厂时一样100%运行。

3
cbmeeks

首先,您的用户需要知道在这个世界上有如此可靠的软件,以至于他甚至都不知道它的存在。您是否看过电视崩溃?我也不。

我认为主要原因是软件无关紧要。非物质化意味着非开发人员看不到进展。例如,如果我在制造汽车,您会看到我组装了不同的零件,并且看起来越来越像汽车;但是,如果您看着我编程,也许我会花数小时在黑色屏幕上咒骂绿色文字的图形,然后做出奇怪的图案,然后突然地,当图案变化时,我会有些激动。

因此,普通人不会意识到软件的复杂性。当他们看到一个窗口时,他们认为他们看到了该程序的整体,这太糟糕了。

而且,与汽车相比,软件的定制化程度要高得多。当您定制汽车时,您不会违背其设计,因为这显然是愚蠢的。如果我的引擎在汽车的前部,那么将其向后移动很可能是一场巨大的灾难。但是,由于软件无关紧要,如果客户要求您完全按照设计进行某些操作,他们将不会得到任何指示(除了您,但他们不会听)他们所做的事情是愚蠢的,然后他们我会惊讶地发现它没有按预期运行。

3
zneak
  1. 缺乏信息共享(程序员独自飞行或成群飞行-汽车设计师与大公司内部的相互联系的团队一起工作,他们共享知识;如果我们都为大公司工作,由于学习,我们都会成为更好的程序员;这也是为什么开源程序和在线资源之类的东西非常重要的原因)
  2. 野外参赛者的期望(如果汽车设计师仅在头5-10年内只发挥一点作用是可以的,但是如果程序员接受采访并说他/她在5-10年内没有多大用处,面试结束了)
  3. 缺乏渗透测试(由于资金不足,合法性问题等;汽车制造商,但是,一个接一个的汽车撞在砖墙上,有风洞,对性能要求相对简单等)
  4. 信息透明度(您不知道大多数软件的工作原理;您是根据采访,新闻稿,广告等猜测或做出假设的;但是对于汽车,大多数内容都可以在其中查看)
  5. 固有的知识封装(将框架焊接在一起的人/机器人不需要了解稳定性控制系统背后的数学知识;程序员必须了解普通人不知道的成千上万的事物,而汽车设计师只需需要知道数百或数千)
  6. 有形性(看到时会有所帮助)
  7. 领域的年龄(车辆设计已有数千年历史;机动车辆设计已有250多年历史了(蒸汽发动机等))
  8. 子系统的重要性(即使汽车的许多零件停止工作,汽车仍将“正常工作”,包括电锁,电动窗,HVAC,挡风玻璃刮水器,破损的窗户,轮毂盖丢失,轮胎flat气[换上新轮胎],收音机,一两灯,远程进入等;当计算机上的某些设备出现故障时,通常是SHTF方案)
  9. 相互依赖性(一台计算机发生故障时,它会影响数百台或数千台其他计算机的情况并不罕见;一台汽车发生故障时,其他汽车受到影响的情况很少见;如果其他汽车受到影响,则几乎总是1 -3)
  10. 一揽子责任(如果一台计算机的一部分或数千台计算机中的一台损坏并损坏系统,则责任将扩展到整个计算机,或者在后一种情况下,蔓延到整个计算机网络;如果您的汽车被一辆刹车失败,或者如果汽车失速而无法在高速公路上重启,则只怪个别汽车零件)
  11. 有限与无限系统(汽车只能装很多东西,而且只能在有限的条件下工作),例如,您不会在像吉普车那样的地形上驾驶宝马;借助计算机,但是,可能性实际上是无限的-一直都有新的东西,新的API,新的OS,新的安全漏洞,iPad,移动电话软件,新功能,新功能等)
  12. 所需知识体系的范围(智商130-140的人几乎可以学到有关汽车的所有知识,但只能学到关于计算机和编程的知识的一小部分)
3
Michael

整个逻辑存在缺陷的简单原因:

机械设备可以简单地简化为输入/输出;增加实现该I/O操作的部件数不会更改I/O操作。因此,系统可以被完全理解。

另一方面,软件具有输入->处理->输出。由于这种性质,无法完全预测或理解该系统。

唐纳德·拉姆斯菲尔德说得最好:

“已知的东西;有些事情我们知道我们知道。我们也知道有未知的事物。就是说我们知道有些事情我们不知道。但是,还有未知的未知数-我们不知道的我们不知道的那些。 ” — 美国国防部长唐纳德·拉姆斯菲尔德

摘要:

  • 机械设备是具有已知和未知的系统,
  • 该软件具有上述功能,但也未知。
3
Darknight

软件基于位:0和1。(大多数情况下)汽车基于机械零件。

机械零件可能会磨损或发生故障,仍会继续工作。您的制动器磨损了,或者气门泄漏了,但是在修理之前,汽车仍然可以正常工作。

在大多数情况下,软件没有渐进式故障之类的东西。它要么起作用,要么破裂。除以零并非“几乎正确”;这只是一个错误。当您尝试将驱动器保存到没有足够空间的驱动器上时,就很难挤入所有数据。它只是不会走。

我认为软件的可靠性不一定要比汽车低,但是当软件出现故障时,它会立即而不是逐渐失效。

2
Kyralessa

汽车实际上并不像您想象的那样可靠。只是故障可以长时间隐藏(或忽略)而不会导致整个故障。您的汽车漏油和/或冷却液?没有?你确定吗?您可能错了...可能只是在您尚未注意到的某个地方泄漏了少量的水...现在将其扩展到悬架,车身面板,内饰等。我想我从来没有但遇到一辆我找不到问题的汽车。但是,绝大部分零件对于运输任务都是多余的。电脑不是这样。几乎计算机中的每个部分都是至关重要的。

这是旧的模拟与数字辩论,只是重新包装了。只要一切都完美,数字电视就很棒。一旦出现问题,音频就会断断续续,视频会阻塞,从而使它变得无用。与模拟电视相比,在模拟电视中您会有点嘶嘶声或静电,而这些声音很容易被忽略。

1
Brian Knoblauch

首先,当然有些软件是完全可靠的,而汽车,尤其是英国和意大利的汽车,不一定那么可靠。

也就是说,我在使用汽车软件方面的经验归结为两点:

  • 保修费用。如果您的软件失败,请重新启动它。也许您将提交错误报告。或使用昂贵的支持合同。当您的汽车出现故障时,您将其带入汽车并要求在保修期内对其进行修理。这将使制造商花费100美元以上。如果每个软件故障使制造商损失2美元,我相信软件会更可靠。

  • JD Powers(和其他质量排名)。 JD Powers调查ThingsGoneWrong(可能是任何东西)。如果这个排名真的很糟糕,人们将根本不会购买您的汽车,至少没有足够的钱来获利。如果我们为sw建立了JD Powers,并且人们真的关心它,那么我相信sw会更可靠。

因此,如果您生产的汽车不可靠,保修成本将很快吞噬掉您的全部利润,并且几年后质量下降将意味着您根本不会售出任何汽车。如果您制作不可靠的软件,那么用户将抱怨,您将出售昂贵的支持合同。

1
user15497

我不认为汽车没有那么复杂。但是即使是那样,我也不认为软件的可靠性较低。但是,我认为还有一些更重要的因素导致软件可靠性方面的差异:

  1. 抽象涉及软件。这导致软件创建者误解了事情是如何真正起作用的。随着时间的流逝,越来越多的抽象被添加。例如,汇编语言使您可以直接控制机器。 C更加抽象,但仍然与机器接近。 Java,C#和接下来将要发布的内容极大地抽象了机器中发生的事情。另一个例子是,如果您是一名程序员,想了解软件级别的网络是如何发生的,那么您应该知道要使用C进行编程,因为基础结构(作为软件)是用C编写的。

  2. 不同的经验并且制造商的知识导致不同的结果。不同的开发人员创建具有不同可靠性的软件。关于汽车制造商也可以这样说。但是,不同之处在于,任何可以使用编辑器和编译器,甚至只需安装IDE(集成开发环境))的人都可以免费创建软件。要制造汽车,您需要一笔巨大的投资,就是一家工厂(有些工厂可以不使用它而制造一辆汽车,但是您到处都找不到它)。您将投入巨额的资金,这意味着您将尝试雇用该领域的佼佼者但是,汽车仍然存在可靠性问题,如果您知道这一问题,则有数百万辆汽车因严重的[错误]被撤出市场。在我的汽车中,制造商将为购买的所有汽车免费更换制动钳。在同一年,这是一个严重的问题,我认为即使汽车也不如客户所说的那样可靠。

  3. 软件中的错误通常比汽车更能吸引用户。这是用户与软件之间交互和响应的结果。在汽车中,我们关注的细节较少,例如“踩油门时汽车正在加速”,折断,转弯,灯光,后视镜等。在软件中,每当用户单击/输入时,通常一个回应。因此,在很多地方该软件可能存在漏洞,用户会立即注意到它。这使用户相信它不如汽车可靠。

  4. 骇客与攻击。使用的软件越广泛,遭受黑客攻击的百分比就越高。您可以将此与盗车进行比较。对我来说,如果汽车的所有者或钥匙以外的其他人可以打开汽车,那么汽车的可靠性也会受到损害。但是,由于看不见攻击者,因此与汽车相比,尝试攻击软件更容易。因此,当软件被盗用时,人们会联想到它即使可靠,也不可靠。

1
Saleh Al-Abbas

要求机动车辆具有可靠性和安全性。在许多(大多数)国家中,法律要求它们具有最低的可靠性和安全性,并且必须针对最坏情况(无论哪种情况)进行测试。在大多数情况下,商业软件不是。

尽管该软件还有其他法律含义,但需要注意的是,如果每次您按“保存”按钮时软件都崩溃了,那么这仅是一个补丁/修复问题,然后您就可以继续进行。如果每次您打开指示器时汽车都撞坏,那么这是更糟糕的是事情。对于Microsoft Outlook而言,运行不会意外崩溃并不是那么重要,而对于SUV而言,运行不会意外崩溃并不那么重要。

话虽这么说,还有其他一些软件所承担的责任比汽车的技工还要高。飞机和导弹制导系统必须可靠;生命危在旦夕!人们希望它们比普通的汽车受到更严格的测试。

1
Anthony

我想我有一个更好的类比。以一家根据客户要求制造救护车的公司为例。基本平台(例如,完全可操作的且符合街道法律的RV剖析式底盘)需要在几个方面进行修改:车架,充电系统,加注口,悬挂装置等。这些修改不仅必须符合街道法律,还必须满足管辖要求同时满足客户的需求。

然后,您必须自己建造救护车机构,这也需要政府和其他机构的多层监管要求。在仍然满足客户对某些时髦的座椅布置或存储系统的需求的同时。而且不要忘了您有来自世界各地的一百个不同的客户,他们在不同的购买和部署时间表上,没有一个人会说“我会像上一个一样再花十几个”,而不会提交例外情况,通常需要对整个事物进行全面的重新设计。

汽车?没什么。您将购买建造的产品,并且对设计的任何方面都没有直接影响。甚至您对颜色的选择都是人为的,因为您实际上无法指定尚未经过设计和测试的颜色。从某种意义上说,只有“市场”而不是“客户”。我会说,为某些市场生产的现成软件通常与您在当地经销商处购买的汽车一样可靠。

1
user15456

汽车行业不会向公众发布“测试版”汽车进行测试,汽车行业也不必担心他们交付产品的环境,但是我也必须担心很多其他事情。说软件行业首先是根本不同的(众所周知),因此可靠性和复杂性确实具有启发性。在我看来,汽车比软件复杂,但是自从

  • 汽车的底部不是虚拟的,它势必更容易测试(但更昂贵)
  • 他们起步的时间比软件行业要早得多,即使他们的人数较少,您也无法最小化他们收集的实践和知识。与之相比,软件行业还算是婴儿。
  • 所有汽车行业都受到法律和道德规范的约束,不要制造会杀死驾驶员的汽车,尤其是最近几十年。

因此,声明说软件不如汽车可靠,对于许多软件来说都是正确的,而在其他领域(安全,航空...)则完全错误,您可以确定软件至少比最可靠更可靠。在那些地区的汽车。仅仅因为这些领域至关重要,据我所知,只有这些领域的软件才能与汽车行业进行比较。

这使我们想到了这一点:大多数软件在其领域中并不重要。如此看来,您就拥有了可靠的软件,您将发现的唯一问题就是与环境有关的问题(因此,即使您可以控制它,实际上您也将没有问题),而不是软件本身。但是,大多数软件编辑器都不能在这些关键领域中工作,当然它们必然会提供一定水平的质量,但是(我认为)他们更有可能尽快交付软件。但是,好的软件需要:好的项目管理,可靠的规范,好的设计和熟练的技术(要恢复它)。那只是为了实现它,我们甚至没有在谈论出售它。

所有这些都需要时间,因此需要金钱。我并不是说您得到的就是您大部分时间在生产中所付出的报酬您投资的目的永远都不会少(除非您被搞砸了,但随后却什么也没产出。) ..),有时更多..

1
lollancf37

即使汽车由数千个组件组成,软件也比汽车复杂得多。

如果汽车与软件一样复杂,那么汽车的所有组件都将依赖于汽车的所有其他组件,并且许多汽车组件将与许多其他汽车组件直接链接。

世界上所有的汽车在复杂性上都几乎不等于原始的Unix软件。

0
user15441

就像其他所有东西一样……当它起作用时,您不在乎……当它破裂(或不按您想要/期望的方式工作)时,您就在乎。

想想飞机。许多人担心有人试图劫持或炸毁他们。但是与每日航班数量相比,负面事件的数量确实很少。 (一天之内有更多的航班遭到劫持或轰炸。甚至尝试劫持或轰炸。)

一切都在您的外观和测量方式中。

0
Matthew Whited

实际上很简单。汽车是老技术。当然,这些天(断了)响起了钟声,但如果您看看早期的汽车,它们就断了很多

汽车机械部件背后的“技术”已经存在了数百年,内燃机也已经存在了很长时间,并且在引入时存在很多问题。

考虑到某些托管平台的内存问题几乎已经成为过去。给软件几百年,我们也将其牢牢掌握。实际上,考虑到软件的复杂性,我认为我们处于领先地位。

0
Steven Evers

有多少汽车设计师? 10,000个头? -他们很有才华,知道自己在做什么。

有多少个软件程序员? 3000万? -并且其中许多人不知道自己在做什么,例如PHP程序员,您可以学习PHP并用不到几个小时。

如果仅由10,000名最佳程序员来编写软件,那么它将与汽车一样可靠。

0
Czarek Tomczak

现代汽车依靠S/W。当现代汽车发生故障时,例如发动机计算机发生故障时,通常(尽管不是总是如此,但是通常)是引起故障的电子设备,而不是软件。

询问任何拥有ECU)的现代汽车的拥有者,它在昂贵的故障之前能运行多长时间。如果您能使用10年,我会感到惊讶。充满电子和传感器的现代汽车令人惊叹不可靠。

如果您学习可靠性理论,答案将非常明显。所有机械部件(预期软件)都具有稳态可靠性,这是在婴儿死亡率和磨损区域之外时的故障率。最终项目的失败率是零件失败率的总和。添加更多零件:聚合失败率变得更高。接下来的挑战是使所有这些组件的故障率真正降低。

当涉及到同步皮带和气缸磨损以及氧气传感器充满碎屑,连接器变成欧姆以及由于振动而导致电线断裂等问题时,可以使用一些技术来降低故障率。这样做也会增加成本。

另一方面,软件具有恒定的故障率。尽管有时很难发现缺陷,但最终所有软件都是香肠机。输入->处理->输出。有时,输入的ORDER和输入的组合会导致可检测模式的失败。发生这种情况时,您就发现了缺陷,将其修复,然后继续前进。

没有(已知)缺陷的软件的故障率有效为0。它将永久运行而不会出现故障。 (两次故障之间的平均时间= 1 /故障率)。硬件平台将首先失败。

带有缺陷的软件可能仅在正确的输入条件组合随时间推移导致缺陷变得明显之前才能运行。

所有这一切中的FALLACY是试图将物理事物的故障率(由磨损,IC中的金属迁移,进水,振动等引起)与实质上是有限状态机的故障率进行比较,而该有限状态机仅能准确地完成它的指令序列告诉它做什么。

(即使诸如alpha粒子将RAM)的位翻转是一种物理现象,也不是软件缺陷。但是,处理此类事件的方式可能是软件缺陷,但请记住,讨厌的alpha粒子只是软件的另一个输入。)

0
quickly_now

软件和汽车之间的区别在于,为了使软件开发人员保持理智,必须由该软件的所有用户驱动完全相同的软件副本,并且为了使汽车制造商保持理智,他们必须接受所有用户都将驾驶明显不同的汽车,因为您驾驶汽车的方式会改变汽车,但是您使用软件的方式并不一定会改变软件。

另一方面,

如果您有某种方法可以检查软件中的油,您将知道何时会出现故障。

如果您有某种方法可以改变软件中的油,那么您可能可以将其寿命延长几个月。

并且毫无意义地扩展类比:

补丁并没有更换机油,而是在更换泄漏的垫圈。

更新并没有改变机油,它们正在修复刹车。

释放并不会改变机油,它们更像是添加无钥匙点火器。

0
Peter Turner

发生故障的汽车是不能容忍的。它还可能危及生命。可以容忍故障的软件,用户可以解决它或者只是接受它。对无错误软件的需求不多。

软件也往往是定制的,您没有1000万种不同型号的汽车。我会说Wikimedia是可靠的,大量的ppl使用了该软件。因此,您可以说很多人都在使用无错误或可靠的软件。 (wordpress,各种源代码控制,mysql和sqlite都非常可靠,等等)

0
user2528

软件是数学和逻辑对象,而汽车是真实对象。

此外,您可以轻松地知道汽车何时出现问题以及问题出在什么地方,而使用软件则可能更加困难:想象一下有人遇到计算机问题而有人遇到汽车问题;这个人可以更好地知道出了什么问题,因为汽车不如计算机抽象。

我并不是说很难理解计算机:汽车还涉及许多物理定律,例如热力学,电子学和化学。

您还可以推断这种比较,说:“为什么锤子比秘书更可靠?”。

我不认为这个问题确实相关,但是我认为它很好地说明了缺乏良好的数学教育会如何影响对某种系统的理解。

0
jokoon