わんくま名古屋#35(20150523) tdd道場#23

18
わんくま同盟 名古屋勉強会 #35 1 リファクタリング って何だっけ? TDD 道場 #23 BluewaterSoft 2015/05/23 biac

Upload: yasuhiko-yamamoto

Post on 22-Jul-2015

122 views

Category:

Technology


0 download

TRANSCRIPT

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

リファクタリング

…って何だっけ?

TDD 道場 #23

BluewaterSoft 2015/05/23 biac

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

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

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

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

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

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

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

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

• CodeZine連載再開♪

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

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

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

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

【CM】有償セミナー@NSC

• 名古屋ソフトウェアセンターhttp://www.nagoya-sc.co.jp/

• 2015/6/11~12

【開催確定】XAML入門(WPF/ストアアプリ)

• 2015/7/2~3

Windows ストアアプリ開発手法(C#/VB.NET)

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

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

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

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

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

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

わんくま同盟名古屋勉強会 #35 6

TDD 3原則 by Robert C Martin

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

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

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

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

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

TDD MANTRA

• 『Test-Driven

Development: By

Example』からの引用

• テスト駆動開発において我々は、・自動テストが失敗している場合に限り、新しいコードを書く・重複を取り除く

• OneDrive で公開http://1drv.ms/1uz3Z2P

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

今年のテーマ

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

リファクタリング(refactoring)

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

リファクタリング by Martin Fowler

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

Refactoring is … altering its internal structure

without changing its external behavior.

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

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

•「リファクタリング―既

存のコードを安全に改善する―」 by Martin

Fowlerhttp://amzn.to/1C6rzHL

※原書は 1999/6 発行

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

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

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

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

The refactorings are defined to be behavior

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

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

リファクタリングとは?

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

リファクタリングの意味

• リファクタリングコードの外的な振る舞いを変更せずに、内部の構造を改善する

• リライト / リメイクコードを書き直す / 作り直す

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

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

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

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

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

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

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

• リファクタリングのサポートツール (機能)

を信頼する、というのもアリ

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

リファクタリングの対象範囲

• リファクタリングの対象範囲= コードの外的な振る舞いを不変に保つ範囲

• メソッド / クラス / クラス群 / バイナリファイル / プログラム全体…どれを対象範囲にしてもよいけど、しかし、範囲が広いと、外的な振る舞いの不変を確認するのがタイヘンなことに!

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

Visual Studio Community

•無償の Visual Studio

•ライセンス制限アリ (個人利用なら無条件でOK!)詳細は⇒http://www.microsoft.com/ja-jp/dev/products/community.aspx

•Professionalと同等 (VS2015では「ほぼ」同等)

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

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

簡単なリファクタリングの例

・変数の抽出 (Extract Variable)

・メソッドの抽出 (Extract Method)

演習タイム

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

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

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