修正コードから類似バグを検出
コーディング、テストにおいて、バグを見つけたら修正して修正箇所の確認と想定できる範囲内の回帰テストを実施するのが普通だろう。修正箇所が1箇所だと言い切ることができれば問題はあまりないが、他にもあるかもしれないということになった場合どうするか?
グッと頭を悩ませる、コードを検索する、他のメンバに聞く、設計ドキュメントに当たる等があるだろう。コード検索が比較的コストが低いのだが、検索結果が膨大で1つ1つ見ていくのがたいへんであったりするだろう。たとえばgrepを使うような場合には、検索結果を減らすために複数行にわたるコードに対応する正規表現を書くのもしんどい。
修正前、修正後のコード片を検索キーとして、潜在的な類似バグを検索する技術としてコードクローン分析を使ったテーマを進めている。コードクローン分析は、ソースコード中に存在する類似箇所を抽出する分析であり、大阪大学ソフトウェア工学講座(井上研)、ソフトウェア設計学講座(楠本研)で育てられたテーマである。コードクローン分析ツールccfinderxは世界的にも有名なツールであり、神谷年洋氏が開発/保守している。これをもとにEASE研究員の玉田氏と私とで商用開発のソースコードに対してエンピリカルな検証を実施している。
具体的には、バグの修正箇所を検索キーとしてその部分とクローンになっている箇所を検索することにより、修正しなければならない箇所のチェックに使う。既にオープンソースのcannaを使った事例について公開されている。ある企業の協力を得て、今年に入ってから商用開発で開発/保守されているプロジェクトに対してもいくつか適用してみたところ、よい結果が得られている。
具体的な結果と詳細は7/9(月)に東京三田で開催するエンピリカルソフトウェア工学研究会(EASEプロジェクト主催のセミナ)で報告する予定である。会場へのアクセスやプログラムの詳細はここから。参加費無料でもう少し座席が残っているようなので、興味があれば早めにお申し込みいただきたい。