» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[杂谈] 【年度巨献】从外行的视角尝试讲解为什么这回丰田栽了【全文完】【v1.01】

引用:
原帖由 Kuzuryuusen 于 2013-11-2 21:27 发表
posted by wap, platform: Firefox

纯属外行,哪儿写得不对望业内斧正啊
我就是觉得Barr的调查思路很奇葩啊:
1、设计业余。一个函数超过1300行代码怎么了,超过7k行的函数我都见过。这就一定出现Bug么?全局变量多也一定会产生Bug么?当然我也很讨厌这种设计,但不能说明他有Bug,如果想证明的话,需要找出实质证据。
2、代码不符合编码规范。我又惊了,这在业内太正常了吧?估计是使用了PC-LINT或是什么工具检查了一下编码规范就蹦上来,说这会产生Bug。
递归就一定产生Bug么(递归我还真就用过一回,在后续的派生项目里还真就出现内存分配不足死机的bug)
有的程序员会这么写
malloc();
while(1){
//bulabula
break;
}
free();
如果想证明不符合编码规范,请找出证据
3、变量保护其实也是编码规范的一种,同上。

然后Barr为了证明这些代码的确有问题,使用了单元测试的方法
人为地改变了内存中的一个地址的值,于是出Bug了
那么,这个Case在实际情况中真的会发生么?

正常的路子应该是先根据用户提供的现象以及操作步骤去尝试再现这处Bug,(或者还有Log等),再结合代码,逆向分析出这个Bug的原因。
或者我就单纯分析代码,分析出至少一条能够导致出现这个Bug现象的Case,然后去再现它。
还人为地翻转一个特定字节,你怎么不去把用于通信的线缆都剪折了然后再测测?也能出Bug,出不了Bug你再把刹车拆了
难道陪审团里没有懂编程的?

最后照例乱喷一通:MBD现在经常新员工直接上(包括日本人与德国人),各种奇葩代码层出不穷,我艹。
至于前面有人提到的德国人的严谨,我更是懒得喷,能有多严谨,stop的时候不释放内存,原来是架构里根本就不支持(贼tm长见识)
PS:另外DTC模块的代码我也写过一小部分,头回知道DTC全称,寒自己一个


TOP

引用:
原帖由 Kuzuryuusen 于 2013-11-2 21:37 发表
posted by wap, platform: Firefox

就是法庭判丰田承担责任(Liable),丰田马上同意给钱息事宁人。
300万不能说多,意义在于开先例。可以想象那些职业状棍们一定觉得捞到金猪了,都摩拳擦掌等着捞一笔呢。预计丰田 ...
的确啊
以后随便找辆车,不停地改写系统里内存的值,直至出错
然后又能拿到300W了



TOP

很多人可能不太明白这个判例有多重要的意义  我帮楼主说说吧  顺便结合目前知道的情况 随便聊聊

       多年前的丰田刹车门,可能大家都知道或者有所耳闻。由内部爆料开始,指出丰田可能蓄意隐瞒了自身车辆的缺陷,造成一定数量的交通事故

和大量的人员财产损失。事故一般为刹车失灵,驾驶员踩下刹车无法减速车辆。受到调查的事故上千起。

       当时的情况实际上很戏剧性:由美国土运输部牵头的一堆部门联手开始对丰田进行调查,丰田章男自己都懵了,因为丰田可能根本就不清楚这些车为什么刹不住,

当时花了很长的时间去找原因,但是依然没有合理的解释,最后只能以刹车踏板不合理,脚垫卡阻等原因来告知消费者,并实施召回,并交纳6000万的罚款。同时承诺

安装“刹车优先”。等于是在最终调查结果还没出来的时候,先低头认错。国内当时说的凯美瑞刹不住实际上还不是这一码事儿,是另外的事情。

没想到的是,丰田认错了,赔钱又召回的情况下,调查委员会发现,上千起事件基本上都是人为的错误。包括那几起著名的,甚至调查方都发现了与证言不符的情况,

