2012/07/14

組み込みTDDにおける関数ポインタ置換とモックオブジェクトの導入について


先週末、組み込みTDD読書会第5回をやりました。
内容は以下の輪読およびディスカッション。

  • 第9章 「Runtime-Bounded Test Doubles」
  • 第10章「The Mock Object」
#当日のやり取りはtogetterにもまとめていますので、そちらも参照ください。

第9章 「Runtime-Bounded Test Doubles」

C言語でプロダクトコードを実装する場合、依存先モジュールをTest Doublesに置換する方法として、プリプロセッサ、リンク、関数ポインタがあります。第8章で紹介されていたリンク時置換は実行時に関数を置き換えることができず、自由度は低いというデメリットがあります。テスト実行中に、あるときはプロダクトコード、またあるときはTest Doublesに置き換えたい場合は、第9章で紹介されている関数ポインタ置換が有効です。

ただし、ディスカッションの中で関数ポインタとプリプロセッサはコードの可読性を下げる副作用があり、多用しない方がいいという意見が挙がりました。そして、書籍内ではほとんどプリプロセッサ置換の話は出てこず、著者はプリプロセッサ置換はあまり好きじゃないのかもしれません。

第10章「The Mock Object」

第10章は、組み込み業界だとなじみの薄いモックオブジェクトについて。
題材は実在するフラッシュメモリのデバイスドライバです。フラッシュに限らず、デバイス入出力は以下の理由でハードウェアと統合する前にモックオブジェクトを使った品質を確保する手法が有効なのだそうです。


  • 詳細なプロトコルに従って書き込み・読み出しをするテストは、通常のテスティングフレームワークでテストしづらい。
  • 本物のデバイスではテストできないケースがある。(例)特に例外系などは再現できない場合がある。


10章の大半はC言語でモックオブジェクトを実装する方法について解説が割かれています。一方で、C++のモッキングライブラリCppUMockやC言語のモック生成ツールCMockなども紹介されています。

たいていの場合、モック自身が複雑になると思うので、解説を見る限りでは自作モックはモック自身のちゃんとしたテストが必要な印象を受けました。
#ライブラリの品質が保証されていればOK?

一般的に、デバイスの入出力をある程度共有化できるように作ると思うので、モックを作ったり、コストをかけて取り組む価値は出てくるのかなと思いました。

最後に業務系やWeb系でモックオブジェクトが流行っている理由について話が及びました。理由は簡単で、言語的制約がないためモッキングライブラリが整備され、モッキンぐライブラリが使いやすくなっているからではないかとのこと。

こういう点が組み込みTDDが、組み込みじゃないTDDとの違いで。言語制約を乗り越えるためのスキルや仕組み作りなしには、TDDの効果を出せないのかと思いました。

2012/07/07

「Mobile5~HTML5の現状とこれから~」に参加した。そして、その後に感じたモヤモヤ


先日、豆蔵さんのトレーニングルームでやっていた「Mobile5~HTML5の現状とこれから~」というイベントに参加してきました。

私は、新卒以来5年間、仕事でべったべたの組み込みをやっているのですが、

  • 技術者として、モバイルがらみも気になってウォッチしていた。
  • 消費者として、スマフォはまー使ってるし、その他のモバイル端末は気になってる。
  • 9月ごろから余裕が出そうだし、何か作りたいな~でも何作ろうかな~。

ともやもやしてたところに、TLでモバイル、組み込み、HTML5などなどのキーワードが流れてきたので興味もって参加してみました。

このエントリでは、主に発表内容が理解できた主催者の@tomo_watanabeさんの発表を聞いて思った感想を書きます。

えっと、おそらく私のすぐ近くに座っていた方がかなり詳しいレポートを書いているので、詳しくはそっちみてください。
http://hoshi.air-nifty.com/diary/2012/07/mobile5-17f1.html

主催者の@tomo_watanabeさんのブログ記事もあります。
http://tomowatanabe.hatenablog.com/entry/2012/07/03/230852

togetterもあります。
http://togetter.com/li/331260


「組込みにおけるHTML5の意味」とは?

@tomo_watanabeさんの発表のタイトルは「組込みにおけるHTML5の意味」。
ちょっと間違っているかもしれませんが、要点は

  • Android ADKような仕組みで既存の組み込み機器がモバイル機器と連携できる
  • HTML5の恩恵でブラウザ上での開発環境が豊かになった
  • 機器同士がWebSocketのような技術でおしゃべりできるようになった
  • おまけにアプリをソーシャルネットワークで共有できる仕組みもある
  • そのうちユーザがアプリを組み合わせて、ディジタル家電のアプリを作るようになるんじゃね?

