View on GitHub

Today I Learned

Software Engineering Blog

4. Improve Your Architecture with the Modularity Maturity Index

モジュール性成熟度指数 (Modularity Maturity Index: MMI)を用いて、ソフトウェアシステムの技術的負債の量を計測。

解決すべき技術的負債を見つけ、アーキテクチャを持続可能なものにし、メンテナンスのコストを削減する。

4.1 Technical Debt

2つのタイプの技術的負債。実装上の負債と設計とアーキテクチャの負債。

実装上の負債は、いわゆる不吉な匂いのコード。自動化された方法で検出可能

設計とアーキテクチャの負債は、クラスやパッケージ、それらの依存関係に一貫性がなく複雑でアーキテクチャとマッチしない。広範なアーキテクチャのレビューが必要。

4.2 Origination of Technical Debt

ソフトウェア開発は絶え間のない学習プロセスであり、ソリューションが最初から正解であることは稀である。

システムを拡張していくと必然的に技術的負債が発生する。メンテナンス/変更とアーキテクチャ改善を繰り返し続けなければならない。

アーキテクチャ侵食で負債が大きくなったら、リファクタリングによって保守コストが低い状態に戻すか、別のソフトウェアへのリプレイスが必要。

4.3 Assessment with the MMI

モジュール性成熟度指数 (Modularity Maturity Index: MMI)は、モジュール性、階層性、パターン一貫性の3原則に基づいたメトリクスによって技術的負債の状態を評価する。

4.4 Modularity

高凝縮疎結合、プログラム要素の責務、大規模クラス/メソッド/パッケージの評価

4.5 Hierarchy

クラス循環、パッケージ循環、モジュール循環、レイヤードアーキテクチャ違反の評価

4.6 Pattern Consistency

パターンが損zないし、それがソースコードの中で見つけやすく、一貫して使用されているかの評価

4.7 Calculating the MMI

3つの原則に基づいた指標を定義。0-10の範囲で達成割合を決めてどこに当てはまるかを評価。

4.8 Architecture Review to Determine the MMI

技術的負債を特定するためのアーキテクチャ分析の流れ

  1. システムのソースコードを解析ツールで解析して実アーキテクチャを記録
  2. 解析ツールで目標アーキテクチャと実アーキテクチャを比較
  3. 可視化された問題に対しての解決策を見つける
  4. 技術的負債とリファクタリングの可能性をリストアップ
  5. 解析ツールのいろんなメトリクスを調べてより多くの技術的負債を見つける