例如宣称刹车失灵的汽车,结果发现撞击时根本没有踩刹车。或者现场找到了明显的刹车痕迹。同时认为丰田的电控油门系统和刹车系统是相互独立的,即使没有“刹车是爷”系统,

汽车也能刹住。
   
    好了,既然刹车系统没问题,那人们的注意力就转到了所谓的电控油门系统上了,实际上就是ECU。因为如果ECU没有问题,不会犯错误,那么丰田就没有任何问题了。当时

]委托了NASA对ECU以及车辆本身进行了10个月的调查,通过各种手段试图重现刹车失灵的问题,但最终的结果是没有问题。紧接着调查委员会就给丰田翻案了,认为丰田没有过错。

同时阴谋论又开始了,认为是奥黑政府为了解救通用和福特出此手段。但我认为此为瞎扯,奥黑巴不得通用、福特破产重组,然后告诉公会,要福利还是要工作,自己选吧。

虽然翻案了,但是丰田还是答应赔偿11亿美元,同时对外宣称,虽然调查结果表示我们的系统没有问题,但我们认为还是给消费者带来了困扰。而这11亿主要是支付官司钱,安装刹车是爷

车辆残值损失,消费者服务 公益事业之类。说白了就是丰田再掏11亿跪舔北美消费者。翻案这事儿,国内知道的好像并不太多。

     那么回到这个案子,说实话我在EE上翻到一篇文章,说的这事儿,口气倒像是个科普文章,作者还是个叫吉田润子的日本人。另外在CNN的财经频道也翻到这个内容,但好像

关注度不太高。我觉得与这个案子的意义太不相符了,因为如果这个案子判实了,那会是爆炸性的消息。而看丰田的股价基本没有什么波动.......所以本案的判决太重要了,到底判的是什么?

如果此案认定ECU确实是车辆刹车失控的罪魁祸首,那么意味着推翻了之前的调查,在以判例为准的美国,丰田很可能就要完蛋艹了,只能靠在本土卖卖AQUA苟活了。

    简单分析一下:1)凯美瑞的 ECU十有八九应该是denso的东西,实际上丰田不会对ECU再进行大量的编译,也就是说,本案里说的事情,很大程度上也应该是电装的问题,那可就不是

丰田一家的事情了。2) 这是个集体诉讼,从下载的文件上看,有不少人,但最终从现在能查到的情况下看,庭外调解的300万实际上也只是给两个人各150万,其中一个应该是造成1死1伤的那个事故,

150万作为赔偿是否有些低? 3)NASA这10个月干什么去了?没有理由看不出来ECU的编译根本没有遵守MISRA C以及ISO8系的规范。

    先说这么多,坐等楼主的甜点了。



[ 本帖最后由 ashbringer_k 于 2013-11-2 23:22 编辑 ]


TOP

posted by wap, platform: Android
引用:
原帖由 @deadpuppet  于 2013-11-2 22:43 发表
我就是觉得Barr的调查思路很奇葩啊:
1、设计业余。一个函数超过1300行代码怎么了,超过7k行的函数我都见过。这就一定出现Bug么?全局变量多也一定会产生Bug么?当然我也很讨厌这种设计,但不能说明他有Bug,如果想证明的话,需要找出实质证据。
2、代码不符合编码规范。我又惊了,这在业内太正常了吧?估计是使用了PCLINT或是什么工具检查了一下编码规范就蹦上来,说这会产生Bug。
递归就一定产生Bug么(递归我还真就用过一回,在后续的派生项目里还真就出现内存分配不足死机的bug)
有的程序员会这么写
malloc();
while(1){
//bulabula
break;
}
free();
如果想证明不符合编码规范,请找出证据
3、变量保护其实也是编码规范的一种,同上。

然后Barr为了证明这些代码的确有问题,使用了单元测试的方法
人为地改变了内存中的一个地址的值,于是出Bug了
那么,这个Case在实际情况中真的会发生么?

