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.
テスト自動化の勉強会
やはり俺達の回帰テストは間違っている
Yusuke Hosonuma
最初に
言っておくことがある
やはり
俺達の回帰テスト
は間違っている
回帰(リグレッション)テスト
・回帰テスト?人海戦術だね(ドヤッ
・回帰テスト?そんな時間ないでしょ?
・回帰テスト?なにそれ美味しいの?
もはや時代錯誤もいいところ
朗報
『テストの自動化』
という考え方があります
・テストをプログラムで記述する
・ことにより何度でも自動でテストできる
・ことにより変更に強くなる
・ことにより変更に対して勇気を持てる
テストの自動化とは?
『作業面』として
→ 回帰テストのコストを減らせる
『心理面』として
→ 仕様変更やリファクタリング、
そして何よりリリースに勇気を持てる
つまり・・・
Question & Answer
・回帰テストやってますか?
・それで十分だと本当に思っていますか?
・仕様変更に自信を持てていますか?
・リリースの度に不安を抱えていませんか?
・リファクタリングしてますか?
・いつまでこんなことを続ける気ですか?
Question.
今のあなたの答えは重要ではありません。
これから現状を少しでも変えたいかどうか、
その気持ちと勇気があるかが重要です。
Answer.
・単体テスティングフレームワーク、通称「
xUnit」は、Java向けのJUnitが最初ですが、
現在は殆どの言語に用意されています。
・OSSでも積極的に利用されています。例え
ばHTTPServerであるApacheのテストコード
は、本体...
xUnitによるユニットテスト
・Objective-C向けのxUnit
・Xcodeに標準搭載されている
・既存プロジェクトへの導入も簡単
XCTest(えっくすしーてすと)
・メソッド単位で完結するテスト
→ 2つの引数を足し算するとか
・状態を変更するメソッドのテスト
→ リストオブジェクトから削除とか
XCTestで出来ること
・UI(画面)のテスト
→ 一般的にはUnitTestでUIのテストは自動化し
ません。難しいし、その価値に見合うリターン
が得られないことが多いからです。
・マクロのテスト
→ プリプロセッサなどObjective-Cランタイム
から外れるも...
①テスト対象の関数を呼び出す
NSInteger price = [Money tax:100];
②期待値と比較する
XCTAssertEqual(108, price, @”100円の消
費税は108円であること);
XCTestの基本
XCTest on Xcode
・Modelクラス
→ MVCにおいて一番変更が少ない。
・Util/Helperクラス
→ 関数単位で処理が完結することが多く書き
やすい。
テストコードを書くべき箇所
・Red
→ テストの失敗
・Green
→ テストの成功
・リファクタリング
→ Greenである限りリファクタリングは成功
Red / Green / Refactoring
現実を直視する
・テストを定期的に実行する
→ Greenな状態を保たなければ、テストを自
動化する意味がありません。
・Greenであれば大丈夫という勘違いをしない
→ テストコード、あるいは仕様自体が間違っ
ていたら全く意味がありません。
あなたが絶対に守...
・自動化すると品質上がる
→ 一側面ではありますが、これを強く語る人
は夢を見すぎている傾向が強いです。
現実を見ましょう。手でテストしたほうが効率
的なケースも多々有ります。
よくある間違った認識①
・だれでも書ける
→ 一定のスキルが必要です。
xUnitを使うスキル。そして何より単体テスト
しやすいコードを書くスキルが必要になります
。
よくある間違った認識②
・テスト対象のコードは完璧な設計
→ 時にはテスト対象のコードをリファクタリ
ングする必要もあります。
ぐちゃぐちゃな依存関係のクラスをテストする
のは苦痛ですし、少し変更が入るたびにテスト
が失敗するようになり意味がありません。
よくある間違...
・ユニットテストはコストが低い
→ 実装コストの2倍は必要と言われます。
2倍は一般論であり、それに見合うだけのメリ
ットがあるケースも十分あります。ただ、その
コストを受け入れることが出来るかはプロジェ
クト次第です。
よくある間違った認識④
・結合テストは不要
→ ・・・
目をさませ!!( 'д'⊂彡☆))Д´) パーン
よくある間違った認識⑤
まとめ
・何度でも自動で実行できるテスト
・それによって得られるデグレの防止
・それによって得られる変更に対する勇気
・安全なリファクタリング
ユニットテストで得られるもの
・UI(画面)まわりのテスト
・結合レベルでの品質保証
ユニットテストで得られないもの
・ユニットテストのスキルを身につける
・テストコードを書く
・テストコードを定期的に実行する
・テストコードをメンテナンスする
ユニットテストで払う必要のある対価
最後に
・ユニットテストの一部についてしか、この資
料では語っていません。
・一般論はあくまで一般論であり、あなたのプ
ロジェクトに当てはまるかは分かりません。
・ユニットテストはソフトウェア開発技法の一
つであり、それ以上でも以下でもありません。
注...
想像してごらん・・・
リリース前に全ての単体テストが成功すること
を確認できる・・・
そんな世界(ソフトウェア開発)を。
Let’s UnitTest
ご清聴ありがとう
ございました!
Upcoming SlideShare
Loading in …5
×

iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-

3,300 views

Published on

Published in: Engineering
  • Be the first to comment

iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-

  1. 1. テスト自動化の勉強会 やはり俺達の回帰テストは間違っている Yusuke Hosonuma
  2. 2. 最初に 言っておくことがある
  3. 3. やはり 俺達の回帰テスト は間違っている
  4. 4. 回帰(リグレッション)テスト ・回帰テスト?人海戦術だね(ドヤッ ・回帰テスト?そんな時間ないでしょ? ・回帰テスト?なにそれ美味しいの?
  5. 5. もはや時代錯誤もいいところ
  6. 6. 朗報
  7. 7. 『テストの自動化』 という考え方があります
  8. 8. ・テストをプログラムで記述する ・ことにより何度でも自動でテストできる ・ことにより変更に強くなる ・ことにより変更に対して勇気を持てる テストの自動化とは?
  9. 9. 『作業面』として → 回帰テストのコストを減らせる 『心理面』として → 仕様変更やリファクタリング、 そして何よりリリースに勇気を持てる つまり・・・
  10. 10. Question & Answer
  11. 11. ・回帰テストやってますか? ・それで十分だと本当に思っていますか? ・仕様変更に自信を持てていますか? ・リリースの度に不安を抱えていませんか? ・リファクタリングしてますか? ・いつまでこんなことを続ける気ですか? Question.
  12. 12. 今のあなたの答えは重要ではありません。 これから現状を少しでも変えたいかどうか、 その気持ちと勇気があるかが重要です。 Answer.
  13. 13. ・単体テスティングフレームワーク、通称「 xUnit」は、Java向けのJUnitが最初ですが、 現在は殆どの言語に用意されています。 ・OSSでも積極的に利用されています。例え ばHTTPServerであるApacheのテストコード は、本体コードの10倍ちかくなっています。 xUnit
  14. 14. xUnitによるユニットテスト
  15. 15. ・Objective-C向けのxUnit ・Xcodeに標準搭載されている ・既存プロジェクトへの導入も簡単 XCTest(えっくすしーてすと)
  16. 16. ・メソッド単位で完結するテスト → 2つの引数を足し算するとか ・状態を変更するメソッドのテスト → リストオブジェクトから削除とか XCTestで出来ること
  17. 17. ・UI(画面)のテスト → 一般的にはUnitTestでUIのテストは自動化し ません。難しいし、その価値に見合うリターン が得られないことが多いからです。 ・マクロのテスト → プリプロセッサなどObjective-Cランタイム から外れるものはテスト出来ません。 XCTestで出来ないこと
  18. 18. ①テスト対象の関数を呼び出す NSInteger price = [Money tax:100]; ②期待値と比較する XCTAssertEqual(108, price, @”100円の消 費税は108円であること); XCTestの基本
  19. 19. XCTest on Xcode
  20. 20. ・Modelクラス → MVCにおいて一番変更が少ない。 ・Util/Helperクラス → 関数単位で処理が完結することが多く書き やすい。 テストコードを書くべき箇所
  21. 21. ・Red → テストの失敗 ・Green → テストの成功 ・リファクタリング → Greenである限りリファクタリングは成功 Red / Green / Refactoring
  22. 22. 現実を直視する
  23. 23. ・テストを定期的に実行する → Greenな状態を保たなければ、テストを自 動化する意味がありません。 ・Greenであれば大丈夫という勘違いをしない → テストコード、あるいは仕様自体が間違っ ていたら全く意味がありません。 あなたが絶対に守るべきこと
  24. 24. ・自動化すると品質上がる → 一側面ではありますが、これを強く語る人 は夢を見すぎている傾向が強いです。 現実を見ましょう。手でテストしたほうが効率 的なケースも多々有ります。 よくある間違った認識①
  25. 25. ・だれでも書ける → 一定のスキルが必要です。 xUnitを使うスキル。そして何より単体テスト しやすいコードを書くスキルが必要になります 。 よくある間違った認識②
  26. 26. ・テスト対象のコードは完璧な設計 → 時にはテスト対象のコードをリファクタリ ングする必要もあります。 ぐちゃぐちゃな依存関係のクラスをテストする のは苦痛ですし、少し変更が入るたびにテスト が失敗するようになり意味がありません。 よくある間違った認識③
  27. 27. ・ユニットテストはコストが低い → 実装コストの2倍は必要と言われます。 2倍は一般論であり、それに見合うだけのメリ ットがあるケースも十分あります。ただ、その コストを受け入れることが出来るかはプロジェ クト次第です。 よくある間違った認識④
  28. 28. ・結合テストは不要 → ・・・ 目をさませ!!( 'д'⊂彡☆))Д´) パーン よくある間違った認識⑤
  29. 29. まとめ
  30. 30. ・何度でも自動で実行できるテスト ・それによって得られるデグレの防止 ・それによって得られる変更に対する勇気 ・安全なリファクタリング ユニットテストで得られるもの
  31. 31. ・UI(画面)まわりのテスト ・結合レベルでの品質保証 ユニットテストで得られないもの
  32. 32. ・ユニットテストのスキルを身につける ・テストコードを書く ・テストコードを定期的に実行する ・テストコードをメンテナンスする ユニットテストで払う必要のある対価
  33. 33. 最後に
  34. 34. ・ユニットテストの一部についてしか、この資 料では語っていません。 ・一般論はあくまで一般論であり、あなたのプ ロジェクトに当てはまるかは分かりません。 ・ユニットテストはソフトウェア開発技法の一 つであり、それ以上でも以下でもありません。 注意事項
  35. 35. 想像してごらん・・・ リリース前に全ての単体テストが成功すること を確認できる・・・ そんな世界(ソフトウェア開発)を。 Let’s UnitTest
  36. 36. ご清聴ありがとう ございました!

×