どうも、calcsです。
MECE(Mutually Exclusive and Collectively Exhaustive)ってご存知ですか? 要は集合を漏れや重複のなく、部分集合の集合に分割するってことなんですが。
コンサルティング会社のマッキンゼーが使い始めたとされるこの言葉。プログラマー的には非常に気になるワードな気がしたりしなかったり。
以前if文について書いたことがありましたが、ifとelseは常にMECEです。これらが両立することはありませんし、もれることもないです。
ではelsifはどうでしょうか。これは必ずしもMECEではないです。重複する条件を記述することは文法上可能です(そしてバグになる)。実行はされない処理系が多いですが。
switch文も同様で、default文を入れれば、とりあえず漏れはなくすことができます。しかし各caseが重複していないかはプログラマの頭に委ねられているんです。
例えば動物の特徴を入力して、哺乳綱、鳥綱、両生綱 、魚綱、蠕虫綱を判定するプログラムを書いたとしましょう。これらの項にまたがって存在する生物はいません。
昆虫ってどうするの?昆虫綱が実際にはありますが、ここでは設計上抜けていたわけですね。
学校で習ったことですが、哺乳類は胎生です。なのでそのようにプログラムしますが・・が。
カモノハシをどうするか?ということに気がつくのは、カモノハシという存在が出てきてからなんですね。
かつて鳥類は「毒」を持つことはないと思われていました。が、モリモズという鳥がニューギニアに生息していることが分かり、この常識は破壊されました。じゃあ毒があるから「鳥以外」とはいえないわけです。
結局のところ、MECEに分類することは指標によっては不可能ではないですが、非常に困難な場合が多いわけで、これは自然の摂理なんです。なぜ自然の摂理かというと、分類が先にできるということは稀だからですね。
そしてソフトウェアも、現実の事象を処理するものである以上(たとえゲームのような仮想であっても、『プログラマの脳』を処理しているといえます)、常にMECEであることは困難なんです。
つまり何が言いたいかっていうと、ソフトウェアにバグがあるのは仕方ないんだよ!! ええー・・。
01
6 月
09
コメントください