70
テスト駆動開発入門 ネクストステップ 井芹洋輝

テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

テスト駆動開発入門 ネクストステップ

井芹洋輝

Page 2: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

謝辞

• 主催の今給黎さん

• 和田さん、会場提供、スタッフの方々

• 参加者の皆さま

深くお礼申しあげます

Page 3: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

自己紹介

• 井芹 洋輝(@goyoki/id:goyoki)

• 組み込みエンジニア

• WACATE実行委員/TDD研究会

• 講演/執筆: – XP祭り関西「ユニットテストの保守性を作りこむ」

– Androidテスト祭り「テストの活用による開発効率化」

– 並カン「FPGA/HDLを活用したソフトウェア並列処理の構築」等

Page 4: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

概要 本講義はTDDの基本サイクルを学んだ方が対象です。 本講義ではTDDを開発で実践するための知識、TDDについて自立して学習を進めるための知識を学び、一人前のTDD使いへのスタートアップを手助けします。

Page 5: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

概要

テストを

整える

変更に

備える

変更に

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 6: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

実践のネクストステップ

テストを

整える

変更に

備える

変更に

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 7: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

実践のネクストステップ

TDDを継続していくと、TDDの基本サイクルにテストの再利用と変更のタスクが加わります。それらはしばしばTDDの効率を左右するため工夫や対策が必要です。

Page 8: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

テストを整える

テストを

整える

変更に

備える

変更を

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 9: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

テストを整える TDDであってもテスト設計を見直し、テストに穴がないか、これまでの作業が適切だったかチェックする必要があります。不適切なテストは実装ミス・リファクタリングでのデグレードを見逃し、テストの再利用を阻害するリスクを持っています。

Page 10: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

テストを整える

テストの網羅度をチェック

• 仕様ベースの網羅 – テストが仕様を網羅しているか

– 仕様ベースのテスト設計等

• 構造ベースの網羅 – テストがコードを網羅しているか

– コードカバレッジ等

4で割り切れる N Y Y Y

100で割り切れる N N Y Y

400で割り切れる N N N Y

うるうどし N Y N Y

//うるう年か判定する bool isLeapYear(unsigned int year) { if (year % 400 == 0) { return true; } if ((year % 4 == 0) && (year % 100 != 0)) { return true; } return false; }

Page 11: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

仕様ベースの網羅

ex)同値分割法によるチェック

• 出力やふるまいで同じように扱えるグループに、入出力をグルーピングする

• グループを同値クラスと呼ぶ

Page 12: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

仕様ベースの網羅

ex)同値分割法によるチェック

• 「6歳未満は無料。6歳以上12歳以下は半額。13歳以上は定額」

Page 13: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

仕様ベースの網羅

ex)同値分割法によるチェック

• 「6歳未満は無料。6歳以上12歳以下は半額。13歳以上は定額」

–出力をグルーピング

• 無料

• 半額

• 定額

Page 14: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

仕様ベースの網羅

ex)同値分割法によるチェック

• 「6歳未満は無料。6歳以上12歳以下は半額。13歳以上は定額」

–入力もグルーピングし、入出力のグループを抽出

0 6 12 -∞ +∞

ありえない 無料 半額 定額

年齢

4つにグルーピング

Page 15: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

仕様ベースの網羅

ex)同値分割法によるチェック

• 「6歳未満は無料。6歳以上12歳以下は半額。13歳以上は定額」

– グループごとに代表値を決めてテストの入力値を抽出

0 6 12 -∞ +∞

ありえない 無料 半額 定額 代表値-1 代表値0

代表値5 代表値6 代表値12

代表値13

代表値をテストの入力に指定

Page 16: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

仕様ベースの網羅

