« 最初の話題は三角形問題 | Main | 三角形問題で必要なテストケース数 »

01 June 2011

三角形問題の種類と使われ方

Myersの三角形問題は、3辺の長さをあらわす3つの整数を読み、不等辺三角形(scalene)、二等辺三角形(isosceles)、正三角形(equilateral)のどれなのかを判別して表示するプログラムのテストケースを書いてみよというものですが、三角形問題の発案者のWeinbergのものは辺だけでなく角も判別、すなわち、直角三角形(right)、鋭角三角形(acute)、鈍角三角形(obtuse)かも判別する問題になっています。
Gruenbergerが「いきな問題(dandy problem)」と評したRichard Hammingの"Computers and Society"(1972)に書かれた三角形問題は辺と角を判別するプログラムですが、同時期に書かれたTRW社のJohn Brownの論文"Practical Applications of Automated Software Tools"(1972)では辺の判別だけになっています。
まあ、どちらでなければいけないというものではなく、三角形問題を使って何を説明したいかによって、辺だけの判別にするか角も含めるかということでしょう。「Myersの三角形問題」という時は辺だけの判別ということになると思います。

三角形問題の使われ方は、外部仕様の例題として使われる場合と、プログラムの解析の題材として使われる場合の二つに大別できそうです。後者は、外部仕様そのものは大概の人が知っているので、いきなりプログラムの内部の話に入れるという便利さがあるからだと思います。前述のBrownの論文はこれにあたり、カバレッジ測定の題材にしています。一方、前者の外部仕様の例題として使っているのがHammingです。
Hammingは、(1)三角形の定義(3辺の関係)に基づく判別、(2)ピタゴラスの定理に基づく角の判別、という論理ブロックの流れを説明し、更に詳細なフローチャートへ展開するプロセスを説明しているのですが、この展開を説明する前にこの問題には「隠れた前提(hidden assumption)」があると書いています。すなわち、「三角形の二辺の和は他の一辺より長くなければいけない」という暗黙の前提です。そして、現実世界でも与えられた文章(仕様)は十分ではなく、見落としもあるということを、この三角形問題を例にして説明しています。Myersの三角形問題でも、このケースの見落としが多いのではなかったでしょうか。Gruenbergerが「いきな問題」と言ったのはこのような見落としがあることを気づかせるためのよい例題だったからでした。

Computers_and_Society

|

« 最初の話題は三角形問題 | Main | 三角形問題で必要なテストケース数 »