Soumettre la recherche
Mettre en ligne
テスト駆動開発(TDD) in .NET #ngtnet
•
1 j'aime
•
6,848 vues
将 高野
Suivre
2016/5/7開催 Niigata.NET 2.0 でのテックトーク資料 https://ngtnet.doorkeeper.jp/events/43037
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 50
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Azure Service Fabric 概要
Azure Service Fabric 概要
Daiyu Hatakeyama
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
将 高野
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55
将 高野
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
将 高野
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
将 高野
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet
将 高野
仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40
将 高野
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
将 高野
Recommandé
Azure Service Fabric 概要
Azure Service Fabric 概要
Daiyu Hatakeyama
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
将 高野
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55
将 高野
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
将 高野
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
将 高野
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet
将 高野
仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40
将 高野
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
将 高野
設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35
将 高野
Lightweight C#
Lightweight C#
将 高野
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
将 高野
git-svn
git-svn
将 高野
GTD on RTM
GTD on RTM
将 高野
Tddのすゝめ
Tddのすゝめ
将 高野
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
将 高野
Choi LINQ
Choi LINQ
将 高野
Lets Enjoy C#!
Lets Enjoy C#!
将 高野
Hello ".NET" World
Hello ".NET" World
将 高野
Contenu connexe
Plus de 将 高野
設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35
将 高野
Lightweight C#
Lightweight C#
将 高野
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
将 高野
git-svn
git-svn
将 高野
GTD on RTM
GTD on RTM
将 高野
Tddのすゝめ
Tddのすゝめ
将 高野
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
将 高野
Choi LINQ
Choi LINQ
将 高野
Lets Enjoy C#!
Lets Enjoy C#!
将 高野
Hello ".NET" World
Hello ".NET" World
将 高野
Plus de 将 高野
(10)
設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35
Lightweight C#
Lightweight C#
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
git-svn
git-svn
GTD on RTM
GTD on RTM
Tddのすゝめ
Tddのすゝめ
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
Choi LINQ
Choi LINQ
Lets Enjoy C#!
Lets Enjoy C#!
Hello ".NET" World
Hello ".NET" World
テスト駆動開発(TDD) in .NET #ngtnet
1.
テスト駆動開発(TDD) in .NET 2016/5/7 -
#ngtnet TAKANO Sho(高野 将)/ @masaru_b_cl
2.
自己紹介 某SIerで働くDeveloper そのかたわら執筆業も #ngtnet 2
3.
今日お話すること テスト駆動開発(TDD)とは? .NET開発におけるTDD TDDの実例 TDDの指針 #ngtnet 3
4.
テスト駆動開発(TDD)とは? #ngtnet 4
5.
テスト駆動開発(TDD)とは? ケント・ベックが提唱した開発手法 #ngtnet 5 テスト駆動開発入門(ケント・ベック著、ピアソンエデュケーション刊) http://www.amazon.co.jp/dp/4894717115 “「動作するきれいなコード」、 ロン・ジェフリーズの この簡潔な言葉は、 TDD(テスト駆動開発)の目標である。 動作するきれいなコードは、 あらゆる理由で価値がある。 絶版
6.
TDDの進み方 #ngtnet 6 TDD のこころ
@ OSH2014 http://www.slideshare.net/t_wada/osh2014-sprit-of-tdd
7.
TDDの進み方 #ngtnet 7 着実な道をいく
8.
TDDのサイクル 1. 次の目標を考える 2. その目標を示すテストを書く(テストファースト) 3.
そのテストを実行して失敗させる(Red) 4. 目的のコードを書く 5. 2で書いたテストを成功させる(Green) 6. テストが通るままで リファクタリングを行う(Refactoring) 7. 1~6を繰り返す #ngtnet 8 TDD のこころ @ OSH2014 http://www.slideshare.net/t_wada/osh2014-sprit-of-tdd
9.
TDDのサイクル 小さく素早く回す ≒ フィードバックを早く得る #ngtnet 9
10.
TDDの黄金の回転 #ngtnet 10 TDD のこころ
@ OSH2014 http://www.slideshare.net/t_wada/osh2014-sprit-of-tdd
11.
動作するきれいなコード Clean code that
works #ngtnet 11 Beautiful
12.
動作するきれいなコード #ngtnet 12 新装版 リファクタリング (マーチン・ファウラー著、オーム社刊) https://estore.ohmsha.co.jp/titles/978427405019P リーダブルコード (ダスティン・ボズウェル、 トレバー・フォシェ著、O’REILLY刊) https://www.oreilly.co.jp/books/9784873115658/
13.
動作するきれいなコード #ngtnet 13 C# 実践開発手法 (ゲイリー・マクリーン・ホール著、 日経BP社刊) http://ec.nikkeibp.co.jp/item/books/P98470.html Head
First デザインパターン (エリック&エリザベス・フリーマン、 キャシー・シエラ、バートベイツ著、 O’REILLY刊) https://www.oreilly.co.jp/books/4873112494/
14.
動作するきれいなコード #ngtnet 14 .NETのクラスライブラリ設計 (Krzysztof Cwalina、Brad
Abrams著、日経BP社刊) http://ec.nikkeibp.co.jp/item/books/P98470.html
15.
TDDの目的 #ngtnet 15
16.
TDDの目的 テストは手段であり目的ではない 動作するきれいなコードは 変化に対応しやすい 変化に対応しやすいということは 不安が少ない 不安の少ない状態≒健康 #ngtnet 16
17.
TDDの目的 健康なコード 健康な体 健康なチーム #ngtnet 17
18.
.NET開発におけるTDD #ngtnet 18
19.
.NET開発におけるTDD テスティングフレームワーク およびサポートツール ソリューション構成 テストコード テスト実行 #ngtnet 19
20.
テスティングフレームワーク MSTest VS標準搭載でお手軽さNo.1 NUnit *Unit系正統派で手堅い xUnit.net 新たに見直された次世代フレームワーク #ngtnet 20
21.
テスティングフレームワーク 個人的オススメは2つのどちらか MSTest 入門には最適 NUnit 情報が多い #ngtnet 21
22.
サポートツール テストアダプター VS上でMSTest以外も実行可能にする拡張 NUnit3 Test Adapter https://visualstudiogallery.msdn.microsoft.com/0da0f6bd-9bb6-4ae3-87a8-537788622f2d xUnit.net
runner for Visual Studio https://visualstudiogallery.msdn.microsoft.com/463c5987-f82b-46c8-a97e-b1cde42b9099 #ngtnet 22
23.
サポートツール Chaining Assertion A.Is(B)でテストが書ける #ngtnet 23 Chaining
Assertion – CodePlex http://chainingassertion.codeplex.com/
24.
ソリューション構成 複数プロジェクトで構成する テスト対象プロジェクト アプリケーション(*.exe)or クラスライブラリ(*.dll) (テスト対象の型はpublic or
internal(※)に) テストプロジェクト MSTest : 単体テストプロジェクト 他 : クラスライブラリ + テスティングフレームワークへの参照 #ngtnet 24 ※アセンブリ属性InternalsVisibleToの設定が必要
25.
テストコード #ngtnet 25 using Microsoft.VisualStudio.TestTools.UnitTesting; namespace
Test.MSTest { [TestClass] public class UnitTest1 // テストクラス { [TestInitialize] public void SetUp() { /* テスト初期処理 */ } [TestCleanup] public void TearDown() { /* テスト後処理 */ } [TestMethod] public void TestSomething() { // テスト主処理 “実際の値”.Is(“期待する値"); } } } MSTest+Chaining Assertionのテストコード
26.
テスト実行 テスト エクスプローラーで結果表示 #ngtnet 26
27.
TDDの実例 #ngtnet 27
28.
TDDの実例 FizzBuzzをTDDで作成してみます #ngtnet 28 • 1から100までの整数を順番に出力する •
ただし、 • 値が3の倍数の場合は”Fizz”を • 値が5の倍数の場合は”Buzz”を • 値が3と5の公倍数の場合は”FizzBuzz”を • それぞれ表示すること
29.
設計 ざっと設計しToDoリストを作成する 正の整数の場合、その数値を文字列で返す 3の倍数の場合、”Fizz”を返す 5の倍数の場合、”Buzz”を返す 3と5の公倍数の場合、”FizzBuzz”を返す 0以下の場合、引数エラーにする #ngtnet 29
30.
最初のテスト作成 ToDoリストから一つ選び、 最初の失敗するテストを作成する 例)引数が1の場合、”1”を返す 自分が最初のユーザーとなり、 使いやすいAPI設計を考える 型名、メソッド名、引数や戻り値の型、etc… #ngtnet 30
31.
最初のテスト失敗 テストを実行して失敗することを確認する 正しく失敗することを担保するため コンパイルエラーも失敗に含める #ngtnet 31
32.
仮実装(Fake It) テストが成功する最速の実装を行う 定数やリテラルを使っても良い 例)”1”を返す テストの妥当性を担保する #ngtnet 32
33.
最初のテスト成功 テストが成功することを確認する #ngtnet 33
34.
リファクタリング テストが成功する状態を保ったまま、 コードを整理する テストコードを整えることも含む 例)名前付き引数の名前を削除する #ngtnet 34
35.
次の失敗するテストを追加する プログラミングを先にすすめるため、 小さな一歩となるテストを追加する 三角測量を行うこともある 1つの実装に対して2つのテストで三角 例)引数が2の場合、”2”を返す #ngtnet 35
36.
すべてのテストを実行 追加したテストのみ失敗することを確認する 他のテストも失敗する =良くない設計の臭い 仕様でなく実装に対してテストしている 責務分割が不十分 など #ngtnet 36
37.
テストが成功するまで修正 仮実装の定数やリテラル等を 引数、変数に置き換える 例)引数を文字列にして返す #ngtnet 37
38.
リファクタリング 再びリファクタリング fizzBuzzer変数をフィールドにし、 SetUpメソッドを導入する 冗長なテストを統合、削除する #ngtnet 38
39.
ToDoリストを更新する 完了したものを消す 1以上の場合、その数値を文字列で返す 3の倍数の場合、”Fizz”を返す 5の倍数の場合、”Buzz”を返す 3と5の公倍数の場合、”FizzBuzz”を返す 0以下の場合、引数エラーにする #ngtnet 39
40.
次のテストを追加する 例)3の倍数の場合、”Fizz”を返す 追加したテストのみ失敗することを確認 #ngtnet 40
41.
明白な実装 実装が自明であれば 仮実装をスキップしてもよい ギアを上げるイメージ 例)引数と3との剰余が0なら”Fizz”を返す #ngtnet 41
42.
以後同様に続ける 続きはデモで #ngtnet 42
43.
TDDの指針 #ngtnet 43
44.
いつTDDを行うか 不安を感じたとき ライブラリの使い方に自信がない サードパーティの実装が信用出来ない など 使い捨てのコードでないとき 繰り返し実行しないテストはただのコスト #ngtnet 44
45.
いつTDDを行うか GUIでないとき GUIのテストコストは非常に高い GUIの変更は頻繁にある トライ&エラーであれこれしないとき 確定後のコードにテストを書いてもよい ≒テストファーストにこだわらない #ngtnet 45
46.
どんなテストが良いテスト? F.I.R.S.T Fast
高速 Independent 独立している Repeatable 繰り返し実行可能 Self-Validating 手動での検証がない Timely テストファースト #ngtnet 46
47.
どのようにテストを行うか 各種テスト技法を参考に 同値クラス 境界値分析 デシジョンテーブル etc #ngtnet 47
48.
既存コードがある場合 テストのないコードはレガシーコードだ! #ngtnet 48 レガシーコード 改善ガイド (マイケル・C・フェザーズ著、 翔泳社刊) http://www.shoeisha.co.jp/book/detail/9784798116839
49.
最後に #ngtnet 49
50.
最後に TDDはセンスではなくスキル 訓練次第で誰でも習得可能 自分1人でも始められる 安心を得て健康になろう #ngtnet 50
Télécharger maintenant