01
6 月
09

MECEであることの困難性

どうも、calcsです。

MECE(Mutually Exclusive and Collectively Exhaustive)ってご存知ですか? 要は集合を漏れや重複のなく、部分集合の集合に分割するってことなんですが。
コンサルティング会社のマッキンゼーが使い始めたとされるこの言葉。プログラマー的には非常に気になるワードな気がしたりしなかったり。

以前if文について書いたことがありましたが、ifとelseは常にMECEです。これらが両立することはありませんし、もれることもないです。

ではelsifはどうでしょうか。これは必ずしもMECEではないです。重複する条件を記述することは文法上可能です(そしてバグになる)。実行はされない処理系が多いですが。

switch文も同様で、default文を入れれば、とりあえず漏れはなくすことができます。しかし各caseが重複していないかはプログラマの頭に委ねられているんです。

例えば動物の特徴を入力して、哺乳綱、鳥綱、両生綱 、魚綱、蠕虫綱を判定するプログラムを書いたとしましょう。これらの項にまたがって存在する生物はいません。

昆虫ってどうするの?昆虫綱が実際にはありますが、ここでは設計上抜けていたわけですね。

学校で習ったことですが、哺乳類は胎生です。なのでそのようにプログラムしますが・・が。
カモノハシをどうするか?ということに気がつくのは、カモノハシという存在が出てきてからなんですね。

かつて鳥類は「毒」を持つことはないと思われていました。が、モリモズという鳥がニューギニアに生息していることが分かり、この常識は破壊されました。じゃあ毒があるから「鳥以外」とはいえないわけです。

結局のところ、MECEに分類することは指標によっては不可能ではないですが、非常に困難な場合が多いわけで、これは自然の摂理なんです。なぜ自然の摂理かというと、分類が先にできるということは稀だからですね。

そしてソフトウェアも、現実の事象を処理するものである以上(たとえゲームのような仮想であっても、『プログラマの脳』を処理しているといえます)、常にMECEであることは困難なんです。

つまり何が言いたいかっていうと、ソフトウェアにバグがあるのは仕方ないんだよ!! ええー・・。

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加




  1. No Comments

コメントください