正常的路子应该是先根据用户提供的现象以及操作步骤去尝试再现这处Bug,(或者还有Log等),再结合代码,逆向分析出这个Bug的原因。
或者我就单纯分析代码,分析出至少一条能够导致出现这个Bug现象的Case,然后去再现它。
还人为地翻转一个特定字节,你怎么不去把用于通信的线缆都剪折了然后再测测?也能出Bug,出不了Bug你再把刹车拆了
难道陪审团里没有懂编程的?

最后照例乱喷一通:MBD现在经常新员工直接上(包括日本人与德国人),各种奇葩代码层出不穷,我艹。
至于前面有人提到的德国人的严谨,我更是懒得喷,能有多严谨,stop的时候不释放内存,原来是架构里根本就不支持(贼tm长见识)
PS:另外DTC模块的代码我也写过一小部分,头回知道DTC全称,寒自己一个
一个函数1300多行不能说明一定有bug,但哪个奇葩公司会在自己的编程规范里规定一个函数最大可以写1400行?要么是电装根本没编程规范,要么是码农没遵循规范。两种都是不靠谱行为。

misra c检查不过同理。就是tg数码区看不起的中兴,cdma基站的代码都是要求跑pclint全过,而且是check in时强制检查。给我们公司培训的前zte工程师亲口说的。

barr检查了代码发现位翻转会导致任务挂掉,注入一个位翻转错误结果验证了想法,这个不该喷吧。第一证明了出现问题的可能性,位翻转可能会导致任务挂掉。再说位翻转本来就是容易出现的现象,如果很少见ecc内存卖谁去?况且ecu工作环境本来就脏乱差。第二说明电装的测试范例覆盖不全,根本没考虑到位翻转的情况。假设电装的测试工程师做黑盒,模拟一个位翻转结果挂了,这就是一个必须修复的严重等级的bug。事实是这个bug根本没被测出来过。

一些罕见的错误确实会导致严重后果,还是上面说的那位培训师,他说光通信出现误码的概率很低,10的负好多次方。由于通信量很大,短期内就发生一些奇怪的问题。后来他们注入错误,生成各种错帧,把解帧引擎的错误排查干净了,就很少出问题了。

TOP

posted by wap
引用:
原帖由 @deadpuppet  于 2013-11-2 22:43 发表
我就是觉得Barr的调查思路很奇葩啊:
1、设计业余。一个函数超过1300行代码怎么了,超过7k行的函数我都见过。这就一定出现Bug么?全局变量多也一定会产生Bug么?当然我也很讨厌这种设计,但不能说明他有Bug,如果想证明的话,需要找出实质证据。
2、代码不符合编码规范。我又惊了,这在业内太正常了吧?估计是使用了PCLINT或是什么工具检查了一下编码规范就蹦上来,说这会产生Bug。
递归就一定产生Bug么(递归我还真就用过一回,在后续的派生项目里还真就出现内存分配不足死机的bug)
有的程序员会这么写
malloc();
while(1){
//bulabula
break;
}
free();
如果想证明不符合编码规范,请找出证据
3、变量保护其实也是编码规范的一种,同上。

然后Barr为了证明这些代码的确有问题,使用了单元测试的方法
人为地改变了内存中的一个地址的值,于是出Bug了
那么,这个Case在实际情况中真的会发生么?

正常的路子应该是先根据用户提供的现象以及操作步骤去尝试再现这处Bug,(或者还有Log等),再结合代码,逆向分析出这个Bug的原因。
或者我就单纯分析代码,分析出至少一条能够导致出现这个Bug现象的Case,然后去再现它。
还人为地翻转一个特定字节,你怎么不去把用于通信的线缆都剪折了然后再测测?也能出Bug,出不了Bug你再把刹车拆了
难道陪审团里没有懂编程的?

