年老いたシステムをとらえる3つの類別と3つの軸

 出来立てほやほやの時のシステムはバグだらけで危なっかしい。そして数か月でバグ収束曲線で近似されるように徐々に品質があがっていて安定して動き出す。まるで赤ちゃんから大人に成長する過程を見ているようだ。そして、普通システムってのは長年使われるものだ。そうなると、今度は年老いてくる。システムが年老いてくるということはどういうことなのか。もちろん、ハードの衰えは確実にある。しかし、より重要なことはソフトウェアの衰えだ。長年使われている間の追加開発によりシステムは「衰える」。
 最近、たくさんの衰えを見てきた。基本的に衰えたシステムは「わけがわからない」状態になる。モジュール構成がどうなっているのか、どんな機能があるのか、最近バグが多いけどどうしたらいいのか、弱ってきたんで性能をあげたいけどどうしたらよいのかなどなど。しかし、「わけがわからない」と言っていても永遠にわけがわからない。わけがわからないものでも何らかの観点で整理しなくてはならない。
 検討の結果、「衰えるモノの3つの類別」と「衰えの方向性の3つの軸」で整理できることがわかった。それを示そう。システムの衰えは類別されたものごとに3つの軸で衰えをとらえることができるのだ。

  • 3つの類別:これはシステムの分割方式である。
    • 論理的と物理的: 概念的なものと実装や作業を構成する者自身
    • システムの構成物と成果物: 実装や作業を構成する物自身と、それらを作るために作った文書群
    • 物そのものとと物の関係: 文書・実装・作業など自身とそれらの関係
  • 3つの軸:
    • 「複雑さ」: システムは、その実装や成果物や作業の複雑さが増し続ける
    • 「不整合さ」: システムは、その実装や成果物や作業の不整合さが増し続ける
    • 暗黙知化」: システムは、その実装や成果物や作業が暗黙知の元に成立するようになり続ける

こう書いてしまうと当たり前に思えると思うが、「この3つの類別と3つの軸」が整理の強力なフレームワークになる。これは実際に衰えたシステムのお守りをしている人なら納得いただけるのではないであろうか。
 この強力さはいずれ学会で発表する予定だからよろしくお願いします。

Software Evolution

Software Evolution

Software Reengineering (Ieee Computer Society Press Tutorial)

Software Reengineering (Ieee Computer Society Press Tutorial)

Object-Oriented Reengineering Patterns (The Morgan Kaufmann Series in Software Engineering and Programming)

Object-Oriented Reengineering Patterns (The Morgan Kaufmann Series in Software Engineering and Programming)

構造化分析とシステム仕様<新装版>

構造化分析とシステム仕様<新装版>

これらの本は参考になりますです。

参考情報として"Laws of Software Evolution"を再掲しよう。
 システムは進化する。前言っていたように、Lehman先生ソフトウェア進化の法則(元は1970年あたりに体系化された法則)を抜粋しておこう。

Lehman先生のE-Typeソフトウェア進化に関する肝に銘じとけの8つの法則を(日本語は解釈が混じってます)
1. Continuing Change

    • An E-type program that is used must be continually adapted else it becomes progressively less satisfactory.
    • 仕様が確定できないプラグラム(E-Type:環境依存のE?)は、常に環境に合わせて変化を続けなければ満足性が下がる一方なんだよ。

2. Increasing Complexity

    • As a program is evolved its complexity increases unless work is done to maintain or reduce it.
    • さっきも言ったけど、プログラムは変化するんだから、何か手を打たないと複雑性は増すがり。そうしたい?

3. Self Regulation

    • The program evolution process is self regulating with close to normal distribution of measures of product and process attributes.
    • ソフトウェアが進化をする過程は、普通のプログラム開発と同じぐらいきっちりと決めてせなだめ。特にビジネスからの要求変更管理には気をつけたほうがいい。

4. Conservation of Organisational Stability

    • The average effective global activity rate on an evolving system is invariant over the product life time.
    • システムの試用期間にかかわらず、ソフトウェアの進化にかける実施作業の比率は一手に確保しておけ

5. Conservation of Familiarity

    • During the active life of an evolving program, the content of successive releases is statistically invariant.
    • ユーザが真に実現したかったシステムは結局作って反応を見て継続的にリリースしていくアプローチしかない

6. Continuing Growth

    • Functional content of a program must be continually ncreased to maintain user satisfaction over its lifetime.
    • ユーザの満足が駆動減となってシステムの機能は変更を要求されプログラムはずーっと変更され続けなければならない。

7. Declining Quality

    • E-type programs will be perceived as of declining quality unless rigorously maintained and adapted to a changing operational environment.
    • E-Typeのシステムはどう進化するのか、環境によってまったく読めない。しかしそれに対してちゃんとプログラムを進化させ、保守*1をきっちりやらないと、品質は目に見えて下がっていく

8. Feedback System

    • E-type Programming Processes constitute Multi-loop, Multi-level Feedback systems and must be treated as such to be successfully modified or improved
    • E-typeシステムの進化のプロセスは、複雑なサイクリックな開発スタイル、内容に応じて様々なレベルでの変更の混在、そして五月雨式かつ複数のステークホルダからのフィードバックなどのおかげで大変すぎる。

E-Typeつまり、問題すらはっきりしないシステムが多くなってきた*2ことで、「ソフトウェア進化」の世界は注目をあびつつあるのだ。SaaSもひとつはその流れのソリューションだと思うのだけどね。

*1:ここでいう保守は、いわゆる日本語で言う「維持メンテ」と呼ばれるものではなく、是正、適応、完全化、予防のための保守を指す:Ref ISO/IEC 14764

*2:S-Typeは問題がはっきりして、仕様もはっきりしているが、最適なある解決を設計することが困難であるシステム「将棋プログラムとか」、もう一個は、問題も仕様も解決のアルゴリズムも確定しているプログラム「今日の曜日を計算するプログラムとか」