複雑度の測定は、開発とテストのための見積もりや、品質向上と問題防止のためにリファクタリングが必要なところの判断に使うことができる。QA&Test 2014カンファレンスで、IntelのShashi Katiyar氏がソフトウェア品質改善のための複雑度メトリクスの効果的な利用についてプレゼンテーションを行った。
複雑度とは、ソフトウェアのさまざまな要素のインタラクションを測定したものだ。Shashi氏によると、ソフトウェア複雑度はソフトウェアの品質とコストの直接的な指標だ。コードの複雑度が高ければ、そのコードの品質は低くなり、それを管理するコストは高くなる。
Shashi氏は、ソフトウェア製品のコードが複雑になると、組織は次のような問題に直面することになると話した。
- 欠陥のリスクが高まる
- 新しい機能を追加するのが困難になる
- コードを理解/保守するのが困難になる
- 検証するのが困難になる
複雑度の測定には、たとえばMcCabe循環的複雑度を使うことができる。これはコード中の線形的に独立した経路の数を与えるもので、そのソフトウェアのテストの難しさと信頼性の指標になる。これを使うことで、開発と保守に要する労力を見積もることができる。
複雑度データに基づいて、あなたは全ての経路をカバーするのに必要な最小限のテストケース数がわかる。複雑度データは次のような面で役に立つ。
- 複雑なモジュールに集中する
- 最も効率の良いテスト技法を見出す
- テストのやめどきを知る
- ソフトウェアのテスト可能性を高める
Shashi氏は、(複雑度を測定することで)あなたはソフトウェアシステムの保守の予測可能性を高めることができると説明する。
ソフトウェア製品に取り組む前に、もしそれが複雑なモジュールだということがわかれば、見積もるときに追加の時間を割り当てることができます。あらかじめ複雑度がわかかることは、プロジェクトチームが開発中により注意を払うよう、そして製品の品質が損なわれないようにテストするよう、見積もるのに役立ちます。
Intelでは、複雑度の測定とモジュールの変更数のデータが収集されており、データは顧客から報告されたバグと結びつけられている。モジュールが複雑で、バグにより何度も変更されている場合には、リファクタリングするという判断がなされた。そして、リファクタリングする前には、コードをカバーするテストケースがあることを確かめた。こうすることで、リファクタリングのROIが高められたそうだ。
Shashi氏は、複雑度と品質に関連して、ソフトウェア開発の現場で直面した課題について次のように話した。
非常に競争と動きの激しい環境において、企業はユーザにより多くの機能を提供することで、サービスを差異化しようとしています。その結果、コード行数と複雑度はますます増大しています。これは大きな課題です。製品の複雑度を管理すべく適切な予防策をとらないと、すぐに保守できない製品になってしまうでしょう。依然として、多くの企業が古いコードと古い技術を使っています。時間とともにシステムが複雑になりすぎて、新しい技術への移行が極めて困難になっているためです。
「非常に競争の激しい環境では、イノベーティブになって、品質の高いソフトウェアを開発することが非常に重要です」Shashi氏は言う。「組織はソフトウェアの品質を改善するために、頻繁に変更される非常に複雑なプログラムの複雑度を下げるのを目標に設定するとよいでしょう」