解決策を立案するためには、まず「何が問題」で「なぜ問題」なのかを明確にする必要があります。それを怠ると、見当違いな結果となってしまい、達成したい効果を得ることができません。問題を確実に掴んだうえで、症状に応じた解決策を立案します。
ここでは、ツリーマップから得られる「サイズが大きくて複雑な関数」の解決策を立案します。
下図は、「派生開発」で複数機種に対応したことで、問題が生じた関数の例です。
![「リファクタリング」の進め方のポイント②「派生開発」で肥大化・複雑化したケースは、判断と実行を分離し変更を局所化する|「派生開発」で機種が増えるにつれ、関数内部の機種による色分けは、徐々に複雑にまだらになっていく。このような関数は、複雑機種を共通化したのではなく、単に一本化・統合化しているだけといえる](img/kaizen/2few.png)
上図のように、対応する機種が増えることによって作りこまれた「肥大化」と「複雑化」は、保守性を低下させます。例えばA機種のみに対する変更があった場合、このような「肥大化」した関数は、変更箇所を見つけることが難しく、また、変更箇所も分散しています。そして「複雑化」したことで、深いネストと入り組んだ制御構造を持つ関数は、誤った対応を誘発します。
このようなケースでは、関数を分割することで、品質を改善することが可能です。まずは、機種ごとに処理を実行する部分を特定し、それを関数として切り出します。そして、それらを呼び出す関数を作ります。すなわち、機種の「判断」と、機種ごとの「実行」を分離します。こうすることで、特定機種への変更を局所化し、変更しやすいコードに改善することができます。
![「リファクタリング」の進め方のポイント②「派生開発」で肥大化・複雑化したケースは、判断と実行を分離し変更を局所化する|「派生開発」でA機種のみに変更が発生した場合、改善前では関数全体にわたって、A機種部分を探さなくてはならない。それに比べ、改善後では変更部分を探すのが簡単で、なおかつ変更が局所化される](img/kaizen/2source.png)