SlideShare a Scribd company logo
1 of 70
Download to read offline
忍者式テストを 
やってみた 
2014/10/04 中島 滋 
株式会社ラグザイア
とてか03 
招待講演
自己紹介 
中島滋(@@lleeddssuunn) 
WWeebb系受託開発 
プログラマ 
JJaavvaaSSccrriipptt、CC##
今日の献立
11.. 忍者式テストを超簡単に 
22.. 忍者式テストはレグレッション 
33.. 忍者式テストのTTeessttiinngg面 
44.. 忍者式テストを詳しく 
55.. 忍者式テストのうれしさ 
66.. まとめ
11..忍者式テストを超簡単に
毎日テストを実施する 
受け入�れ試験 
手で行う
ここでテスト項目を見せる
22..忍者式テストをレグレッション 
に使う
今日の話の 
お得ポイント
忍者式テストは 
レガシーコードと戦う時に 
使えた
レガシーコードは存在する 
! 
機能を追加したい 
リファクタリングしたい
レガシーコードの例 
22885544行 
JJaavvaaSSccrriipptt 
スコープを意識していない 
大域変数 
((アプリケーションに閉じてる)) 
非モジュール(グループ)化 
エディタアプリケーション 
(GGUUII) 
テストコードなし
ここで対象となる 
アプリケーションを見せる
レガシーコードと戦う 
基礎戦術
基礎戦術11 
! 
仕様が明確な関数を取り出し 
テストコードを書く
分割されていないコードは 
仕様を理解して 
取り出せる部分が小さい 
数〜数十行 
! 
99割がモンスターのまま残る 
110000〜11000000回やる?
機能を足したいから 
リファクタリングしたい
レガシーコードでは 
理解し難い部分が 
変更したい部分 
なことが多い
効果が出るまで 
時間がかかるので 
やめました
基礎戦術22 
! 
ソフトウェアを 
数個のモジュールに分割する
分割にテストコードは必要か
網羅したテストを書くには 
時間がかかる
テストコードを書かずに 
リファクタリング 
! 
スコープをわける 
大きな変更は 
手で動作確認できる 
(まだ忍者式テストでない)
GGUUIIのモジュール分割の王道 
! 
11.. コンポーネント分割 
22.. PPrreesseennttaattiioonn--DDoommaaiinn--SSeeppaarraattiioonn 
(プレゼンテーションとドメイン) 
33.. SSmmaallllttaallkk--8800 MMVVCC 
(モデル・ビュー・コントローラー)
33.. SSmmaallllttaallkk--8800 MMVVCCは 
「TThhee MMooddeell--VViieeww--CCoonnttrroolllleerr 
((MMVVCC)) IIttss PPaasstt aanndd PPrreesseenntt」 
が手引きになる
SSmmaallllttaallkk--8800 MMVVCCでは 
CCoonnttrroolllleerrがでかい! 
! 
モデルの更新とビューの更新 
両方やる 
! 
44.. SSeeppaarraatteedd PPrreesseennttaattiioonn 
ビューがOObbsseerrvveerrに 
モデルが変わったら勝手に更新
44.. SSeeppaarraatteedd PPrreesseennttaattiioonnは 
「ステートフルJJaavvaaSSccrriipptt」が 
手引きになる
OObbsseerrvveerr付きMMVVCCに分けても 
CCoonnttrroolllleerrがでかい! 
! 
作ったオブジェクトを自動選択 
! 
11..モデルつくる 
22..ビューに表示 
33..選択状態に更新
55.. MMooddeell VViieeww PPrreesseenntteerr 
! 
選択状態のモデル化 
sseelleeccttiioonn 
ビューはsseelleeccttiioonnも監視
「MMVVPP:: MMooddeell--VViieeww--PPrreesseenntteerr 
TThhee TTaalliiggeenntt PPrrooggrraammmmiinngg 
MMooddeell ffoorr CC++++ aanndd JJaavvaa 」を 
読んでもわからない! 
! 
このアプリケーションに 
上手くはまるの?
不安 
! 
適用後のソースコードが 
イメージできない 
! 
手探りでの変更
変更中に 
アプリケーションを 
壊したら 
早く知りたい
やっぱり 
テストハーネスが欲しい!
テストコードを書く? 
! 
分割したいのは 
CCoonnttrroolllleerr 
ユーザー入�力と密接 
! 
PPhhaannttoommJJSS?? 
SSeelleenniiuumm?? 
! 
そうだ手でやろう!
忍者式テスト
AA44用紙に今までやった 
確認手順を書き出す 
数件 
実行してみる
次の日にもやる 
赤ペンも入�れる
なんと言うことでしょう! 
! 
そこには 
今まで見たこともないバグが 
ありました
期待通り 
! 
テストハーネスとして 
機能する 
(CChheecckkiinngg)
それ以上に 
! 
未知のバグが見つかった 
((TTeessttiinngg)) 
! 
引き継ぎ前のバグ 
引き継ぎ後に入�れいたバグ
いったん確認 
! 
忍者式テストは 
レガシーコードと戦う一戦術 
! 
TTeessttiinnggの側面もある?
ここまで 
22.. 忍者式テストを 
レグレッションに使う 
! 
ここから 
33.. 忍者式テストのTTeessttiinngg面
忍者式テストでは 
新しいテストが見つかる 
! 
なぜだろう?
秋山 浩一さんの洞察 
元・富士ゼロックス 
テストコンサルタント
@@aakkiiyyaammaa992244 
テスターは、いい加減なテスト 
ケースを元に、そこからちょっ 
と外れた操作をしてバグを見つ 
けていると思います。hhttttppss:://// 
ttwwiitttteerr..ccoomm//aakkiiyyaammaa992244// 
ssttaattuuss// 
550066225555440011553377338844444488
これだ! 
! 
忍者式テストでも 
テストケースから 
ちょっと外れた操作をした時 
バグを見つけている
どういうわけか 
紙に向�かって 
テストケースを考える時には 
思いつかない
思いついても 
テストケースを書くのが 
面倒
バグを見つけた手順 
(CChheecckkiinngg) 
! 
有効なテストケースは残す
忍者式テストは 
毎日、人がやる 
毎日、ちょっとずつ変わる 
! 
TTeessttiinngg 
(未知の問題が見つかる)
44..忍者式テストを詳しく
準備 
11..新機能の確認テストを追加 
! 
テストを実行 
22..既存のテストを改�善 
33..新しく発見したテストを追加 
44..要らなくなったテストを削除
11..その日追加した 
新機能のテストを追加 
! 
雑 
機能確認程度 
正しい動作のメモ代わり
22..昨日までのテストを修正 
わかりやすく 
早く終わる手順に 
! 
文章の添削に一日置く感じ
33..新しく発見したテストを 
追加
新しいテストは一番上に追加 
実行頻度を高く
44..バグを 
発見できなくなった 
テストを止める 
! 
基準は感性 
「めんどくさいなー」 
多分合っているけど不安 
気合い
疲れていると 
気合い不足 
テストが減らない 
! 
すごく疲れていると 
何でもめんどくさくなる 
テストが減らない
テストは健康な状態で 
やらなければならない
55.. 忍者式テストをやると 
うれしいこと
最初に完璧なテストを 
書かなくてよい 
! 
フォーマット 
カバレッジ 
効率
最初のハードルは低い 
! 
毎日やると 
ちゃんとバグが見つかる
テストを足してから 
一週間ぐらいは 
新しいテストとバグが見つる 
! 
ただし 
毎日やらないと 
バグが見つからない
毎日テストしないと恐い
大きなリファクタリングが 
終わっても 
(二ヶ月経過) 
やめていないのは 
TTeessttiinnggの面が大きいから
まとめ
忍者式テストで 
! 
テストコードが書けなくても 
レガシーコードと戦える 
! 
未知のバグも発見できる 
テストにちょっと自信がもてる
忍者式テストをやろう 
! 
書けるなら 
最初からテストコードを 
書いてくれ
ご清聴 
ありがとうございました

