セキュリティも含めたソフトウエア品質向上を支援する2つのツール見えにくかったソフトウエアの品質を見える化

市場環境の変化などを背景に、ソフトウエア開発の現場にはスピーディな開発が求められている。一方で、バグや脆弱性の少なさ、ライセンス遵守といった総合的な品質の確保も重要な課題だ。この2つの両立を支援する強力なツールとは?

» 2015年02月19日 10時00分 公開
[PR/@IT]
PR

早さと品質――相反する2つのニーズをどう実現?

 いまや、情報システムとそれを形作るソフトウエアは、単にビジネスの効率を向上させるツールにとどまらない。コンシューマー向けサービスを提供する企業はもちろん、それ以外の分野でも、モバイルデバイスやクラウドといった新たな要素を取り込むことが、市場環境の変化に追随して収益を生み出す企業の競争力の源泉となっている。こうした要請から、スピーディなソフトウエア開発を可能にする手法として「アジャイル開発」や「DevOps」といったキーワードに注目が集まってきた。

 ただ、いかにスピーディに開発できても、バグだらけのソフトウエアでは意味がない。当たり前だが、一定の品質を保つことも欠かせない条件だ。そのために、さまざまなソフトウエアマネジメント工学が研究され、コーディングやテストに関するベストプラクティスが蓄積されてきた。

オージス総研 サービス事業本部 グローバルプロダクト部部長 細谷竜一氏

 しかし、いくら優れた理論があっても、現実はそううまくいくとは限らない。頻繁な仕様変更とスケジュールに追われる現場では、残念ながら理論よりも現実的な対応の方が優先されることがある。

 「ただでさえ、品質や脆弱性に関するテストは開発プロセスの中でも先送りにされがちだ。ソフトウエアがほとんど組み上がった段階で問題が発見されてしまうと、プロジェクト全体のスケジュールに影響が及ぶ恐れもある。バグを修正し、リグレッションテストを行って副作用がないか確認し……と、かなりの手戻りが発生し、対応コストもかさんでしまう。それだけならばまだしも、万一出荷後にバグが明らかになってしまうと、改修と対応に要するコストは、数十倍に膨らむことになる」と語るのは、オージス総研 サービス事業本部 グローバルプロダクト部部長の細谷竜一氏。

組み入れたOSSが意図せずリスクの種になる可能性も

 もう一つ見逃しがちな問題がある。ソフトウエア開発に際して、インターネット上で公開されているオープンソースソフトウエア(以下、OSS)を活用することは少なくない。高度な画像処理や通信といった多様な要求に応えるためにOSSを活用すること自体は、開発速度や機能を高めるという目的からすると、もはや必須といっても過言ではない。

 しかし、そのOSSがどのようなライセンスで公開されているか確認せず、検索エンジンで見つけたものをそのまま「コピー&ペースト」するような粗雑な使い方をしてしまうと、別の問題に直面する恐れがある。OSSを利用して開発したソフトウエアを、ライセンスに反する形で流通させてしまうのはルール違反だ。最悪の場合は訴訟を起こされ、ソフトウエアの出荷停止命令が下される恐れがある。現に欧州をはじめ海外ではそうした訴訟の例がある。

 加えてセキュリティの側面からも、開発中のソフトウエアでどんなOSSが利用されているかを把握する必要がある。2014年からOpenSSLやglibc、Apache Strutsといった主要なOSSやライブラリに相次いで深刻な脆弱性が報告された。だが、開発中のソフトウエアのどこにどのOSSのどのバージョンが用いられているかをきちんと把握していなければ、適切な対策ができない。

 小規模なソフトウエアならともかく、近年増えている大規模なソフトウエアの中から、手作業で含まれているOSSを見つけ出すのは難しい。しかも利用方法はさまざまだ。ライブラリが丸ごとリンクされることもあれば、ソースコードの一部のみが抜き出され、使われていることもある。ソースコードの文字列を検索すればある程度は見つけ出せるかもしれないが、万全とは言えないのが実情だ。

