70
忍者式テストを やってみた 2014/10/04 中島 滋 株式会社ラグザイア

Ninja Testing at Toteka03

Embed Size (px)

DESCRIPTION

とてか03 で発表した「忍者式テストをやってみた」の発表資料です。 - とてか03(http://d.hatena.ne.jp/tochigitestnokaigi/20141004) - The Model-View-Controller (MVC) Its Past and Present(http://heim.ifi.uio.no/~trygver/2003/javazone-jaoo/MVC_pattern.pdf) - ステートフルJavaScript(http://www.amazon.co.jp/dp/487311554X) - MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java(http://www.wildcrest.com/Potel/Portfolio/mvp.pdf)

Citation preview

Page 1: Ninja Testing at Toteka03

忍者式テストをやってみた

2014/10/04 中島 滋 株式会社ラグザイア

Page 2: Ninja Testing at Toteka03

とてか03招待講演

Page 3: Ninja Testing at Toteka03

自己紹介中島滋(@@lleeddssuunn)WWeebb系受託開発プログラマJJaavvaaSSccrriipptt、CC##

Page 4: Ninja Testing at Toteka03

今日の献立

Page 5: Ninja Testing at Toteka03

11.. 忍者式テストを超簡単に22.. 忍者式テストはレグレッション33.. 忍者式テストのTTeessttiinngg面44.. 忍者式テストを詳しく55.. 忍者式テストのうれしさ66.. まとめ

Page 6: Ninja Testing at Toteka03

11..忍者式テストを超簡単に

Page 7: Ninja Testing at Toteka03

毎日テストを実施する受け入�れ試験手で行う

Page 8: Ninja Testing at Toteka03

ここでテスト項目を見せる

Page 9: Ninja Testing at Toteka03

22..忍者式テストをレグレッションに使う

Page 10: Ninja Testing at Toteka03

今日の話のお得ポイント

Page 11: Ninja Testing at Toteka03

忍者式テストはレガシーコードと戦う時に

使えた

Page 12: Ninja Testing at Toteka03

レガシーコードは存在する!

機能を追加したいリファクタリングしたい

Page 13: Ninja Testing at Toteka03

レガシーコードの例22885544行JJaavvaaSSccrriipptt

スコープを意識していない大域変数

((アプリケーションに閉じてる))非モジュール(グループ)化エディタアプリケーション

(GGUUII)テストコードなし

Page 14: Ninja Testing at Toteka03

ここで対象となるアプリケーションを見せる

Page 15: Ninja Testing at Toteka03

レガシーコードと戦う基礎戦術

Page 16: Ninja Testing at Toteka03

基礎戦術11!

仕様が明確な関数を取り出しテストコードを書く

Page 17: Ninja Testing at Toteka03

分割されていないコードは仕様を理解して

取り出せる部分が小さい数〜数十行

!

99割がモンスターのまま残る110000〜11000000回やる?

Page 18: Ninja Testing at Toteka03

機能を足したいからリファクタリングしたい

Page 19: Ninja Testing at Toteka03

レガシーコードでは理解し難い部分が変更したい部分なことが多い

Page 20: Ninja Testing at Toteka03

効果が出るまで時間がかかるのでやめました

Page 21: Ninja Testing at Toteka03

基礎戦術22!

ソフトウェアを数個のモジュールに分割する

Page 22: Ninja Testing at Toteka03

分割にテストコードは必要か

Page 23: Ninja Testing at Toteka03

網羅したテストを書くには時間がかかる

Page 24: Ninja Testing at Toteka03

テストコードを書かずにリファクタリング

!

スコープをわける大きな変更は

手で動作確認できる(まだ忍者式テストでない)

Page 25: Ninja Testing at Toteka03

GGUUIIのモジュール分割の王道!

11.. コンポーネント分割22.. PPrreesseennttaattiioonn--DDoommaaiinn--SSeeppaarraattiioonn(プレゼンテーションとドメイン)33.. SSmmaallllttaallkk--8800 MMVVCC(モデル・ビュー・コントローラー)

Page 26: Ninja Testing at Toteka03

33.. SSmmaallllttaallkk--8800 MMVVCCは「TThhee MMooddeell--VViieeww--CCoonnttrroolllleerr ((MMVVCC)) IIttss PPaasstt aanndd PPrreesseenntt」

が手引きになる

Page 27: Ninja Testing at Toteka03

SSmmaallllttaallkk--8800 MMVVCCではCCoonnttrroolllleerrがでかい!

!

モデルの更新とビューの更新両方やる

!

44.. SSeeppaarraatteedd PPrreesseennttaattiioonnビューがOObbsseerrvveerrに

モデルが変わったら勝手に更新

Page 28: Ninja Testing at Toteka03

44.. SSeeppaarraatteedd PPrreesseennttaattiioonnは「ステートフルJJaavvaaSSccrriipptt」が

手引きになる

Page 29: Ninja Testing at Toteka03

OObbsseerrvveerr付きMMVVCCに分けてもCCoonnttrroolllleerrがでかい!

!

作ったオブジェクトを自動選択!

11..モデルつくる22..ビューに表示33..選択状態に更新

Page 30: Ninja Testing at Toteka03

55.. MMooddeell VViieeww PPrreesseenntteerr!

選択状態のモデル化sseelleeccttiioonn

ビューはsseelleeccttiioonnも監視

Page 31: Ninja Testing at Toteka03

「MMVVPP:: MMooddeell--VViieeww--PPrreesseenntteerr TThhee TTaalliiggeenntt PPrrooggrraammmmiinngg MMooddeell ffoorr CC++++ aanndd JJaavvaa 」を読んでもわからない!

!

このアプリケーションに上手くはまるの?

Page 32: Ninja Testing at Toteka03

不安!

適用後のソースコードがイメージできない

!

手探りでの変更

Page 33: Ninja Testing at Toteka03

変更中にアプリケーションを

壊したら早く知りたい

Page 34: Ninja Testing at Toteka03

やっぱりテストハーネスが欲しい!

Page 35: Ninja Testing at Toteka03

テストコードを書く?!

分割したいのはCCoonnttrroolllleerr

ユーザー入�力と密接!

PPhhaannttoommJJSS??SSeelleenniiuumm??

!

そうだ手でやろう!

Page 36: Ninja Testing at Toteka03

忍者式テスト

Page 37: Ninja Testing at Toteka03

AA44用紙に今までやった確認手順を書き出す

数件実行してみる

Page 38: Ninja Testing at Toteka03

次の日にもやる赤ペンも入�れる

Page 39: Ninja Testing at Toteka03

なんと言うことでしょう!!

そこには今まで見たこともないバグが

ありました

Page 40: Ninja Testing at Toteka03

期待通り!

テストハーネスとして機能する(CChheecckkiinngg)

Page 41: Ninja Testing at Toteka03

それ以上に!

未知のバグが見つかった((TTeessttiinngg))

!

引き継ぎ前のバグ引き継ぎ後に入�れいたバグ

Page 42: Ninja Testing at Toteka03

いったん確認!

忍者式テストはレガシーコードと戦う一戦術

!

TTeessttiinnggの側面もある?

Page 43: Ninja Testing at Toteka03

ここまで22.. 忍者式テストをレグレッションに使う

!

ここから33.. 忍者式テストのTTeessttiinngg面

Page 44: Ninja Testing at Toteka03

忍者式テストでは新しいテストが見つかる

!

なぜだろう?

Page 45: Ninja Testing at Toteka03

秋山 浩一さんの洞察元・富士ゼロックステストコンサルタント

Page 46: Ninja Testing at Toteka03

@@aakkiiyyaammaa992244テスターは、いい加減なテストケースを元に、そこからちょっと外れた操作をしてバグを見つけていると思います。hhttttppss::////ttwwiitttteerr..ccoomm//aakkiiyyaammaa992244//

ssttaattuuss//550066225555440011553377338844444488

Page 47: Ninja Testing at Toteka03

これだ!!

忍者式テストでもテストケースから

ちょっと外れた操作をした時バグを見つけている

Page 48: Ninja Testing at Toteka03

どういうわけか紙に向�かって

テストケースを考える時には思いつかない

Page 49: Ninja Testing at Toteka03

思いついてもテストケースを書くのが

面倒

Page 50: Ninja Testing at Toteka03

バグを見つけた手順(CChheecckkiinngg)

!

有効なテストケースは残す

Page 51: Ninja Testing at Toteka03

忍者式テストは毎日、人がやる

毎日、ちょっとずつ変わる!

TTeessttiinngg(未知の問題が見つかる)

Page 52: Ninja Testing at Toteka03

44..忍者式テストを詳しく

Page 53: Ninja Testing at Toteka03

準備11..新機能の確認テストを追加

!

テストを実行22..既存のテストを改�善

33..新しく発見したテストを追加44..要らなくなったテストを削除

Page 54: Ninja Testing at Toteka03

11..その日追加した新機能のテストを追加

!

雑機能確認程度

正しい動作のメモ代わり

Page 55: Ninja Testing at Toteka03

22..昨日までのテストを修正わかりやすく早く終わる手順に

!

文章の添削に一日置く感じ

Page 56: Ninja Testing at Toteka03

33..新しく発見したテストを追加

Page 57: Ninja Testing at Toteka03

新しいテストは一番上に追加実行頻度を高く

Page 58: Ninja Testing at Toteka03

44..バグを発見できなくなったテストを止める

!

基準は感性「めんどくさいなー」多分合っているけど不安

気合い

Page 59: Ninja Testing at Toteka03

疲れていると気合い不足

テストが減らない!

すごく疲れていると何でもめんどくさくなるテストが減らない

Page 60: Ninja Testing at Toteka03

テストは健康な状態でやらなければならない

Page 61: Ninja Testing at Toteka03

55.. 忍者式テストをやるとうれしいこと

Page 62: Ninja Testing at Toteka03

最初に完璧なテストを書かなくてよい

!

フォーマットカバレッジ効率

Page 63: Ninja Testing at Toteka03

最初のハードルは低い!

毎日やるとちゃんとバグが見つかる

Page 64: Ninja Testing at Toteka03

テストを足してから一週間ぐらいは

新しいテストとバグが見つる!

ただし毎日やらないとバグが見つからない

Page 65: Ninja Testing at Toteka03

毎日テストしないと恐い

Page 66: Ninja Testing at Toteka03

大きなリファクタリングが終わっても(二ヶ月経過)やめていないのは

TTeessttiinnggの面が大きいから

Page 67: Ninja Testing at Toteka03

まとめ

Page 68: Ninja Testing at Toteka03

忍者式テストで!

テストコードが書けなくてもレガシーコードと戦える

!

未知のバグも発見できるテストにちょっと自信がもてる

Page 69: Ninja Testing at Toteka03

忍者式テストをやろう!

書けるなら最初からテストコードを

書いてくれ

Page 70: Ninja Testing at Toteka03

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