わんくま同盟 名古屋勉強会 #2 Visual Studio 2008 でやる テスト駆動開発 2008/04/26 biac 機材協力 : 日本インフォメーション㈱ Test Driven Development.

Slides:



Advertisements
Similar presentations
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
Advertisements

わんくま同盟 名古屋勉強会 #3 タダで始めるテストファースト入門 C# Express + NUnit biac 機材協力 : 日本インフォメーション㈱ 2008/7/26.
わんくま同盟 名古屋勉強会 #17 biac
テストについて 近畿大学大学院 田中大介 資料:
blanco Framework ご紹介 DB版
Windows Workflow Foundation of .NET Framework 3.0
Visual Studio 2010 の新機能 Coded UI Test
プログラマのレベルアップ.
2008/09/20 TDD 道場 ~ みんな TDD やってみよう! ~.
OJT研修 「テスト実施、テスト設計の技術習得」 日時: 8月22日(月)  場所: 本社5階.
Visual Studio 2008 でやる テスト駆動開発
C#によるWindowsFormApplication入門
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
プログラミング基礎I(再) 山元進.
Biac /10/25 DI コンテナの本懐 ~ IoC の実装も楽々! biac
Visual Studio 2005を使ったテスト.
ASP.NET開発標準化を考えてみよう! わんくま同盟 東京勉強会# /03/15 mxb & 片桐継.
ASP.NET開発標準化を考えてみよう! わんくま同盟 東京勉強会# /03/15 mxb & 片桐継.
RAD Studio 14/09/27 TEffectを使った綺麗なForm
アルゴリズムとデータ構造 2011年6月13日
第6章 2重ループ&配列 2重ループと配列をやります.
2008/09/20 TDD 道場 ~ ぼくと契約して TDD をやってよ! ~.
MSBuild 色々出来るよ 2011/04/02 お だ.
はじめてのASP.NET 楽しいアプリ制作の会 #1 TWorks.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
タダで始めるテストファースト入門 C# Express + NUnit
Flyingware : バイトコード変換による 安全なエージェントの実行
Biac /10/ /10/25 DI コンテナの本懐 ~ IoC の実装も楽々! biac
VBScriptで ユニットテストをやってみる
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
MVP for VB が語る C# 入門 初音 玲.
MVP for VB が語る C# 入門 初音 玲.
図書館職員のための アプリケーション開発講習会
Windows Azure (CTP) 触ってみた
WPF、MVVMパターン構成.
R流・C#マルチスレッドの復讐 2009年05月16日 R・田中一郎
EclipseでWekaのAPIを呼び出す
プログラミング 4 記憶の割り付け.
Microsoft Visual Studio 2005 Tools for
WinUnit お気楽お手軽 UnitTest
WinUnit お気楽お手軽 UnitTest
TDDとメソッドの外部設計 テストファーストの秘訣 2009/08 biac.
i-web RPGX による Web アプリケーション構築
メソッドの外部設計と テストファースト ~ 上手く TDD するために ~
オブジェクト指向の …ナニ? わんくま同盟 名古屋勉強会 #5 2008/12/6 Lightning Talk by biac
ミドルウェア”TSUNAGI”を 用いたWEBアプリケーションの構築
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
Windows Azure (CTP) 触ってみた
インタラクティブ・ゲーム制作 プログラミングコース 補足資料
2008/09/20 F# 入門 TDD 道場 ~ みんな TDD やってみよう! ~.
メソッドの外部設計と テストファースト ~ 上手く TDD するために ~
Visual Studio 2008 でやる テスト駆動開発
TDD ってどんな感じ? FizzBuzz を作ってみる 2010/01/22 biac 1.
第1章 いよいよプログラミング!! ~文章の表示 printf~
アルゴリズムとプログラミング (Algorithms and Programming)
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
アルゴリズムとデータ構造 2012年6月11日
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
サブゼミ第7回 実装編① オブジェクト型とキャスト.
nativeの基礎知識 「ポインタ」てなによ!?
第5回 プログラミングⅡ 第5回
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
Microsoft Solutions Framework for Agile Software Development ver. 4.x
JAVA入門⑥ クラスとインスタンス.
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
プロジェクト演習Ⅱ インタラクティブゲーム制作
アジャイル開発プロセス 森口朋広.
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
Presentation transcript:

