2019 年 10 月 23 日
IoT時代の組込みLinux/OSSのテスト手法 〜Linaro Connect Vancouver 2018参加レポート〜
サイバートラスト社員がLinaro Connect Vancouver 2018 に参加し最新の組込みLinux/OSSのテスト動向を調査したレポートです。テスト手法に関する発表とサイバートラストの組込み分野のテスト自動化への取組みについてご紹介します。
つながる時代は出荷後もアップデートが必要。でも品質は?
社会におけるIoT化の流れに伴い、組込み機器はネットワークを介して他のシステムやクラウドと相互につながり、新しい価値を提供するようになってきました。そうすると機器のソフトウェアのライフサイクルも変わってきます。従来のように開発、テスト、出荷(リリース)で終わりではなく、出荷後もアプリケーションやOSに対するセキュリティアップデートの適用や機能改善を行うため、OTA(Over The Air)等を活用してソフトウェアを継続的にメンテナンスできることが必須の機能として求められてきています。
しかし、アップデートを適用する際の品質はどう確保すれば良いのでしょうか?従来は製品の出荷前に長期間のテスト工程を設け、大きなコストをかけて品質を保証してきました。アップデートのたびに同様のテストを実施するとなるとコストがN倍になってしまい、採算が合わなくなってしまいますので今までのやり方を変えなくてはいけません。そこで組込みソフトウェア開発で現在注目されているのが、すでにWebサービスの世界で普及している「テスト自動化」や「CI/CD(Continuous Integration/Continuous Delivery)」です。製品の仕様を定義し、これまで手動で行っていたテストを可能な限り自動化して変更が追加されるたびに毎回自動でテストを走らせ、機能や性能が劣化していないかを継続的にチェックしていく取り組みを始める必要があります。
一方、近年の組込み製品ではLinuxなどのOSS(Open Source Software)を活用しているケースも多くなってきています。製品で使用しているOSSにセキュリティアップデートなどを適用する場合にも自動化されたテストが役立つでしょう。また、OSSコミュニティでの開発でどのようなテストが実施されているのかも参考になりそうです。サイバートラストでは組込みLinuxのディストリビューターとしてテスト自動化やCI/CDに関する取り組みを行っていますが、今回R&D活動の一環として、2018年9月にカナダ・バンクーバーで行われたLinaro Connect Vancouver 2018 (https://connect.linaro.org/) に参加し、最新の組込みLinux/OSSのテスト動向を調査してきました。
Linaro Connectで発表されたLinux/OSSのテスト関連技術
Linaro Connectは、ARM向けOSSのエコシステムに関する協業を行う非営利組織であるLinaroが年に2回開催する、Linaroメンバーの成果発表やOSS開発者の講演が行われるイベントです。LinaroはARM Linuxの開発に大きく貢献している組織であるため、Linaro ConnectではARM Linuxの世界で起こっている最新の動向を知ることができます。今回参加したLinaro Connect Vancouver 2018ではテストに関連した発表がいくつか行われましたが、その中から注目した次の4つの発表をご紹介します。
What is LKFT and how does it improve the Linux kernel overall quality
LinaroのDan Rue氏によるLKFT(Linux Kernel Functional Testing)を紹介する発表です。LKFTは、コミュニティで開発・メンテナンスされるLinuxカーネル(mainline, LTS, -nextツリー等)の全ての変更に対して自動でリグレッションテストを実施するための仕組みです。Linaroによって運用され、実際にいくつものバグを検知して開発コミュニティにレポートし、Linuxの品質向上に役立てられています。LKFTではリグレッションテストを行うにあたり、テストが通らなかった際のレポーティング機能を作りこんでいたり、問題を確実にハンドリングするための「トリアージ」と呼ばれるプロセスを導入したりするなど、テストシステムの運用という観点で多くの工夫が見られました。
発表資料URL: https://connect.linaro.org/resources/yvr18/yvr18-313/
Let's Talk Kernel Selftest
Samsung ElectronicsのShuah Khan氏(Kselftestのメンテナー)による発表です。KselftestというのはLinuxカーネルの各サブシステム向けの機能テストの集合体であり、また、それらの各機能テストを実行するためのフレームワークです。前述したLKFTでもリグレッションテストのためのテストケースの一部としてKselftestが使われています。発表ではKselftestがどのように実行されるのかや現在の開発状況について紹介がありました。現在はデバイスドライバのテストのカバレッジがまだ弱いとのことで、その部分での貢献を呼びかけていました。
発表資料URL: https://connect.linaro.org/resources/yvr18/yvr18-200k1/
Writing Better Function Tests with GCOV
LinaroのMasami Hiramatsu氏によるカーネルのテストのカバレッジ向上手法に関する発表です。GCC(GNU Compiler Collenction)に付属するGCOVというツールを使ってテストケース実行時のカーネルのテストカバレッジを測定し、カバーできていない部分のためのテストケースを追加することでカバレッジを上げていく方法について解説がありました。実際にこの手法をftracetest(Linuxカーネルのサブシステムftraceのためのテストであり、前述したKselftestの一部)に適用し、テストのカバレッジを向上できることが示されました。また、この取り組みの中で実際のバグを発見するなど、テスト対象であるftraceの品質改善にも役立ったという話もありました。
発表資料URL: https://connect.linaro.org/resources/yvr18/yvr18-224/
OpenSDK OE builds in MMWG
Texas InstrumentsのAndrey Konovalov氏によるLinaro MMWG(Multimedia Working Group)での取り組みに関する発表です。MMWGではJenkinsを使って成果物の自動ビルドテストを行っています。それだけではなくLAVAやRobotframeworkといった他のツールも組み合わせて、OP-TEE(セキュア実行環境)、Weston(ディスプレイマネージャ)、Gstreamer(マルチメディアフレームワーク)、Chromium(Webブラウザ)といったソフトウェアを対象に機能テストや動作テストも自動で行っています。さらに今後のToDoとして、Chameliumというディスプレイの動作をエミュレートするハードウェアを活用して、HDMIコネクタへの出力を検証したいという話も出ていました。
発表資料URL: https://connect.linaro.org/resources/yvr18/yvr18-110/
組込み分野のテスト自動化に向けたサイバートラストの取り組み
Linaro Connectの中からテストに関する発表をいくつか紹介しましたが、いかがでしたか?品質に関する諸課題に対して、OSSの世界で様々なテストの取り組みが行われていることが伝われば幸いです。
さて、サイバートラストでも社内でテストに関連した取り組みを実施しています。特に組込み分野では、LAVA、KernelCI、Fuegoといったテスト自動化やCIのためのツールを活用したR&Dを行っています。また、CI/CDに関してご相談をいただくこともあり、組込み製品を開発されるお客様がCI/CDを始めやすいソリューションについても検討を行っているところです。さらに、サイバートラストが参画する社会インフラ向けOSSの協業プロジェクト「Civil Infrastructure Platform」においてもカーネルのメンテナンスで貢献しているほか、今後はテストに関連しても貢献していきたいと考えています。
これからのサイバートラストの取り組みにご期待ください。