WEBマガジン

「ETロボコンにおけるソースコード品質とモデル品質の関係Part2」

2011.01.04 株式会社オージス総研  阿左美 勝・田邉 浩之

1. はじめに

 前回は、ETロボコン地区大会前に募集したソースコードの品質評価結果についての考察を紹介しました。今回は、地区大会後に募集したソースコード、つまり実際に地区大会で走行競技したソースコードの品質評価結果から「ソースコード品質の傾向」と「モデル品質とソースコード品質の相関関係」の考察を紹介していきます。

2. ETロボコンのソースコード品質傾向

 地区大会後の募集には全15チームから応募がありました。
 15件のプロジェクトそれぞれの地区とプログラム言語の内訳は以下のとおりです。

表 1 地区とプログラム言語の内訳(地区大会後募集分)
地区とプログラム言語の内訳(地区大会後募集分)

 評価したソースコードの規模は以下のとおりです。

 

表 2 ソースコードの規模(地区大会後募集)
ソースコードの規模(地区大会後募集)

 前回(地区大会前募集分)のデータと概ね同程度の水準となっています。
 次に、品質評価結果を紹介します。
 品質評価は、前回と同様にC/C++向けソースコード品質評価ツールAdquaを使用して行ないました。
 Adquaによる品質評価結果は以下のとおりです。

品質評価結果(地区大会後募集)
図 1 品質評価結果(地区大会後募集)

 この図は、Adquaで評価できる5つの品質特性ごとに良し悪しを偏差値で表しています。偏差値は、Adquaで過去に評価した100超の実開発プロジェクトの評価結果に基づいて算出したものです。
 この結果を見ると、ほとんどのプロジェクトが実開発プロジェクトの平均点(偏差値50)を上回る結果となっており、地区大会前募集分のデータと同じく、全体的に良好な品質といえます。
 以上から、規模と品質の傾向について、地区大会前後で大きな差異がないことがわかりました。
 各チームとも地区大会前募集の時点(大会本番の約2週間前)から大会本番までに、規模の増加を伴う変更が少ないことから、走行性能面のチューニングが主な変更内容であったと推測しています。そして、そのようなチューニングにより品質劣化が進んでいないことから、ソースコードの規模がコンパクトであることにより、ソフトウェア全体の構造や変更に伴う影響を見通すことが容易であったと考えられます。この点は、実開発プロジェクトと異なる点であり、ETロボコンのプロジェクトが実開発プロジェクトよりもソースコード品質が良好であったことの主因だと考えられます。
 ここまでで、ETロボコンプロジェクトと実開発プロジェクトのソースコード品質における違いと、その主な理由がソースコードの規模の違いにある点を指摘しました。
 ETロボコンプロジェクトと実開発プロジェクトでは、ソースコードの規模が小規模(1000~10000行)と中~大規模(50000~2000000行)で、大幅に異なりソースコード品質に差が現れました。
 それでは、ETロボコンのようなコンパクトな規模の範疇では、規模と品質に相関関係はあるでしょうか。相関係数を使って確認してみます。相関係数とは、2つの確率変数の相関を示す指標です。-1から1までの値をとり、1に近いほど正の相関関係(片方の変数の値が大きいほど、もう片方の変数の値も大きくなる関係)が強いことを表します。逆に-1に近いほど負の相関関係(片方の変数の値が大きいほど、もう片方の変数の値が小さくなる関係)を表します。0に近いときは、互いに相関関係がないことを表します。
 今回評価したプロジェクトについて分析したところ、評価結果と物理行数の相関係数は以下のようになりました。

表 3 ソースコードの物理行数と品質評価結果の相関係数
ソースコードの物理行数と品質評価結果の相関係数

 「保守性」、「移植性」、「再利用性」といった、いわゆる「開発者視点の品質」について、「物理行数」との相関係数が負数となっています。これは、「物理行数」が大きくなるほど「開発者視点の品質」が低くなる傾向があることを示しています。
 このことは、「開発者視点の品質」を劣化させずにソースコードの規模を拡大させることの難しさを示唆しています。

3. モデル品質とソースコード品質の相関関係

3.1. モデル品質とソースコード品質を比較するにあたって

 モデル品質とソースコード品質の関係を分析するには、それぞれの品質のどの側面を比較するかを決める必要があります。
 ソースコード品質は、先ほどから挙げているとおり5つの品質特性について評価しています。
 モデルについても同じように品質特性で評価できれば、ソースコード品質と容易に比較できるのですが、現状ではそのような方法論やツールはありません。よって、今回はETロボコンにおけるモデルの審査結果をモデル品質の評価結果として扱います。
 ETロボコンで審査する項目は公式サイトに公開されています。大きな分類を抜粋すると以下のようになります。

