Mais conteúdo relacionado
Semelhante a テストファースト、自動テストを導入するという事について(@社内勉強会) (20)
テストファースト、自動テストを導入するという事について(@社内勉強会)
- 10. 弊社
私たちの配慮不足によって相
談しにくさもありましたが、
「テスト可能な設計」
「BDD」に関する知見に関し
て、弊社は日本でも類をみな
いほどのスキルを持った人に
相談出来ます。
もっと、社内全体に私やbleis
さんのスキルを広めて、より
よい開発に変化させていきま
す。
みんなでよりよくしましょう。
(お互いに能動的になろう
- 12. RDBなどの情報
をもとにした、
複雑な条件分
岐や繰り返し
HTTPヘッダで
条件分岐して、
XMLをパースし
て、
内容で条件分
岐して、
RDBにアクセス
して、
XMLを返す
For Example
内容を条件分岐するところだけで
もテストファーストでやる
- 13. RDBなどの情報
をもとにした、
複雑な条件分
岐や繰り返し
HTTPヘッダで
条件分岐して、
XMLをパースし
て、
内容で条件分
岐して、
RDBにアクセス
して、
XMLを返す
For Example
大まかな条件をまずはテストコー
ドのパラメタライズとして表現し
てみる
- 16. First Step
1. 「テンプレートがあればテス
トコード書ける」
2. 「テンプレートなしでテスト
コードを書く」
3. 「テンプレートなしでほとん
どのコードをテストファース
トする」
- 18. Third Step
1. 真面目にテスト設計を取り入
れたテストコードにする
2. テスト周辺のライブラリやツー
ルなどをカスタマイズ、自作
する
3. kyon_mmと殴り合う
- 21. コンポーネント
統合
システム
受け入れ
ユニット
インテグレーション
システム
Test Level
テストを実行するときに動作
させる「プロダクトの範囲」
や「担当する責務の範囲」を
基準に
テストを分割する方法
分割したテストの総称
- 22. 単体テスト
結合テスト
Our Unit Test
アプリケーションの提供する
クラスやメソッドといった
API(内部API)を呼出し、
想定した事象が起こるかどう
か(期待した戻り値が返ってく
るかなど)を確認するテスト
- 24. Difficulty Unit Test
「自分が作りにくいデータ構造」をどう
やって切り離すか。
HTTP, RDB, ファイル, 時刻
異常系をどうやって起こすか。
例外発生時の挙動は正しいか
どんなテストを書けばいいのか?
書く必要があるのか?書かないとダメ
なやつは何か?
- 25. From My Experience
「今までUnit Testでテストファー
スト」していない人に関して(自信
も含めて)経験論で言えば
「手間を惜しんでいる」「やり方を
変えたくない」「怠惰」なだけ。
それ以外には存在しない。
常にそうやってがんばることで、品
質と進捗に貢献出来る。
- 26. Data Structure
「ユニットテスタビリティが高い」と言うため
の1つの指標が「自分たちがつくっていないデー
タ構造と切り離してテストできているか」にな
ります。
「テストに必要な分だけのデータ」をつくれる
ようにする。
抽象クラスやインターフェース経由
データ構造を「ドメイン」や「テストしたい
単位」に詰め替える(BDDをすると自然にだい
たい一緒になる)
- 27. Error Path 大抵の例外発生は結合テスト環境で動作させる
のは難しい。単体テストの段階で例外をわざと
起こしたテストをするのは大切です。
例外に対処していること、異常なデータを受け
取ったときの挙動は保証されているのか?
スタブやアダプタクラスをつかって、異常系
を発生させる。
「そのテストは一部が本物のコードじゃない
ですよね?」→「テストしていないコードと
どっちが信頼高いんですか?」「テスト対象
が違う」
- 28. Which Test 意味のあるテストを書く事は大切です。また、
テストコードは「ラフスケッチのように使う」
こともあります。
正しくいろんなAPIを呼び出せている事を確認
するために書きます。そして、テスト対象の
振る舞いがテストファーストによって様々な
コードによって網羅されれば、最初のテスト
コードは不要になります。削除します。
「リリースに必要なコード」と「そのときに必
要なコード」は一致しません。だからといって、
「そのときに必要なコード」を実装しないこと
は品質と進捗に悪影響を及ぼします。つまり、
手抜きです。
- 32. 単体テスト
結合テスト
テストファースト
テストラスト
機能性
構成
保守性
Judgement
とは言っても、どのような自
動テストを導入するのか、し
ないのか?
しないときに、どうすればい
いのか?
- 33. 単体テストのテスト
ファースト
Not Import Unit Test
テストファーストしなくても、
ほとんどバグが出ないし、デ
バッグしやすいコードを書け
る
結合テストの自動化
例) FizzBuzzなら単体テスト
からではなく、結合テストか
らやる。
- 37. テストファーストを
しないのは毒を飲み
続けること。
忘れがちだけど大切
な習慣
Conclusion
テスト自動化はつらい。だけ
ど、やらないと更につらいだ
けだ。
勘に頼った成果物は出さない
というプロ意識。
普段からやらないと急になん
て出来ません。