2008/09/20 TDD 道場 ~ みんな TDD やってみよう! ~.

Slides:



Advertisements
Similar presentations
わんくま同盟 名古屋勉強会 #17 biac
Advertisements

ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
IO - 入出力 小西 亨.
オブジェクト指向プログラミング(4) 静的分析(2)
プログラミング基礎I(再) 山元進.
Visual Studio 2008 でやる テスト駆動開発
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
情報伝播によるオブジェクト指向プログラム理解支援の提案
JavaServlet&JSP入門 01K0018 中村太一.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
第6章 2重ループ&配列 2重ループと配列をやります.
2008/09/20 TDD 道場 ~ ぼくと契約して TDD をやってよ! ~.
社会人学習講座 「Javaプログラミング概論」
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
第20章 Flyweight ~同じものを共有して無駄をなくす~
アルゴリズムとデータ構造 2011年6月20日
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング2 関数
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
EclipseでWekaのAPIを呼び出す
アルゴリズムとデータ構造1 2006年6月16日
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
TDDとメソッドの外部設計 テストファーストの秘訣 2009/08 biac.
メソッドの外部設計と テストファースト ~ 上手く TDD するために ~
Javaプログラムの変更を支援する 影響波及解析システム
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
2008/09/20 F# 入門 TDD 道場 ~ みんな TDD やってみよう! ~.
メソッドの外部設計と テストファースト ~ 上手く TDD するために ~
ソフトウェア制作論 平成30年11月21日.
Visual Studio 2008 でやる テスト駆動開発
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
TDD ってどんな感じ? FizzBuzz を作ってみる 2010/01/22 biac 1.
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
サブゼミ第7回 実装編① オブジェクト型とキャスト.
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
プログラム分散化のための アスペクト指向言語
モグラたたき.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2012年6月21日
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
第10回 関数と再帰.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
情報処理Ⅱ 小テスト 2005年2月1日(火).
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

2008/09/20 TDD 道場 ~ みんな TDD やってみよう! ~

TDD 道場 ~ 乱取り プロジェクタに接続された 1台の PC でコーディングする。 ペアでコーディングする。 2008/09/20 TDD 道場 ~ 乱取り プロジェクタに接続された 1台の PC でコーディングする。 ペアでコーディングする。 5 ~ 10分間隔でペアの片方を交代していく。 聴衆 ⇒ ナビ、 ナビ ⇒ ドライバー、 ドライバー ⇒ 抜ける コーディングを担当しているときは、 自分が何をしているのかを説 明しながらキーボードをタイプする。 こうすることで聴衆も、 何 が起きているのかを理解できる。 聴衆は、テストが GREEN の場合にだけ、設計について意見を述べ てもよい。テストが RED の状態では、設計については質問しかで きない。 (RED の時に助け舟を出していいのは、アドバイザーのみ) 聴衆が今行われている作業について混乱してきたら、コーディング している人は手を止め、今やっていることを説明する。

ペア プログラミング ドライバー ナビゲーター ペア プロの極意 キーボードを打つ 目の前に集中 先を見る / 周囲に気を配る 2008/09/20 ペア プログラミング ドライバー キーボードを打つ 目の前に集中 ナビゲーター 先を見る / 周囲に気を配る ペア プロの極意 会話し続けること !!

ローカル ルール 交代は 5分を目安 最初に口頭でテストケースを宣言する テストケースを 1つ書き、RED⇒GREEN まで 2008/09/20 ローカル ルール 交代は 5分を目安 テストケースを 1つ書き、RED⇒GREEN まで 時間が余ったら、リファクタリング 最初に口頭でテストケースを宣言する 「○○という入力のとき、△△になるケース を書きます」と宣言してから、テストケースを 書き始める。

今回のルール リファクタリングだけやりましょう 必要になったら、テストケースを追加してもい いです。 2008/09/20 今回のルール リファクタリングだけやりましょう 必要になったら、テストケースを追加してもい いです。 また、会場からも、どんどんアドバイスを出し てください。

