2008年04月30日

スパゲッティコードと取っ組み合う

GWに突入した今日この頃、皆様いかがお過ごしでしょうか?
私は連休直前に開発中のソフトのリリースがあったため、直前までバグフィックスの日々でしたが、ようやく一息ついています。
以下はそんな仕事の愚痴というか何というか。
 
 
 
このソフト、基盤となるライブラリのコードがちゃぶ台をひっくり返したくなるような内容で、
Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, double>>>>>
みたいなグローバル変数が使われていたり、
forとifの混ざった10段以上にネストするようなコードがあちこちに存在したり、
いまどきGOTO文を使っていたり、
そもそもオブジェクトの設計が完全なオブジェクト指向になっておらず、
MVCモデルで言うところのコントロール部分とモデル部分とが渾然一体となっていたり、
一つにまとめるべき処理を複数の関数が別々に行っていたりする、
実に突っ込みどころ満載なコードでした。(今も多少マシになった程度です)


このソフトには去年の夏過ぎから散々ちゃぶ台を引っくり返してはきてるんですが、今回ようやく本丸に手が届き、自分の担当部分の作成の傍ら、基盤ライブラリの大幅なリファクタリングを行うことに。
半年くらい前までは「これいじるのは勘弁して下さいorz」って感じだったんですが、
ここ半年で自分のスキルアップとコード理解が進んだことで、かなりいじれるようになった事も大きいです。


ここ二月ほどのリファクタリングの成果として、とりあえずこんな感じになりました。
・コード量が千行単位で圧縮
・動作速度が100%以上高速化
・分岐とループの構造が簡潔に
・オブジェクト分割でオブジェクトと機能の関係が分かりやすく
・データ構造が以前に較べたら明確に


まあ基盤となる部分に大規模に手をつけた分、いくつか大きなバグも出たんですけどね。
個人的には、こんなアレげなコードが今まで放っておかれていたことに対して、異議を唱えたいところです。
コードの保守性とか可読性とか、あるいはオブジェクトの独立性という点で問題ありまくりだし。
しかし今回手をつけた部分は表面的な部分にとどまっていて、正直まだまだ全然いけてないコードなので、次のリリースに向けてまた大幅に手を加えないとなあ。

とりあえず疲れたので2〜3日ゆっくり休みます。
posted by 黒影 at 23:13| Comment(2) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
お疲れ様です。

私も以前、他人の作ったプログラムをはじめからから書き直したことがあります。

PC-8001用のプログラムでしたから、いったい何年前のことやら...

goto文で無意味に飛びまくっていたものを、一続きのプログラムに直したり、for-next文等を用いてすっきりさせたら、素晴らしく早くなりました。

フローとチャートを作って書けば、そうなることはありえないと言い切れるほどのスパゲティーでした。

ライブラリー等でしたら、後からの拡張でスパゲティーになることはある意味仕方が無いかもしれませんが、当方のプログラムは、それほどの規模ではありませんでしたから、どこをどういじれば、あれだけのスパゲティーを書けるのか不思議なくらいでした。

当方、ポケコンでBASICをかじった程度の知識で書いたのですが、元々のプログラムを書いた方のレベルは如何程なものやら。
Posted by 多分役立たず(HNです) at 2008年05月09日 16:09
>多分役立たずさん
コーディングって論理的思考能力がもろに反映されますよね。
頭の中がごちゃごちゃだとコードもそのまんまになるというか。
Posted by 黒影 at 2008年05月25日 13:30
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/95235732
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック