18
わんくま同盟 名古屋勉強会 #36 1 リファクタリング …最初の一歩 TDD 道場 #24 BluewaterSoft 2015/07/25 biac

わんくま名古屋#36(20150725) TDD道場 #24

Embed Size (px)

Citation preview

Page 1: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 1

リファクタリング

…最初の一歩

TDD 道場 #24

BluewaterSoft 2015/07/25 biac

Page 2: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 2

スピーカー紹介: biac as 山本 康彦

• 宇宙世紀以前の生まれ スプートニク1号より3ヶ月ほど前

• 最初は HONDA クルマの設計/研究を10年くらいやってた

• 今は BluewaterSoft を名乗ってアプリ開発とか技術解説記事とか

• 「NUnitの全貌」⇒ CodeZine 2012/4

Page 3: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 3

【CM】 C#で始めるテスト駆動開発入門

• CodeZine 連載再開♪

• #08「ユニバーサルWindowsアプリのユニットテスト(前編)」

• #09「ユニバーサルWindowsアプリのユニットテスト(後編)」

• #10「状態を持つクラスをテストファーストする」

Page 4: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 4

TDD = テスト ファースト + リファクタリング

•テスト ファースト: RED と GREEN の繰り返し

•リファクタリング: GREEN を維持したまま実装を改善

失敗するはずのユニット テストを1つ書き、 失敗することを確認 (=RED)

ユニット テストに通るだけの実装を追加し、 成功することを確認 (=GREEN)

Page 5: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 5

TDD 3原則 by Robert C Martin

•ArticleS.UncleBob.TheThreeRulesOfTdd (2005) より。 ※ 実質は「テスト ファースト 3原則」

1. 失敗するユニットテストを成功させるためにしか、プロダクトコードを書いてはならない。

2. 失敗させるためにしか、ユニットテストを書いてはならない。コンパイルエラーは失敗に数える。

3. ユニットテストを1つだけ成功させる以上に、プロダクトコードを書いてはならない。

Page 7: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 7

今年のテーマ

•TDDの半分はテスト ファースト。 残り半分は…

リファクタリング (refactoring)

Page 8: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 8

リファクタリング by Martin Fowler

•「リファクタリングとは、コードの外的な振る舞いを変更せずに、内部の構造を作りかえること」 http://refactoring.com/

Refactoring is … altering its internal structure

without changing its external behavior.

Page 9: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 9

リファクタリングを学ぶには?

•「リファクタリング ―既存のコードを安全に改善する―」 by Martin Fowler http://amzn.to/1C6rzHL

※ 原書は 1999/6 発行

Page 10: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 10

「リファクタリング」 は造語

•「リファクタリング」は造語

•考案者は不明。Fowler ではない (例: 1992年の論文)

The refactorings are defined to be behavior preserving, (リファクタリングは、振る舞いを維持するように定義される…)

Page 11: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 11

リファクタリングの第一歩

・変数名の変更 (番外) ・メソッドの抽出 (Extract Method) ・メソッドの移動 (Move Method)

Page 12: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 12

リファクタリングの成功基準

• 1. コードの外的な振る舞いは不変

• 2. 内部の構造は改善された

• 両方できて、リファクタリング成功!

• 1. を保証するにはどうする?

• Fowler は、ユニットテストで 1. を保証

• リファクタリングのサポートツール (機能) を信頼する、というのもアリ

Page 13: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 13

変数名の変更

• エディタの置換機能を使う *スコープに注意 *文字列リテラルやコメントに注意 *前後でテスト

• IDEのリファクタリング機能を使う *文字列リテラルやコメントに注意 *VS 2015 では、XAML 内のリテラル置換 に失敗することもあるような ⇒ まだ前後でテストが必要そう https://msdn.microsoft.com/ja-jp/library/6kxxabwd.aspx

Page 14: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 14

メソッドの抽出 (Extract Method)

• リファクタリング サポートなし *新しいメソッドを書く *元のコードを書き換える *前後でテスト

• IDEのリファクタリング機能を使う *VS 2015 では、とくに注意しなくても 大丈夫そう https://msdn.microsoft.com/ja-jp/library/0s21cwxk.aspx

Page 15: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 15

メソッドの移動 (Move Method)

• リファクタリング サポートなし *移動先にメソッドを書く(コピペ+α) *元のメソッドを委譲メソッドに *テスト *元のメソッドを削除 *コンパイルエラーを修正 *テスト

• VS 2015 は未サポート

Page 16: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 16

Visual Studio Community 2015

•無償の Visual Studio

•ライセンス制限アリ (個人利用なら無条件でOK!) 詳細は⇒ https://www.visualstudio.com/products/visual-studio-community-vs

•Professionalとほぼ同等

•ダウンロード http://aka.ms/vscomm2013dl

Page 17: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 17

リファクタリングの第一歩

・変数名の変更 (番外) ・メソッドの抽出 (Extract Method) ・メソッドの移動 (Move Method)

DEMO

Visual Studio Community エディションは テストファースト最強♪

Page 18: わんくま名古屋#36(20150725) TDD道場 #24

わんくま同盟 名古屋勉強会 #36 18

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