DATE : 2007/08/21 (Tue)
「ソフトウェア開発 55の真実と10のウソ」を読みました。ソフトウェア開発では基本となっているにもかかわらず忘れ去られていたり、見逃してしまいがちな真実やウソを数ページずつにまとめた本です。うまくまとめられているので、気軽に読み進めることができました。
本書を通して、ソフトウェア開発における人・保守の重要さ、品質・生産性・見積もりなどの定量化の難しさが繰り返し述べられています。
一部には有名なもの(例えば、「真実3:遅れているプロジェクトに人を追加すると、もっと遅れる。」)もありましたが知らなかった真実がほとんどだったので、非常に参考になりました。中でも、驚くと同時に腑に落ちた真実は、「真実21:対象となる問題の複雑度が25%増加するたびに、ソフトウエアによる解法の複雑度は、100%上昇する。これは、改善しなければならない数字ではなく(複雑性を下げるのは非常に望ましいが)、こうなるのが普通だ。」でした。ソフトウェアを開発していると、つい機能を追加したくなったり、今後のことも考えて汎用性を持たせた設計をしたくなったりします。前者はともかく、後者は保守のことも考えれば必要な方針とは思います。しかし、機能を付ければつけるほど、また汎用性のある設計を行おうとすれば行うほど、モジュールやインタフェースの数は多くなり、見通しがしだいと悪くなっていきます。特に、ちょっとした思い付きで汎用性を持たせた設計にしてしまうと、あとで設計を見直したときに見通しが悪すぎて修正作業や、使い方を理解するのに余計な時間を費やすということもありました。このような経験があったので、真実21はとても納得のいくものでした。汎用性に関しては、「真実17:大規模な再利用は、類似システム間ではうまくいく可能性が高い。応用分野の類似性に依存するため、大規模流用の適用範囲は狭くなる。」も参考になります。結局のところ、しっかりとした方針を定めた上でソフトウェアを構築しないと、あっという間に混沌とした状態になってしまうということなのでしょうね。
(;^ω^)反省です……。
本書には、真実やウソに対する反論も同時に挙げられています。前に挙げた「真実3:遅れているプロジェクトに人を追加すると、もっと遅れる。」に対しては、特定の条件が成り立てば真実3は無視できるという反論が挙げられています。
最終的には、本書に挙げられた真実を基本としながらも、自分でしっかり状況を見定めていくことが重要なのだと感じました。
(;^ω^)こういう面からも、ソフトウェア開発は実に複雑ですね。