Successfully reported this slideshow.
Your SlideShare is downloading. ×

二分木クラスを作ってGoogle testでチェックしてみた話

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Introduction to boost test
Introduction to boost test
Loading in …3
×

Check these out next

1 of 13 Ad

More Related Content

Viewers also liked (9)

Recently uploaded (20)

Advertisement

二分木クラスを作ってGoogle testでチェックしてみた話

  1. 1. 二分木クラスを作って GoogleTestでチェックしてみた話 Gou Sawada 2016/1/17
  2. 2. 【自作二分木クラスの機能】 あるノードをdeleteするとき、 そのノードに左の子があれば、 左の子の深さを1減じる(rootに近づける)。 左の子にも子ノードがあれば、同じ処理を再帰的に行う。 ※「ESCR C++:組込みソフトウェア開発向けコーディング作法ガイド[C++言語版]」  によると、再帰呼出しを行ってはならない(実行時の利用スタックサイズが  予測出来ないため)とあるが、ここではとりあえず無視する。 左の子がない場合は 右の子の深さを1減じる。
  3. 3. 【自作二分木クラスの機能】 各ノードは 「親へのポインタと、  親に対して左の子/右の子どちらであるかの属性」 「左の子へのポインタ」 「右の子へのポインタ」 の情報を持つ。
  4. 4. 【自作二分木クラスの機能】 子ノードの深さを1減じる(rootに近づける)とき、 その子ノードの 「親へのポインタと、  親に対して左の子/右の子どちらであるかの属性」 「左の子または右の子へのポインタ」 の情報を適切に親ノードから受け継ぐ。
  5. 5. 【テストしたいこと】 あるノードをdeleteするとき、 木の再構成が想定通りであること。 「親へのポインタと、  親に対して左の子/右の子どちらであるかの属性」 「左の子へのポインタ」 「右の子へのポインタ」
  6. 6. 【Eclipse(Win)にGoogle Testを適用】 このサイトを参考にしました。 http://blog.myspoon.info/2013/08/eclipse-cdtgoogle-test.html http://www-utheal.phys.s.u-tokyo.ac.jp/~yuasa/wiki/index.php /Eclipseで自動Makeするときのincludeや外部ライブラリの設定
  7. 7. 【テストコードのサンプル】 TEST(BTCDeleteTest,test1) { //←(テストケース名、テスト名) 名前が被らないように複数作成可 (中略) //BTCは二分木の各ノードを示す配列 delete BTC[1]; //deleteするとデストラクタで二分木の再構成をする EXPECT_EQ(nullptr,BTC[0]->getParentNode()); //親なし?(BTC[0]はroot) EXPECT_EQ(nullptr,BTC[0]->getChildNodeLeft()); //左の子 なし? EXPECT_EQ(BTC[2],BTC[0]->getChildNodeRight()); //右の子BTC[2]? EXPECT_EQ(CHILD_NODE_NONE, BTC[0]->getPrv_left_right()); //自分自身は左の子でも右の子でもない? EXPECT_EQ(BTC[2]->getParentNode(),BTC[0]); //親 BTC[0]? EXPECT_EQ(BTC[2]->getChildNodeLeft(), nullptr); //左の子なし? EXPECT_EQ(BTC[2]->getChildNodeRight(), nullptr); //右の子なし? EXPECT_EQ(CHILD_NODE_RIGHT, BTC[2]->getPrv_left_right()); //自分自身は右の子? ・・・
  8. 8. 【テスト組合せ網羅の確認】 1 2 3 ホワイトボックスの観点で網羅できている 組合せ 条件1 条件2 条件3 あり(自分が左の子) あり(自分が右の子) あり(孫ノードなし) あり(孫ノードあり) ↓該当のテスト名 delete対象ノードの 左の子ノードが ないとき、右の子ノード delete対象ノードの 左の子ノード delete対象ノードの 親ノード なし(root) なし なし あり(孫ノードなし) あり(孫ノードあり) 1 1 1 1 2 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 2 1 1 1 3 2 1 1 1 3 1 2 3 1 2 3 1 2 3 - test2 test2 test1 test1 test3 test9 test4 test8 test3 test8 test5 test6 test4 test5
  9. 9. 【テスト実行結果(コンソールに表示)】 [==========] Running 9 tests from 1 test case. [----------] Global test environment set-up. [----------] 9 tests from BTCDeleteTest [ RUN ] BTCDeleteTest.test1 [ OK ] BTCDeleteTest.test1 (0 ms) [ RUN ] BTCDeleteTest.test2 [ OK ] BTCDeleteTest.test2 (0 ms) [ RUN ] BTCDeleteTest.test3 [ OK ] BTCDeleteTest.test3 (0 ms) [ RUN ] BTCDeleteTest.test4 [ OK ] BTCDeleteTest.test4 (0 ms) [ RUN ] BTCDeleteTest.test5 [ OK ] BTCDeleteTest.test5 (0 ms) ・・・
  10. 10. 【テスト実行結果(コンソールに表示)】 [ RUN ] BTCDeleteTest.test6 [ OK ] BTCDeleteTest.test6 (0 ms) [ RUN ] BTCDeleteTest.test7 [ OK ] BTCDeleteTest.test7 (0 ms) [ RUN ] BTCDeleteTest.test8 [ OK ] BTCDeleteTest.test8 (0 ms) [ RUN ] BTCDeleteTest.test9 [ OK ] BTCDeleteTest.test9 (0 ms) [----------] 9 tests from BTCDeleteTest (0 ms total) [----------] Global test environment tear-down [==========] 9 tests from 1 test case ran. (1 ms total) [ PASSED ] 9 tests. ※失敗した場合はソースファイル名と行数を表示します
  11. 11. 【所感】 何らかの変更を行った際の回帰テストとして使える。 一度作ってしまえば実行するだけなので楽。 結果NGのとき、バグがテスト対象にあるのか テストコードにあるのか調査しなければならない。 →新規作成のモジュールの場合、テストコードも新規なので   どちらにバグがあるか? 両方にあることも・・・ やっぱりユニットテスト用? 結合テスト以降に使うのは無理があるか・・・?
  12. 12. 【所感】 テスト資産を残す、という意識づけにおいても有効? テスト資産を残さない、残っていても再利用できない ではテストの効率化・開発品質の向上はできない。 テストが嫌い、苦手なプログラマに 常にテストを意識させることができる? →テスト技術の向上
  13. 13. ありがとうございました。

×