メトリクスとは、対象のものを様々な視点から定量的に計測した情報のことで、MATLAB / Simulinkモデルからも得ることができます。メトリクスにはMATLAB / Simulinkモデルの様々な特性が表れるため、これを評価することでモデルに問題があるかどうかを検討することができます。
ここでは、メトリクスを用いて品質を改善する方法のイメージをつかんでいただくために、二つの例を示しながら解説していきます。
この例では、サブシステムに含まれるブロック数を調べることで、規模の適切さを評価します。
サブシステムの規模が大きすぎる場合、そこには多くの処理が詰め込まれており、理解や修正がしにくくなっていることが考えられます。
図1のMATLAB / Simulinkモデルの各サブシステムに対し、ブロック数を計測した結果を示したのが図2です。
このデータを見ると、Cというサブシステムのブロック数が他と比べて多い、つまり、規模が大きく、多くの処理を行っている可能性があることが分かります。
そこで、Cの内部処理がどうなっているか確認してみます(図3)。このモデルを解析すると、ある数式を計算する"計算処理A"、別の数式を計算する"計算処理B"、条件によってそれらの計算結果のどちらを採用するかを判定する"判定処理"という三つの処理を行っていることが分かりました。三つの処理が詰め込まれた結果、ブロック数が多くなっていたわけです。
サブシステムCの問題点が分かったので、それを改善してみましょう。この例では複数の処理がひとつのサブシステムに詰め込まれていることが問題なので、これらの処理を別のサブシステムとして分離します(図4)。
この改善によって各サブシステムの規模が適切になりました。そして、それぞれが単一の処理だけを行うようになり(凝集度が向上)、そのサブシステムで何の処理をしているかが明確になりました。
この例では、サブシステムの経路複雑度からそのサブシステムの処理の複雑さを評価します。経路複雑度とはSwitchブロックやIfブロックの数、Multiport Switchブロックの入力数といった分岐の数を元に計測されるメトリクスで、分岐が多くなると処理が実行されるパスが多くなることから、処理の複雑さを測る指標として用いられます。
サブシステムの処理が複雑だと、その処理の内容が理解できなかったり、修正するにもどこから手をつけてよいか分からなかったりと、そのモデルを保守することがとても難しくなります。
ここで、あるMATLAB / Simulinkモデルの各サブシステムの経路複雑度を計測した結果を見てみましょう(図5)。
このデータを見るとJというサブシステムの経路複雑度が高い値を示していることが分かります。
そこで、Jの内部処理を見てみます(図6)。
Multiport SwitchブロックやSwitchブロックが多く、どのような条件でどのような判定を行っているか分かりにくくなっています。
このように分岐が多く複雑な処理を改善するには、ある分岐のまとまりごとにサブシステムに分離することが効果的です。
Jの場合、Multiport Switchブロックへの入力となっている部分をそれぞれサブシステムにしてみます。その結果、図7のようなモデルとなり、このサブシステムの処理の複雑さを軽減することができました。
このようにサブシステムの処理の複雑さを下げると、分かりやすさが向上するだけでなく、動作の検証がしやすくなるというメリットがあります。
二つの例で示したように、メトリクスを用いることでMATLAB / Simulinkモデルの問題点を発見することが容易になり、改善を効率的に行えるようになります。