人々:-トヨタ、ここでそれを理解しました。2000年から2010年にかけて、不器用な電子機器とソフトウェアのために89人が死亡しました。
トヨタ:-はい、彼らは自分たちのせいだ、彼らはペダルを混乱させる。
人々:-ヒューストン、問題があります。
NASA:-10か月と300万ドルが必要です。
人々:-オン。
トヨタ:-300万では足りません。ここにキャッシュがあります。
(10か月経過)
NASA:-トヨタさん、コードにいくつかエラーがありました。MISRA規格の7134違反、再帰、740行の関数、9000のグローバル変数が見つかりました。
トヨタ:-そして、私たちには独自の基準があります。 そしてついに月に飛んだのですか?
NASA(公の場):-トヨタは何のせいでもない。
(トヨタのシェアは4.6%上昇しました)
人々:-まあ、ヨミン。
(3年後)
2人のアメリカ人テスター(その祖父はパールハーバーで亡くなりました):-バグはありませんか? そして、私たちが見つけたら?
National Highway Traffic Safety Administration(NHTSA)は、2000年から2010年までに89人が事故で死亡し、57人が電子機器の故障により負傷したと推定しています。
トヨタは電子機器の罪悪感を否定し、 独自の調査に基づいて、粘着性のあるガスペダルと不適切に取り付けられたフロアマットが原因であると考えていますが、世界中で850万台の車をリコールしています。
苦情は続きます。
心の弱い人に注意してください
NHTSA は独自の調査を開始し、 NASAを支援することに惹かれました。
10か月の調査の間に、NASAの専門家は、ソフトウェアがMISRA (自動車産業ソフトウェア信頼性協会)標準に準拠しておらず、7134の違反が含まれていることを発見しました。 トヨタは、独自の基準があると答えた。
2010年12月20日、トヨタはすべての請求を拒否しますが、試用前の請求で160億ドルを支払い、一部の車種のソフトウェアアップデートをリリースし、550万台の車をリコールします。
NASA調査の発表後、東京証券取引所のトヨタ株式は4.6%上昇しました。
2013年、2007年の事故に関する訴訟がオクラホマ州裁判所で提起され、2005年のトヨタカムリで2人の少女が転落しました。 そのうちの1人は死亡し、もう1人は彼女の背中と頭に怪我をして5か月間病院で過ごしました。 トヨタは無罪を認めた。 彼らは、事故の原因は、運転手がガスとブレーキのペダルを混同したことであり、彼女が彼女の間違いに気づき、減速し始めたため、遅すぎると述べた。
2人のエンジニア、Michael BarrとPhilip Kupman がケースに参加しています。 20か月間、280,000行のコードを解析し、800ページのレポートを作成します。 みなさん。
住所が分類されました。 エンジニアが働いていたホテルの部屋は24時間警備されていました-警備員は誰も書類を持ち込んだり取り出したりしないようにしました。 すべての電話とインターネットが切断されました。
トヨタは世界中で1000万台以上の車をリコールしました 。 罪悪感は認められませんでした。
マイケル・バーによると、彼らの報告は分類されています。 彼らはまた、契約の条件を分類し、その条件でトヨタのソースコードを提供しました。 しかし、Barrは、聴聞資料の転写をグーグルで検索することを推奨しています。
このような状況で、アナリストは次のように働きました。
そして、そのようなレポートが書かれました:
彼らが検索した方法と見つけたもの
主なテーマは、電子スロットル制御システム(ETCS)です。
NASAの専門家は、X線で超小型回路をスキャンしました。
宇宙線でさえエラーの原因と考えられています。
そして、Cコードがチェックされました:
そして、コードに変わりました。
MISRA(およびNASA)規格の違反
推定によると、MISRA規格の違反が30回発生するたびに、「重大なバグ」が1つ発生します。
- MISRA-C:1998には127のルールがリストされています(93の必須ルールと34の推奨)。
- MISRA-Cには141のルールがあります:2004(121の必須および20の推奨)。 ルールは21のカテゴリに分かれています。
- MISRA-C:2012には、143のルール(それぞれ静的コードアナライザーでチェックできます)と16のディレクティブ(コンプライアンスが解釈されているか、プロセスや手順に関連しているルール)があります。 ルールは、必須、必須、推奨に分けられます。 個々の放送ユニットまたはシステム全体に適用されます。 ルールは、決定可能と決定不能に分けられます。
トヨタは、その基準で11のMISRAルールのみを借用しています。
NASA分析ツールは35のMISRAルールを検証でき、そのうち14が違反されました。
[出典-NASAレポート、付録A:ソフトウェア 、p。28]
合計: 7134違反(NASAの推定による)または81 514(マイケルバーの推定による)。
10 NASAルール
Habréに関する記事- 「NASAが最小限のエラーで数百万行のコードを記述できるようにする10のルール」
10の力-安全性の重要なコードを記述するための10のルール
[ソース-spinroot.com/p10 ]
- 単純な制御フロー構造に制限します。
- すべてのループに上限を固定します。
- 初期化後に動的メモリ割り当てを使用しないでください。
- 関数を60行以下のテキストに制限します。
- 平均して、関数ごとに最低2つのアサーションを使用します。
- 可能な限り最小のスコープレベルでデータオブジェクトを宣言します。
- 非void関数の戻り値を確認し、関数パラメーターの有効性を確認してください。
- プリプロセッサの使用をファイルの包含と単純なマクロに制限します。
- ポインターの使用を制限します。 式ごとに2レベル以下の間接参照を使用します。
- すべての警告を有効にしてコンパイルし、1つ以上のソースコードアナライザーを使用します。
[ソース-spinroot.com/p10 ]
空の行とコメントを削除した後、関数の長さは60〜75行のコードに制限されます。 Camry05コードの200を超える関数が指定された長さを超えています。 機能の1つは740行にありました。
変数
31の名前が異なる領域(異なるスコープ)で何度か発表されました。 最も一般的な名前はsts_flags1で、57の異なる領域に表示されています
しかし、大きく見せることは価値があります。
コードの絡み合い
単純なプログラムのフロー制御グラフ。
50を超えるプログラムの循環的複雑度は、プログラムをテストできないことの指標です。
トヨタにはETCSコードがあります:
- 50以上の複雑さを持つ67の関数
- 難易度スロットル角度関数= 146; 1300行のコード、ユニットテストの計画なし
再帰
トヨタは再帰コードを使用し、それに関するすべての問題がプロセッサーのリセット(CPUリセット)につながりました。
それで何?
人々の生活に依存する
「今日のプログラミングは、開発者が大規模で誰にも負けないプログラムを構築するために競うレースであり、ますます高品質の愚か者を生み出す宇宙です。 現時点では、宇宙が勝利しています。」
-サイエンスフィクションライター、リッチクック
メディア
- 米国当局はトヨタを正当化した (2011年2月9日のKommersant)
- 米国運輸省が、NHTSA-NASAによるトヨタ車の意図しない加速に関する研究の結果を発表 (2011年2月8日)
- トヨタの暴走車の心配はフロアマットで止まらないかもしれない
- NHTSA-NASAによるトヨタ車の意図しない加速の研究
- トヨタETCS-1システムハードウェアおよびソフトウェアの分析
- トヨタリコールタイムライン
調査レポート
Philip Kupmanによるカラフルなプレゼンテーション:
トヨタの意図しない加速調査に関するNASAの報告
NASAエグゼクティブサマリー
NASA完全レポート
トヨタの意図しない加速調査に関するNHTSAレポート
PS
4年前
どこへ行っても、私の仕事は1つの簡単な式を適用することです。 私は秘密を守ります。-チャック・パラニューク「ファイトクラブ」、1996年。
これは初等算術です。
教科書からのタスク。
私の会社が作った新しいモデルの車が60 mphの速度でシカゴを西に出発し、後車軸が詰まった場合、車が車内に閉じ込められた全員でクラッシュして火傷する場合、修正のためにモデルを返品する価値があります?
このモデルの生産された車の総数(A)を取得し、故障したと推定される車の数(B)を掛け、その後、試用せずに問題を解決する平均コスト(C)を掛けます。 AでBを乗算し、Cで乗算します。Xに等しくなります。修正のためにモデルを返さないことの価値は大きいです。
Xが返品のコストを上回る場合-車を返品するので、誰も苦しむことはありません。
Xが返品のコストよりも小さい場合、返品はありません。
-そして、しばしばそのような事故がありますか?-1999年の映画「ファイトクラブ」へ。
「あなたにはわからない。」
-どの会社に勤めていますか?
-非常に大きなもの。