2013年1月19日土曜日

Windows で eclipse ~CUTE実践編(7)完結編~



続き。

Windows で eclipse ~CUTEインストール編~
Windows で eclipse ~CUTE入門編~
Windows で eclipse ~CUTE入門編 Part.2~
Windows で eclipse ~CUTE実践編(1)~


「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」に置き換えることで変更が必要なクラス/関数は下記の通り。


  1. AplMain : 演算
  2. AplParaChk : パラメタ取り出し

という訳で、順番にコードを変更する。



TDDは、テストを先に書いて、製品コードを開発する手法である。
既にテストコード/製品コードが存在する場合、先ずはテストコードを先に修正するのである。

しかし、簡単には進まない。

[AplParaChk::IsValidSymbol( )] では、「*」を有効と判断している。これを「x」に置き換えると、この関数を呼び出している [AplMain::RunMain( )] がエラーになる。

そこで、リファクタリングの「メソッド名の置き換え」を使ってリファクタリングを行う。手順は下記の通り。

  1. 新しい名前のテスト関数を作成する。
  2. 新しい名前の関数を作成する。
  3. 古い名前の関数を呼び出している箇所を、新しい名前に置き換え、ビルド&テストを実施。
  4. すべて置き換えが完了したら、古い関数を削除する。

今回は、[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 件のコメント:

コメントを投稿