ex)同値分割法によるチェック TEST(HogeTest, Invalid) { EXPECT_EQ(…, checkFee(-1)) } TEST(HogeTest, Free) { EXPECT_EQ(…, checkFee(0)) EXPECT_EQ(…, checkFee(5) } TEST(HogeTest, Half) { EXPECT_EQ(…, checkFee(6)) EXPECT_EQ(…, checkFee(12)) } TEST(HogeTest, Full) { EXPECT_EQ(…, checkFee(13)) }

テストコードがグループや代表値を網羅しているかチェック 穴があれば埋める

あるいは 最初から意識してテストを書く

Page 17: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

構造ベースの網羅

• コードカバレッジを用いる

• テストが妥当なブランチカバレッジやループカバレッジの網羅性を持つことをチェック

• 穴があれば埋める

Page 18: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に備える

テストを

整える

変更に

備える

変更に

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 19: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に備える

TDDではテストをリファクタリングや自動回帰テストとして再利用するため、テストに保守性が要求されます。 柔軟な開発を支えるためにも、プロダクト/テストを区別せずコードを洗練させる必要があります。

Page 20: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に備える

テストは変更を支える砦となりえますが、同時にテストは変更の障害ともなりえます。 テストコードも保守困難なレガシーコードとなります。

Page 21: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に備える

• 読みやすくする

• 危ないコードを分離する

• 重複をなくす

• 影響範囲を限定する/副作用をなくす

Page 22: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に備える

• 読みやすくする

• 危ないコードを分離する

• 重複をなくす

• 影響範囲を限定する/副作用をなくす

Page 23: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

読みやすくする

• 何をテストしているのかわかりやすい

• 変更箇所の特定が楽

• 変更ミスを防げる

• テストのバグを見つけやすい

Page 24: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

読みやすくする

TEST(HogeTest, Test1) { … } TEST(testHoge, Test2) { … }

Page 25: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

読みやすくする

TEST(HogeTest, Test1) { … } TEST(testHoge, Test2) { … }

なんのテストかわからない

Page 26: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

読みやすくする

TEST(HogeTest, commandInputInvalidError) { … } TEST(HogeTest, commandInputBOFError) { … }

適切な名前を与える

Page 27: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

読みやすくする

TEST(HogeTest, Fuga) { MotorStatus motorStatus(133, 232); InspectionFuga inspector; inspector.set(createMaintenanceInfo(motorStatus); EXPECT_EQ(START, inspector.getState()); EXPECT_EQ(true, inspector.isEmpty()); inspector.initialize(); EXPECT_EQ(INFO, inspector.getState()); EXPECT_EQ(false, inspector.isEmpty()); }

Page 28: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

読みやすくする

TEST(HogeTest, Fuga) { MotorStatus motorStatus(133, 232); InspectionFuga inspector; inspector.set(createMaintenanceInfo(motorStatus); EXPECT_EQ(START, inspector.getState()); EXPECT_EQ(true, inspector.isEmpty()); inspector.initialize(); EXPECT_EQ(INFO, inspector.getState()); EXPECT_EQ(false, inspector.isEmpty()); }

何をテストしているかが散漫 テストのバグをみつけにくい

Page 29: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

読みやすくする

TEST(HogeTest, FugaConstractor) { InspectionFuga inspector = createInspectionFugaDummy(); EXPECT_EQ(START, inspector.getState()); EXPECT_EQ(true, inspector.isEmpty()); } TEST(HogeTest, FugaInitialize) { InspectionFuga inspector = createInspectionFugaDummy(); inspector.initialize(); EXPECT_EQ(INFO, inspector.getState()); EXPECT_EQ(false, inspector.isEmpty()); } 分離し適切な名前を与える

Page 30: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に備える

• 読みやすくする

• 危ないコードを分離する

• 重複をなくす

• 影響範囲を限定する/副作用をなくす

Page 31: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

危ないコードを分離する

TEST(FooTest, Bar) { MotorStatus motorStatus(0, 0); MaintenanceData mtData; MaintenanceType mtType(createRegionID(EU)); setInitialData(mtData, mtType); … InspectionFuga inspector; inspector.set(MaintenanceInfo(mtData, mtType), motorStatus); EXPECT_EQ(inspector…) }

Page 32: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

危ないコードを分離する

TEST(FooTest, Bar) { MotorStatus motorStatus(0, 0); MaintenanceData mtData; MaintenanceType mtType(createRegionID(EU)); setInitialData(mtData, mtType); … InspectionFuga inspector; inspector.set(MaintenanceInfo(mtData, mtType), motorStatus); … }

プロダクトコードに過依存

その他:

変更リスクの高いコード 堅牢性の劣るコード

Page 33: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

危ないコードを分離する [テスト側でラッピング]

TEST(FooTest, Bar) { InspectionFuga inspector = CreateInspectionFuga(0, EU); … inspector.set(MaintenanceInfo(mtData, mtType), motorStatus); … }

Page 34: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

危ないコードを分離する [プロダクト側のインターフェースを改善]

TEST(FooTest, Bar) { InspectionFuga inspector(0, 0, EU); … inspector.set(MaintenanceInfo(mtData, mtType), motorStatus); … }

Page 35: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に備える

• 読みやすくする

• 危ないコードを分離する

• 重複をなくす

• 影響範囲を限定する/副作用をなくす

Page 36: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

重複をなくす

[Test Utility Method] TEST_F(BuyerTest, addSameStatus) { Buyer buyer; Customer customer1("Taro", "Yamada", 15, 2, "HOGE|FUGA"); customer1.addCategory(STATE_ACTIVE); Customer customer2("Taro", "Yamada", 15, 2, "HOGE|FUGA|HOGEHOGE"); customer2.addCategory(STATE_ACTIVE); …. buyer.add(customer1); buyer.add(customer2); …. EXPECT_EQ(0, buyer.getSection()); }

Page 37: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

重複をなくす

[Test Utility Method]

Customer createCustomer(string status) { Customer customer("Taro", "Yamada", 15, 2, status); customer.addCategory(STATE_ACTIVE); return customer; } Parameterized Creation Method

TEST_F(BuyerTest, addSameStatus) { Buyer buyer; Customer customer1 = createCustomer("HOGE|FUGA"); Customer customer2 = createCustomer("HOGE|FUGA|HOGEHOGE"); … buyer.add(customer1); buyer.add(customer2); … EXPECT_EQ(0, buyer.getSection()); }

Page 38: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

重複をなくす

[Parameterized Test] TEST_P(HogeTest, InvalidValueMinus) { Hoge hoge(-1); EXPECT_EQ(0, hoge.size()); } TEST_P(HogeTest, InvalidValueZero) { Hoge hoge(0); EXPECT_EQ(0, hoge.size()); } TEST_P(HogeTest, InvalidValueTooBig) { Hoge hoge(124566); EXPECT_EQ(0, hoge.size()); } …

Page 39: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

重複をなくす

[Parameterized Test] class HogeTest : public testing::TestWithParam<int> {}; INSTANTIATE_TEST_CASE_P(InvalidValueInstance, HogeTest, testing::Values(-1, 0, 124566)); TEST_P(HogeTest, hogehoge) { Hoge hoge(GetParam()); EXPECT_EQ(0, hoge.size()); }

Parameterized Test

Page 40: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に備える

• 読みやすくする

• 危ないコードを分離する

• 重複をなくす

• 影響範囲を限定する/副作用をなくす

Page 41: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

影響範囲を限定する/副作用をなくす Foo foo; TEST_F(HogeTest, Fuga) { … } TEST_F(HogeTest, Piyo) { … }

Page 42: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

影響範囲を限定する/副作用をなくす TEST_F(HogeTest, Fuga) { Foo foo; … } TEST_F(HogeTest, Piyo) { Foo foo; … }

ローカル変数にする テストクラスのメンバにする

Page 43: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

影響範囲を限定する/副作用をなくす

Void SetUp() { 外部コンポーネントの初期状態を記録する } TEST_F(Buyer, test_add_sameStatus) { 外部コンポーネントを使ってテスト …. } Void TearDown() { 外部コンポーネントを初期状態にロールバックする }

構造的にも時間軸的にも独立させる 他のテストコードを変更しても結果が変わらない 順序を変えても、どのようなタイミングでも結果が変わらない

Page 44: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

テストを整える&変更に備える

実施タイミング

TDDではプロダクト/テストを区別せずコードを洗練させていくべきです。 テストコードであっても良いコードを目指すべきですし、プロダクトコードのリファクタリングと同じ扱いで設計改善すべきです。

Page 45: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

テストを整える&変更に備える

実施タイミング

Assertファースト による追加・変更 (RED→GREEN)

リファクタリング (Refactor)

Green

RED

GREEN REFACT

OR

Page 46: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

テストを整える&変更に備える

実施タイミング

リファクタリング (Refactor[PRODUCT])

テストを整える

RED

GREEN

テストを

整える

REFACTOR

• TEST

• PRODUCT Green

Assertファースト による追加・変更 (RED→GREEN)

テストコードの 設計改善

(REFACTOR[TEST])

Page 47: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する

テストを

整える

変更に

備える

変更に

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 48: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更

TDDでは開発の進展、リファクタリング、仕様変更などによりしばしばプロダクトコードの変更が発生します。 TDDではプロダクトコードに依存するテストが早期から作られるため、テストを以下に効率よく変更に対応させるかが効率確保の鍵となりえます

Page 49: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する

1. よく考える

(1.5. 変更を受け入れられるように設計改善)

2. RED

3. GREEN

4. REFACTOR …

Page 50: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する TEST(…) { TestTarget target(0); … } TEST(…) { TestTarget target(1); … } ….

Class TestTarget { void TestTarget(int hoge) { …. } }

Page 51: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する

TestTarget(int hoge) からTestTarget(int hoge, int fuga)に変更。 Int fugaに応じて複雑な処理を・・・

TEST(…) { TestTarget target(0); … } TEST(…) { TestTarget target(1); … } ….

Class TestTarget { void TestTarget(int hoge) { …. } }

Page 52: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する TEST(…) { TestTarget target(0); … } TEST(…) { TestTarget target(1); … } TEST(…) { TestTarget target(2); … } ….

Class TestTarget { void TestTarget(int hoge) { …. } }

TestTarget(int hoge) からTestTarget(int hoge, int fuga)に変更。 Int fugaに応じて複雑な処理を・・・

よく考える 無理のない小さなステップで 効率よく変更できるように

Page 53: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する[1]

Parallel Change TEST(…) { TestTarget target(0); … } TEST(…) { TestTarget target(1); … } TEST(…) { TestTarget target(2); … } ….

Class TestTarget { void TestTarget(int hoge) { …. } void TestTarget(int hoge, int fuga) { … } }

TestTarget(int hoge) からTestTarget(int hoge, int fuga)に変更。 Int fugaに応じて複雑な処理を・・・

新旧共存でTDD 逐次テストを置き換えていく

Page 54: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する[1]

Parallel Change TEST(…) { TestTarget target(0, 0); … } TEST(…) { TestTarget target(1); … } TEST(…) { TestTarget target(2); … } ….

Class TestTarget { void TestTarget(int hoge) { …. } void TestTarget(int hoge, int fuga) { … } }

TestTarget(int hoge) からTestTarget(int hoge, int fuga)に変更。 Int fugaに応じて複雑な処理を・・・

新旧共存でTDD 逐次テストを置き換えていく

Page 55: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する[2]

TDDのための事前変更 TEST(…) { TestTarget target(0, 0); … } TEST(…) { TestTarget target(1, 0); … } TEST(…) { TestTarget target(2, 0); … } ….

Class TestTarget { void TestTarget(int hoge, int fuga) { …. } }

TestTarget(int hoge) からTestTarget(int hoge, int fuga)に変更。 Int fugaに応じて複雑な処理を・・・

Dummyで置き換えつつ インターフェースを変更 その後TDD

Page 56: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

変更に対処する

• 無理のない小さなステップで、効率よく変更できるように考える – 事前対策

– Pallalel Changeや前倒しのインターフェース変更等

• テストの保護を壊さない 変更にもテストで戦う

Page 57: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

学習のネクストステップ

テストを

整える

変更に

備える

変更に

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 58: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

TDDを学ぶ

TDDは文献、情報発信源、コミュニティから学ぶことができます。 TDDはシンプルな開発手法ですが、様々な関連分野、応用分野とリンクしているため、勉強の余地を大いに持っています。

Page 59: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

基礎を身につける

テストを

整える

変更に

備える

変更を

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 60: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

基礎を身につける

@t_wada Id:t-wada

Page 61: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

より活用する

テストを

整える

変更に

備える

変更に

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 62: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

より活用する

テスト設計

Page 63: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

より活用する

テストコードの実装

xutp magagine ぺけま

Coming soon!

xUnit Test Patterns読書会Wiki http://www.fieldnotes.jp/xutp/

Id:setoazusa @setoazusa

Page 64: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

より活用する

変更への対処

Page 65: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

応用分野を学ぶ

テストを

整える

変更に

備える

変更に

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ

Page 66: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

応用分野を学ぶ

テストの活用×TDD

WACATE(もうすぐ募集開始!) http://wacate.jp/ Testing Engineer's Forum http://www.swtest.jp/wiki/index.php?swtest.jp/wiki/forum

Page 67: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

応用分野を学ぶ

DVCS×TDD

SCM Boot camp http://d.hatena.ne.jp/kyon_mm/archive?word=*%5Bscmbc%5D

Id:bleis-tift @bleis

Id:kyon_mm @kyon_mm Id:pocketberserker @pocketberserker

Page 68: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

応用分野を学ぶ

BDD/Outside-In TDD

Growing Object-Oriented Software, Guided by Tests(goos)読書会 http://devtesting.jp/goos/

Id:setoazusa @setoazusa

Page 69: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

その他

TDDBC運営コミュニティ

TDDBC http://devtesting.jp/tddbc/

Page 70: テスト駆動開発入門 ネクストステップinfog.0ch.biz/download/TDDBC_Cpp_NextStep_sitagaki.pdf · 2011-10-05 · テストを整える tddであってもテスト設計を見直し、テスト

ご清聴ありがとうございました

テストを

整える

変更に

備える

変更に

対処する

TDD実践のネクストステップ

TDD学習のネクストステップ

基礎を

身につける

より

活用する

応用分野

を学ぶ