グローバル変数、スパゲッティコードと聞いて、ダメだろうと思うのは素人?!

Toyota Unintended Acceleration and the Big Bowl of “Spaghetti” Code | Safety Research & Strategies, Inc.

O'Reilly Radarで知った記事だが、この記事自体は2013年、トヨタがオクラホマ州での急加速を巡る訴訟で和解した後に書かれたものである。

この記事で面白いのは、Michael Barr が20ヶ月以上にわたりトヨタ車で使われているソースコードを、Philip Koopman カーネギーメロン大学教授がトヨタのエンジニアリングの安全プロセスを精査した話で、両者ともトヨタのソフトウェアがスパゲッティコード山盛りなことを証言している。
トヨタの車のソースコードはスパゲッティコード山盛り? - YAMDAS現更新履歴


上記のことは、実はよくわからないので、

あくまで、組み込み系の世界は、別物だという話を書いておきたいと思います。

トヨタの車のソースコードはスパゲッティコード山盛り? - YAMDAS現更新履歴

組み込み系の物から順調に成長するとそうなるよなぁ

2015/06/04 10:30

iPhoneが、WindowsやAndroidと違って、アプリとファイルとが密接に繋がりすぎるようになってるのと似たようなものだと僕は思うけどね。音楽プレイヤーから順調に成長するとそうなってもおかしくない。

それはともかく、組み込み系っていろいろ普通のプログラムとちがうところがあるので、一般論で評価できにくいところはあるかと思う。

言語はなにを使っているのか?とかそういう部分にも着目してほしいところ。

トヨタの車のソースコードはスパゲッティコード山盛り? - YAMDAS現更新履歴


takamR1氏によるPDFの40頁をみると具体値で、少なくとも9,273個、多くて11,528個のグローバル変数があり、その内の6,971個がlocal staticである可能性があり、1,086個がfile staticである可能性があると指摘。恐ろしい、恐ろしい。

2015/06/04 10:39

グローバル変数だけど、ローカル変数と同等の使い方をしている場合もありそうに思うんだけどね。
ROM化とかの加減で、変数はROM領域で無くて、RAM領域にマップされないとダメだからとかそういうのは昔はあった気がするんだけどね。

トヨタの車のソースコードはスパゲッティコード山盛り? - YAMDAS現更新履歴

『複雑すぎてテストもメンテもできない関数がたくさんある』…のに、どうして安全だという結果になったのか(・ω・)

2015/06/04 09:57

組み込み系のテストの仕方、デバッグのしかたは、いろいろ面倒だった記憶がある。
昔は、デバッガーで人力でステップ実行してテストやバグ取りしてたよ。ガラケー全盛期でも。

トヨタの車のソースコードはスパゲッティコード山盛り? - YAMDAS現更新履歴

古いc++を使ってると噂で聞いたことあるが本当なんだろうか

2015/06/04 10:10

携帯電話(ガラケー)だと、アッセンブラ、C言語までだったと思う。
C言語のルールでも、前世代的なことが当然のルールとして採用されている世界だった思う。

貧弱なCPUとメモリーなので、前世代的なことをしないと
速度(応答性)を確保できないって言う部分もある。

iPhoneだって、アンドロイドよりも内部メモリー(RAM)を少なく搭載しているのは、その分が利益になるからじゃないの?と思うんだけど、そういうノリだと思うよ。

iPhoneアプリはネイティブコードだから、Androidと違ってメモリーが少なくても快適に動くんですとかいう論理もあるけど・・。

組み込み系もネイティブコード路線なわけです。アッセンブラに近い路線なわけです。
ただ、今はしらないけど・・・。

C言語で書くとしても、内部でどういう機械語(アッセンブラ?)になるかを想定してかうという世界だったはず。
C言語使えるだけでもかなり幸せな世界だったはず。

i++ <-OK
i=i+1 <ー NG

そういえばiPhoneって、ロック画面を迂回できてしまう脆弱性

なんか、毎回そういうの出てくるけど、構造的に問題あるんじゃないの?って話で、
トヨタ?のも、そういうのがあるんじゃないの?というのは、あるかもしれないねとは思う。

脆弱性って言ってるけど、テストしてないの?
テストしにくいの?
とか・・・。

医療事故?とかと同じく・・・

同業者の意見?感想?というのは、
一般人の感覚に比べて、
甘い?という可能性は多分にはあると思う。

同業者らしき人が、こういうものなんですよと言うのは、あくまで参考程度に聞いておいた方がよいかもとは思う。
やっぱり、同業だと、擁護的になってしまうんですね。

車載ソフトのガイドライン

コメントで知ったので、追記しておきます。

ワード氏 日本の自動車業界では、車載ソフトウェア開発にMISRA Cが広く利用されている。ISO 26262に準拠した車載ソフトウェアの開発プロセスを構築する際にも、MISRA Cを活用してその品質と安定性を向上できるようにしたいという要望があった。

 しかし、車載ソフトウェアの開発プロセスでISO 26262対応を進めると、MISRA Cの逸脱の手続きを多用する必要が出てくる。その一方で、逸脱の手続きというものは、適切な条件で使用しなければ、車載ソフトウェアの品質と安定性を向上することができない。そこで、ISO 26262対応と、MISRA Cによる車載ソフトウェアの品質と安定性の向上を両立させられるように、逸脱の手続きを使って良い状況などを明示する必要があったわけだ。
MISRA 車載ソフトウェア インタビュー:車載ソフトの新ガイドライン「MISRA C ADC」、ISO26262対応と品質確保を同時実現 - MONOist(モノイスト)


自動車業界では今世紀に入ってから,完成車であれECU(electric control unit)部品であれ,搭載する組み込み制御ソフトウェアの信頼性を明確に示すことを求める声が高くなってきました.この要請に応えるため,Cソース・コードの信頼性を検証する手段として,MISRA-Cが各国の自動車メーカで採用されたという経緯があります.日本はこの要請に的確に対応して,ソース・コード・レベルでの品質向上を果たしました.そして次の課題が,安全性解析というわけです.
自動車分野の機能安全規格に対処する実務ガイドライン「MISRA-SA」を知る ――自動車業界の要請はCコーディング・ガイドラインから安全性解析へ|Tech Village (テックビレッジ) / CQ出版株式会社


関連記事

嵐のコンサートがあるとオーバーブッキングするシステムって普通なの?!
ニトリネットは頑張ったほうじゃないかなぁと思う

スポンサーリンク

『グローバル変数、スパゲッティコードと聞いて、ダメだろうと思うのは素人?!』へのコメント

  1. 名前:MISぼRA-C : 投稿日:2015/06/05 07:35

    MISRA-CとかISO26262も知らない人に批判する資格はないと思うよね。
    file scopeや関数scopeのstatic変数はシングルトンなら害はないし。

  2. 名前:匿名 : 投稿日:2015/06/25 10:51

    RAMがぎりぎりの時は変数をstatic にして再帰は使わないとか
    変な工夫が・・・

コメントを残す

メールアドレスは公開されません。
また、コメント欄には、必ず日本語を含めてください(スパム対策)。