最后照例乱喷一通:MBD现在经常新员工直接上(包括日本人与德国人),各种奇葩代码层出不穷,我艹。
至于前面有人提到的德国人的严谨,我更是懒得喷,能有多严谨,stop的时候不释放内存,原来是架构里根本就不支持(贼tm长见识)
PS:另外DTC模块的代码我也写过一小部分,头回知道DTC全称,寒自己一个
呃,解释一下,关于那条链子,我从左往右写是为了文章逻辑结构的需要,并且更易理解。但Barr在调查的时候却是从右往左的。证词提到他们确实从最终结果开始反溯:暴冲>节气门不正常打开>节气门变量停止更新>Task X死亡>操作系统任务调配异常...>找到那个特定的比特。测试的时候再验证这链条从左往右走得通。证词本身的倒是乱序排列。
我觉得最触目惊心的是那一层层防护竟然都形同虚设,真是故意这么设计都难做到啊……

TOP

300万的settlement对toyota来说是很小的case了,赶紧settle down完事
越调查下去越麻烦,没有一个大的程序是经得起这种分析的

TOP

posted by wap

第三部分更新完毕,全文完,纠察错别字锐意禁区中

TOP

posted by wap
引用:
原帖由 @北  于 2013-11-1 17:02 发表
如果是原创,lz这文就发到了tg车区? 赶快去 xcar 车托之家转发

另外好奇lz本职是搞什么的,这么有时间有闲有兴趣挖掘很久之前发生的事



刚才下了2楼的文档,还以为是一大堆技术性文章,居然是庭审记录,不错,准备周末有时间看看

我没帐号(或者都是死帐号),随便转载,注明出处就行(球巫毒发工资)。
转载了记得过来贴一下链接,我好围观:D

TOP

真的假的???

例如这个


我:这么看来似乎手动档汽车更安全,你怎么认为?
Barr:很多专家都这么认为,离合器至少可以物理断开动力系统。但是我翻阅卷宗,发现其中有个案例是受害者开手动档凯美瑞载着家人,突然巡航系统失灵,无法取消。他踩下离合,同时试图躲避前方慢速车辆结果失控冲出路面造成单车事故。幸运的是没死人。

TOP

posted by wap, platform: iPad

长文贡献

TOP

引用:
原帖由 himura 于 2013-11-3 07:24 发表
真的假的???

例如这个


我:这么看来似乎手动档汽车更安全,你怎么认为?
Barr:很多专家都这么认为,离合器至少可以物理断开动力系统。但是我翻阅卷宗,发现其中有个案例是受害者开手动档凯美瑞载着家人,突 ...
只要是丰田,一切皆有可能。:D

TOP

posted by wap, platform: Nexus 7

马克斯密达

TOP

引用:
原帖由 himura 于 2013-11-3 07:24 发表
真的假的???

例如这个


我:这么看来似乎手动档汽车更安全,你怎么认为?
Barr:很多专家都这么认为,离合器至少可以物理断开动力系统。但是我翻阅卷宗,发现其中有个案例是受害者开手动档凯美瑞载着家人,突 ...
这个只能说断开引擎牵引后,车辆操控失常导致,是人的问题,但只要操控没问题,还是安全过自动挡,手动唯一的问题就是累了一天,上路堵车还得来回换挡。

TOP

posted by wap, platform: Nexus S

陆续补充一些好玩的东西,不适合放在正文里,就回帖吧。想到什么写什么。
Barr举例说明什么叫代码。他的例子是一个比较函数,比较两个参数数值大小,返回大的参数。比如输入11和10输出11。
辩护律师:如果给这个函数输入两个10,返回什么?
Barr:10
辩护律师:10是不是比10大?
Barr:不是
辩护律师:那么这是不是bug?
Bar:不是Bug。(blablabla五分钟)……总之这不是Bug。
辩护律师:不是Bug。不是Bug。(他说了两遍……)下一页……

TOP

我倒是问过一个与车企斗争了三十多年的职业状棍同样的问题,他开宝马。

TOP

发新话题
     
官方公众号及微博