わんくま同盟 名古屋勉強会 #2 Visual Studio 2008 でやる テスト駆動開発 2008/04/26 biac 機材協力 : 日本インフォメーション㈱ Test Driven Development

わんくま同盟 名古屋勉強会 #2 自己紹介 山本 康彦 ( biac ) – いまだにプログラムを書きたがる 50 歳 名古屋のとある ISV 勤務 – 現在、 WPF を使った業務アプリケーションの開 発プロジェクトで品質保証を担当中 –MSF Agile を部分的に実施中 もとは機械の設計屋さん – ものごとの見方・考え方が、きっとズレてる

わんくま同盟 名古屋勉強会 #2 テスト駆動開発 ( TDD ) Test Driven Development –1. 単体テストを書く テストは失敗する (RED) –2. 製品コードを書く テストを成功させる (GREEN) –3. リファクタリング (REFACTOR) コードを綺麗に → 1. に戻る RED → GREEN → REFACTOR の リズムに乗って、 さくさく開発

わんくま同盟 名古屋勉強会 #2 Visual Studio 2008 Professional Edition – 単体テスト機能はアリ Team System Development Edition – さらに、 テストカバレッジ、 コード分析などの 機能 Express / Std は ? – オープンソースのツールを利用しよう ! NUnit, NCover, FxCop …

わんくま同盟 名古屋勉強会 #2 こんなものを作ってみよう どんなもの ? – 誕生日までの日数を答えて くれる。 どんな構造 ? –WPF の画面 – 画面を抽象化したモデル – 返答を作るロジック 単体テストできるのは ? – ロジック部分のみ –UI は、 まだ難しい ・ UI とロジックを分離すべし ・ UI のコード量は減らすべし

わんくま同盟 名古屋勉強会 #2 DEMO 0 DEMO 画面 / UIModel / Logic の スケルトン まで作っておく

わんくま同盟 名古屋勉強会 #2 最初の一歩 1. [ 製品 ] スケルトンを書く – メソッドのシグネチャと、 仮の return 文を書く。 –TDD の本来の流儀からは、 外れている。 2. 単体テストを生成する – 「単体テストウィザード」を使って、 単体テスト コードを自動生成する。 3. [ テスト ] テストコードを書く 4. テストをする ( 失敗するはず ) 5. [ 製品 ] テストを通るだけのコードを書く 6. テストをする ( 成功するまで )

わんくま同盟 名古屋勉強会 #2 DEMO 1 DEMO 最初のテスト と コードカバレッジや コード分析

わんくま同盟 名古屋勉強会 #2 コードの品質保証 ※ 以下は、 Team System の機能 テストカバレッジ – 単体テストのときに、 実行されたコード行をカウント。 ソースを色分けして表 示。 ( C0 カバレッジ ) – カバーされていないコード == 不要なコード (?) – オープンソース : NCover & NCoverExplorer コード分析 –Microsoft の基準に沿ったコーディングをしているか、 チェック。 – 無視することもできるけど、 後で泣くのは誰 ? –MS の無償ツール : FxCop コードメトリックス – コードの複雑さや保守性を測定する。 – 点数が悪すぎるところは、 リファクタリング候補。

わんくま同盟 名古屋勉強会 #2 なぜ単体テストコード ? 単体テスト == メソッドレベルの外部設計書 – メソッドのシグネチャと戻り値の定義 ( 外部設計 ) は、昔は書い ていた ( … らしい ) 。 – 厳密に書くのは、自然言語ではムリ。 – コードを書けない SE の書いた設計書では、たいがい作れない。 テストに通る == ゴール – 自分のリズムに合ったゴールを設定し、さくさく開発。 – テストコードを書いた時点で、 わかりにくい仕様書のことは、 とりあえず忘れて OK ! 自動実行できる == リファクタリングできる – いつでもすぐに単体テストを実行して、 コードを壊していない ことを証明できる。時間さえ許すなら、 気が済むまでコードを 改良できる。

わんくま同盟 名古屋勉強会 #2 TDD は今や常識 開発プロセスの一部 – たとえば MSF Agile Ver.4 「開発タスク」に TDD が取り入れられている。 – そのほかの Agile プロセスも、 TDD を推奨。 TDD を排斥しているプロセスは無い。 品質向上のコストパフォーマンスが高い – 開発プロセス全体では、「実装工程」の工数が少し 増えるだけで、コードの品質は飛躍的に向上する。 ( 同じ品質にするなら、結合テスト 2 段分 ) 潜在バグ数 : 単体テストを書くために、 仕様書をきっちり読む = レビュー効果でバグ 30% 減 単体テストを実 施する効果でバ グ 30% 減 結合テストで発見 されるバグ ≒ 15 個 ※ TDD していなけ れば 30 個 ※ 検査 1 段で 30% は 1990 年代米国の数字 日本では、 もっと良いような感触。

