SlideShare a Scribd company logo
1 of 44
Download to read offline
アプリのテストを書かなければな
らないと分かっているけども、書
けていない人たちへ	
山崎友弘
そもその何の為にテストを書く
の?	
・仕様変更、追加に耐えうる為
ということは今後100%仕様変更、
追加がないと分かっている場合
はテストを書く必要がない。
しかし、残念ながら未来のことは
分からないので、テストを書かな
ければならない。
「テストコードとは保険
の様な物だ」
サーバーのテストは一般的になっ
てるけど、アプリのテストって浸透
してない気がするけどなぜ?
1.プロダクトの寿命が短い	
サーバーと比べると、アプリのプ
ロダクトの寿命は短いので、そこ
まで保険を掛ける必要がない。
2.サーバーのテストでは
保険以外の価値が・・・	
これ重要なので、深堀して説明
します。
サーバーのAPIのテストをしようと
すると	
・DBの値が、この場合とこの場合  
 とこの場合と・・・
・getのテスト用urlを作る為に、api
 仕様書みなきゃ	
・postのapiテストどうしよう
これを解決するのが
テストコード!!
サーバーのテストコードの価値は
は保険だけではない
今の作業が楽になる
だからサーバーのテストコードは
「書かなければならない」
ではなく
「書きたい」
になっている
今日のねらい	
アプリのテストコードも
「書かなかればならない」
ではなく
「書きたい」
にもっていく
まずテストを書く前に大事なこと	
・テスタビリティ(試験性)なコード
であるか
テスタビリティの特徴	
・クラスおよびメソッドが適切な
 サイズに分割されている
・入力と出力が明確である
なぜテスタビリティでないコードで
テストが書けないか
実際にコードを見てみよう
こんなアプリのコードです	
「更新」ボタンを押したら
テーブルQiitaのAPIを
叩いて返ってきたデータを
テーブルビューに表示してい
るだけのものです。
まず悪いコード例
「更新」ボタンのイベント
テストしようとすると・・・	
・このメソッドのアウトプットが曖昧すぎて何を
確認したらよいか分からない
・VとMが分離されていないからこういうことが
起きる
ナイスなコード例
「更新」ボタンの中身を
モデルに任せました
するとテストが書ける様に
なりました	
・VとMが分離し、アウトプットが明確になった
ため、 テストが書ける様になった。
新たに出てきた疑問	
・ネットワークの通信系のエラー処理どうしよう?
・どこに書けばいいかな?
・同じところに書くのはテストのレイアーが違う
 気がしない?
パーフェクトなコード例
「updateQiitaList」の中身	
・通信部分は他でも汎用的に使えそう
・以下の赤枠の部分がこのモデルに依存している
・じゃー、切り分ければいいじゃん
通信部分だけ汎用的なModelと
して抜き出しました
すると、通信のエラー処理のテストコードは、この
モデルのテストクラスでしてあげれば他の場所で
する必要がない
結果、それぞれのメソッドの粒度
に最適なテストだけを書くことが
出来ました。
めでたしめでたし	
ソースアップしてます:
 悪い例:https://github.com/yamasakitomohiro/QiitaList_bad
 ナイスな例:https://github.com/yamasakitomohiro/QiitaList_nice
パーフェクトな例:https://github.com/yamasakitomohiro/QiitaList_perfect
テスタビリティでないとダメな理由	
・結果として何を確認すべきか	
 曖昧過ぎて分からない	
	
・テスタビリティ==良い設計
テストコード書くと良いこと
『メソッドが何処まで考えて作られ
   ているかが一目でわかる!!』	
特にイレギュラー系
例えばこんな感じ
『MVCが良くわからなければ
    テストコードを書けばいい』
モデルが分離できていないとテス
トコードが書きにくいので、自然と
分離するようになる。
『コードを修正する時に、あれこれ
考えなくてよく不安がない』	
デグレってもテストコードが	
     拾ってくれるから安心!
『必然的に、
設計を見直すことになるので
バグを発見しやすい』
『テストを書けると出来る
    エンジニアっぽくなる』
『品質を証明する
   ドキュメントになる』
テスト書きたくなりました?

More Related Content

What's hot

Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみたFirefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Nobuhiro Ueda
 

What's hot (20)

JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップJavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
 
人の言うことを簡単に信じるな!
人の言うことを簡単に信じるな!人の言うことを簡単に信じるな!
人の言うことを簡単に信じるな!
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
 
自動的に開発環境設定(1)
自動的に開発環境設定(1)自動的に開発環境設定(1)
自動的に開発環境設定(1)
 
リーダブルコード勉強会 in 筑波大 - 練習
リーダブルコード勉強会 in 筑波大 - 練習リーダブルコード勉強会 in 筑波大 - 練習
リーダブルコード勉強会 in 筑波大 - 練習
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
マークアップの作業効率をあげよう!
マークアップの作業効率をあげよう!マークアップの作業効率をあげよう!
マークアップの作業効率をあげよう!
 
Shibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnectShibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnect
 
Vue Nativeに挑戦してみた
Vue Nativeに挑戦してみたVue Nativeに挑戦してみた
Vue Nativeに挑戦してみた
 
Devlove仙台20130309 レガシープロジェクト脱出大作戦
Devlove仙台20130309 レガシープロジェクト脱出大作戦Devlove仙台20130309 レガシープロジェクト脱出大作戦
Devlove仙台20130309 レガシープロジェクト脱出大作戦
 
MTプラグイン入門以前
MTプラグイン入門以前MTプラグイン入門以前
MTプラグイン入門以前
 
プログラマーのお仕事
プログラマーのお仕事プログラマーのお仕事
プログラマーのお仕事
 
20090801phpstudy Sanemat
20090801phpstudy Sanemat20090801phpstudy Sanemat
20090801phpstudy Sanemat
 
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
 
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみたFirefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
Web開発の 今までとこれから
Web開発の 今までとこれからWeb開発の 今までとこれから
Web開発の 今までとこれから
 
知ってるようで知らないWeb基礎セミナー
知ってるようで知らないWeb基礎セミナー知ってるようで知らないWeb基礎セミナー
知ってるようで知らないWeb基礎セミナー
 
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
 
今更Cake2.3でWebAPIを作った話
今更Cake2.3でWebAPIを作った話今更Cake2.3でWebAPIを作った話
今更Cake2.3でWebAPIを作った話
 

Similar to アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ

ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2
Tomoyuki Sato
 
ICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -ModelICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -Model
Kinji Akemine
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summary
Yukio NAGAO
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
yasuohosotani
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
Tomoyuki Sato
 

Similar to アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ (20)

cochica
cochicacochica
cochica
 
1時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac20141時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac2014
 
論文紹介@ Gunosyデータマイニング研究会 #97
論文紹介@ Gunosyデータマイニング研究会 #97論文紹介@ Gunosyデータマイニング研究会 #97
論文紹介@ Gunosyデータマイニング研究会 #97
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
Azure 障害との上手な付き合い方
Azure 障害との上手な付き合い方Azure 障害との上手な付き合い方
Azure 障害との上手な付き合い方
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめよう
 
ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6
 
ICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -ModelICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -Model
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
 
Mizukiryu refactering-20110821
Mizukiryu refactering-20110821Mizukiryu refactering-20110821
Mizukiryu refactering-20110821
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summary
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
 
OpenSpan_PreMarketing
OpenSpan_PreMarketingOpenSpan_PreMarketing
OpenSpan_PreMarketing
 

アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