ソフトウェアの品質を学びまくる2.0

旧ブログからゆっくり移行中です。http://blog.livedoor.jp/prjmng/

「IoTデバイスにおけるソフトウェアテストの課題」 #IoTテストアドカレ(1)

はじめに

 「IoTテスト アドベントカレンダー」とは、IoT(Internet of Things、モノのインターネット)のテストに関するインターネットの記事をつまみ食いし、どんなことが語られているかを把握しようという試みです。IoTおよびそのテストについて、わたしに十分な知識・経験があるわけではないことをおことわりしておきます。

 ちょっと前の「クラウド」や「ビッグデータ」、今なら「AI」や「機械学習」「ディープラーニング」と並んでバズワード的に浸透しているのが、「IoT」です。IoTが世の中に広がることで、開発者、そしてテスターには、どのような影響があるのか気になりませんか?
 「IoT Testing」でググってヒットしたトップ数十件*1を拾い読みしてみても、それぞれ語る角度が様々であることに気づきます。そもそも、「IoT」自体がそういう性質を持っていて、たとえば個人ユースのデバイスの話なのか、産業で用いられるM2Mの要素としてのデバイスの話なのか、といった軸がありますね。
 よってこのアドベントカレンダーでは、どこに軸足を置くかをあまり考えずにネットの情報を紹介していって、最終日にまとめてみるという算段です。

 しかしまさかQiitaだけでこんなにアドベントカレンダーがあるとは・・・。
 道半ばで息絶えても誰も気づかないようなひっそりカレンダーとしてやっていきます。

 では、1日目分、行ってみましょう。
 初日は、わたしが初めてIoTのテストというテーマに出会った、JaSST '16 TokyoにおけるJon Hager氏の基調講演の資料です。

プロファイル

タイトル: 『Software Test Challenges in IoT Devices』
著者: Jon D. Hagar, Consultant, Grand Software Testing
参照サイト: JaSST '16 Tokyo

ポイント

 本資料ではIoTデバイスを、ハードウェアに内蔵された特化型ソフトウェアであるいわゆる「組み込み系」(Embedded)と、小さくて持ち歩けるバイル・スマートデバイスが融合したものであるとしています。両者の違いは、通信の能力です。後者がモバイルネットワークを通じてWebに常時接続しているのに対し、前者の通信能力は、距離的にも容量的にも限られていることが一般的です。

 IoTの新しさとは、組み込み、モバイル、そして従来のパソコンやサーバ、そしてネットワークなどの要素がごった煮になっていることであり、それはそのまま、開発やテストの難しさまでもが猛然と持ち込まれてきています。
 本資料では、IoTにおける以下の5つの課題について説明しています。

  • 課題1: 複雑なハードウェアとソフトウェア
  • 課題2: 多数のデバイスとコンフィグレーション
  • 課題3: ビッグデータと分析
  • 課題4: プライバシーとセキュリティ
  • 課題5: 接続性

課題1「複雑なハードウェアとソフトウェア」

 テストのアプローチとして、「要件の検証」、「リスクベースドテスト」、「攻撃ベースの探索的テスト」の3つを挙げ、さらにこの3つ目を、以下の4つに分けています。

  • モデルベースドテスト: 開発時点で適切なモデリングを行い、そこからテストケースが生成されるようにする。さらにその情報を自動テストエンジンに投入し、キーワード駆動型の自動テストが実行できるようなテストフローを検討する。
  • 数学ベースのテスト: テストに関係する要素がソフトウェアの中に閉じなくなることで、組み合わせ爆発がさらに深刻になる。これに対処するために数学的な理論に基づいたテスト技法を適用する。
    代表的なのが、組み合わせテスト(Combinatorial Testing)。また、乱数を発生させてのファジングテストや、従来の同地分割/境界値分析などもここに含まれる。
  • スキル/経験ベースのテスト: 過去に繰り返し現れた欠陥のパターンを狙っていくなど。攻撃が想定される要素が激増するので、知識ベースが必要。
  • 標準/プロセスベースのテスト: IEEE1012やIEEE29119など、標準化されたフレームワークをベースにテストの網羅性を検討する。

課題2「多数のデバイスとコンフィグレーション」

 スマートフォンのOSを考えてみても、Android Fragmentationと呼ばれる現象があり、組み合わせの対象が膨大であることが想像できます。ここでの対処法の1つは、課題1でも挙がった数学ベースのテストです。 opensignal.com

ビッグデータと分析

 IoTでは、流通するデータ量がさらに膨大になります。テスターもまた、データ分析の能力を養う必要があるとしています。

プライバシーとセキュリティ

 自動車や医療関連のデバイスがIoTに接続している場合、通信が妨害されたりデータが改竄されたりすると事態は深刻です。また、医療・保険・公共機関のデータが詐取されると、個人情報が侵害されるリスクがあります。
 テスターとしては、従来のシステムに対する攻撃手法を学び、テストに活かすことが求められます。ここで著者のCMです。

接続性

 物理的な接続性はもちろん、デファクトスタンダードの決着もついていない通信プロトコルに対する準拠や、データの正確性・完全性に対する検証が必要です。リスクベースドテストや、自動テストの繰り返し実行による一貫性の保証が必要だとしています。

所感

 まず、IoTの何が新しく、何が難しいのかということを理解することができました。また、IoTのテストに向けてどのような技術・ツールが必要になってくるかが概観されており、テストエンジニアとして学ぶべきテーマの輪郭が少し見えてくるように思います。

 なおJon氏は、IoTのテストに関する電子書籍を発行しています。どちらかといえば、テクニカルよりプロセスの話が多い印象ですが、読書会などしても面白いかもしれませんね。 leanpub.com

 2日目はコチラです。(12月2日の0時に公開されます)

kzsuzuki.hatenablog.com

*1:ちなみの検索を行うと、けっこう上位に「Interoperability Test」、つまり相互接続性についてのテストとしての「IOT」が挙がりますが、対象外としています・・・