現在のソフトウェア開発では、外部発注やオープンソースなど第三者が作成したソースコードを混在して活用する事例が当然となっている。そのような複雑なソフトウェアのサプライチェーンにおける不具合の検出において、有効利用できるのが、静的解析技術だ。本セッションではAndroidカーネルソースコードなどの解析結果を例にとり、現実に起こりうるコード不具合の実体と、解析ツールの活用法などが紹介された。
静的解析技術で既存の手法では半年かかる検証を自動化
ソフトウェアの不具合を見つけ出すためのテストは、単体や結合した状態で動かして行うのが一般的だ。ただ、後工程になればなるほど不具合は見つけにくくなり、修正コストが大きくなる。そこで開発の上流、コーディングの状態で不具合を見つけるために行われる、静的解析がより注目されるようになっている。コベリティの西山誠一氏は、「その背景には、現在のソフトウェア開発における様々な課題がある」と分析する。
まずITがビジネスを支えている現在、ソフトウェアが年々大規模化し、複雑化していることが挙げられる。経済産業省の調べでは日本のソフト開発の平均的な開発行数2009年では平均22万行で、2010年は45万行。さらに2011年は100万行と予測されている。1日100ページ見ることができたとしても6か月かかる計算だ。テスト負担が大きいことからも開発コストが肥大化し、納期に間に合わないケースも少なくない。
そこで静的解析ツールでソースコードを調べると、たとえばC/C++の場合では「Nullポインタの間接参照」「ポインタ解放後のメモリ使用」「バッファ・オーバーフローしてしまう問題」「リソース・リーク」「ファイルをオープンして閉じ忘れる」などの不具合を自動的に洗い出すことが可能だ。
さらにソフトウェア開発を複雑にしている要因として西山氏が挙げるのが、世界的に増えている第三者工期だ。たとえばAndroidなどオープンソースの開発、修正には、全世界の技術者が係わっている。自社開発のソフトウェアでも、協力会社、外注、市販パッケージが複雑に絡み、さらに派生製品がどんどん出荷されているので、どのタイミングで不具合が入り込んだのか、管理するのが非常に難しくなっている。
米国国土安全保障省と共同でオープンソースを評価
そこで、受け取ったソースコードの品質を客観的に評価する仕組み、手法が求められる時代になっている。2006年にコベリティは、米国国土安全保障省と共同でオープンソースの品質評価サービス「Scanプロジェクト」を立ち上げた。その成果の一つが「2010オープンソース品質評価レポート」であり、対象はAndroid、Linux、Apache、Samba、PHPなど、広く普及している291件のオープンソース・プロジェクトで、6100万行以上のコードを解析している。
たとえばHTCのサイトで公にされているAndroidカーネルの場合、75万行を解析し、359の不具合を発見した。これは一般的なオープンソースの1000行あたり一個のバグより、かなり優秀な値となっている。そのうち、ハイリスク不具合は88個であり、その後Google、HTCと協力し、修正していく活動が行われている。
西山氏による解説に続いて高石勇氏が登壇し、Androidカーネルのプロジェクトを対象に、コベリティの静的解析ツール「Coverity Static Analysis」による解析のデモを披露した。実際、数多くの障害が検知されたが、その中から「メモリの破壊」「配列の範囲を超えたデータの書き換え」など、インパクトの高いものを優先して見ていくことができるようになっている。また、テストを自動化し、負荷なく開発プロセスにマッチングさせることが出来るという。一方プロジェクトマネージャー立場から、解析とバグフィックスの状況を、ブラウザを介してモニタリングするなども可能だ。
第三者開発に加え自社開発品質の客観的評価にも活用可能
以上のようにコベリティの静的解析ツールを使えば、自社、サードパーティ、外注のソースコードを調べ、どこに不具合が多いのかをレポートとして見ることができる。また自社が開発に加わる立場の場合、他社コードと比較した自社品質のベンチマークとして提示できる。レポートではリスク別のバグの数、コンポーネント別のバグ密度などの統計データや、バグの状態を修正対象(未処理)・修正対象(選別済)・誤検知・意図的なバグ・守勢済みに分けて分析する。
コベリティの未ユーザーがレポートを希望する場合には、無償のトライアルも用意されている。
その他、これまでに品質評価したオープンソース・プロジェクトについては、レポートがコベリティのサイトで公開されている。今後、対象プロジェクトが拡大されていく予定だ。