CSVファイル読み書き by C# & NUnit 2008/09/20 名古屋#14 の お題 CSVファイル読み書き by C# & NUnit ひととおり出来ている。 (テストケースと製 品コード) CsvConverter クラスがカッコ悪い! 特に ToDataTable() メソッド (次スライド) 現状: 2つのループ内で Split() メソッドを呼 び出している ⇒ 1箇所にできないか? ※ ちなみに。このサンプルコード書くためには、TDD三原則を少 し破ることと、テストの粒度を大きくすることが必要でした。 (普段なら、ToDataTable() より先に、ToListList() メソッドを作ってる。)

public static DataTable ToDataTable(IEnumerable<string> lines) { DataTable dt = new DataTable(); // テーブルに、必要な分だけのカラムを用意する int columnCount = 0; foreach (string s in lines) IList<string> items = Split(s); columnCount = Math.Max(columnCount, items.Count); } for (int i = 0; i < columnCount; i++) dt.Columns.Add(new DataColumn()); // 一行をカンマで切り分けて、テーブルの行として追加していく DataRow r = dt.NewRow(); r.ItemArray = Split(s).ToArray(); dt.Rows.Add(r); dt.AcceptChanges(); return dt;

リファクタリング GREEN: ちゃんと動いてることを確認。 リファクター: コードを綺麗に直す。 ※ ちょっとずつ進む! ※ 分岐が増える? ⇒ テスト追加! GREEN: リファクターで壊してないね!

附録: リファクタリング カタログ http://www.refactoring.com/catalog/index.html 2008/09/20 附録: リファクタリング カタログ http://www.refactoring.com/catalog/index.html ■メソッドの構成 ・メソッドの抽出 / インライン化 ・一時変数のインライン化 / 説明用変数の導入 ・メソッドによる一時変数の置き換え ・一時変数の分離 (スコープ分離) ・引数への代入の除去 (一時変数の導入) ■オブジェクト間での特性の移動 ・メソッド / フィールド / プロパティの移動 ・クラスの抽出 / インライン化 ・外部メソッド (拡張メソッド) の導入 ■データの再編成 ・フィールドのプロパティ化 ・オブジェクトによる複数データ値の置き換え ・単方向関連の双方向への変更 (あるいは逆) ・ Enum や定数によるマジックナンバーの置き換え ■条件記述の単純化 条件記述のメソッドへの分解 条件記述の統合 制御フラグの削除 (中途脱出を使うことも考慮) ガード節による入れ子条件記述の置き換え ポリモーフィズムによる条件記述の置き換え ヌルオブジェクトの導入 ■メソッド呼び出しの単純化 メソッド名の変更 引数の追加 / 削除 問い合わせと更新の分離 引数オブジェクトの導入 メソッドの隠蔽 Factory Method によるコンストラクタの置き換え …まだまだ沢山あるよ!

ループを別メソッドに切り出すのは有効な 手段だが …今回のはどうかな? 2008/09/20 道場 スタート ちょっと直したら、すぐテスト! ループを別メソッドに切り出すのは有効な 手段だが …今回のはどうかな? 本来は、ひと区切りついたらチェックイン ※ 今回はリポジトリが無いので、出来ないけど。

RED ⇒ GREEN 失敗するユニットテストを成功させるためにしか、プロ ダクトコードを書いてはならない。 2008/09/20 附録: TDD 三原則 http://yattom.jp/trac/public/wiki/TDDByUncleBobMartin RED ⇒ GREEN 失敗するユニットテストを成功させるためにしか、プロ ダクトコードを書いてはならない。 失敗する(と思われる)テストケースだけ 失敗させるためにしか、ユニットテストを書いてはなら ない。コンパイルエラーは失敗に数える。 テストをギリギリ通るだけ ユニットテストを1つだけ成功させる以上に、プロダク トコードを書いてはならない。

2008/09/20