2010年1月14日木曜日

systems thinking の本

システム・シンキング入門 (日経文庫)』を読んだ。

====
従来のシステム開発において、何らかの原因(時間が無いとか)でストレスが増えるとテスト実行が減り、テスト実行の減少がさらにストレスを増やし(バグ対応とか)、それが悪循環を引き起こしてどんどん状況が悪化するというのがよくある。

これを図示したものが、Kent BeckのTDD本 から引用した「The "no time for testing" death spiral」という図。(図の矢印線は因果関係を表していて、線上に置かれた丸は原因側のプラスが結果側のマイナスとして作用する事を示している。)

この図は、システム・シンキングで言うところの「因果ループ図」で(Beck の本では "influence diagram" と書かれていたが)、マイナス方向に作用する丸印が偶数個ある事から、「拡張フィードバック・ループ」という事になる。このタイプのループは変化が一方向に進んでいくタイプで、調子が良い時は好循環になり右肩上がりで状況がよくなるが、逆に悪いことが起こるとどんどん悪循環にはまるというもの。

このタイプと別に「バランス・フィードバック・ループ」というものもあり、これはマイナスの因果関係が奇数個のもので、系の中のギャップを縮めて安定させる効果があるという。

テスト駆動開発を導入すると、ストレス増加が必ずしもテスト実行の減少を引き起こさないし、逆に積極的にテストを増やすように対処する事で、以下のように Stress → RunTest の因果関係をプラスにしてバランス・フィードバック・ループに転換できるということになる。最初に TDD を読んだときは意識していなかったが、こうやってテスト駆動開発をシステム・シンキングの言葉で捉えなおす事もできて面白い。(まあ実際の開発現場では、ストレス増加の結果としてテストの「実行」は減らないとしても、テスト品質や網羅率が下がったりするから、上の図はちょっと理想化しすぎている感があるが。)

====
因果ループの他に、メンタルモデルというのも紹介されている。本書によれば、個々の出来事の層、出来事のパターンの層、パターン間の構造の層というシステムを構成する3層の更に下に、暗黙のうちに前提とされているメンタルモデルの層があるとされている。これも開発者なら(特にいろんな企業や業界のシステム開発を渡り歩いている)、ピンと来るものがあるんじゃないだろうか。

昔、Yourdon が著作『デスマーチ』で、デスマーチ属性は個々のプロジェクトじゃなくて組織の属性だという事を看破したけど、つまりそういうことなんだと思う。なんとなく組織の人間に共有されているシステム開発のイメージとか価値観だとか、そういった組織内部の人間には自覚しにくいメンタルモデルが、何度もデスマーチを繰り返すベースになっているという事もあるように見える。

====
短めの新書だけど、他にもシステム開発者にとって考えさせされる事があって面白い本。特に開発プロセスやプロジェクトの運営に興味がある開発者にお勧め。

0 件のコメント:

コメントを投稿