Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

沖縄Ruby会議01

696 views

Published on

沖縄ルビー会議 01の発表資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

沖縄Ruby会議01

  1. 1. 沖縄Ruby会議01
  2. 2. 自己紹介 福嶺 秀策 : Shusaku FUKUMINE twitter:@shumach217 趣味:(ビール飲みながら)プログラミング 自称:固いものを少しだけ分かる柔かいエンジニア FPGAからRuby on Rails, iOSまでw
  3. 3. shumachappというiOSアプリ出してます!! ! ! ! ! !
  4. 4. • カーリングもありますw
  5. 5. 現在の業務は低レイヤー(L1、L2)なんですが、ruby使って ます。 (実はRailsも)
  6. 6. 実機テストの自動化について!!
  7. 7. 組み込みについて - アプリケーションに最適化されてアーキテクチャが特殊 - ハードディスクが無い(マイクロプロセッサ) - ログは見れない。。。 - 基本、システムコールは使用不可。。。 - etc
  8. 8. 環境がプアで非常に悩ましい。。。
  9. 9. 組み込み開発の必需品!! -> RS232による操作
  10. 10. RS232による操作 - メモリの操作 - 指定したアドレスのメモリをダンプ - 指定したアドレスに値を書き込む - コマンドを用意してRS232経由で実機の関数をコール - 割り込みハンドラ等
  11. 11. ! ! ! ! ! ! ! メモリモニタの例
  12. 12. メモリ書き込み 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000000Aに1Aを書き込み 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0000000 00 00 00 00 00 00 00 00 00 00 1A 00 00 00 00 00
  13. 13. ハンドラコール > myHndr (0B - 0F間を0Aをコピー)
  14. 14. メモリモニタ 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0000000 00 00 00 00 00 00 00 00 00 00 1A 1A 1A 1A 1A 1A
  15. 15. このような流れを基本としてデバッグを行います
  16. 16. 気づいた人もいると思いますが。。。
  17. 17. 手作業。。。
  18. 18. 目視確認。。。
  19. 19. ワタシ、最近気づきましたwww。 rspecで except(data).to match “00000000001A1A1A” って出来きるんじゃない?? !
  20. 20. ということで作りました!! ruby - 組み込み間で メモリ操作(setter), メモリ値取得(getter), 関数コール なI/Fを具備する環境を構築しました。
  21. 21. 電気ポッドを例に!!
  22. 22. 電気ポッドの仕様(例) • 90度未満 • • 90度以上 • • 沸騰 保温 0.5s毎に割り込みが発生 • 温度で状態を決定
  23. 23. turnipでテスト記述すると!!
  24. 24. Scenario: 電気ポット(例) Given 初期化 Given “40” 温度設定 When 割り込み発生 Then 沸騰中確認 Given “90” 温度設定 When 割り込み発生 Then 保温中確認
  25. 25. Scenario: 電気ポット(例) Given 初期化 Given “40” 温度設定 Given “90” まで1度ずつインクリメント # 割り込み発生 & 内部で状態確認 Then 保温中確認 ! !
  26. 26. というような実機テストの自動化を出来る様にしまし た!!
  27. 27. 単体・全体テストを含めた全てのテストパターンを bundle exec rspec で出来るのは感動!!
  28. 28. • この考え方って、デバッガでbreak時に自動で値の比較を 行う事と等価!!
  29. 29. プログラムは • メモリから情報を集めて • 処理 • メモリに情報を書く ! ! !
  30. 30. ! ! ! ! ! ! ! 処理の同期を取ることが悩ましい。。。
  31. 31. イベント・ドリブンなプログラム • イベント待ち • 割り込み • メモリから情報を集めて • 処理 • メモリに情報を書く • イベント待ち(同期がとれる!!)
  32. 32. ! ! ! ! ! ! ! イベント待ちがbreakになってくれて同期を取ることが出来る!!
  33. 33. • turnipを使用して実機テストの自動化をすると開発速度が 大幅に上昇しました(自分比) • • TDDな感じで石橋を高速に叩いて渡れる!! このアプローチは万能では無いけど実は面白いのかも!!
  34. 34. 組み込み相手でも出来るなら、iOSデバイスでも!!
  35. 35. iOSの実機テストの主なテストフレームワーク - KIF Squareが作成した objective-cベース - Frank cucumber シミュレーション
  36. 36. 私が欲しいテストフレームワーク - テストコード - rubyの手軽さが欲しい!! - 実機動作 - シミュレータは実機と動作が違う!! - 外部からオブジェクト操作、状態をモニタ
  37. 37. ということで、iOS用にも作成しています♪
  38. 38. objective-cというかiOSなので、メモリではなくて、オブ ジェクトベース -> JSONで!! except(data).to match “{“type”:”getObject”, “data”:”hoge”}” 作成中なんですけど、基本的な動作は目処が付いています
  39. 39. Scenario: iOSテスト Given 初期化 When タブを1に切替 Then PatternB_1を確認 When PatternB_2へ移動 Then PatternB_2を確認
  40. 40. • turnip記述でiOSデバイスをリモート操作!! • その時に内部状態を取得して比較!!
  41. 41. まとめ • turnipを実機テストに用いると想像以上に良さそう!! • iOS用はもう少しまとまったら公開します!(きっと)
  42. 42. 告知 • Cloud on the Beach 2014 4/26に開催決定!! • http://jaws-ug.jp/es/cloud-on-the-beach-2014-in%E6%B2%96%E7%B8%84/ • JASW-UG沖縄
  43. 43. ! ! ! ! ! ! ! いい仕事しますよw。
  44. 44. ビーチでは何かが起こる!! 是非参加して下さい♪♪
  45. 45. 御静聴、ありがとうございました!

×