BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Coverity ScanがJava, Apache Hadoop, HBase, Cassandoraのコード向上をサポート

Coverity ScanがJava, Apache Hadoop, HBase, Cassandoraのコード向上をサポート

原文(投稿日:2014/05/02)へのリンク

ソフトウェア品質とセキュリティのテストソリューションプロバイダであるCoverityは先頃,ソフトウェア品質レポート"Open Source Scan Report"の2013年版をリリースした。現時点で1,500以上のプロジェクトを検証した同レポートには,2014年3月現在で3,500人のユーザがいる。

同社は2013年5月にJavaのサポートを追加しているが,その後100を越える新たなプロジェクトがサービスに参加した。中にはApache Hadoop, HBase, Cassandraといったビッグデータプロジェクトや,Hudsonサーバ, Eclipse Code Recommenderといった著名Javaプロジェクトも含まれる。さらにEclipse財団にも参加してCoverity Scan用のHudsonプラグインを開発し,同財団のホストするプロジェクトに統合している。

同レポートはまた,約50,000件の障害が2013年中に修正されたと報告している。この数は,同サービスがこれまでに報告した修正済み障害数の総計を越えるものだ。

Coverityの調査レポートには,プロジェクト規模別の欠陥密度の数値が含まれている。2013年の調査では,CおよびC++プロジェクトの全体的な欠陥密度はひとつのレベル – コード行数50万~100万のグループ – を除いて,2012年よりも低減した。これは新規プロジェクトがこのレベルに集中していることを,事実として示すものだ。またオープンソースプロジェクトの欠陥密度が,プロプライエタリなコードに比べて,すべてのレベルで下回っていることも確認できる。

調査結果によると,Javaプロジェクトの欠陥密度は全体で2.72であり,C/C++プロジェクトの0.59に比べると極めて高い。

まず,JavaとC/C++の解析アルゴリズムの違いがあります。当社がScanサービス用に用意した分析方法には,一般的なFundBugsが含まれています。これは非常に有効なものです。FindBugsチェッカの多くは,大量の結果を出力します。特に危険なコードやパフォーマンス,バッドプラクティスに関する部分ではそれが顕著です。Javaプログラムの欠陥密度を評価する上で考慮すべきもうひとつのファクタは,プロジェクトでScanサービスを利用している期間の長さです。プロジェクトがサービスに参加した初期の段階では,高い欠陥密度比率が出ることが珍しくありません。その後時間が経つにつれて,低減するものなのです。

Linuxに関連した作業としては,バージョン3.12を対象に8,578,254ラインのコードが検証されている。これは昨年よりも大きな数値だ。その結果として,いくつかのコントロールフローや整数処理,エラー処理に関する問題点,メモリ破壊やリソースリーク,APIの使用方法の誤りなど,3,346件の問題が修正され,3,299件の潜在的欠陥が指摘されているが,いずれも2012年の数値に比べて少なくなっている。

Linuxカーネルの品質は,年を追うごとに向上しています。2011年には0.95であった欠陥密度は,2012年には0.76,現在は0.61になりました。これは品質に対するチームのコミットメントの証明に他なりません。

"Coverityプラットフォームはバッファオーバーフローやヌルポインタ参照,並行処理の問題,リソースリークといった重要な問題だけでなく,C/C++/Javaコンパイラでは検出できない,さまざまなタイプの問題を検出することができます。"と,同社製品とSaaSを担当するシニアディレクタのZack Samocha氏は述べている。

InfoQでは氏から,Coverity Scanサービスに関するさらなる情報を聞くことにした。

InfoQ: Coverity Scanの目的について説明してください。

Coverity Scanサービスは2006年,オープンソースソフトウェアの品質とセキュリティに注目する官民共同研究プロジェクトとして,国土安全保障省(DHS/U.S. Dept. of Homeland Security)によって開始されました。現在は当社がプロジェクトを管理しています。オープンソースコミュニティを対象として,彼らのソフトウェア開発プロセスの品質とサービス構築を支援するために,フリーサービスとして開発テスト技術を提供しているのです。Scan Serviceの歴史についてもっと詳しく知りたいようでしたら,私たちが先日公開したブログ記事 "Coverity Scan and the DHS" が参考になると思います。

InfoQ: レポートの中に,2013年中に50,000件の障害が修正された,という説明がありますね。例としていくつか挙げて頂けますか?

2013年版ではC,C++,Javaを使用したプロジェクトに関する障害検出数と修正数の情報を紹介しています。例として,プロシージャ間のnullの逆参照に関する修正を説明しましょう。この特殊な障害は,無条件に逆参照を行うメソッドに対して,潜在的にnullオブジェクトが渡されるときに発生します。下記のイメージでは,115行目で"g"をnullと比較しています。これはつまり,nullの可能性がある,ということになります。もし"g"が本当にnullであれば,116行目でそれがgetStateString()に渡されて,133行目でNullPointerExceptionをスローすることになるでしょう。

InfoQ: Coverity Scanサービスの今後について,どのようにお考えですか?

過去数年間,Coverity Scanサービスを利用するプロジェクトの数とユーザ数は,どちらも大きく増加しました。ですから,まずはサービスのスケールアップを継続して,今後もオープンソースコミュニティが,私たちの実績ある開発テスト技術を手軽に利用できるようにしていきたいと思います。GitHubやTravisなど,オープンソースエコシステムとの統合に対する投資も続けていくつもりです。.NETフレームワークのサポートや,当社の他の開発テストプラットフォーム製品へのアクセスなど,サービスにより多くの機能を導入することも計画しています。

Coverity Scanサービスは現在,NetBSDやFreeBSD, LibreOffice, Linuxといった主要なオープンソースC/C++プロジェクトで使用されていて,2013年には11,000以上の障害を修正している。

この記事に星をつける

おすすめ度
スタイル

BT