サイクリングに関する内容はHiloker.netに移動しました。(古いものは、Hiroのサイクリング&写真記録庫)
よろしければどうぞ。
ソフトウェア工学について その4(1) ルーチンはコンパクトにする [ソフトウェア工学的な話]
すべての機能が同じルーチンに書かれているなど、巨大なルーチンを作成してしまうとテストは難しくなるということについて考えてみたい。
プログラムには条件分岐がある。この条件分岐が出た場合普通にテストケースは増大する。それはホワイトボックステストの場合は、条件を網羅するためのテストケースが増大すること。ブラックボックステストとしても、おおむね条件分岐が多ければ多いほど使用は複雑になるためにテストケースは多くなってしまうからである。
プログラムが長くなればなるほど一定の割合で条件分岐が出てくる。つまり長いルーチンはその長さに比例して1つのプログラムにたくさんの条件分岐が出てくるということである。
そのため、条件を網羅するためのテストケースが指数関数的に増大するからである。
たとえば、5行につき1つIF文が出てくるとすると、10行では2つ、20行では、4つ、100行では20にもなる。
さて、これらのIF文をすべて条件網羅によるテストを行わないとした場合どうなるだろうか。
10行の場合は2の2乗で4ケース
20行の場合は、2の4乗で16ケース
100行の場合は2の20乗・・・つまり100万ケース程度となる。
実際にはIF以外にもテストケースを増やす命令は、Switch~Case、論理式や3項演算子、ループなど多数存在する。
こういったことからも、1つの大きなルーチンを作ることが飛躍的にテストを面倒にすることはわかるのではないだろうか。
このようにルーチンが巨大になることによるテストケースの増加についての有効な対応策としては、月並みかもしれないがある程度の大きさで分割し、サブルーチン化してしまうことが重要である。
たとえばさっきの100行のプログラムを20行のサブルーチン5つにすればテストケースはどうなるだろうか。
16x5=80、こうしてしまえばおのずとコントロールは容易になる。
20行のサブルーチンに分割することができてしまえば、それぞれのサブルーチンをテストし、1つずつ確認すればいいので、テストは容易になる。
サブルーチンを適切な大きさにしておくのは、共通化を目的とすることだけでなく、ある一定のまとまり単位でルーチンの切り出しを行うことによってテストケースを効果的に減らす事ができるということがいえると思う。
最後に念のため、分割にあたっては、20行とかいった物理的な行数で分割するのではなく、ある程度の機能単位で分割しそれぞれにわかりやすいルーチン名を付けることは言うまでもない。
コメント 0