言の葉孝

2010年03月18日(木) NULLの威力

 今プロジェクトは「結合テスト」、という段階に入っています。
 今までは「製造」「単体テスト」といって、プログラム単位でデータ出入力の成否を見ていましたが、「結合テスト」は実際にデータを流してみて、全体として正しいデータを出入力できているかをテストするというものです。

 で、僕の仕事は、その結合テストであがってきたバグ(プログラム上の間違い)を取り除く、トラブルシューティングの仕事です。
 中には単体テストを怠けたとしか思えないバグもあったりするのですが、多くは結合テストから使われている、本当に使われているデータを使うことによってでてきたバグです。

 例えば、名簿でいうと出席番号と氏名があって、プログラムを作っている段階では当然全ての行に出席番号と氏名が入力されていると仮定して製造を行うとします。
 しかし、実際使ってみると空欄がある。この「何も入っていない値」をNULL(ヌル)といいます。

 このNULLがかなり厄介な存在です。たとえば変数を使って次のような計算を書いたとします。

 A := B + C;

 これだとBとCの和がAに入力されるはずなのです。
 BかC、どちらかにNULLが入ってくると、Aに入力されるのは必ずNULLになります。
 NULLは0ではないのでどんな大きな数字をを足そうが、引こうが、掛けようが、割ろうが、NULLのからんだ計算の結果は全てNULLになるのです。

 また、条件として以下のような条件があったとします。

 IF A > B THEN
A := 0;
END IF;

これはもしAの値がBより大きかったらAに0を入力する、という条件文です。
 もしBにNULLが入っていたらどうなるでしょう?

 「NULLは値がないのだから、Aのほうが大きい」と思われるかもしれません。しかし、そうはなりません。
 比較分の片方にNULLが入れば、もう片方がどのような値であれ、結果は必ずFALSE、つまり「当てはまらない」という答えになります。


 長々と分かりにくい話をしてしまいましたが、僕が言いたいことはただ一つです。
 NULLのせいで、さんざん苦労をしているということです。

 < 過去  INDEX  未来 >


想 詩拓 [MAIL] [HOMEPAGE]
web拍手です。あなたの一言感想が想 詩拓を失神させます。→ web拍手レス