現場でがんばる代わりに、適切なツールの活用を

 「ニーズに合わせたものをより早くリリースしたい」という要望に応えながら、セキュリティやライセンスも含め、ソフトウエアの品質を担保する――矛盾する2つの要望を満たすためにまず思い浮かぶ選択肢は、とにかく「現場でがんばる」というもの。しかし、いくら個々のエンジニアが優秀でも、大規模なソフトウエア開発では限界がある。こうしたときには、ツールをうまく活用し、自動化できる部分は自動化してしまうのも一つの手ではないだろうか。

 オージス総研は親会社である大阪ガスのオフショア開発をはじめ海外SIerも含めた大規模開発管理に豊富な経験を持ち、開発の大規模化に伴う品質管理の難しさは熟知している。「ツールを使うことで、開発段階から品質が可視化され担保されることの価値は、管理者にとって非常に大きい」(細谷氏)。

 自社内や顧客向けでの活用ノウハウを生かしオージス総研が提供する静的解析ツール「Coverity」と、OSSライセンス&脆弱性管理ツールの「Palamida」は、こうした課題にうってつけのソリューションだ。スピーディな開発を妨げない形で、後手に回らず、品質を担保する手助けをしてくれる。

 Coverity製品は、ソフトウエアの品質を検査する「Quality Advisor」、クロスサイトスクリプティングをはじめとするセキュリティ関連の問題を検出する「Security Advisor」、ソースコードの変更に基づいて最適なテストケースの作成・実行を支援する「Test Advisor」といった主要製品で構成される開発テスト用プラットフォームだ。他に、サードパーティ製のIDE(統合開発環境)、SCM(ソースコード構成管理)ツール、CI(継続的インテグレーション)ツール、バグトラッキングツールなどと統合する仕組みも用意されている。

 このうちQuality AdvisorはJava/C#やC/C++のソフトウエアを対象とした静的解析ツールだ。独自の解析エンジン「Coverity SAVE(Static Analysis Verification Engine)」によって関数間のコールグラフも含め全パスを解析し、クラッシュやメモリ破壊、不正な動作につながりかねない不具合を検出する。テストや人によるコードレビューに、Coverityによる静的解析を組み合わせることで、開発の早い段階から「穴」を見つけ、どんどんつぶしていくことができるようになる。

複数の品質保証手法を組み合わせることで穴を減らすことができる

深刻な問題を正確に、高速に検出するCoverity

 もちろん、過去にも静的解析を行うツールはあったが、あまり使われてこなかったのが実情だ。機械的に検査を行うのはいいが、それほどクリティカルでもない警告を大量に出す一方で、致命的なバグを見逃すことが少なくなかったからだ。その結果、「ああ、昔は静的解析ツールを使っていたけれど今はもう……」という企業も少なくないという。

 これに対しCoverity Quality Advisorは、単なるパターンマッチングでは見つかりにくい深刻な問題を正確に検出できる。「クリティカルな問題を、人間によるレビューに匹敵する高い精度で確実に見つけ出すことができることが特徴だ」と細谷氏は語る。しかも、不具合の箇所を分かりやすく表示することで、何が原因で、どう直せばいいかといった部分までサポートできるという。表示言語は英語だけではなく日本語にも対応しており、ユーザー単位で表示言語を切り替えることができる。

 加えて、SAVEエンジンによって高速に検査できることも特徴だ。「毎日ビルドが終わるたびに解析することも現実的な時間で行える。ワークフロー機能を備え、さらにソースコード管理ツールとの連携も可能なため、新たに見つかったバグを作り込んだのは誰かを推測し、アサインして、『ここにバグが見つかったので対応をお願いします』と担当にメールを飛ばすような一連の流れで、きちんと対処できる」(細谷氏)。

