为什么软件没有汽车那么可靠?[关闭]


65

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

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

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

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


29
哪辆车?有些比其他可靠得多。
Zoot

244
如果有人在老板走过来时差点把汽车组装好,然后说:“哦,客户希望我们将喷气发动机安装到它上,您能在几天之内完成它吗?”,汽车也将非常不可靠。 。
亚当李尔

28
软件可靠。只是不是大型企业软件。您是否看过电视崩溃?我也不。
zneak 2011年

19
在允许驾驶机动车之前,有法律强制实施驾驶学习。此外,还有许多针对如何驾驶的课程,这些课程针对的是教育程度不足的人,以免崩溃。没有这样的程序可以学习使用计算机,因此,受过低教育的人口崩溃经常性地发生,并将其归咎于程序员。
zzzzBov 2011年

14
只需比较软件和汽车造成的伤害数量,您就会发现软件比汽车更可靠。
mouviciel 2011年

Answers:


183

您提出这个问题的前提是完全不正确的:软件并非没有汽车那么“可靠”。还有数十亿数十亿后设备的外面,运行嵌入式软件全天候,好几年,没有问题。哎呀,其中一些汽车里,控制/监视引擎。那么,如果汽车本身依靠软件,那么软件又怎么会比汽车不那么可靠呢?


9
+1,软件也可以是完全可靠的(从数学意义上来说),而机械设备则永远不可能(因为可靠性的概念是不同的-即,它是要切实保证一切都会正常运行,而不会破裂或有时穿)。
mlvljr 2011年

9
+1指出问题的根本缺陷
Gary Rowe

1
我要补充一点,就是我从未在太空中看到过汽车,而在那儿却看到过软件...
Matthieu M.

5
@宫坂丽:不要小看嵌入式软件的复杂程度。;)
Mchl 2011年

3
@Matthieu M.-您从未见过阿波罗登月车吗?
JeffO

115

我设计软件和机械零件。

这是复杂性。

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

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

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

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

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

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

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

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

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

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


12
+1,想象一下带齿轮等而不是循环和变量的“机械计算机”-仅“复制” 20-40 -... KLOC程序应该有多复杂(且不可靠)?并且让我们记住为什么也几乎不可能建立有效的机械计算机。
mlvljr 2011年

3
+1提及病毒更新,我想这是对那个名字不被透露的操作系统
特立尼达

1
在软件可靠性的背景下提及帕纳斯先生可能本身应该引起反对。
mlvljr

6
您几乎在每个实例中都将撇号用法混在一起。机械运动部件具有位置(而不是“它”)。这是复杂性(不是“它的”)。像DLL(不是“ DLL的”)之类的东西。另请参阅:english.stackexchange.com
Ashe

2
mlvljr:查找Charles Babbage及其分析引擎:en.wikipedia.org/wiki/Analytical_engine
Mchl,2011年

56

这是消费者选择的问题。

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

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


4
+1为这个答案-其他答案都不重要。如果人们关心厉害足够的了解软件如汽车一样可靠(但多即是),这将是。但是,当程序崩溃时,您需要重新启动计算机-当汽车崩溃时,OTOH ...
Cyclops

@Cyclops我同意,但是我认为值得思考为什么人们对汽车和软件有不同的看法。我认为主要的答案是,要使一个程序对普通人有用,通常它必须比诸如汽车之类的有用机械设备复杂几个数量级。其他许多答案也解决了这个问题。而且,软件故障的风险通常较低。
j_random_hacker 2011年

2
@j_random_hacker:我不认为人们对可靠性的看法是由于复杂性不同而引起的,因为大多数人都不知道汽车或程序的复杂程度。他们有不同的期望,因为如今软件比汽车具有更多的问题。他们确实关心后果。汽车故障可能使某个人不愿去的地方滞留,无法去任何地方,并可能花费大量金钱进行补救。它总是带来不便,并且可能危及生命。对于大多数人来说,软件故障意味着一些工作丢失。
David Thornley

25

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

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

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

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

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


6
软件看起来很简单,仅是因为我们非常擅长我们的工作,并使外行人看起来很简单:-)
Martin York

3
实际上,汽车太复杂了。
毛里西奥

9
@Mauricio:从来没有说过它们并不复杂。关键是软件可能比汽车复杂几个数量级。
S.Lott

4
软件并不比汽车复杂。汽车和软件都自然会变得越来越复杂,直到它们达到人们可以管理的外部极限。计算机可能具有数十亿个元素,但是其中许多元素可以被视为理想元素,并且它们的工作原理类似。内在的简单性就是软件变得如此复杂的原因:它一直增长到难以管理。车辆部件还有其他复杂性要素:它们必须处理磨损,腐蚀,温度波动等问题。两者都非常复杂,只是尺寸不同。
whatsisname 2011年

3
使用软件,可以很容易地继续添加更多的软件,然后添加更多的机械组件。两者都是“有机地”增长的,而软件的增长速度更快。
Jim C

20

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

与开发软件进行对比。

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

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


