SlideShare ist ein Scribd-Unternehmen logo
1 von 91
LINTから理解するTDD
イントロ
プログラムは完成する時まで、全容を把握で
きない。
プログラムは完成する時まで、全容を把握で
きない。
仕様に従ったユニットテストを通ったプログ
ラムは、仕様通りに動くことが担保される。
いくら書き換えても・・・
こう書くべきって言うプログラマが
いたらそいつはアマチュア
結論
TDDは仕様チェックのLINTを作りながら開発
すること。
身に付ければ、
Notepadでの開発
↓
vscodeでの開発
と同レベルのスキルアップが
可能
色々事実を並べてみる。
コンパイルしたプログラムは高確率で動く
なぜ?
VSCODEで書いたプログラムは高確率でコン
パイルが通る
eclipseで書いたプログラムも高確率でコンパ
イルが通る
notepadで書いたプログラムも高確率でコン
パイルが通るか?
プログラムの品質
VSCODEで書いたプログラム
notepadで書いたプログラム
VSCODEで書いたプログラム
VS
notepadで書いたプログラム
VSCODEで書いたプログラム
※コンパイルが通るかどうか
VSCODEで書いたプログラムのコンパイルが
通る確率が高い(よくて同等)
なぜか?
コンパイルを通す前にエディ
タがエラーを教えてくれるか
ら
Notepadは、変数名の誤字すら教えてくれな
い。
エディタのエラー消しながらプログラム書け
ば、コンパイルエラーは起きない。
コンパイルが通ったプログラムは、それだけ
でそこそこ動くことが保証される。
機能が正しいかはわからないけど・・・
じゃあ
プログラム書きながら
仕様エラーをチェック
出来たら良くない?
仕様をチェックするLINTを作ろう!
でも、仕様はプロジェクトによって違うから
どこにも売ってない・・・
じゃあ、仕様をテストするツール作りましょ
う。
とりあえず、プログラム書くまえにチェック
ツール作る。
これがテストファースト
リファクタリング
元の機能を変えずにソースを修正する行為
機能追加
元の機能を変えずにソースに機能を追加する
行為
元の機能を変えずに
ソースを修正する
数値A,B,Cがあった時、A+BをCで割った結果
を返す
Public int func(int a ,int b,int c){
return (a+b)/c;
}
数値A,B,Cがあった時、A+BをCで割った結果
を返す
Cが0の時計算できない!
Cが0の時はa+bを返す仕様を追加
Public int func(int a ,int b,int c){
If (c=0) return a+b;
return (a+b)/c;
}
数値A,B,Cがあった時、A+BをCで割った結果
を返す
Cが0の時はA+Bを返す
数値A,B,Cがあった時、A+BをCで割った結果
を返す
これを維持したまま
プログラム修正!
仕様追加はしない→リファクタリング
Public int func(int a ,int b,int c){
Int x = a+b;
If (c=0) return x;
return x/c;
}
数値A,B,Cがあった時、A+BをCで割った結果
を返す
Cが0の時はA+Bを返す
数値A,B,Cがあった時、A+BをCで割った結果
を返す
Cが0の時はA+Bを返す
これを維持したまま
プログラム修正!
ほぼ新規のソースでも書いた瞬間から、「元
の機能」を意識する
プログラムを書くうえで、
「元の機能」
を維持することは必須
でも
「元の機能」を維持するのは・・・
つらい・・・
なぜなら
いつ維持できなくなるかわか
らない
どうやって維持したらいいか
わからない
というか・・・
今維持できているか
すらわからん!
じゃあ、コンパイルできないかもって思いま
すか?
まともな言語なら(jsとかは除く)
まともなエディタなら(notepad除く)
コンパイルが通らない不安はない
修正しながらチェックできるから!!
元の機能を維持してることをチェックしなが
ら開発しよう!
TDD!!!
実はもう一個逃げ道があります
「元の機能」を維持するのはつらい
「元の機能」って何?
いつ決まる?どこにある?設計書?
っていうか、作ってる途中に今の機能とか気
にしなければ、そんな不安なくない??
じゃあ
作り終わるまでテストしなきゃいいじゃん
出来上がってから、修正するからバグるんだ
よね
リファクタリングしなくていいように、最初
から完璧なプログラム書けばいいじゃん
他との整合性?
パーフェクトなソースなんてない?
じゃあ
それっぽい思想、カッコ良さそうな手法、
過去の(自分だけの)経験を基に、
こうあるべき!
を主張する能力を身に付けよう!
アホか・・・
プロなら
今の状態がわかる
安全に手直しができる
そんな状態をちゃんと作ってから
仕事しよう
その為のスキルが
TDD!!!
でも余計なテストを書く時間はない(泣)
大丈夫
迷いながら書くプログラムは思った以上遅い!
単に、迷わずに作ったプログラムは早いけど
出来上がったものは・・・
思い込みの塊
迷わなくていい状態を整えて書くスピードは
思った以上に早い!
TDDは
プログラムの
「品質」と「スピード」を
両立させるスキルです!

Weitere ähnliche Inhalte

Ähnlich wie LINTから理解するTDD

Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
.NET Conf 2017 Japan Keynote ".NET Everywhere!"
.NET Conf 2017 Japan Keynote ".NET Everywhere!".NET Conf 2017 Japan Keynote ".NET Everywhere!"
.NET Conf 2017 Japan Keynote ".NET Everywhere!"Akira Inoue
 
Potatotops20141217
Potatotops20141217Potatotops20141217
Potatotops20141217Mogi Isamu
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今Yuki Igarashi
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~Akira Inoue
 
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)Yasuhiko Yamamoto
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよNaruto TAKAHASHI
 
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~Akira Inoue
 
Web開発用ツール導入のすすめ
Web開発用ツール導入のすすめWeb開発用ツール導入のすすめ
Web開発用ツール導入のすすめKiyoshi SATOH
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio CodeTakashi Okawa
 
20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料Daisuke Ando
 
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料leverages_event
 
少し分かった気になるテスト駆動開発
少し分かった気になるテスト駆動開発少し分かった気になるテスト駆動開発
少し分かった気になるテスト駆動開発lnial
 
Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所Masaki Takeda
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例UnityTechnologiesJapan002
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Shinya Okano
 
WordCampOsaka2012 開発ツール談義「NetBeans」
WordCampOsaka2012 開発ツール談義「NetBeans」WordCampOsaka2012 開発ツール談義「NetBeans」
WordCampOsaka2012 開発ツール談義「NetBeans」Atsuhiro Takiguchi
 

Ähnlich wie LINTから理解するTDD (20)

Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
.NET Conf 2017 Japan Keynote ".NET Everywhere!"
.NET Conf 2017 Japan Keynote ".NET Everywhere!".NET Conf 2017 Japan Keynote ".NET Everywhere!"
.NET Conf 2017 Japan Keynote ".NET Everywhere!"
 
Potatotops20141217
Potatotops20141217Potatotops20141217
Potatotops20141217
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
 
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよ
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
 
Web開発用ツール導入のすすめ
Web開発用ツール導入のすすめWeb開発用ツール導入のすすめ
Web開発用ツール導入のすすめ
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料
 
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料
 
少し分かった気になるテスト駆動開発
少し分かった気になるテスト駆動開発少し分かった気になるテスト駆動開発
少し分かった気になるテスト駆動開発
 
Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介
 
WordCampOsaka2012 開発ツール談義「NetBeans」
WordCampOsaka2012 開発ツール談義「NetBeans」WordCampOsaka2012 開発ツール談義「NetBeans」
WordCampOsaka2012 開発ツール談義「NetBeans」
 

LINTから理解するTDD