iosテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-
Post on 13-Dec-2014
322 Views
Preview:
DESCRIPTION
TRANSCRIPT
テスト自動化の勉強会やはり俺達の回帰テストは間違っている
Yusuke Hosonuma
最初に言っておくことがある
やはり俺達の回帰テストは間違っている
回帰(リグレッション)テスト・回帰テスト?人海戦術だね(ドヤッ・回帰テスト?そんな時間ないでしょ?・回帰テスト?なにそれ美味しいの?
もはや時代錯誤もいいところ
朗報
『テストの自動化』という考え方があります
・テストをプログラムで記述する・ことにより何度でも自動でテストできる・ことにより変更に強くなる・ことにより変更に対して勇気を持てる
テストの自動化とは?
『作業面』として→ 回帰テストのコストを減らせる
『心理面』として→ 仕様変更やリファクタリング、 そして何よりリリースに勇気を持てる
つまり・・・
Question & Answer
・回帰テストやってますか?・それで十分だと本当に思っていますか?・仕様変更に自信を持てていますか?・リリースの度に不安を抱えていませんか?・リファクタリングしてますか?・いつまでこんなことを続ける気ですか?
Question.
今のあなたの答えは重要ではありません。
これから現状を少しでも変えたいかどうか、その気持ちと勇気があるかが重要です。
Answer.
・単体テスティングフレームワーク、通称「 xUnit」は、 Java向けの JUnitが最初ですが、現在は殆どの言語に用意されています。
・ OSSでも積極的に利用されています。例えば HTTPServerである Apacheのテストコードは、本体コードの 10倍ちかくなっています。
xUnit
xUnitによるユニットテスト
・ Objective-C向けの xUnit・ Xcodeに標準搭載されている・既存プロジェクトへの導入も簡単
XCTest(えっくすしーてすと)
・メソッド単位で完結するテスト → 2つの引数を足し算するとか
・状態を変更するメソッドのテスト → リストオブジェクトから削除とか
XCTestで出来ること
・ UI(画面)のテスト→ 一般的には UnitTestで UIのテストは自動化しません。難しいし、その価値に見合うリターンが得られないことが多いからです。・マクロのテスト→ プリプロセッサなど Objective-Cランタイムから外れるものはテスト出来ません。
XCTestで出来ないこと
①テスト対象の関数を呼び出す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
ご清聴ありがとうございました!
top related