というものでした。(ちょっと抜けている?)

デモも豊富にあり、ああ楽しそう。なんかやってみたい!という気持ちになりました。大変すばらしいです。これからは組み込みもWebでモバイルや!と思いました。

So What?

で、帰り際で電車で思ったのは、だから利用者は何がうれしいのか?機器同士がおしゃべりすると何がうれしいのか?利用者がエアコンを制御するアプリを作れると何がうれしいのか?もやもや。

今は、こんなことができるんだよ!って世間に提示するのは技術者の役割だけど、それだけでは技術者の自己満足を超えて世の中を動かしていくような製品にはつながらないような気がしました。

消費者として「お!いいね!」って思えるようなユースケース(キラーアプリというのでしょうか?)がないと、消費者に支持されて、爆発的なブームにはならないよなと思いました。あと、ビジネス的にうまみがないと製品化も難しいかもとも。

そして、帰り際、実際に売れるデバイス!となると、HTTPはしゃべれなくていいから、消費者としてうれしいもの・便利なもの、ビジネス的に効果的な使い方の視点がないといけないのかなともやもや考えていました。

派手じゃないけど、現実に利用者の利便性を向上しつつ、ビジネスモデルを変える道具としてモバイルやWebを使っている例あるよな

で、もやもや考えつつ、お家に帰ったら、

  • 従来の組み込み機器を使いつつ、
  • モバイルやWebを使って、利便性を向上し、
  • ありがちなハード売り抜けモデルから、継続的に利益を上げるサービス提供型にビジネスを転換している

ような例はすでにありました。

消費者的にうれしいし、ビジネス的にうれしそうです。
HTML5とか使ってませんが、個人的に便利な製品・サービスありました。WellnessLink(ウェルネスリンク)というサービスです。
http://www.wellnesslink.jp/p/

最近、新会社立ち上げのニュースありましたよね。

NTTドコモとオムロン ヘルスケアが新会社「ドコモ・ヘルスケア」を設立
http://www.advertimes.com/20120704/article74757/

#実際もうけてんのかは調べていません(きり



で、何ができるのかというと、
  • 体組成計で計測した体重やら体脂肪やら筋骨率やらをWeb上にアップして、
  • グラフとして経過を見たり、
  • 目標管理ができたり、
  • 経過データをもとに定期レポートでアドバイスくれたり

などなどです。

データを1か月だけ残すなら無料。1か月以上残すなら月々○○○円という値段設定です。
まだまだサービスは少ないですが、

  • 消費者的には、
    • 測って、記録とって、経過みての一連の流れが自動化されて、非常にうれしいです。もう元の体組成計に戻れません。
  • そして、ビジネス的には
    • 体組成計をただ売って終わりのビジネスモデルから、継続的に利益を上げるサービス提供型モデルに転換できています。
    • また、データが蓄積されていることで私のように利用者が離れづらくなるし、何か別のビジネス提供の機会が今後も増えていくでしょう。
    • コスト的にもデータをアップロードする情報端末を世間に流通しているスマートフォンへ外部化することで、自分たちが作る範囲を制限し、コスト的にも抑えることができています。

あとは

  • まだ微妙に使い勝手が悪くて面倒なとこあるので、私が経営者なら利便性を向上して、もっと使ってもらう機会を増やして客が逃げないようにする。
  • イベントとコラボって、利用者をふやす。
  • 高い料金を払ってもらえるようなサービスを提供する

などなどしていくとよいのでしょうね。

モバイルとWebがビジネスモデルの穴を埋める

WellnessLink(ウェルネスリンク)のサービスを考えていく上で、中の人ってどのように開発していったのでしょう?技術主導なのか、ビジネス主導なのか分かりませんが、個人的には提供したいサービスがあって、それを実現するためにWebやモバイルの技術を配置していっているようなイメージがあります。

ビジネスサイドと技術サイドの両輪がかみ合っている感じ。技術的にものすごいことやるわけじゃないけど、ビジネス的にうまみがでるような技術の使い方をしようとしている印象です。そういうやりたいビジネスモデルがあって、それを実現するためにピースをうめていくような思考が大事なのかなと。

今後技術者に求められるのは?

たぶん、製造業も苦しい時期でしょうし、自分のいるSIerもけっこービジネス的にしんどいです。そういうときって技術サイドから、あれがこれして、こんな面白いことできます!というスタンスも技術者として大事ですが、今より利益率が高くて、ビジネス的に成功する流れを実現するために、ビジネスサイドの人に、この技術とこの技術を組み合わせて、こんなサービスやりましょうってコミュニケーションする姿勢が必要なのかなと思いました。

さて、どうしたらいいのか分からないが。