修正コードをもとに類似のバグを検出する技術

本エントリは2007/7/3にここ、2008/10/13にここで公開済みのものを加筆・修正したものである。

                                    • -

コーディング、テストにおいて、バグを見つけたら修正して修正箇所の確認と想定できる範囲内の回帰テストを実施するのが普通だろう。修正箇所が1箇所だと言い切ることができれば問題はあまりないが、通常、他にもあるかもしれないと心配することになるだろう。

解決策としては、グッと頭を悩ませる、コードを検索する、他のメンバに聞く、設計ドキュメントに当たる等があるだろう。コード検索が比較的コストが低いのだが、検索結果が膨大で1つ1つ見ていくのがたいへんであったりするだろう。たとえばgrepを使うような場合には、検索結果を減らすために複数行にわたるコードに対応する正規表現を書くのもしんどい。

そこで、修正前、修正後のコード片を検索キーとして、潜在的な類似バグを検索する技術としてコードクローン分析を使った検証を進めている。コードクローン分析は、ソースコード中に存在する類似箇所を抽出する分析であり、大阪大学ソフトウェア工学講座(井上研)ソフトウェア設計学講座(楠本研)で育てられたテーマである。コードクローン分析ツールCCFinderXは世界的にも有名なツールであり、神谷年洋氏が開発/保守している。これをもとにNTTデータMSEのご協力を得て、商用開発のソースコードに対してエンピリカルな検証を実施した。

具体的には、バグの修正箇所を検索キーとしてその部分とクローンになっている箇所を検索することにより、修正しなければならない箇所のチェックに使う。商用開発で開発/保守されているプロジェクトに対してもいくつか適用してみたところ、よい結果が得られた。

詳細は、2008/10の電子情報通信学会論文誌(ジャーナル)に掲載されたので参照いただきたい。出典の詳細はここに。ここに続いて、実際の開発現場のデータを用いた論文を投稿できたことに感謝している。NTTデータMSEの松井氏、佐々木氏、村上氏に感謝する。