ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

JUNITの本に「書かないコードに単体テストは不要」と書いてあるけど、テストしないと。。


 JUnitによるテストファースト開発入門のP16に「書かないコードに単体テストは不要」とかかれていて、DLLやJavaのAPIは単体テスト不要(結合、総合は必要)とかかれています。

 現実は、DLLやJavaAPIでも、やばそうなものや、他社が書いたプログラムを利用する場合は、一般にJUNITで行うような、ユニットテストをプログラム前に行うと思います。 なぜ、行うかは、今日、これから書く理由のためです。

 ただ、ユニットテストを、単体テストと呼ぶか、結合テストと呼ぶかという問題があります。ユニットテストは、結合テストであるという場合(こういう主張がある。単体とは、ソースをみながら行うソース内部をテストすることであるという主張)、単体テストは不用(というより、できない)ということになります。




 で、なぜ、ユニットテストを行わないといけないかという話(^^)

 というまえに、どうやって、この手のものを、ユニットテストするかについて、書きますね。

 まあ、この手のユニットテストの仕方はきまっているわけで、
(1)呼び出し部分とラッパーを作って
 →ラッパーは、ダミーの値をいれ、この時点では他社の関数等を呼び出さない
(2)その状態で動くことを確認(テスト)してから、
(3)ラッパー部分の内部を、使いたいプログラムを使ってコーディング、
(4)そして、(2)のときの確認したデータ、方法で、確認する
という作業をします。

 一般の仕事においては、開発は、
・アーキテクト(アーキ)と
・共通部分開発
・個別の業務部分開発
にわかれ、業務チームの人は、ラッパーの関数・メソッドを使うため(開発は、(3)が間に合わないときは、(1)で作ったラッパーのなかにダミーモジュールをいれたものを、スタブとして使ってもらうという形をとる)、自分でテストすることは、ないかもしれません。

 共通やアーキ(とくに共通)がこういうテストをします。
 共通の私は、そんなんで、よくやるわけで、今日も、そういうお仕事だったわけですが。。。。




 あるプログラムの、ソースとオブジェクト(だけ)をもらって、お仕事です。

 (1)、(2)の作業を終え、(3)。

 まあ、今日は、(市販されているソフトらしいので)ソース内部を確認しなくても大丈夫だろうと、ソースを読まないで、そのままインターフェースをあわせて呼び出したら。。。

 はんぐあーっぷ!!

 なんでなんで(>_<!)

 とおもって、ソースを見てびっくり。。。

 正常系しか、テストしてないのかなあ。。。
 異常系で、エラーになると。。。(^^;)。。。

 おいおい、エラーのとき、この順番でフリーしたら、フリーした後で、その領域、見ちゃってるじゃん!そのうえ、フリーしてない領域もあるしい。。

 あーーーーそこで、すぐに抜けたら、メモリフリーしてないだろ。。

 つーか、ここで、フリーすんじゃねーよ。

 おまえ、ヌルかどうかきいて、フリーしてるけど、その領域、初期化してねーだろ(^^;)

 とかいうわけで、これ、つかえないじゃん!

 ということで、かきなおしです。。。




 で、書き直したら。。まあ、ハングアップした理由が異常系にいったから
ということからもわかるように、エラーになるわけなんだけど、そのエラーの
理由が。。。

 エラーコードを見たら

 「このクラスは、サポートされていません」。

 はじめから、言えよ(^^)




 たぶん、環境設定がおかしいんだと思います。

 こういうケースはすごーく良くあって、最近、マネージャーが、システムを良くわかんない人がやることが多いので、環境設定のドキュメントを持ってこないとか、ドキュメントが抜けてるとか言うのがあって、それを、事前に確認しておかないと、開発のコーディングが終わってから後だと、完全に手遅れ(実は、ターゲットの環境では動かせない!というケース)ということが、ありますね。

 で、最近は、ユニットテストの正常系だけ通して持ってこられたりするので、そーすると、環境が違って、異常系に入ると、上記のように。。。っていうことも、ないわけじゃない。

 ということで、最近は、DLLやほかの会社が作ったモジュールでも、共通部隊は、単体テスト(ユニットテストですけど)を行って、環境の確認、および異常系がちゃんとできているかなんかの確認をしますね。
 で、確認するときに、上記のように、ラッパーを作って、ラッパーの中を、ダミー入れて、テストドライバが通ることを確認してからやるため、時間がないと、ダミーを入れたラッパーを使って結合してもらったりします。

 そのため、共通以外の人たちから見ると、他人のモジュールはテストしなくて言いように見えるかもしれないけど、一応、テストは、してまーす!

 その状況をみると、「なんで、共通の人しか、テストしないようにするか」というのがわかります。ハングアップしてしまうと、リセットして、再度立ち上げないと、なにもできなくなるんです。(>_<!)

 もう、リセットばっかで進まない、進まない。。。

 で、通った!と思ったら、「そのクラスは、サポートされていない」

 うーん、今日1日、何やってたんだろう (^^;)