|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第388回 XP11 シンプル設計 発行 2003年9月15日(月曜日) 発行数 約3200 {magclick} {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンはまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・このメールマガジンは、横60文字で作成しています。 また、インデントはすべて半角スペース4つで構成しています。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、まぐまぐさんのホームページでお願いします。 ・まぐまぐさんのバックナンバー(下欄参照)を活用して下さい。 ・ここは私の復習の場です。内容は約1ヶ月内外に私が勉強した 内容になっています。最新の技術があれば、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 いよいよ第11回、土日に配信したおかげで、遅れを取り戻し ました。 ・・・こういう進捗管理がいけないのですね。。。 {magclick} /*========================================================*/ 今回のお題 << XP11 シンプル設計 >> /*========================================================*/ 12回分の連載の内容です。 1 XPって何? 2 ペアプログラミング 3 テスト駆動開発 4 短期リリース 5 ユーザテスト 6 全員同席 7 最適ペース 8 コード共同所有 9 常時結合 10 リファクタリング 11 シンプル設計 12 計画ゲーム さて、今回は11番ですね。 /*========================================================*/ 11 シンプル設計 /*========================================================*/ XPは、失敗したプロジェクトを反省して作られたルールブック であるということ毎回書いています。 シンプルな設計を心がけなさい、というルールもその法則による ものです。 失敗したプロジェクトには、複雑なシステム設計がなされている ものが多かったのです。 システムが複雑であることが悪い結果を引きおこすという のです。 しかし、立派なシステムを作り上げようとすると、複雑になる のは当たり前ではないですか? /*========================================================*/ 私が実際に作った、とあるソフトの1機能について、例題として 取り上げてみましょう。 その機能とは、プログラム言語の変換処理です。 変換前の言語を言語A、変換後の言語を言語Bとしましょう。 結果から先に言えば、関数の数が400程度、ステップ数が 約30000ステップ(コメントなども含む)というものになり ました。 言語Aも言語Bも機械語で、処理としてはそれほど複雑ではありま せん。 実際、30000というのは処理が膨らみすぎです。 お互いのアセンブラ言語の命令の数は、言語Aが約30種類、 言語Bが約150種類ですので、たった30パターンの処理を 作ればよいだけです。 うまくまとめれば、5000ステップも必要ないかもしれま せん。 /*========================================================*/ この機能は私1人で担当したので、自由にやらせていただき ました。 変換の処理の流れを5つに階層化して、各階層に独立性を持た せました。 それによって、ややプログラムは膨らみましたが、ある階層の 修正によってほかの階層に迷惑がかからないようにしました。 さらに、困ったことに言語Bが動作する媒体が開発環境として 存在しなかったため、本当に困った私は、この機能にありとあら ゆるデバッグ機能をつけていきました。 さらにプログラムは膨らみましたが、このデバッグ機能も 階層化のルールに従って配置したため、すっきりと動作して くれました。 しかし、デバッグするにも限界があり、1ヶ月待っても2ヶ月 まっても開発環境が整わなかったため、私は、言語Bが動作する 媒体のシミュレート機能をつけました。 シミュレート機能は変換の5階層のさらに上位の階層として、 シミュレート機能が変換処理に悪影響を及ぼさないように しました。 /*========================================================*/ 自慢ですが私は(受験勉強せずに入れる高校を選んだ)高卒です ので、難しいことは良くわかりません。 2つ以上のことを同時には考えられません。 よって、各階層に機能を分けて、さらに同じ階層にある同列の 関数も、お互いに独立性を持たせて、なるべく干渉をしないように しました。 それによって、目の前の問題に100%考えを投入できる システム設計になっています。 さらに、実はこの機能はDLLになっているのですが、DLLでは グローバル変数やスタティック変数が問題になるので、これらの 使用を禁止して、余計な問題を排除しました。 もう、あゆしゃ100%の世界が広がっています。 /*========================================================*/ XPがシンプル設計を推奨するのは、複雑な設計が、仕様変更に 弱い原因であるとしているためです。 従来の開発では、仕様変更はあってはならない自然災害であると 考えられていました。 仕様変更をするために、すでに作った機能に無理矢理に新しい 機能をつけたりします。 そのうち、外科手術を繰り返し続けたワポルのように、もう、 パンパンになってしまいます。 XPでは仕様変更を、あって当然の自然現象と考えます。 だからXPでは、あらかじめ変更を考えたシステムを作るな、 というのです。 変更を考慮したシステムも考慮していないシステムも、同じ ことです。 大事なことは、変更しても問題がおきないこと。 つまり、純粋にシンプルな設計にしておくということです。 私の言語変換ソフトも、いくつかの仕様変更や、私自身の 都合によってデバッグ機能やシミュレート機能などをいろいろと 付け足しましたが、階層化によって、私自身に大きな混乱は ありませんでした。 シンプルな設計はとてもいいことです。 /*========================================================*/ XPには、ヤグニ(YAGNI)というキーワードがあります。 You are not going to need it. この頭文字。be going toが使われているので未来系ですかね。 必要「になる」ことはやらない、つまり必要「なこと」をやる、 という意味ですが、 少々変です。 必要なものだけを設計するということと、設計をシンプルにする ことは、まったく違うことです。 大切なのは、設計そのものをシンプルにすることです。 レベルの高くない高校を平凡に卒業して、センター試験が面倒 だったので受験のない専門学校に進んだこのあゆしゃでも、分かる ぐらいにしてください。 /*========================================================*/ さいごに /*========================================================*/ 参考文献 よくわかる最新XPの基本と仕組み 長瀬嘉秀 監修 畑田成広 樋口博昭 著 秀和システム ISBN4-7980-9374-3 1900円(税別)(ただし支給品) {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は9月16日(火曜日)に、第389回を送ります。 お題は「XP12 計画ゲーム」 ついに12番! しかし今週は仕事が詰まっているぞ! どうする!? お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されます。 このメールマガジンの内容に文面の引用はありません。 めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容は、転用、流用、宣伝、リンク、 カモメ団のようなシステム設計 なんて大歓迎です。 {magclick} /*========================================================*/ /*========================================================*/ 発行者 あゆしゃ まぐまぐアイディー 0000020674 まぐまぐバックナンバー http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674 あゆしゃの世界 http://ayusya.hp.infoseek.co.jp/ 登録と解除 http://www.mag2.com/m/0000020674.htm ご意見・ご感想・ご質問メール mailto:ayusya@flamenco.plala.or.jp めーらっくす http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F |