Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Yasuhiko Yamamoto
829 views
わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31 2014/05/24 PowerPoint資料: http://1drv.ms/1oqxino
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 26
2
/ 26
3
/ 26
4
/ 26
5
/ 26
6
/ 26
7
/ 26
8
/ 26
9
/ 26
10
/ 26
11
/ 26
12
/ 26
13
/ 26
14
/ 26
15
/ 26
16
/ 26
17
/ 26
18
/ 26
19
/ 26
20
/ 26
21
/ 26
22
/ 26
23
/ 26
24
/ 26
25
/ 26
26
/ 26
More Related Content
PDF
普通のプログラミング言語R
by
Shuyo Nakatani
PDF
LINQ を使ったナンプレの解法を作ったお話
by
Fumihito Yokoyama
PDF
10分で分かるr言語入門ver2.15 15 1010
by
Nobuaki Oshiro
PDF
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
by
Yasuhiko Yamamoto
PDF
わんくま名古屋 #38 (20160521) Xamarin入門
by
Yasuhiko Yamamoto
PDF
C# から java へのプログラム移植で体験したtddの効果は?
by
Shinichi Hirauchi
PPT
タダで始めるテストファースト入門 ~ C# Express + NUnit
by
Yasuhiko Yamamoto
PPTX
わんくま名古屋 #37 (20151114) TDD道場 #25
by
Yasuhiko Yamamoto
普通のプログラミング言語R
by
Shuyo Nakatani
LINQ を使ったナンプレの解法を作ったお話
by
Fumihito Yokoyama
10分で分かるr言語入門ver2.15 15 1010
by
Nobuaki Oshiro
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
by
Yasuhiko Yamamoto
わんくま名古屋 #38 (20160521) Xamarin入門
by
Yasuhiko Yamamoto
C# から java へのプログラム移植で体験したtddの効果は?
by
Shinichi Hirauchi
タダで始めるテストファースト入門 ~ C# Express + NUnit
by
Yasuhiko Yamamoto
わんくま名古屋 #37 (20151114) TDD道場 #25
by
Yasuhiko Yamamoto
Similar to わんくま名古屋#31(20140524) TDD道場 #19
PPTX
わんくま名古屋 #32 (20140823) TDD道場 #20
by
Yasuhiko Yamamoto
PDF
TDD を自分の道具にしよう
by
yujiorama
PDF
テストコードの定型化
by
Shinichi Hirauchi
PDF
Tddのすゝめ
by
将 高野
PDF
わんくま名古屋#33(20141115) TDD道場#21
by
Yasuhiko Yamamoto
KEY
テストコードのリファクタリング
by
Shuji Watanabe
PDF
TDD Boot Camp Tokyo for C++ 2014-01 補講
by
Takashi Imagire
KEY
テスト初心者Androiderのためのソフトウェアテスト入門
by
Satoshi Watanabe
PDF
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
by
Yohei Onishi
PDF
TDDワークショップ(第2回)
by
Yoshihiro Furukawa
PPTX
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
by
Yasuhiko Yamamoto
PDF
Code complete ch22_developper_test
by
Sho Shimauchi
PPTX
ソフトウェア・テスト入門3
by
Kenta Hattori
PDF
わんくま名古屋#34(20150214) TDD道場#22
by
Yasuhiko Yamamoto
PDF
Datamining 4th adaboost
by
sesejun
PDF
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
by
Yasuhiko Yamamoto
PDF
Vbaでもtdd
by
terahide
PDF
nseg第5回勉強会
by
ko ty
PPTX
LINTから理解するTDD
by
Masafumi Sasaki
PDF
テストからより良い組込みソフトウェア開発を考える.pdf
by
耕二 阿部
わんくま名古屋 #32 (20140823) TDD道場 #20
by
Yasuhiko Yamamoto
TDD を自分の道具にしよう
by
yujiorama
テストコードの定型化
by
Shinichi Hirauchi
Tddのすゝめ
by
将 高野
わんくま名古屋#33(20141115) TDD道場#21
by
Yasuhiko Yamamoto
テストコードのリファクタリング
by
Shuji Watanabe
TDD Boot Camp Tokyo for C++ 2014-01 補講
by
Takashi Imagire
テスト初心者Androiderのためのソフトウェアテスト入門
by
Satoshi Watanabe
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
by
Yohei Onishi
TDDワークショップ(第2回)
by
Yoshihiro Furukawa
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
by
Yasuhiko Yamamoto
Code complete ch22_developper_test
by
Sho Shimauchi
ソフトウェア・テスト入門3
by
Kenta Hattori
わんくま名古屋#34(20150214) TDD道場#22
by
Yasuhiko Yamamoto
Datamining 4th adaboost
by
sesejun
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
by
Yasuhiko Yamamoto
Vbaでもtdd
by
terahide
nseg第5回勉強会
by
ko ty
LINTから理解するTDD
by
Masafumi Sasaki
テストからより良い組込みソフトウェア開発を考える.pdf
by
耕二 阿部
More from Yasuhiko Yamamoto
PDF
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
by
Yasuhiko Yamamoto
PDF
UWP アプリを JavaScript で作る 3つの方法
by
Yasuhiko Yamamoto
PDF
無償のVisual studioで作るクライアント アプリ
by
Yasuhiko Yamamoto
PPTX
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
by
Yasuhiko Yamamoto
PDF
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
by
Yasuhiko Yamamoto
PDF
第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」
by
Yasuhiko Yamamoto
PDF
わんくま名古屋#33(20141115) モノ作り半生
by
Yasuhiko Yamamoto
PDF
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
by
Yasuhiko Yamamoto
PDF
Windows ストア アプリでスレッド間排他処理
by
Yasuhiko Yamamoto
PPTX
Windows 8.1 Update 1 の噂をまとめてみた
by
Yasuhiko Yamamoto
PPTX
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
by
Yasuhiko Yamamoto
PPTX
Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]
by
Yasuhiko Yamamoto
PPTX
Windowsストアアプリでウイルスを作るには!? cod2013名古屋
by
Yasuhiko Yamamoto
PPTX
わんくま名古屋#27(20130518) データバインディングを極める
by
Yasuhiko Yamamoto
PDF
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
by
Yasuhiko Yamamoto
PDF
TDDの原理 ~ スペック・ファースト
by
Yasuhiko Yamamoto
PDF
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
by
Yasuhiko Yamamoto
PDF
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
by
Yasuhiko Yamamoto
PDF
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
by
Yasuhiko Yamamoto
PPTX
テンプレートを使ったストアアプリの作成
by
Yasuhiko Yamamoto
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
by
Yasuhiko Yamamoto
UWP アプリを JavaScript で作る 3つの方法
by
Yasuhiko Yamamoto
無償のVisual studioで作るクライアント アプリ
by
Yasuhiko Yamamoto
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
by
Yasuhiko Yamamoto
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
by
Yasuhiko Yamamoto
第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」
by
Yasuhiko Yamamoto
わんくま名古屋#33(20141115) モノ作り半生
by
Yasuhiko Yamamoto
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
by
Yasuhiko Yamamoto
Windows ストア アプリでスレッド間排他処理
by
Yasuhiko Yamamoto
Windows 8.1 Update 1 の噂をまとめてみた
by
Yasuhiko Yamamoto
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
by
Yasuhiko Yamamoto
Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]
by
Yasuhiko Yamamoto
Windowsストアアプリでウイルスを作るには!? cod2013名古屋
by
Yasuhiko Yamamoto
わんくま名古屋#27(20130518) データバインディングを極める
by
Yasuhiko Yamamoto
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
by
Yasuhiko Yamamoto
TDDの原理 ~ スペック・ファースト
by
Yasuhiko Yamamoto
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
by
Yasuhiko Yamamoto
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
by
Yasuhiko Yamamoto
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
by
Yasuhiko Yamamoto
テンプレートを使ったストアアプリの作成
by
Yasuhiko Yamamoto
わんくま名古屋#31(20140524) TDD道場 #19
1.
わんくま同盟 名古屋勉強会 #31
1 ブラックボックスとしての同値分割だけでは 上手く外部設計できないパターン TDD 道場 #19 BluewaterSoft 2014/5/24 biac
2.
わんくま同盟 名古屋勉強会 #31
2 スピーカー紹介: biac as 山本 康彦 • 宇宙世紀以前の生まれ スプートニク1号より3ヶ月ほど前 • 最初は HONDA クルマの設計/研究を10年くら いやってた • 今は BluewaterSoft を名乗ってアプリ開発とか技術 解説記事とか • 「NUnitの全貌」⇒ CodeZine 2012/4
3.
わんくま同盟 名古屋勉強会 #31
3 TDD = テスト ファースト + リファクタリング •テスト ファースト: RED と GREEN の繰り返し •リファクタリング: GREEN を維持したまま実装を 改善 失敗するはずのユニット テストを1つ書き、 失敗することを確認 (=RED) ユニット テストに通るだけの実装を追加し、 成功することを確認 (=GREEN)
4.
わんくま同盟 名古屋勉強会 #31
4 TDD 3原則 by Robert C Martin •ArticleS.UncleBob.TheThreeRulesOfTdd (2005) より。 ※ 実質は「テスト ファースト 3原則」 1. 失敗するユニットテストを成功させるためにしか、 プロダクトコードを書いてはならない。 2. 失敗させるためにしか、ユニットテストを書いて はならない。コンパイルエラーは失敗に数える。 3. ユニットテストを1つだけ成功させる以上に、プロ ダクトコードを書いてはならない。
5.
わんくま同盟 名古屋勉強会 #31
5 今年のテーマ •テスト ファーストに必要なスキルがある。 それは… メソッドの外部設計 (external design)
6.
わんくま同盟 名古屋勉強会 #31
6 メソッドの外部設計 ➡ テスト ファースト 外部設計 external design ・外観 メソッドのシグネチャを決定 ・反応 メソッドの、引数に対する返値や (外から見える) 副作用。 テスト ファースト 外部設計からひとつ取り出して、 ユニット テストに変換 ⇒ それに対応する実装をしたら、次へ OOP風にいえば「メッセージに対する (外部から見た) 振る舞い」
7.
わんくま同盟 名古屋勉強会 #31
7 外部設計 ➡ 内部設計 •メソッドの外部設計 ⇩ メソッドの内部設計 (=実装) •テスト ファーストとは、 外部設計 ⇒ 内部設計 という当たり前の手順を、 効率よくやっているだけに過ぎない。
8.
わんくま同盟 名古屋勉強会 #31
8 TDD における外部設計 •外部設計の方法は規定なし TDD の考案者 Kent Beck の本では、頭 の中だけだったり、To Do リストに書 き出したり •でも、大事 !! Kent Beck レベルでは、たぶん… 「そんなん、できてるだろ、常考!」 でも日本の多くの開発者は、そんな訓 練をやってない
9.
わんくま同盟 名古屋勉強会 #31
9 余談: TDD したら工数がベラボーに増えちゃった orz •今まで当たり前の手順をしてなかった メソッドの外部設計⇒内部設計 という手順を踏ん でいなかった (外部設計をしていなかった) ので、 テスト ファーストのREDの分が工数増 •今まで綺麗なコードを書いてなかった リファクタリングで工数増 •あと大抵は、訓練不足部隊の実戦投入 ↑戦う前から負け戦が確定してるw
10.
わんくま同盟 名古屋勉強会 #31
10 前回は… •入出力表でメソッドの反応を定義 ・例題: 単偶数(半偶数) ・演習: FizzBuzz •入出力表だけで表現できるシンプルなもの •ブラックボックスとしての同値分割だけ
11.
わんくま同盟 名古屋勉強会 #31
11 前回の回答例 (FizzBuzz) •発言の順番(1,2,3,…)を入力とし、発言する 文字列を出力とした 外部設計 external design ・外観 public string SayFizzBuzz(int n) ・反応 入力 (引数 n) 出力 (返値)3で割り切れる 5で割り切れる YES YES "Fizz Buzz" YES NO "Fizz" NO YES "Buzz" NO NO n.ToString()
12.
わんくま同盟 名古屋勉強会 #31
12 内部設計 (実装) を想定しないと 外部設計が上手く書けないパターン 今日やるのは…
13.
わんくま同盟 名古屋勉強会 #31
13 例題: 「回文候補生」 • 入力文字列を前半として、 回文の候補を表示する かい‐ぶん【回文・廻文】 (カイモンとも) (1)…略… (2)和歌・連歌・俳諧などで、上から読 んでも下から読んでも同音のもの。 (広辞苑 第四版 電子ブック版より) • この心臓部 (候補文字列の生成) の外部設計をやろう
14.
わんくま同盟 名古屋勉強会 #31
14 回答例(1): ドメインにも内部設計にも弱い人 • 外観 (シグネチャ) string 回文候補を作る(string 文字列) • 反応 (メッセージに対する応答) 引数「文字列」から回文を作成して返す 致命的な問題点: - ドメインを知らず、回文候補は1つだけだとして しまった - 回文を定義していない (⇐検証不能)
15.
わんくま同盟 名古屋勉強会 #31
15 回答例(2): ドメインは分かるが内部設計に弱い人 • 外観 string[2] 回文候補を作る(string 文字列) • 反応 「文字列」の並び順を逆に入れ替えたものを「逆文字列」として、 返値[0]=「文字列」+「逆文字列」 返値[1]=「文字列」+「逆文字列の先頭1文字を削ったもの」 ※ 「あい」を入れると、[0]は「あいいあ」、[1]は「あいあ」 丙 ○ 回文の定義と例示がある 問題点: -入力が空文字などのときは? -いまどき配列? カンベンして…w
16.
わんくま同盟 名古屋勉強会 #31
16 回答例(3): ドメインも内部設計も分かってる人 • 外観 IList<string> 回文候補を作る(string 文字列) • 反応 「文字列」の並び順を逆に入れ替えたものを「逆文字列」として、 返値[0]=「文字列」+「逆文字列」 返値[1]=「文字列」+「逆文字列の先頭1文字を削ったもの」 ※「あい」を入れると、[0]は「あいいあ」、[1]は「あいあ」となる。 ただし、「文字列」が空文字のときは返値[0]のみ、「文字列」がnull のときは要素を持たないコレクションを返す。 ○ 入出力の全パターンを網羅している ※長すぎる文字列は、 .NET Framework ではメモリ不足で死ぬだけだから、考慮不要
17.
わんくま同盟 名古屋勉強会 #31
17 回答例(3): 入出力表に書いてみる 入力文字列 出力 (返値) null 要素無しのコレクション 空文字列 返値[0]=string.Empty のみ 1文字以上 返値[0]=「文字列」+「逆文字列」 返値[1]=「文字列」+「逆文字列の先頭1文字を削ったもの」 具体的なテストケースを考えてみよう null と空文字列のケースは、すぐ書ける。 1文字以上のケースは、これだけで書けるだろうか? このスペックでは具体性に欠けている
18.
わんくま同盟 名古屋勉強会 #31
18 1文字以上の領域を、さらに分割 • 1文字以上の領域を、内部設計を思い浮かべて、 さらに分割してしまおう! • 内部で行う操作には、たぶんこんなものが: 文字列の結合、先頭文字の削除、文字列の逆転 • 必要になる操作の組み合わせでパターン分け
19.
わんくま同盟 名古屋勉強会 #31
19 入出力表 (改) 入力文字列 出力 (返値) null 要素無しのコレクション 空文字列 返値[0]=string.Empty のみ 1文字以上 返値[0]=「文字列」+「逆文字列」 返値[1]=「文字列」+「逆文字列の先頭1文字を削ったもの」 詳細 パターン 例示 想定される内部操作 1文字 「あ」 → 「ああ」,「あ」 文字列の結合 2文字以上 (回文) 「ああ」 → 「ああああ」,「あああ」 文字列の結合 先頭文字の削除 2文字以上 (非回文) 「あい」 → 「あいいあ」,「あいあ」 文字列の結合 先頭文字の削除 文字列の逆転
20.
わんくま同盟 名古屋勉強会 #31
20 これならテスト ファーストできる♪ (テストコード) [TestMethod] public void 回文候補を作るTest01_null() { var 候補List = 回文候補生ロジック.回文候補を作る(null); Assert.AreEqual(0, 候補List.Count); } [TestMethod] public void 回文候補を作るTest02_空文字() { var 候補List = 回文候補生ロジック .回文候補を作る(string.Empty); Assert.AreEqual(1, 候補List.Count); Assert.AreEqual(string.Empty, 候補List[0]); } [TestMethod] public void 回文候補を作るTest03_あ() { var 候補List = 回文候補生ロジック.回文候補を作る("あ"); Assert.AreEqual("ああ", 候補List[0]); Assert.AreEqual("あ", 候補List[1]); } [TestMethod] public void 回文候補を作るTest04_ああ() { var 候補List = 回文候補生ロジック.回文候補を作る("ああ"); Assert.AreEqual("ああああ", 候補List[0]); Assert.AreEqual("あああ", 候補List[1]); } [TestMethod] public void 回文候補を作るTest05_あい() { var 候補List = 回文候補生ロジック.回文候補を作る("あい"); Assert.AreEqual("あいいあ", 候補List[0]); Assert.AreEqual("あいあ", 候補List[1]); }
21.
わんくま同盟 名古屋勉強会 #31
21 これならテスト ファーストできる♪ (製品コード) // リファクタ前の状態 public static IList<string> 回文候補を作る (string src) { if (src == null) //Test02 //Test01 return new List<string>(); if (src == string.Empty) //Test03 { //Test02 var result = new List<string>(); result.Add(string.Empty); return result; } //Test03 //var 候補1 = src + src; //var 候補2 = src; //Test04 //var 候補2 = src + src.Substring(1); //Test05 var 逆文字列 = new string(src.Reverse().ToArray()); var 候補1 = src + 逆文字列; var 候補2 = src + 逆文字列.Substring(1); //Test03 var 候補List = new List<string>(); 候補List.Add(候補1); 候補List.Add(候補2); return 候補List; }
22.
わんくま同盟 名古屋勉強会 #31
22 ここまでの まとめ • 前提: 外部設計は内部設計を 縛るべきではない (⇐リファ クタリングできなくなる) • 内部設計を想定して外部設計 を書くと具体性が増す ⇒内部設計(=実装)しやすい • 外部設計で例示を増やしても、 内部設計を縛ることにはなら ないので OK
23.
わんくま同盟 名古屋勉強会 #31
23 演習: ソートの外部設計 • 仕様 ・入出力は IList<int> ※ ジェネリックに不慣れなら int の配列などでも可 ・昇順にソートする • 外観 static IList<int> WankumaSort(IList<int>)
24.
わんくま同盟 名古屋勉強会 #31
24 筆記用具のご用意を♪ static IList<int> WankumaSort(IList<int>) 整数を昇順にソートする 演習タイム ソートの外部設計
25.
わんくま同盟 名古屋勉強会 #31
25 回答例 • 外観 static IList<int> WankumaSort(IList<int>) ただし、引数と返値は同一インスタンス • 応答 バブル ソートを想定 入力数列 出力 (返値) null null 空リスト 引数と同一のインスタンス (以下同じ) 1つ以上 昇順にソートされた数列 詳細パターン 例示 想定される内部操作 交換無し {1, 2} → {1, 2} 比較だけ一巡して終了 1巡だけ交換 {5, 3} → {3, 5} 比較と交換を一巡だけ行う 2巡以上交換 {7, 5, 3} → {3, 5, 7} 比較と交換を二巡以上 (交換不要になるまで) 行う
26.
わんくま同盟 名古屋勉強会 #31
26 ご清聴ありがとうございました
Download