6
修正制造:软件制造是微不足道的。这使人们将编程的某些方面视为制造,而编程是全部设计。每个程序都是新设计。
David Thornley

1
每个程序都是新的-尚待验证-设计,或者是从可靠的数字图书馆中无故障下载现有的,经过验证的软件。那里有一个很大的二分法。
S.Lott

19

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

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

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


3
挑剔:大多数(可见)软件是自定义软件。因此,人们普遍认为这种状态不可靠。
哈维尔

4
@哈维尔,我想大多数可见的软件都是您可以在办公室用品商店或计算机附带的现成的东西。
Marcie

1
@哈维尔:按照我的定义,定制软件是为特定受众(而不是普通大众)设计/制作的。
Steven Evers

@Marcie:即使到处都有Windows,办公室和Photoshop,每个企业都有自己的自定义会计和流程系统。还要考虑那里的每个网站,如果不是wordpress,那是自定义的。
哈维尔

3
@哈维尔,不是每件事。许多只是使用现成的产品。
Marcie

16

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

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

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

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


1
+1建造汽车并不等同于建造软件程序。制造汽车更等同于运行软件程序。设计和设计汽车更等同于构建软件程序。就像软件一样,在汽车设计过程中还有很多问题可以解决。
RationalGeek

1
我不同意这种说法:“顺便说一句,这是将传统工程技术应用于软件工程的灾难的主要原因之一。” 软件开发绝对涉及工程原理:可重复使用的组件,组成,压力测试,构建块等
Philluminati 2011年

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

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


3
汽车使用者会做很多愚蠢的事情,包括设计师没想到的事情。事情是,只有非常有限的输入,并且在开车时戴上眼线笔没有与开车时看报纸不同的特定预期结果。
David Thornley

10
@David Thornley:试想一下,如果人们期望汽车能像计算机一样工作……“我在开车时正在阅读纸,现在大灯不再起作用。也许与我拆下的方向盘有关为报纸找地方,所以我碰到了墙。安全带保护了我,但没保护大灯...“;)
Guffa 2011年


1
@robertc你甚至不能为如此愚蠢而设计……
Glen Solsberry 2011年

10

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

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

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


2
这只有在“最佳”人最终没有变得更好时才起作用。如果它们好得多,那么您将了解苹果公司正在发生的事情,因为它们迟到了,技术过时,并且仍然突飞猛进,因为他们“做得对”。
罗伯特·马赛利

@Robert:Apple是一个完整的端到端解决方案(iTunes Store),我不确定我是否同意他们的技术已经过时。如果不是他们的话,我们可能仍会使用那些笨拙的滑盖手机。
罗伯特·哈维,

5

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

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

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

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

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


4

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


4

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

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

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

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

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

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

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


+1非常不错的类比,完全符合我想写的内容(但在读完此内容后并没有这样做)
Joris Meys 2011年

3

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

我认为主要原因是软件无关紧要。非物质化意味着非开发人员看不到进展。例如,如果我在制造汽车,您会看到我组装了不同的零件,并且看起来越来越像汽车了。但是,如果您看着我编程,也许我会花数小时在黑色屏幕上咒骂绿色文字的图形,然后再进行奇怪的模式变化,当我对模式进行少许更改时,我会非常兴奋。

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

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


我的电视一直崩溃。(通过数字技术成功实现)
tp1

3
  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

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

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

另一方面,软件具有Input-> Process-> Output。由于这种性质,无法完全预测或理解系统。

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

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

综上所述:

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

1
+1引用D.拉姆斯菲尔德。媒体从来不喜欢他,但是那个人是个天才。
oosterwal

3

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

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

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

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

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

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


2

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

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

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

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


1

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

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

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


1

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

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


1

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

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

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

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

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


1

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

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

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


1

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

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

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

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

所有这些都需要时间,因此需要金钱。我并不是说您得到的就是我要说的话,而在大多数情况下,您生产的投资却从未减少(除非您被搞砸了,但随后却什么也没产出……),有时甚至更多。 。


1

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

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

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

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

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


0

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

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

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


0

实际上很简单。汽车是老技术。这些天肯定会响起(断断续续),但如果您看看早期的汽车,它们会摔坏很多

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

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


0

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

询问装有ECU的现代汽车的任何拥有者,在发生昂贵的故障之前可以运行多长时间。如果你活了十年,我会被惊呆了。充满电子和传感器的现代汽车极度不可靠。

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

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

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

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

带有缺陷的软件可能只能运行,直到随着时间的推移输入条件的正确组合导致缺陷变得明显为止。

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

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


0

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

另一方面,

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

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

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

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

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

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


0

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

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


1
如果失败了,有很多软件可以危及生命。
亚当李尔

@Anna Lear:是的,但是他说的是“一般的软件”。所有汽车都会危害大多数软件所没有的威胁。另外据我所知,这种软件通常是可靠的

0

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

此外,您可以轻松地知道汽车何时出问题以及出了什么问题,而使用软件则要困难得多。这个人可以更好地知道出了什么问题,因为汽车不如计算机抽象。

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

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

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


0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.