わんくま名古屋#36(20150725) TDD道場 #24
-
Upload
yasuhiko-yamamoto -
Category
Technology
-
view
148 -
download
3
Transcript of わんくま名古屋#36(20150725) TDD道場 #24
わんくま同盟 名古屋勉強会 #36 1
リファクタリング
…最初の一歩
TDD 道場 #24
BluewaterSoft 2015/07/25 biac
わんくま同盟 名古屋勉強会 #36 2
スピーカー紹介: biac as 山本 康彦
• 宇宙世紀以前の生まれ スプートニク1号より3ヶ月ほど前
• 最初は HONDA クルマの設計/研究を10年くらいやってた
• 今は BluewaterSoft を名乗ってアプリ開発とか技術解説記事とか
• 「NUnitの全貌」⇒ CodeZine 2012/4
わんくま同盟 名古屋勉強会 #36 3
【CM】 C#で始めるテスト駆動開発入門
• CodeZine 連載再開♪
• #08「ユニバーサルWindowsアプリのユニットテスト(前編)」
• #09「ユニバーサルWindowsアプリのユニットテスト(後編)」
• #10「状態を持つクラスをテストファーストする」
わんくま同盟 名古屋勉強会 #36 4
TDD = テスト ファースト + リファクタリング
•テスト ファースト: RED と GREEN の繰り返し
•リファクタリング: GREEN を維持したまま実装を改善
失敗するはずのユニット テストを1つ書き、 失敗することを確認 (=RED)
ユニット テストに通るだけの実装を追加し、 成功することを確認 (=GREEN)
わんくま同盟 名古屋勉強会 #36 5
TDD 3原則 by Robert C Martin
•ArticleS.UncleBob.TheThreeRulesOfTdd (2005) より。 ※ 実質は「テスト ファースト 3原則」
1. 失敗するユニットテストを成功させるためにしか、プロダクトコードを書いてはならない。
2. 失敗させるためにしか、ユニットテストを書いてはならない。コンパイルエラーは失敗に数える。
3. ユニットテストを1つだけ成功させる以上に、プロダクトコードを書いてはならない。
わんくま同盟 名古屋勉強会 #36 6
TDD MANTRA
• 『Test-Driven Development: By Example』からの引用
• テスト駆動開発において我々は、 ・自動テストが失敗している場合に限り、 新しいコードを書く ・重複を取り除く
• OneDrive で公開 http://1drv.ms/1uz3Z2P
わんくま同盟 名古屋勉強会 #36 7
今年のテーマ
•TDDの半分はテスト ファースト。 残り半分は…
リファクタリング (refactoring)
わんくま同盟 名古屋勉強会 #36 8
リファクタリング by Martin Fowler
•「リファクタリングとは、コードの外的な振る舞いを変更せずに、内部の構造を作りかえること」 http://refactoring.com/
Refactoring is … altering its internal structure
without changing its external behavior.
わんくま同盟 名古屋勉強会 #36 9
リファクタリングを学ぶには?
•「リファクタリング ―既存のコードを安全に改善する―」 by Martin Fowler http://amzn.to/1C6rzHL
※ 原書は 1999/6 発行
わんくま同盟 名古屋勉強会 #36 10
「リファクタリング」 は造語
•「リファクタリング」は造語
•考案者は不明。Fowler ではない (例: 1992年の論文)
The refactorings are defined to be behavior preserving, (リファクタリングは、振る舞いを維持するように定義される…)
わんくま同盟 名古屋勉強会 #36 11
リファクタリングの第一歩
・変数名の変更 (番外) ・メソッドの抽出 (Extract Method) ・メソッドの移動 (Move Method)
わんくま同盟 名古屋勉強会 #36 12
リファクタリングの成功基準
• 1. コードの外的な振る舞いは不変
• 2. 内部の構造は改善された
• 両方できて、リファクタリング成功!
• 1. を保証するにはどうする?
• Fowler は、ユニットテストで 1. を保証
• リファクタリングのサポートツール (機能) を信頼する、というのもアリ
わんくま同盟 名古屋勉強会 #36 13
変数名の変更
• エディタの置換機能を使う *スコープに注意 *文字列リテラルやコメントに注意 *前後でテスト
• IDEのリファクタリング機能を使う *文字列リテラルやコメントに注意 *VS 2015 では、XAML 内のリテラル置換 に失敗することもあるような ⇒ まだ前後でテストが必要そう https://msdn.microsoft.com/ja-jp/library/6kxxabwd.aspx
わんくま同盟 名古屋勉強会 #36 14
メソッドの抽出 (Extract Method)
• リファクタリング サポートなし *新しいメソッドを書く *元のコードを書き換える *前後でテスト
• IDEのリファクタリング機能を使う *VS 2015 では、とくに注意しなくても 大丈夫そう https://msdn.microsoft.com/ja-jp/library/0s21cwxk.aspx
わんくま同盟 名古屋勉強会 #36 15
メソッドの移動 (Move Method)
• リファクタリング サポートなし *移動先にメソッドを書く(コピペ+α) *元のメソッドを委譲メソッドに *テスト *元のメソッドを削除 *コンパイルエラーを修正 *テスト
• VS 2015 は未サポート
わんくま同盟 名古屋勉強会 #36 16
Visual Studio Community 2015
•無償の Visual Studio
•ライセンス制限アリ (個人利用なら無条件でOK!) 詳細は⇒ https://www.visualstudio.com/products/visual-studio-community-vs
•Professionalとほぼ同等
•ダウンロード http://aka.ms/vscomm2013dl
わんくま同盟 名古屋勉強会 #36 17
リファクタリングの第一歩
・変数名の変更 (番外) ・メソッドの抽出 (Extract Method) ・メソッドの移動 (Move Method)
DEMO
Visual Studio Community エディションは テストファースト最強♪
わんくま同盟 名古屋勉強会 #36 18
ご清聴ありがとうございました