分解することで本質に迫る
高校の生物の時間に習った植物の知識を思い出してみよう。
植物の茎を切って断面を観察すると、水や栄養を細胞に送る「維管束組織」があり、茎の中心には「髄」があり、髄や維管束組織を保護するために、「表皮(樹皮)」がある。維管束には水や養分の導通と植物に機械的強度を与える2つの役割がある。茎の断面を顕微鏡で観察すると細胞があり、役割に応じた構造を持っている。さらに細胞には「核」があり、核を分解すると「DNA」にたどり着く。
最近は、このDNAの解明が生物科学の中心課題になっている。このように、植物学では植物を分解することで本質に迫ってきた。今回は徹底的にサービスを分解するが、その前にソフトウェアの分割を考えてみよう。
モジュール分割でソフトウェアの複雑さに対処する
ソフトウェア開発が困難なのは、ソフトウェアの複雑さが本質的なものだからである。第1回で述べたように、ソフトウェア開発者はクライアントの業務を知らない。クライアントはITを知らない。最近のクライアントは自社の業務の本質を理解できてないことが多い。このような環境でクライアントから要求された不完全な要求仕様に基づいて、業務を知らないソフトウェア開発者がシステムを作っていく。ここに使えないソフトウェアや不完全なソフトウェアが生まれる。
また、大規模なソフトウェア開発は膨大な数の技術者がチームを組んで開発に当たることになる。多くの開発者間のコミュニケーションは必然的に複雑なものになる。さらに、ソフトウェアは非常に柔軟性があり、開発者はどんな部品も自分で作ることができ、これがソフトウェアの複雑さを助長している。
この複雑さを軽減するために、ソフトウェアのモジュール分割が考えられた。全体システムを徐々に小さな部分に分割していき、その個々を独立して設計していく。開発者が認知できるレベルにまで分割すると、ソフトウェアの複雑さはそれなりに解消される。この分割には「機能分割」と「オブジェクト指向分割」があるのはご存知の通りである(※1)。
筆者は同じようにサービスを何らかの方法で分解してやると、サービス開発者やサービス提供者がサービスの本質を理解しやすくなると推測して「サービスの分解」に取り組んでいる。