2010年02月

方針を決めるその2

前回(方針を決める)の続きです。

異常系・正常系の順とするとは、前回の記事のサンプルコードのように、まずは異常となるデータをセットし、テスト対象メソッドが適切にエラー手続きを行っているかを先に調べるためです。

なぜ、異常系が先かと言うと、メソッドの中では事前にチェックを行って、問題なければ先に進む処理になっているのが多いことでしょう。

前回のサンプルコードでは、「search」メソッドの中で次のような処理を行っていました。

if (dataBean == null) {
    // エラー処理
}
if (dataBean.getName() == null) {
    // エラー処理
}
・・・
// 検索処理

異常系から調べることによりメソッドの処理の順でテストすることが出来るのです。


正常系からテストしようとすると、全て正しい場合のデータを入れる必要があり、最初にすべてソースを見渡す必要が出てきます。

今の説明ですと、誤解されてしまうかもしれませんので、補足します。
テストの場合は、

このデータの場合やこの場合ならこうならないといけないと仕様が決まっています

ので、テストするときにはテスト対象のメソッドは見なくてもある程度のテストが出来ないとおかしいです。

  例えば、ソースコードの仕様が「引数がnull」の場合なら○○例外をスローする。挿入処理なら、権限が無いユーザが登録しようとしたら××例外をスローすると決まっていることでしょう。

決まっていれば、まずは「引数の値がnull」になるように進めていきます。全て適切な値を入れた後に、存在しないユーザや権限のないユーザで試していくことにより、徐々に正常系に近づけてテストを作成して行きます。


junitを使う場合というのは、単体レベルのテストを行う場合に使うことが多いので、ホワイトボックスのテストになるので、テストはテスターではなく実装者が行うのが普通でしょう。そのため、進め方としては、ソースを見ながらテストを作成する方が多いでしょう。

ただ、最初からソースを見るのではなく、まずは、この場合ならこうならないといけないというテストを先に進めてから進めるのが良いでしょう。

ホワイトボックスの話も出しましたが、一通り仕様を満たす試験を行い、後はテストするクラスがすべてテストされているかどうかをカバレッジツールを利用することで確認するのが良いでしょう。

そして、カバレッジを調べた後にテストを追加するのも良いでしょう。そうすれば、実装者ならどこのテストが抜けていたのかわかり、ホワイトボックスのテストも満たすことになります。

カバレッジは、junitを使うのであればdjunitと併用することがお勧めです。


カバレッジを意識したテストをする場合、DAO、サービス、アクションのテストの順に調べるのは2回以上テストすることになるので、以下の方法で進めても良いと思います。

・アクション
一通りのテストを行う

・サービス
アクションのテストで処理されないテストを行う。

・DAO
サービス・アクションのテストで処理されないテストを行う。


アクションのテストで処理されないとは、アクションの中でチェックを行っていたり、他のサービスでチェックを行っていたために、その後に呼びだされたサービス・DAOのチェックまで処理が流れないことです。

つまり、アクションで一通りテストをして、サービス・DAOの個別にチェックしている処理はサービス・DAOのテストで行うということです。

  全てのアクションのテストで処理されないソースコードがあった場合、アプリ自体には不要ですが、メソッドで前提となる条件が整っているかをチェックするのはメソッド内でしたほうが拡張性がありますので、そう言った意味でも個別のチェックはサービス・DAOのテストですると良いでしょう。

世の中は狭い。。


リーダーの立川です。

今日はお客さんのところで打ち合わせだったのですが。

本日、初めて打ち合わせに参加される方がいらっしゃったのですが、
打ち合わせが終わった際に。。。

aokiさんって、同じ高校じゃなかったですか?」

ええぇ (゚Д゚≡゚д゚)エッ!?

一緒に打ち合わせに参加していたメンバーと同級生だったらしいんですよねぇ。。

それも同じクラスらしく。。。

まあ、世の中狭いということに気づかされましたわ。。

宇都宮


リーダーの立川です。

今日は宇都宮へ出張でした。


以前からお仕事をいただいているところから、別件でご相談を頂きまして
第一回目の打合せでした。

ExcelVBAなんかを使ってのライトな感じのお仕事ですが、今後につなげていくという面ではとても重要なお仕事です。
エンドユーザさんは誰もが知っているところなので、ここでしっかり売り込んで太い仕事にしたいですな。。

担当の営業さんともじっくり話したことがなかったので、これはいい機会ってことで、張り切ってます。

宇都宮ということで、昼食はもちろん餃子。
とりあえず、駅ナカで食べてみましたが、さほど。。。
また次回くる際には、もう少し研究しておいしいお店を狙ってみよっと・・

SQL*Loaderで取込ファイルの文字エンコードを指定する

サブリーダーの吉田です。

SQL*Loaderは高速にファイルをOracleのDBに取り込めるので、プログラムを組んでファイルを取り込むよりも非常に高速です。2万件のCSVデータでも数秒程度でデータのインポートが完了してしまうほどです。

SQL*Loaderはコントロールファイルに設定値を書き込んでおくことにより設定が可能です。
主にインポート対象のテーブル名、カラム名や、INSERTするカラムに対して固定値や行数など様々な値を設定できます。そのコントロールファイルで

LOAD DATA CHARACTERSET <エンコード名>

と設定し実行することでエンコード名を設定することができます。(※CHARACTERSET以下は省略することもでき、省略された場合にはNLS_LANGに設定された文字コードになる模様

そこの<エンコード名>で設定できる値は
・JA16SJIS
・JA16SJISTILDE
・JA16SJISYEN
・AL16UTF16
・AL32UTF8
・UTF8
・JA16EUC
・JA16EUCTILDE
・JA16EUCYEN
とOracleの文字コードになりますので注意が必要です。UTF-8と書いたら失敗ばかりしていて少し悩みました。Oracleのページにきちんと書いてありました。SQL*Loader制御ファイル・リファレンス

Java等のプログラムから利用する場合には
1.最初に一時テーブルに取り込んでおき、それからプログラムを実行
2.プログラムからbatファイル、コントロールファイルをテンプレートから作成し、実行直前にコミット、SQL*Loader実行後、SQL*Loaderの実行結果の検証をしてプログラムを進める
などの一工夫が必要になります。

通勤の足


リーダーの立川です。

ここ数年、通勤の足として「ママチャリ」を使っているのですが。。。

今朝、軽い段差のところで「ガシッ!シャラララララ」って音が。。

何かと思ったら、チェーンが外れていました!

我が社では月曜は朝礼があるので、遅れるわけにはいきません。。

何とか10分ほどの格闘の末、装着完了。
でも、またいつ外れるかわからないので慎重に運転しました。。

8年も乗った自転車なので、寿命なのかも。。
livedoor プロフィール
QRコード
QRコード
  • ライブドアブログ