不具合の状態を記録し、担当者や重要度といった情報を加えてアサインすることで、見つかった問題を確実に修正

 ツールを活用することで、かえって、エンジニアのスキルアップにつながる効果も得られるという。「どのようなバグが作り込まれやすいか知ることによって、どういったコーディングをすべきかをエンジニアが学習し、全体のレベル向上が実現している」と細谷氏。ソフトウエア開発の現場にも世代交代の波が迫りつつあり、そろそろ第一世代のエンジニアの技術をどのように継承するかという課題が浮上しつつあるが、そうしたシーンへの活用が期待できる他、アジャイル開発やDevOpsといったトレンドにも最適だ。

 また多くの企業では、自社内で全てのソフトウエアを開発するのではなく、子会社や協力会社、場合によっては海外のオフショア開発を活用しながら進めていることだろう。こうした環境ではどうしても納品されたソフトウエアの品質がばらつきやすい。品質の基準をCoverityを軸に決めておき、それぞれの開発現場でCoverityが検出する不具合をつぶしておけば、検収時のソースコード品質を一定に保つことができる。結果的に、本来ならば単体テスト時につぶしておくべき単純なバグに追いかけ回されることもなくなる。

多角的な視点で二次利用されたOSSを見つける「Palamida」

 「Palamida」は、ソフトウエア開発時のもう一つの課題である、二次利用されているOSSの特定作業を支援するツールだ。独自のOSSデータベースに基づいてソースコードやライブラリなどのバイナリファイルの中を検査するだけではなく、「Copyright」表記やメールアドレス、ライセンス条項など、多角的な視点で検査を行い、どこにどんなOSSが使われているかを一目瞭然にしてくれる。

多角的な視点から、検査対象ファイルのどこにどのようなOSSが含まれているかを「見える化」する

 オージス総研では、Palamidaを用いて顧客のソースコードを検査する診断サービスも提供してきた。その経験によれば、OSSの利用状況を把握できているケースは少なく、できていても氷山の一角にすぎないそうだ。「Palamidaを使って検査すると、事前申告の倍、多いときには4倍ものOSSが使われていることが明らかになるケースがあった」と細谷氏は述べる。

 もう一つ興味深いことに、欧米ではGPLを採用しているOSSが使われるケースが多いのに対し、日本の企業では明らかにGPLを避け、MITやBSDといった他のライセンスのOSSが多く使われる傾向にあるという。だが「良いものならば、怖がらずに適正に使うべきではないか。そのためにも、まず自社としてOSSをどのように使っていくかという『ポリシー』を整備していく必要がある」(細谷氏)。

 そのポリシーを作り、ガバナンスを実現するには、まずは自社ソフトウエアの中でOSSがどのように使われているかを正確に把握することが大前提だ。オージス総研では、多彩なOSS関連ソリューションを提供している経験やノウハウを生かし、現場の意見と突き合わせながらポリシーを作成するためのコンサルテーションも提供している。いわば「OSS二次利用お悩み相談室」というわけだ。

2つのツールの組み合わせで見えなかった品質を見える化

 このようにCoverityとPalamida、両製品を組み合わせてソフトウエアをチェックすることで、開発のスピードと品質の両立、OSSライセンスの管理といったメリットが得られる。さらに、セキュリティ面での安心感も得られる。この2製品の組み合わせによって、Webアプリケーション脆弱性対策のトップ10をまとめた「OWASP Top 10」の全項目をカバーすることが可能だ。

 細谷氏は「そもそもソフトウエア開発時の問題に気付いていない人も多い」という。「せっかく開発者にトレーニングを行い、コーディングのルールを作り、OSSの使い方を定めても、開発の現場でそれが崩れていく……という状況をCoverityとPalamidaならば変えることができる」という。

 ひと言で言えば、ソフトウエアの質という「見えなかったもの」を「見えるようにする」CoverityとPalamida。ソフトウエアの状況を知り、広い意味での品質を高めるために、ぜひ試してみてはいかがだろうか。

Copyright © ITmedia, Inc. All Rights Reserved.


提供:株式会社オージス総研
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2015年3月21日

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。