続き。
■Windows で eclipse ~CUTEインストール編~
■Windows で eclipse ~CUTE入門編~
■Windows で eclipse ~CUTE入門編 Part.2~
■Windows で eclipse ~CUTE実践編(1)~
「CUTE実践編(5)」で、掛け算の際エラーが出ることが判明した。
今回は、エラーを回避するために、既存コードを修正する方法をご紹介。
とりあえず、正常終了するパターン「9 / 3」を実行してみた。
下記の通り、想定通りの値が格納されている。
という訳で、変更方法を検討することにした。
上記クラス図の内、「*」を「x」に置き換えることで変更が必要なクラス/関数は下記の通り。
という訳で、順番にコードを変更する。
TDDは、テストを先に書いて、製品コードを開発する手法である。
既にテストコード/製品コードが存在する場合、先ずはテストコードを先に修正するのである。
しかし、簡単には進まない。
[AplParaChk::IsValidSymbol( )] では、「*」を有効と判断している。これを「x」に置き換えると、この関数を呼び出している [AplMain::RunMain( )] がエラーになる。
そこで、リファクタリングの「メソッド名の置き換え」を使ってリファクタリングを行う。手順は下記の通り。
■2.新しい名前の関数を作成する。
[AplParaChk] クラスに [IsValidOperator( )] を追加。
1.[AplMainTest::testRunMain( )] 関数を修正する。
▼修正前
▼修正後
2.テストが失敗する事を確認。
3.[AplMain::RunMain()] を修正。
▼修正前
▼修正後
上記の要領で、 [AplMainTest::testExec( )] と [AplMain::Exec( )] を修正し、テストがグリーンになる事を確認する。
2.ビルドして、テストがグリーンになる事を確認。
3.[AplParaChk::IsValidSymbol( )] を削除する。
4.ビルドして、テストがグリーンになる事を確認。
という事で、一通りの動作が確認できた。
久々にTDDでコード書いてたら、なにか作りたくなってきた。
■Windows で eclipse ~CUTE実践編(1)~
■Windows で eclipse ~CUTE実践編(2)~
■Windows で eclipse ~CUTE実践編(3)~
■Windows で eclipse ~CUTE実践編(4)~
■Windows で eclipse ~CUTE実践編(5)~
■Windows で eclipse ~CUTE実践編(3)~
■Windows で eclipse ~CUTE実践編(4)~
■Windows で eclipse ~CUTE実践編(5)~
「CUTE実践編(5)」で、掛け算の際エラーが出ることが判明した。
今回は、エラーを回避するために、既存コードを修正する方法をご紹介。
とりあえず、正常終了するパターン「9 / 3」を実行してみた。
下記の通り、想定通りの値が格納されている。
- argv[0] = "実行パス"
- argv[1] = "9"
- argv[2] = "/"
- argv[3] = "3"
- argc = 4
続いて、NGパターン「9 * 3」を実行してみた。
- argv[0] = "実行パス"
- argv[1] = "9"
- argv[2] = "AplCalc.o"
- argv[3] = "AplMain.o"
- argv[4] = "AplParaChk.o"
- argv[5] = "libCalcLib.dll"
- argv[6] = "3"
- argc = 7
何故だか分からないが、"*" が、フォルダ内のファイル名に置き換わっている...。
そらパラメタエラーになるわ。 orz
という訳で、変更方法を検討することにした。
- 今回、四則演算に「+, -, *, /」の記号を用いている。
- 上記の内、「*」を使用すると想定外の動作となる。
- よって、「*」のみを、「x」に置き換えることとする。
上記クラス図の内、「*」を「x」に置き換えることで変更が必要なクラス/関数は下記の通り。
- AplMain : 演算
- AplParaChk : パラメタ取り出し
という訳で、順番にコードを変更する。
TDDは、テストを先に書いて、製品コードを開発する手法である。
既にテストコード/製品コードが存在する場合、先ずはテストコードを先に修正するのである。
しかし、簡単には進まない。
[AplParaChk::IsValidSymbol( )] では、「*」を有効と判断している。これを「x」に置き換えると、この関数を呼び出している [AplMain::RunMain( )] がエラーになる。
そこで、リファクタリングの「メソッド名の置き換え」を使ってリファクタリングを行う。手順は下記の通り。
- 新しい名前のテスト関数を作成する。
- 新しい名前の関数を作成する。
- 古い名前の関数を呼び出している箇所を、新しい名前に置き換え、ビルド&テストを実施。
- すべて置き換えが完了したら、古い関数を削除する。
今回は、[AplParaChk::IsValidSymbol( )] を [AplParaChk::IsValidOperator( )] に置き換える。
■1.新しい名前のテスト関数を作成する。
テストプログラムに [AplParaChkTest::testIsValidOperator( )] を追加。■2.新しい名前の関数を作成する。
[AplParaChk] クラスに [IsValidOperator( )] を追加。
ビルドしてテストがパス
■3.古い名前の関数を呼び出している箇所を、新しい名前に置き換え、ビルド&テストを実施。
1.[AplMainTest::testRunMain( )] 関数を修正する。
▼修正前
▼修正後
2.テストが失敗する事を確認。
3.[AplMain::RunMain()] を修正。
▼修正前
▼修正後
上記の要領で、 [AplMainTest::testExec( )] と [AplMain::Exec( )] を修正し、テストがグリーンになる事を確認する。
■4.すべて置き換えが完了したら、古い関数を削除する。
1.[AplParaChkTest::testIsValidSymbol( )] を削除する。2.ビルドして、テストがグリーンになる事を確認。
3.[AplParaChk::IsValidSymbol( )] を削除する。
4.ビルドして、テストがグリーンになる事を確認。
という事で、一通りの動作が確認できた。
久々にTDDでコード書いてたら、なにか作りたくなってきた。
0 件のコメント:
コメントを投稿