わんくま同盟 名古屋勉強会 #2 テストメソッドの基本 (1) テストの起承転結 [TestMethod] public void FooMethodTest() { // テストの準備 ( 不要なこともある ) // → 共通部分は TestInitialize, ClassInitialize へ // テスト実行 --- 製品コードの呼び出し string answer = BarClass.FooMethod(); // 結果判定 Assert.AreEqual(“Hello, TDD!”, answer); // テストの後始末 ( 不要なこともある ) // → 共通部分は TestCleanup, ClassCleanup へ } 簡単な場合は、 実行と判定を同一 行にまとめてもよ い。

わんくま同盟 名古屋勉強会 #2 テストメソッドの基本 (2) テストケースごとにテストメソッド [TestMethod] public void FooMethodTestcase1Test(){ ・・・ } [TestMethod] public void FooMethodTestcase2Test(){ ・・・ } 一連のテストケースでひとつのテストメソッド [TestMethod] public void FooMethodTest(){ // Testcase1 { ・・・ } // Testcase2 { ・・・ } } プロジェクト内でどちらか に統一されていれば良いと 思う。

わんくま同盟 名古屋勉強会 #2 テストメソッドの基本 (3) 例外を期待するテスト : ExpectedException 属性 [TestMethod] [ExpectedException(typeof(System.DivideByZeroException))] public void FooMethodTest(){ int n = BarClass.FooMethod(0); // 0 除算例外が期待される } 例外を期待するテスト : try ~ catch [TestMethod] public void FooMethodTest(){ try { int n = BarClass.FooMethod(0); // 0 除算例外が期待される Assert.Fail(“ 例外が出て、ここには来ないはずです。 "); } catch (System.DivideByZeroException){ // ( success! ) } テストコードで catch するのは、このパターン だけ。 リソース解放が必要なら finally 句で。

わんくま同盟 名古屋勉強会 #2 VS 便利機能 (1) private メソッドのテスト NUnit では、 private メソッドはテストできない –public メソッド経由でテストされているはず。 – 複雑な private メソッドなので、どうしてもそこだけテストした いときは … public にしてしまったり、 #if DEBUG してみたり。 プライベート アクセッサ – 単体テストウィザードで、 private メソッドを指定して単体テス トを作ると、 自動的にプライベートアクセッサが生成される。 InternalsVisibleTo 属性 – 単体テストウィザードで [InternalsVisibleTo 属性を追加する ] と、 internal メソッドが見えるようになる。

わんくま同盟 名古屋勉強会 #2 DEMO 2 DEMO private メソッドの テスト

わんくま同盟 名古屋勉強会 #2 VS 便利機能 (2) データドリブン単体テスト 条件を変えて同じテストをする – 引数や予想される結果が違うだけで、 同じテストロ ジックを何度も書くことはめんどくさい。 データドリブン単体テスト –DataSource 属性を付けることで、 データソースから 1 行読み込むごとにテストメソッドが 1 回呼び出され るようになる。 – 読み込まれたレコードには、 TestContext.DataRow[“{ 列名 }”] でアクセス。 – データソースには、データベース、 CSV ファイル、 XML ファイルが利用可能 ODBC データソースが使える == Excel ファイルも OK

わんくま同盟 名古屋勉強会 #2 DEMO 4 DEMO Excel を使った データドリブンテスト

わんくま同盟 名古屋勉強会 #2 TDD を始めよう TDD は楽しい – コードを書く時間が増える。 ( あいまいな仕様書のことで悩んでい る時間が減る。 テストが書けないなら、 仕様書がおかしい ! ) – リファクタリングできる !! 参考書 – 「 Microsoft.NET でのテスト駆動開発」 ( ジェームス・ニュー カーク著 ) ISBN-13: – 「リファクタリング ― プログラムの体質改善テクニック」 ( マーチン ファウラー著 ) ISBN-13: –Guidelines for Test-Driven Development このスライドとサンプルコード – 次の場所に置いてあります。

わんくま同盟 名古屋勉強会 #2 ありがとうございました