36
テテテテテテテテテテ やややややややややややややややややや Yusuke Hosonuma

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

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

Yusuke Hosonuma

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

最初に言っておくことがある

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

やはり俺達の回帰テストは間違っている

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

回帰(リグレッション)テスト・回帰テスト?人海戦術だね(ドヤッ・回帰テスト?そんな時間ないでしょ?・回帰テスト?なにそれ美味しいの?

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

もはや時代錯誤もいいところ

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

朗報

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

『テストの自動化』という考え方があります

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

・テストをプログラムで記述する・ことにより何度でも自動でテストできる・ことにより変更に強くなる・ことにより変更に対して勇気を持てる

テストの自動化とは?

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

『作業面』として→ 回帰テストのコストを減らせる

『心理面』として→ 仕様変更やリファクタリング、 そして何よりリリースに勇気を持てる

つまり・・・

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

Question & Answer

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

・回帰テストやってますか?・それで十分だと本当に思っていますか?・仕様変更に自信を持てていますか?・リリースの度に不安を抱えていませんか?・リファクタリングしてますか?・いつまでこんなことを続ける気ですか?

Question.

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

今のあなたの答えは重要ではありません。

これから現状を少しでも変えたいかどうか、その気持ちと勇気があるかが重要です。

Answer.

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

・単体テスティングフレームワーク、通称「 xUnit」は、 Java向けの JUnitが最初ですが、現在は殆どの言語に用意されています。

・ OSSでも積極的に利用されています。例えば HTTPServerである Apacheのテストコードは、本体コードの 10倍ちかくなっています。

xUnit

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

xUnitによるユニットテスト

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

・ Objective-C向けの xUnit・ Xcodeに標準搭載されている・既存プロジェクトへの導入も簡単

XCTest(えっくすしーてすと)

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

・メソッド単位で完結するテスト → 2つの引数を足し算するとか

・状態を変更するメソッドのテスト → リストオブジェクトから削除とか

XCTestで出来ること

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

・ UI(画面)のテスト→ 一般的には UnitTestで UIのテストは自動化しません。難しいし、その価値に見合うリターンが得られないことが多いからです。・マクロのテスト→ プリプロセッサなど Objective-Cランタイムから外れるものはテスト出来ません。

XCTestで出来ないこと

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

①テスト対象の関数を呼び出すNSInteger price = [Money tax:100];

②期待値と比較するXCTAssertEqual(108, price, @”100円の消費税は 108円であること );

XCTestの基本

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

XCTest on Xcode

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

・Modelクラス→ MVCにおいて一番変更が少ない。

・ Util/ Helperクラス→ 関数単位で処理が完結することが多く書きやすい。

テストコードを書くべき箇所

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

・ Red→ テストの失敗・ Green→ テストの成功・リファクタリング→ Greenである限りリファクタリングは成功

Red / Green / Refactoring

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

現実を直視する

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

・テストを定期的に実行する→ Greenな状態を保たなければ、テストを自動化する意味がありません。

・ Greenであれば大丈夫という勘違いをしない→ テストコード、あるいは仕様自体が間違っていたら全く意味がありません。

あなたが絶対に守るべきこと

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

・自動化すると品質上がる→ 一側面ではありますが、これを強く語る人は夢を見すぎている傾向が強いです。

現実を見ましょう。手でテストしたほうが効率的なケースも多々有ります。

よくある間違った認識①

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

・だれでも書ける→ 一定のスキルが必要です。

xUnitを使うスキル。そして何より単体テストしやすいコードを書くスキルが必要になります。

よくある間違った認識②

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

・テスト対象のコードは完璧な設計→ 時にはテスト対象のコードをリファクタリングする必要もあります。

ぐちゃぐちゃな依存関係のクラスをテストするのは苦痛ですし、少し変更が入るたびにテストが失敗するようになり意味がありません。

よくある間違った認識③

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

・ユニットテストはコストが低い→ 実装コストの 2倍は必要と言われます。

2倍は一般論であり、それに見合うだけのメリットがあるケースも十分あります。ただ、そのコストを受け入れることが出来るかはプロジェクト次第です。

よくある間違った認識④

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

・結合テストは不要→ ・・・

目をさませ!! ( 'д'⊂彡☆ ))Д´) パーン

よくある間違った認識⑤

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

まとめ

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

・何度でも自動で実行できるテスト・それによって得られるデグレの防止・それによって得られる変更に対する勇気・安全なリファクタリング

ユニットテストで得られるもの

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

・ UI(画面)まわりのテスト・結合レベルでの品質保証

ユニットテストで得られないもの

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

・ユニットテストのスキルを身につける・テストコードを書く・テストコードを定期的に実行する・テストコードをメンテナンスする

ユニットテストで払う必要のある対価

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

最後に

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

・ユニットテストの一部についてしか、この資料では語っていません。・一般論はあくまで一般論であり、あなたのプロジェクトに当てはまるかは分かりません。・ユニットテストはソフトウェア開発技法の一つであり、それ以上でも以下でもありません。

注意事項

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

想像してごらん・・・

リリース前に全ての単体テストが成功することを確認できる・・・

そんな世界(ソフトウェア開発)を。

Let’s UnitTest

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

ご清聴ありがとうございました!