表 4 ETロボコンモデル審査基準の大分類
ETロボコンモデル審査基準の大分類

 この内、「モデルの書き方」、「追加課題」、「オリジナリティ」は、ソースコード品質との直接的な紐付けが難しいためソースコード品質との比較対象から外します。
 次に、残った「モデル内容」の「性能」については、ソースコード品質の「効率性」と比較できそうですが、ソースコードの「効率性」は静的解析でわかる側面(「無駄なコード記述がないか」等)しか評価していないため、両者の比較には無理があると判断しました。
 最後に残った「モデル内容」の「設計品質」は、「機能」「構造」「振る舞い」の正確性と妥当性を見ており、要素の「凝集度の高さ」と要素間の「結合度の低さ」が審査結果に大きな影響を与えることから、「保守性」に強く関係する審査項目と考えました。
 最終的に今回は、ソースコード品質評価の応募があった15件のプロジェクトについて、「モデルの設計品質」と「ソースコードの保守性」の相関関係を分析しました。

3.2. 設計品質が高いモデルは保守性が高いソースコードに結びつくか?

 モデルの設計品質とソースコードの保守性の相関関係は以下のとおりです。

モデルの設計品質とソースコードの保守性の相関関係
図 2 モデルの設計品質とソースコードの保守性の相関関係

 正の相関(相関係数0.36)ではありますが、強い相関関係ではないようです。
 この散布図を見ると、モデルの設計品質が低いのに、ソースコードの保守性が高くなっているプロジェクトがいくつかあります(図2上の赤丸で囲っているプロジェクト)。
 この要因として筆者は、「モデルの設計品質とソースコードの保守性の相関関係が弱いプロジェクトはモデルとソースコードの乖離度合いが大きい」という仮説を立て、仮説検証のためにモデルとソースコードの乖離度合いを評価しました。
 乖離度合いを評価するために「モデル要素の実装率」という指標を考案しました。この指標は、モデルで定義した要素(クラス)の内、ソースコードに実装されている要素の推定割合を示すもので、値が低いほど、モデルとソースコードが乖離していることになります。

「モデル要素の実装率」の例
図 3 「モデル要素の実装率」の例

 各プロジェクトの「モデル要素の実装率」は以下の通りです。

モデル要素の実装率
図 4 モデル要素の実装率

 この指標の値がどの程度であれば「乖離度合いが大きい」と見なすかは解釈が分かれるところだと思います。
 ただ、モデルとソースコードの追跡性を意識した開発をしていれば高い水準を無理なく達成できる指標であることと、ETロボコンがモデルを使った開発を学ぶ場であることを考えると、筆者は少なくとも70%程度は達成して欲しいと考えています。
 そこで、今回は70%未満を「乖離度合いが大きい」と判断することとしました。
 乖離度合いが大きいプロジェクトを除いた相関図は以下のとおりです。

モデルの設計品質とソースコードの保守性の相関関係(乖離が大きいプロジェクトを除く)
図 5 モデルの設計品質とソースコードの保守性の相関関係(乖離が大きいプロジェクトを除く)

 モデルとソースコードの乖離度合いが大きいプロジェクトを除いたことで、相関関係を弱める要因となっていた「モデルの設計品質が低くソースコードの保守性が高いプロジェクト」が除かれています。
 つまり、「モデルの設計品質とソースコードの保守性の相関が弱いプロジェクト」=「モデルとソースコードの乖離度合いが大きいプロジェクト」ということになり、仮説のとおりとなりました。
 また残ったプロジェクト(モデルとソースコードの乖離度合いが小さいプロジェクト)同士の相関は、強い正の相関関係(相関係数0.71)となりました。
 以上から、「モデルとソースコードの乖離度合いが小さい場合」という条件付きで、設計品質が高いモデルは保守性が高いソースコードに結びつくと言えそうです。
 ただ、今回の分析では、特にモデルとソースコードの乖離度合いが大きいプロジェクトを除いた後のデータ数が少ない(8件)ため、より多いデータ数で再度の分析が必要であると考えています。

4. まとめ

 ETロボコンにおけるソースコード品質とモデル品質の関係を2回に渡って紹介しました。

 まとめとして、本記事連載Part1とPart2を通じて得られた知見を挙げておきます。

  • 設計品質が高いモデルは保守性が高いソースコードに結びつく
     (但し、モデルとソースコードの乖離度合いが小さい場合に限る)
    → 品質の高い設計を目指すだけでなく、設計と実装の追跡性を意識した開発上の工夫も必要
  • ソースコードを評価することで、設計と実装の乖離を見つけることができる
    → 良い設計であれば、設計通りに実装を修正するだけで品質の向上が期待できる
  • 「開発者視点の品質」は、ソースコードの規模が小さいうちから劣化しやすい傾向がある
    → 早めに対応できるよう、開発の初期段階から定期的に品質を可視化することが大切

5. 最後に

 筆者が今回の記事作成を通じて最も驚いたことは、モデルとソースコードの乖離の大きさでした。
 ETロボコンが、モデルに基づく開発を学習する場であることから、乖離は極めて小さいことを期待していましたが、期待通りの結果ではありませんでした。
 筆者は、今後もモデルとソースコードの乖離に関する分析を続け、乖離が生じる理由や対応策について何らかのメディアを通じて発表する予定ですので、是非ご期待ください。

*本Webマガジンの内容は執筆者個人の見解に基づいており、株式会社オージス総研およびさくら情報システム株式会社、株式会社宇部情報システムのいずれの見解を示すものでもありません。

『WEBマガジン』に関しては下記よりお気軽にお問い合わせください。