前回は「複数の開発チームでプロジェクトを構成」と題して、多くの栽培プロジェクトは、内部に複数の開発チームを持っていて、この開発チームの構成方法が、栽培プロジェクト全体の開発生産性に大きな影響を与える点について共有させていただきました。
これが「サブシステム分割」と言われるもので、今回はその詳細について解説を進めていきます。
サブシステムとは、「特定の機能が特定のエンティティを更新する、単独で運用可能なシステム」と定義されています。
エンティティとは意味のあるデータの集合体で、売上明細のエンティティなら、売上店、売上金額、売上日、商品コード、決済方法等が内訳のデータ項目になります。
通常、これらのエンティティが複数集まって、データベースは出来ています。
そして大事なことに、このサブシステムは、単独で運用が可能です。
運用がサブシステム単独でできれば、開発段階で単独でのテストができるようになります。
逆に、ある機能に付属した小型の機能は、単独では運用できません。
それではサブシステムとはいえないのです。
サブシステムの作成に向けて、機能分割を容易にするCRUD図というものがあります。
CRUD図という呼び名は、機能ごとにエンティティを作成(Create)、参照(Refer)、更新(Update)、削除(Delete)する、という4つの頭文字を合成したものです。
特定の機能が特定のデータを「CRUD」する状態を示しています。
CRUDの作成では、以下の加工を繰り返し行います。
CRUD図の縦軸の機能と横軸のエンティティの並びを入れ替えることで、作成(C)が図の対角線に並ぶようにするのがポイントです。
多くの場合、機能の働く手順に合わせてエンティティの順番を入れ替えています。
そうして、作成(C)が対角線に並んだなら、縦軸の機能の並びから強い機能の結合がある塊を抜き出します。
これがサブシステムになります。
サブシステム間のエンティティの流れを矢印で表します。
機能をくくってサブシステムを抽出するときの機能の切り方は角に丸みのある四角が機能を表し、矢印がエンティティの流れを注視します。
一方が欠けた四角は、データの蓄積された状態を意味することがわかると思います。
これは一般にはデータベースと呼ばれるものです。
サブシステム分割を行う際には、他サブシステムのエンティティを直接参照するのではなく、データベースを介して行うのがよいと言われています。
これをデータ・カップリングと呼びます。
サブシステムの独立性を高めるには、このような分析を行ってサブシステム相互のエンティティの参照を少なくすれば、このサブシステムの濁率性は高まり、他のサブシステムの開発から影響を受けずに、高い開発生産性で開発を進めることができるはずです。
これがサブシステム分割の効果です。
サブシステムの開発生産性を決定する場合、独立性によって数値は大幅に異なります。
独立したサブシステムなら、そのサブシステムの開発規模(SLOC)に見合った高い開発生産性を享受できるでしょう。
栽培プロジェクトには複数のサブシステムがあるので、それを単独の栽培プロジェクトとして開発するのに比較すると多少は低下しますが、それでも高い開発生産性になります。
しかし、サブシステムが他のサブシステムに従属している場合、その開発生産性は従属したサブシステムとの合計の開発規模(SLOC)から計算されます。
単独ほどの高い開発生産性は望めません。
サブシステムの開発生産性は、単独の開発と、従属を含む合計の開発規模(SLOC)との間にあり、どちらの開発生産性に近づくかはサブシステム分割の独立性にかかっています。