46
沖縄Ruby会議01

沖縄Ruby会議01

Embed Size (px)

DESCRIPTION

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

Citation preview

沖縄Ruby会議01

自己紹介福嶺 秀策 : Shusaku FUKUMINE

twitter :@shumach217

趣味:(ビール飲みながら)プログラミング

自称:固いものを少しだけ分かる柔かいエンジニア

FPGAからRuby on Rails, iOSまでw

shumachappというiOSアプリ出してます!!

!

!

!

!

!

• カーリングもありますw

現在の業務は低レイヤー(L1、L2)なんですが、ruby使ってます。

(実はRailsも)

実機テストの自動化について!!

組み込みについて

- アプリケーションに最適化されてアーキテクチャが特殊

- ハードディスクが無い(マイクロプロセッサ)

- ログは見れない。。。

- 基本、システムコールは使用不可。。。

- etc

環境がプアで非常に悩ましい。。。

組み込み開発の必需品!!

-> RS232による操作

RS232による操作

- メモリの操作

- 指定したアドレスのメモリをダンプ

- 指定したアドレスに値を書き込む

- コマンドを用意してRS232経由で実機の関数をコール

- 割り込みハンドラ等

!

!

!

!

!

!

!

メモリモニタの例

メモリ書き込み

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

ハンドラコール

> myHndr

(0B - 0F間を0Aをコピー)

メモリモニタ

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

このような流れを基本としてデバッグを行います

気づいた人もいると思いますが。。。

手作業。。。

目視確認。。。

ワタシ、最近気づきましたwww。

rspecで

except(data).to match “00000000001A1A1A”

って出来きるんじゃない??

!

ということで作りました!!

ruby - 組み込み間で

メモリ操作(setter), メモリ値取得(getter), 関数コール

なI/Fを具備する環境を構築しました。

電気ポッドを例に!!

電気ポッドの仕様(例)

• 90度未満

• 沸騰

• 90度以上

• 保温

• 0.5s毎に割り込みが発生

• 温度で状態を決定

turnipでテスト記述すると!!

Scenario: 電気ポット(例)

Given 初期化

Given “40” 温度設定

When 割り込み発生

Then 沸騰中確認

Given “90” 温度設定

When 割り込み発生

Then 保温中確認

Scenario: 電気ポット(例)

Given 初期化

Given “40” 温度設定

Given “90” まで1度ずつインクリメント # 割り込み発生 & 内部で状態確認

Then 保温中確認

!

!

というような実機テストの自動化を出来る様にしました!!

単体・全体テストを含めた全てのテストパターンを

bundle exec rspec

で出来るのは感動!!

• この考え方って、デバッガでbreak時に自動で値の比較を行う事と等価!!

プログラムは

• メモリから情報を集めて

• 処理

• メモリに情報を書く

!

!

!

!

!

!

!

!

!

!

処理の同期を取ることが悩ましい。。。

イベント・ドリブンなプログラム

• イベント待ち

• 割り込み

• メモリから情報を集めて

• 処理

• メモリに情報を書く

• イベント待ち(同期がとれる!!)

!

!

!

!

!

!

!

イベント待ちがbreakになってくれて同期を取ることが出来る!!

• turnipを使用して実機テストの自動化をすると開発速度が大幅に上昇しました(自分比)

• TDDな感じで石橋を高速に叩いて渡れる!!

• このアプローチは万能では無いけど実は面白いのかも!!

組み込み相手でも出来るなら、iOSデバイスでも!!

iOSの実機テストの主なテストフレームワーク

- KIF

Squareが作成した

objective-cベース

- Frank

cucumber

シミュレーション

私が欲しいテストフレームワーク

- テストコード

- rubyの手軽さが欲しい!!

- 実機動作

- シミュレータは実機と動作が違う!!

- 外部からオブジェクト操作、状態をモニタ

ということで、iOS用にも作成しています♪

objective-cというかiOSなので、メモリではなくて、オブジェクトベース -> JSONで!!

except(data).to match “{“type”:”getObject”, “data”:”hoge”}”

作成中なんですけど、基本的な動作は目処が付いています

Scenario: iOSテスト

Given 初期化

When タブを1に切替

Then PatternB_1を確認

When PatternB_2へ移動

Then PatternB_2を確認

• turnip記述でiOSデバイスをリモート操作!!

• その時に内部状態を取得して比較!!

まとめ

• turnipを実機テストに用いると想像以上に良さそう!!

• iOS用はもう少しまとまったら公開します!(きっと)

告知

• 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沖縄

!

!

!

!

!

!

!

いい仕事しますよw。

ビーチでは何かが起こる!!

是非参加して下さい♪♪

御静聴、ありがとうございました!