導入事例:株式会社デンソー様

コンパイラに潜む致命的なバグを発見、評価結果は自動車メーカへの報告に活用

パワートレイン系の開発で培ったノウハウを全社へ展開

User Profile:

株式会社デンソー様は、先進的な自動車技術、システム、製品を、世界中の自動車メーカに提供するサプライヤです。パワートレインやITSといった車載機器のほか、CO2ヒートポンプ給湯器などの生活関連機器、ロボットやFAコンピュータなどの産業用機器の市場でも事業を展開されています。

開発元でもテストしきれない

デンソーは、社内で標準的に利用するCコンパイラの選定プロセスの一部として、日本ノーベルの「コンパイラ評価サービス」を活用しています。コンパイラ評価サービスとは、ユーザが使用するコンパイラに数十万本のテストプログラムを入力し、その挙動を解析してコンパイラに潜む不具合を検出するサービスです。

コンパイラ評価サービスの位置付け

例えばコンパイラを更新する際などに、本サービスの評価結果を顧客に示せば、品質管理に万全を期していることのアピールになります。「弊社製品開発に使用しているコンパイラ環境が、『日本ノーベル評価での不具合件数がゼロ』という実績は、お客様である自動車メーカ様に製品を納める際の品質面のご報告にも利用させていただくこともあります」(デンソー 基盤ソフトウェア技術部 技術企画室 技術企画1課 担当課長の谷 充弘氏)。

コンパイラを網羅的にテストすることは、容易ではありません。コンパイラに入力するソースコードは人間が書くものなので、さまざまなパターンがありえます。コンパイルオプションの組み合わせも多岐にわたります。コンパイラの開発元がどれほど時間をかけたとしても、あらゆるパターンや条件を加味してテストすることは不可能です。

最近では、自動車の制御系ソフトウェアの開発に、MATLAB/Simulinkなどの自動コード生成ツールを利用する例が増えています。自動コード生成ツールは、人間では思いもよらないコードを出力する場合があります。そのようなコードが入力されることは、コンパイラの開発元にとっても想定外のようで、この部分についてきちんとテストされていないコンパイラは少なくないようです。

専門チームを立ち上げて全社をサポート

デンソーが本サービスの導入を決めた背景には、マイコン選定に関する同社の方針変更がありました。同社は従来、車載用マイコンについて、カタログなどに掲載されている標準品ではなく、車載向けに開発されたカスタム品を主に利用してきました。マイコン用の開発ツールはカスタム品を供給するマイコンメーカが用意し、Cコンパイラの品質評価も長らくマイコンメーカが行っていました。

2012年頃に、こうした状況に変化が起こります。カスタム品を供給してきたマイコンメーカの経営環境が変化し、マイコンの品種数の絞り込みが行われました。それに伴い、デンソーは標準品のマイコンを積極的に採用するようになり、その結果、マイコンの調達先が分散し、使用するマイコンやコンパイラが増えました。

ここで問題となったのが、Cコンパイラの品質評価です。それまで特定のメーカに任せていた作業ですが、使用するコンパイラにかかわらず一定の品質を担保するため、自社でコンパイラの品質評価を行う必要性が出てきました。

同社は2013年に、パワートレイン系(エンジンECUなど)のソフトウェア開発に携わっていた技術者の中からコンパイラに詳しい人材を集め、コンパイラ技術の専門チームを立ち上げました。「(このチームは、)全社で標準的に利用できるコンパイラパッケージの選定、推奨コンパイルオプションの選定、コンパイラの品質確保、性能改善、保守・運用を担当しています」。プログラムが複雑で、かつ安全性が求められるパワートレイン系のソフトウェア開発で培ったコンパイラの評価・利用技術を全社へ展開することが、チーム発足の狙いでした。

コンパイラ評価サービスの導入と社内への展開は、このチームが中心となって進めました。

実績は20年前から聞いていた

デンソーが日本ノーベルのコンパイラ評価サービスの採用を決めた理由は、二つあります。一つ目の理由は、コンパイラ評価のサービスやツールを提供している企業が世界に4社ほどしかなく、日本の会社が日本ノーベルだけだったことです。二つ目は、カスタム品を供給していたマイコンメーカが本サービスを利用しており、そのメーカを通して日本ノーベルの実績を知っていたことです。「間接的にこういうサービスがあることは、20年前から耳にしていました」。

コンパイラの評価は、一つのコンパイル環境当たり約1カ月で完了しました。本サービスの導入にあたっては、以下の確認や準備が必要となりました。

  1. マイコンの(命令セット)シミュレータを用意できること
  2. コンパイラは、コマンドモード(CUI)で実行できること
  3. 評価期間中のコンパイラの利用ライセンスを日本ノーベルに貸与できること

このほかに、技術面の負担や難しい点はありませんでした。

未定義部分やライブラリに不具合

デンソーではこれまでに、コンパイラ製品、バージョン、コンパイルオプションの異なる20種類のコンパイル環境について、本サービスによる品質評価を行っています。「実際に、致命的な不具合が見つかった、というケースがありました」。よくあるのは、C言語の規格の未定義部分で過度な最適化を行い、結果として演算結果が変わってしまうというケースです。また最近は、標準Cライブラリの浮動小数点型の処理に無限大を入力したときの挙動が、コンパイラによって異なることを発見しました。開発元の管理に問題があるのか、C89規格で定義された機能とC99規格で定義された機能が一つのライブラリの中に混在しているケースも見つかりました。

同社の評価によると、「継続的に日本ノーベルの評価サービスを適用しているベンダのコンパイラと、そうでないベンダのコンパイラでは、不具合の検出件数に3倍の開きがある」そうです。過去に一度も、こうした評価サービスを適用したことのないコンパイラに本サービスを適用すると、ほとんどの場合、10件以上の不具合が検出されます。そして、評価を繰り返すとバグの修正が進み、不具合の検出件数は0件、または多くても2~3件程度に収束するようです。

コンパイラ評価サービスで見つかる不具合の検出件数

デンソーによると、継続的に日本ノーベルの評価サービスを適用しているベンダのコンパイラと、 そうでないベンダのコンパイラでは、不具合の検出件数に3倍の開きがあるという。

このように、本サービスを利用すると、開発元のテストでは発見されなかったコンパイラの不具合が見つかります。これは、開発元が想定していない状態を作り出すテストケースを日本ノーベルが用意しているため、と考えられます。例えば、行儀のよくないコードや、静的コード解析ツールがワーニングを出すようなコードもテストケースとしてあえて入力しています。前述した、自動コード生成を考慮したテストケースも用意しています。

ADASや自動運転車の開発を支える

デンソーは、本サービスによってテストしたコンパイラを、パワートレイン系やクルーズコントロール、エアコン、メータ、センサ、2輪用エンジンECUなどのソフトウェア開発に利用しています。さらに今後は、ADASや自動運転車の開発に利用しているコンパイラについても、本サービスを適用していく方針です。

本サービスには、課題もあります。現状のサービスでは、主にC言語の規格で規定された部分を中心にテストしています。デンソーは、評価の範囲をSIMD命令やGPUに拡大することを希望しています。「ADASの白線認識や歩行者検知などでは、画像処理の性能が重要になります。このようなシステムではSIMD命令がよく使われます」。

言語規格外となるコンパイラの独自機能の評価を日本ノーベルに依頼することは可能です。この場合、評価だけでなくテスト設計から委託する必要があります。日本ノーベルでは、組込みライブラリやSIMD命令、数値演算コプロセッサ命令、OpenMP対応コンパイラの並列化処理といった機能の評価実績があります。