More Related Content

What's hot

Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介torisoup
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpkyon mm
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用Akinori SAKATA
 
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活Classi.corp
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門H Iseri
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。toshihiro ichitani
 
What should you shift left
What should you shift leftWhat should you shift left
What should you shift leftYasuharu Nishi
 
テスト分析.pptx
テスト分析.pptxテスト分析.pptx
テスト分析.pptxkauji0522
 
込山 俊博, ISO/IEC 25000 SQuaREの概要と最新動向
込山 俊博, ISO/IEC 25000 SQuaREの概要と最新動向込山 俊博, ISO/IEC 25000 SQuaREの概要と最新動向
込山 俊博, ISO/IEC 25000 SQuaREの概要と最新動向Hironori Washizaki
 
ソフトウェアの品質保証の基礎とこれから
ソフトウェアの品質保証の基礎とこれからソフトウェアの品質保証の基礎とこれから
ソフトウェアの品質保証の基礎とこれからYasuharu Nishi
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~Kenji Hiranabe
 
3 Amigosの考え方で、独立したQAチームがアジャイルテストチームになるまでの話
3 Amigosの考え方で、独立したQAチームがアジャイルテストチームになるまでの話3 Amigosの考え方で、独立したQAチームがアジャイルテストチームになるまでの話
3 Amigosの考え方で、独立したQAチームがアジャイルテストチームになるまでの話Koichiro Takashima
 
