ninja testing at toteka03
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)TRANSCRIPT
![Page 1: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/1.jpg)
忍者式テストをやってみた
2014/10/04 中島 滋 株式会社ラグザイア
![Page 2: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/2.jpg)
とてか03招待講演
![Page 3: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/3.jpg)
自己紹介中島滋(@@lleeddssuunn)WWeebb系受託開発プログラマJJaavvaaSSccrriipptt、CC##
![Page 4: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/4.jpg)
今日の献立
![Page 5: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/5.jpg)
11.. 忍者式テストを超簡単に22.. 忍者式テストはレグレッション33.. 忍者式テストのTTeessttiinngg面44.. 忍者式テストを詳しく55.. 忍者式テストのうれしさ66.. まとめ
![Page 6: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/6.jpg)
11..忍者式テストを超簡単に
![Page 7: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/7.jpg)
毎日テストを実施する受け入�れ試験手で行う
![Page 8: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/8.jpg)
ここでテスト項目を見せる
![Page 9: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/9.jpg)
22..忍者式テストをレグレッションに使う
![Page 10: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/10.jpg)
今日の話のお得ポイント
![Page 11: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/11.jpg)
忍者式テストはレガシーコードと戦う時に
使えた
![Page 12: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/12.jpg)
レガシーコードは存在する!
機能を追加したいリファクタリングしたい
![Page 13: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/13.jpg)
レガシーコードの例22885544行JJaavvaaSSccrriipptt
スコープを意識していない大域変数
((アプリケーションに閉じてる))非モジュール(グループ)化エディタアプリケーション
(GGUUII)テストコードなし
![Page 14: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/14.jpg)
ここで対象となるアプリケーションを見せる
![Page 15: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/15.jpg)
レガシーコードと戦う基礎戦術
![Page 16: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/16.jpg)
基礎戦術11!
仕様が明確な関数を取り出しテストコードを書く
![Page 17: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/17.jpg)
分割されていないコードは仕様を理解して
取り出せる部分が小さい数〜数十行
!
99割がモンスターのまま残る110000〜11000000回やる?
![Page 18: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/18.jpg)
機能を足したいからリファクタリングしたい
![Page 19: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/19.jpg)
レガシーコードでは理解し難い部分が変更したい部分なことが多い
![Page 20: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/20.jpg)
効果が出るまで時間がかかるのでやめました
![Page 21: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/21.jpg)
基礎戦術22!
ソフトウェアを数個のモジュールに分割する
![Page 22: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/22.jpg)
分割にテストコードは必要か
![Page 23: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/23.jpg)
網羅したテストを書くには時間がかかる
![Page 24: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/24.jpg)
テストコードを書かずにリファクタリング
!
スコープをわける大きな変更は
手で動作確認できる(まだ忍者式テストでない)
![Page 25: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/25.jpg)
GGUUIIのモジュール分割の王道!
11.. コンポーネント分割22.. PPrreesseennttaattiioonn--DDoommaaiinn--SSeeppaarraattiioonn(プレゼンテーションとドメイン)33.. SSmmaallllttaallkk--8800 MMVVCC(モデル・ビュー・コントローラー)
![Page 26: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/26.jpg)
33.. SSmmaallllttaallkk--8800 MMVVCCは「TThhee MMooddeell--VViieeww--CCoonnttrroolllleerr ((MMVVCC)) IIttss PPaasstt aanndd PPrreesseenntt」
が手引きになる
![Page 27: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/27.jpg)
SSmmaallllttaallkk--8800 MMVVCCではCCoonnttrroolllleerrがでかい!
!
モデルの更新とビューの更新両方やる
!
44.. SSeeppaarraatteedd PPrreesseennttaattiioonnビューがOObbsseerrvveerrに
モデルが変わったら勝手に更新
![Page 28: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/28.jpg)
44.. SSeeppaarraatteedd PPrreesseennttaattiioonnは「ステートフルJJaavvaaSSccrriipptt」が
手引きになる
![Page 29: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/29.jpg)
OObbsseerrvveerr付きMMVVCCに分けてもCCoonnttrroolllleerrがでかい!
!
作ったオブジェクトを自動選択!
11..モデルつくる22..ビューに表示33..選択状態に更新
![Page 30: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/30.jpg)
55.. MMooddeell VViieeww PPrreesseenntteerr!
選択状態のモデル化sseelleeccttiioonn
ビューはsseelleeccttiioonnも監視
![Page 31: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/31.jpg)
「MMVVPP:: MMooddeell--VViieeww--PPrreesseenntteerr TThhee TTaalliiggeenntt PPrrooggrraammmmiinngg MMooddeell ffoorr CC++++ aanndd JJaavvaa 」を読んでもわからない!
!
このアプリケーションに上手くはまるの?
![Page 32: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/32.jpg)
不安!
適用後のソースコードがイメージできない
!
手探りでの変更
![Page 33: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/33.jpg)
変更中にアプリケーションを
壊したら早く知りたい
![Page 34: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/34.jpg)
やっぱりテストハーネスが欲しい!
![Page 35: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/35.jpg)
テストコードを書く?!
分割したいのはCCoonnttrroolllleerr
ユーザー入�力と密接!
PPhhaannttoommJJSS??SSeelleenniiuumm??
!
そうだ手でやろう!
![Page 36: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/36.jpg)
忍者式テスト
![Page 37: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/37.jpg)
AA44用紙に今までやった確認手順を書き出す
数件実行してみる
![Page 38: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/38.jpg)
次の日にもやる赤ペンも入�れる
![Page 39: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/39.jpg)
なんと言うことでしょう!!
そこには今まで見たこともないバグが
ありました
![Page 40: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/40.jpg)
期待通り!
テストハーネスとして機能する(CChheecckkiinngg)
![Page 41: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/41.jpg)
それ以上に!
未知のバグが見つかった((TTeessttiinngg))
!
引き継ぎ前のバグ引き継ぎ後に入�れいたバグ
![Page 42: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/42.jpg)
いったん確認!
忍者式テストはレガシーコードと戦う一戦術
!
TTeessttiinnggの側面もある?
![Page 43: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/43.jpg)
ここまで22.. 忍者式テストをレグレッションに使う
!
ここから33.. 忍者式テストのTTeessttiinngg面
![Page 44: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/44.jpg)
忍者式テストでは新しいテストが見つかる
!
なぜだろう?
![Page 45: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/45.jpg)
秋山 浩一さんの洞察元・富士ゼロックステストコンサルタント
![Page 46: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/46.jpg)
@@aakkiiyyaammaa992244テスターは、いい加減なテストケースを元に、そこからちょっと外れた操作をしてバグを見つけていると思います。hhttttppss::////ttwwiitttteerr..ccoomm//aakkiiyyaammaa992244//
ssttaattuuss//550066225555440011553377338844444488
![Page 47: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/47.jpg)
これだ!!
忍者式テストでもテストケースから
ちょっと外れた操作をした時バグを見つけている
![Page 48: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/48.jpg)
どういうわけか紙に向�かって
テストケースを考える時には思いつかない
![Page 49: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/49.jpg)
思いついてもテストケースを書くのが
面倒
![Page 50: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/50.jpg)
バグを見つけた手順(CChheecckkiinngg)
!
有効なテストケースは残す
![Page 51: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/51.jpg)
忍者式テストは毎日、人がやる
毎日、ちょっとずつ変わる!
TTeessttiinngg(未知の問題が見つかる)
![Page 52: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/52.jpg)
44..忍者式テストを詳しく
![Page 53: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/53.jpg)
準備11..新機能の確認テストを追加
!
テストを実行22..既存のテストを改�善
33..新しく発見したテストを追加44..要らなくなったテストを削除
![Page 54: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/54.jpg)
11..その日追加した新機能のテストを追加
!
雑機能確認程度
正しい動作のメモ代わり
![Page 55: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/55.jpg)
22..昨日までのテストを修正わかりやすく早く終わる手順に
!
文章の添削に一日置く感じ
![Page 56: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/56.jpg)
33..新しく発見したテストを追加
![Page 57: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/57.jpg)
新しいテストは一番上に追加実行頻度を高く
![Page 58: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/58.jpg)
44..バグを発見できなくなったテストを止める
!
基準は感性「めんどくさいなー」多分合っているけど不安
気合い
![Page 59: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/59.jpg)
疲れていると気合い不足
テストが減らない!
すごく疲れていると何でもめんどくさくなるテストが減らない
![Page 60: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/60.jpg)
テストは健康な状態でやらなければならない
![Page 61: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/61.jpg)
55.. 忍者式テストをやるとうれしいこと
![Page 62: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/62.jpg)
最初に完璧なテストを書かなくてよい
!
フォーマットカバレッジ効率
![Page 63: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/63.jpg)
最初のハードルは低い!
毎日やるとちゃんとバグが見つかる
![Page 64: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/64.jpg)
テストを足してから一週間ぐらいは
新しいテストとバグが見つる!
ただし毎日やらないとバグが見つからない
![Page 65: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/65.jpg)
毎日テストしないと恐い
![Page 66: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/66.jpg)
大きなリファクタリングが終わっても(二ヶ月経過)やめていないのは
TTeessttiinnggの面が大きいから
![Page 67: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/67.jpg)
まとめ
![Page 68: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/68.jpg)
忍者式テストで!
テストコードが書けなくてもレガシーコードと戦える
!
未知のバグも発見できるテストにちょっと自信がもてる
![Page 69: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/69.jpg)
忍者式テストをやろう!
書けるなら最初からテストコードを
書いてくれ
![Page 70: Ninja Testing at Toteka03](https://reader033.vdocuments.pub/reader033/viewer/2022051610/549bf241b47959fe318b45d3/html5/thumbnails/70.jpg)
ご清聴ありがとうございました