オープンソースと私権ソフトのコードクォリティをCoverity Scan 2011が比較

次の記事

Facebook、グループのデザインを変更。外観はタイムライン風に

source-code

Eric Raymondは彼の画期的な著作The Cathedral and the Bazaar(伽藍とバザール)の中で、“目玉の数が十分にあればすべてのバグは浅い(given enough eyeballs, all bugs are shallow)”という説を唱えた。彼はこれをLinus’ Law(ライナスの法則)と呼び、Linuxの作者Linus Torvaldsを讃えた。それは一見、自明な主張のようだが、しかしWikipediaの記述は、この説への批判があることを指摘している。Michael HowardとDavid LeBlancが彼らの2003年の著作Writing Secure Codeの中で、“コードの見方が分からない人のほうが圧倒的に多い”、と主張しているのだ。

今日(米国時間2/23)発表されたCoverity Scanプロジェクトの報告書(要約)は、コードの見方を知っている人はたくさんおり、オープンソースのソフトウェアは 、ソフトウェアの欠陥に関して、私権のある(proprietary)ソフトウェアと悪くても互角だ、と示唆している。Coverity Scanプロジェクトは、オープンソースのプロジェクトと私権のあるコードベースをそれぞれいくつか選び、それらの中に、“発見が困難だがクラッシュを起こす可能性のある欠陥”を探した。その結果は、ライナスの法則を支持している。

CoverityのScanプロジェクトは2006年に、合衆国国土安全保障省(U.S. Department of Homeland Security, DHS)の要請で開始された。当時DHSは、オープンソースのプロジェクトが広く各所で採用されていることに着目し、それらのコードのセキュリティとクォリティを評価したいと望んだ。それ以降の各年Coverityは、Linuxカーネルを含むさまざまなオープンソースプロジェクトをScanプロジェクトの対象として取り上げ、その所見をプロジェクトの報告書として発表している。

Scanプロジェクトの基本的な分析対象は、コードの欠陥密度(defect density)だ。これは、“見つかった欠陥の数を行数で表されるコードベースのサイズで割った値”だ*。欠陥の実数ではなく密度を使うことにより、コードのサイズに左右されず一律にコードの質を判定でき、比較できる。取り上げる欠陥は、CoverityのコードスキャナーStatic Analysisが定義している“影響大”(high-impact)と“影響中”(medium-impact)のもののみである。それには、ヌルポインタからの参照や未初期化変数、メモリ崩壊、エラー処理、不法メモリアクセス、などが含まれる。〔*: Coverity Scanの欠陥密度は、コード1000行あたりの欠陥数。〕

Coverityによると、ソフトウェア業界全体としての平均欠陥密度はおよそ1.0である。Scanプロジェクト2011の報告(上の表)では、Linux 2.6のカーネル、PHP 5.3、そしてPostgreSQL 9.1は、いずれも欠陥密度が相当低い。報告書はこれらの数値を詳細に分析し、オープンソースプロジェクトの中ではLinuxカーネルの欠陥密度が比較的高い理由を、次のように考察している:

ソフトウェアの各部位ごとに欠陥密度を計算すると、カーネルの欠陥密度はそのほかの部位よりも高い。その理由はおそらく、これから行おうとするバグフィクスそのものが、それがもたらすかもしれない不安定性と天秤にかけられ、その可否を慎重に検討されるからである。可否の判断は、“一部のバグフィクスは、その部分のコード全体を書き換えるのでなければすべきでない”という原則に従う。また、カーネルのデベロッパがコードの変更をあえて避ける場合もある。そこは、経験的に安定であると知られているので、単に静的な分析の結果を満足させるだけのために書き換えることは、ためらわれるのである。彼らは、コードがそのほかの目的のために変更され、その新しいコードの中では欠陥が修復されている、という状況になるのを、待つこともある。しかし一方カーネルは、デバイスドライバなどそのほかの部位と比べて、ハイリスクと分類される欠陥の数は最少である。それは、デバイスドライバなどと比べてカーネルは、広範に使用される重要な部位だからであろう。個々のデバイスドライバの利用者人口は、Linuxカーネルのそれの、ほんの一部でしかない。

スキャンしてその数値を発表するだけなら、比較的楽な仕事だと思うが、このように結果に対し立ち入った解説まで書いてくれるCoverityの態度は、嬉しいね。

Coverityの2011年度の報告書は初めて、オープンソースと私権ソフトウェアを直接比較している。Coverityがスキャンした私権コードは匿名が前提だから、私はある程度の詳細(どの業界方面のアプリケーションか、プロジェクトの成熟度や複雑性など)を尋ねてみた。Scanの担当ディレクターZack Samochaによると、アプリケーションの業界分野は“金融、通信、医療機器、航空および防衛、産業機器(工程自動化)、自動車”などなどだ。開発年齢はおよそ5〜10年のものが多く、“世界的に有名な製品や重要システム(MRI装置、電力会社の送電施設、使用頻度の高い証券/株式取引システムなど)に組み込まれている成熟度の高いアプリケーション”である。

報告書より:

標本として使用した私権のあるコードベースの平均サイズは750万行で、今回分析対象となったオープンソースソフトウェアの平均よりも相当大きい。そこで、直接の比較が有意であるために、比較用には両者ともほぼ同サイズのコードベースの欠陥密度を求めた。その結果、私権コードベースの平均欠陥密度は0.64となり、ソフトウェア業界平均の1.0よりも良い。オープンソースのコードのクォリティが、類似サイズの私権コードベースのそれと、ほぼ同じであることを、われわれは見いだした。たとえばLinux 2.6はコードサイズが700万行弱で、欠陥密度は0.62である。これは、比較対象とした私権コードベースのそれとほぼ同じである。

Samochaは自分の観察結果として曰く、“安全性が重要な業界…自動車、医療、航空、産業機械、電力/エネルギー…の欠陥密度は、それ以外の業界…電子製品、通信、金融、ソフトウェア、インターネット…に比べて低い”。

報告書は、次のように書いている:

オープンソースのクォリティは私権コードのクォリティと互角であり、とくに両者ほぼ同サイズのコードベースについてそう言える。

     

ソフトウェアのクォリティを重視し、開発ワークフローの一環として開発試験を取り入れている組織や企業は、今回のオープンソースと私権コードベースの分析が示すように、高いコードクォリティを安定的に確保し、長期にわたって持続的に、クォリティの改良を実現し続けている。

たしかに、Linusの法則は多くの点で自明だ。オープンソース世界の空気を呼吸して生きてきた人びとは、それが真理であることをよく知っている。Coverityの分析は、その信念に客観的な証拠を提供する点で、ありがたい。そろそろ誰かがWikipediaのLinus’ Lawの項を書き換えて、誹謗者たちへの反論としてこの報告書を取り上げてほしいね!

画像クレジット: IXS_1916, acmeより。

[原文へ]
[jpTechCrunch最新記事サムネイル集]
[米TechCrunch最新記事サムネイル集]
(翻訳:iwatani(a.k.a. hiwa))