いかにしてソフトウェアは壊れていくか

コラム

まず、バグ修正や仕様変更が起きます。
時間がなくて、その場しのぎで非効率な修正が施されます。
ここでプログラムの可読性が損なわれます。

保守フェーズに入り、設計者やコード作成者がいなくなります。
後任が全体を把握しきれないまま、コードの追加・修正を行います。
似たような処理が点在するようになり、しかもスーパークラスを継承してなかったりします。

製品のバージョンアップに伴い、利用者のデータアクセス範囲が広がる機能が追加されます。
今まで関係性のなかったクラスが、関係を持たざるを得なくなってしまいます。
徐々にデータやメソッドのアクセス権が緩くなり、あらゆるスコープが拡大、保守性が著しく低下していきます。

そのうち、とある機能追加の実装において、致命的な仕様ミスが見つかります。
当初の設計思想に限界が生じ、クラスをまたがる大胆なバイパス工事が行われます。
もはや修正するたびにプログラム全体の品質が危険にさらされ、正常に動いていた処理すら動かなくなります。

それでもなんとかリリースにこじつけ、ようやく安定稼動するようになります。
しかし、わずか数年でプラットフォームが陳腐化し、使い物にならなくなります。

コメント