メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.388) XP11 シンプル設計  2003/09/15


/*========================================================*/
    <<<あゆしゃの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

ブラウザの閉じるボタンで閉じてください。