Test Driven Development for Embedded C読書会第4回
依存関係のあるコードに対するTDDの適応。まずは依存関係を崩すところから始める。崩すには、依存関係を、インターフェイスへの依存にする必要がある。 #tdd4ec
2012-06-03 13:23:45例えば、collaboratorを置換することで、network failureを意図したタイミングで発生させることができる。 #tdd4ec
2012-06-03 13:27:01例えば、ネットワーク接続失敗に対するテスト。失敗のケースが、シーケンス中に4箇所あった場合、意図的に、特定のfailureを起こすことはなかなか難しい。これを、test doubleで置き換え、failureをシミュレートすることでテストを容易にできる。 #tdd4ec
2012-06-03 13:29:38test doublesで依存先モジュール(Depended on Component)を置換することで、依存関係の連鎖を断ち切ることができる。 #tdd4ec
2012-06-03 13:29:46依存関係の問題は根深い。依存先を断ち切らないと依存先の依存先までついてきてしまう。この推移的な依存関係をいかに減らすかが大事。 #tdd4ec
2012-06-03 13:32:09test double は実装を完全に置き換えるようなsimulatorsではない。スタントマンが映画の主役と同じイケメンである必要がないのと同じ。役割が分かっていればいい。 #tdd4ec
2012-06-03 13:34:36test doubleは、実際のモジュールを完全にシミュレートする必要はない。特定の、特別な動作を、TODを騙せるシンプルな実装で良い #tdd4ec
2012-06-03 13:37:39どれくらいのテスト項目を考えるか?単体テスト、シナリオレベルのテスト、状態網羅のテスト。それでもバグが出てきたりする。 #tdd4ec
2012-06-03 13:42:08障害が起きたときに問題の切り分けが難しい。実行時のトレースログとか内部状態を出したり。しかし全部出すとログが大量になって、振る舞いが変わってしまったり。 #tdd4ec
2012-06-03 13:46:38重要度でログのレベルを分けておき、ログの量を抑制して、重要なところだけ確認できるようにする。結合しての実機テストの効率化も大事な気がするな。 #tdd4ec
2012-06-03 13:48:21