複雑度を測定してソフトウェア品質を改善する
複雑度の測定は、開発とテストのための見積もりや、品質向上と問題防止のためにリファクタリングが必要なところの判断に使うことができる。QA&Test 2014カンファレンスで、IntelのShashi Katiyar氏がソフトウェア品質改善のための複雑度メトリクスの効果的な利用についてプレゼンテーションを行った。
複雑度とは、ソフトウェアのさまざまな要素のインタラクションを測定したものだ。Shashi氏によると、ソフトウェア複雑度はソフトウェアの品質とコストの直接的な指標だ。コードの複雑度が高ければ、そのコードの品質は低くなり、それを管理するコストは高くなる。
Shashi氏は、ソフトウェア製品のコードが複雑になると、組織は次のような問題に直面することになると話した。
- 欠陥のリスクが高まる
- 新しい機能を追加するのが困難になる
- コードを理解/保守するのが困難になる
- 検証するのが困難になる
複雑度の測定には、たとえばMcCabe循環的複雑度を使うことができる。これはコード中の線形的に独立した経路の数を与えるもので、そのソフトウェアのテストの難しさと信頼性の指標になる。これを使うことで、開発と保守に要する労力を見積もることができる。
複雑度データに基づいて、あなたは全ての経路をカバーするのに必要な最小限のテストケース数がわかる。複雑度データは次のような面で役に立つ。
- 複雑なモジュールに集中する
- 最も効率の良いテスト技法を見出す
- テストのやめどきを知る
- ソフトウェアのテスト可能性を高める
Shashi氏は、(複雑度を測定することで)あなたはソフトウェアシステムの保守の予測可能性を高めることができると説明する。
ソフトウェア製品に取り組む前に、もしそれが複雑なモジュールだということがわかれば、見積もるときに追加の時間を割り当てることができます。あらかじめ複雑度がわかかることは、プロジェクトチームが開発中により注意を払うよう、そして製品の品質が損なわれないようにテストするよう、見積もるのに役立ちます。
Intelでは、複雑度の測定とモジュールの変更数のデータが収集されており、データは顧客から報告されたバグと結びつけられている。モジュールが複雑で、バグにより何度も変更されている場合には、リファクタリングするという判断がなされた。そして、リファクタリングする前には、コードをカバーするテストケースがあることを確かめた。こうすることで、リファクタリングのROIが高められたそうだ。
Shashi氏は、複雑度と品質に関連して、ソフトウェア開発の現場で直面した課題について次のように話した。
非常に競争と動きの激しい環境において、企業はユーザにより多くの機能を提供することで、サービスを差異化しようとしています。その結果、コード行数と複雑度はますます増大しています。これは大きな課題です。製品の複雑度を管理すべく適切な予防策をとらないと、すぐに保守できない製品になってしまうでしょう。依然として、多くの企業が古いコードと古い技術を使っています。時間とともにシステムが複雑になりすぎて、新しい技術への移行が極めて困難になっているためです。
「非常に競争の激しい環境では、イノベーティブになって、品質の高いソフトウェアを開発することが非常に重要です」Shashi氏は言う。「組織はソフトウェアの品質を改善するために、頻繁に変更される非常に複雑なプログラムの複雑度を下げるのを目標に設定するとよいでしょう」
特集コンテンツ一覧
実例で学ぶGS Collections – Part 2
Donald Raab 2014年11月20日 午後8時3分
実例で学ぶGS Collections – Part 1
Donald Raab 2014年10月23日 午前2時24分
プロジェクトインセプション - 協力体制を作るミーティングの方法
James Bayer 2014年10月14日 午後7時57分
カンバンはどのように動作するか
Amr Noaman Abdel-Hamid 2014年9月7日 午後7時43分
自己組織化チームはなぜ必要か?
Sigi Kaltenecker and Peter Hundermark 2014年8月31日 午前2時2分
効果的なテストの文化を創る
Wes McClure 2014年8月31日 午前1時54分
こんにちは
コメントするには InfoQアカウントの登録 または ログイン が必要です。InfoQ に登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。
あなたの意見をお聞かせください。