われわれはなぜアジャイルに向かうのか
われわれはなぜアジャイルに向かうのかわれわれはなぜアジャイルに向かうのか
われわれはなぜアジャイルに向かうのかtoshihiro ichitani
 
大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー
大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー
大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナーItsuki Kuroda
 

What's hot (20)

Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
 
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
 
What should you shift left
What should you shift leftWhat should you shift left
What should you shift left
 
テスト分析.pptx
テスト分析.pptxテスト分析.pptx
テスト分析.pptx
 
JCSQE初級受けてみたの
JCSQE初級受けてみたのJCSQE初級受けてみたの
JCSQE初級受けてみたの
 
込山 俊博, ISO/IEC 25000 SQuaREの概要と最新動向
込山 俊博, ISO/IEC 25000 SQuaREの概要と最新動向込山 俊博, ISO/IEC 25000 SQuaREの概要と最新動向
込山 俊博, ISO/IEC 25000 SQuaREの概要と最新動向
 
ソフトウェアの品質保証の基礎とこれから
ソフトウェアの品質保証の基礎とこれからソフトウェアの品質保証の基礎とこれから
ソフトウェアの品質保証の基礎とこれから
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
 
Slideshare Japanese
Slideshare JapaneseSlideshare Japanese
Slideshare Japanese
 
3 Amigosの考え方で、独立したQAチームがアジャイルテストチームになるまでの話
3 Amigosの考え方で、独立したQAチームがアジャイルテストチームになるまでの話3 Amigosの考え方で、独立したQAチームがアジャイルテストチームになるまでの話
3 Amigosの考え方で、独立したQAチームがアジャイルテストチームになるまでの話
 
われわれはなぜアジャイルに向かうのか
われわれはなぜアジャイルに向かうのかわれわれはなぜアジャイルに向かうのか
われわれはなぜアジャイルに向かうのか
 
大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー
大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー
大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー
 

More from Nakajima Shigeru

More from Nakajima Shigeru (6)

Introduction of ES2015
Introduction of ES2015Introduction of ES2015
Introduction of ES2015
 
ChakraCore is what?
ChakraCore is what?ChakraCore is what?
ChakraCore is what?
 
20151117 es lint
20151117 es lint20151117 es lint
20151117 es lint
 
東京Node学園祭飛び込みLT
東京Node学園祭飛び込みLT東京Node学園祭飛び込みLT
東京Node学園祭飛び込みLT
 
Why js
Why jsWhy js
Why js
 
Ninja Testing at XP Matsuri
Ninja Testing at XP MatsuriNinja Testing at XP Matsuri
Ninja Testing at XP Matsuri
 

Ninja Testing at Toteka03