雑KiN3-改

ここは自分にとっての過去ログです。すなわち、他人にとっては単なるゴミ。

 ソフトウエアのソースを書いているときはテストを先に書いてから本体に取り掛かるようにしている。どういうことかというとソフトウエアってのはバラバラな部品を沢山作って、それをつなぎ合わせて作る。そのときに、部品を作りました。では試験をしてみましょう。あれ?こんな動作で良いの?ということが多発する。そこで、この部品はこのような入力を与えたら、このような出力をしてください、ということをテストするためのソースを先に作ってから部品を作り出すという手法が考え出された。昔も入力と出力は先に決めていたが、試験のためのソースまでは作らなかったのだな。テスト用ソースが先に作られているので部品を書いて動作させてみると、その場でうまくできたかどうかの結論がわかる。


 ただ、これには問題もある。テスト用のソースが正しく作られているかどうか。また、テスト用のソースが正しくても、部品に与える値が正しいかどうか。ある程度までは正しいとしても完璧になることはありえない。誤差曲線の理論などを見ても判るように「絶対に」は否定の副詞なのだ。だから試験は一種類ではなくて複数が行われる。


 今回作っていたものも1つのテストは完璧にパスしたように見えた。しかし別のテストでエラーが検出された。原因は初歩的。コンピュータで使うデータ型で浮動小数点型というのがある。データの値に小数点以下があると大抵はこの型を使う。整数のように小数点以下が無い値や、小数点以下があっても0.25とかいうように有限であれば問題が無いのだが、浮動小数点型は本当の値の近似値であることが多い。すると2つの浮動小数点AとBが等しいかどうか比べるときは単純にイコールかどうかを見てはいけない。誤差をαとすると(A-α)<B<(A+α)のようにしなければいけない。これはちょっと突っ込んだ本には書いてあることだ。そして自分も何十年も前に痛い目を見ている。なのに10年以上もやっていなかったことだから、すっかり忘れていた訳だ。余りの記憶力の悪さに流石に落ち込んだな。