(日本語) [修士論文] 記号実行を用いた振舞い差分検出に基づく機能スイッチの要約コメント生成
- 02 /
-
06 2020
2/4 に小林研M2の夏目さんが修士論文の発表を行いました.
論文題目:記号実行を用いた振舞い差分検出に基づく機能スイッチの要約コメント生成
論文概要:
ソフトウェアの開発においてはプログラムを実装する際, メソッド・クラスのコメントや外部ドキュメントに API の利用方法やプログラムの動作を記述することでメンテナンス等の際のプログラム理解を助けることが一般的である. しかし, 特に長期的に開発が続けられているソフトウェアにおいては, 実装に対してコメントやドキュメントが存在しない, あるいは古いバージョンの説明のまま更新がなされていない, といった問題が存在する. このような場合に開発者はコードを読んでその利用方法や動作を理解する必要があるが, 全てのコードを読んでその動作を理解するのは困難である. この問題を解決するためのコメント, 要約生成手法には主としてプログラムを実行せず, コード情報のみを利用する静的な手法が用いられる. しかし, 静的な手法には実際には実行不可能なパスを考慮してしまう可能性や, メソッド呼出しに伴う副作用を考慮することが困難であるといった問題が存在する.
本研究ではこの問題を解決するため, 記号実行を利用する. 記号実行を用いることでメソッドの実行時に実際に呼出し可能なパスを列挙できるという利点が得られる. 本研究では特にプログラム理解に有益な情報として, メソッド中で他のメソッドの呼出しを制御するようなフラグとなるフィールドやメソッド引数について, メソッド呼出しの有無や引数の違い等の振舞いの差分情報を用いてメソッドにおけるフラグの役割を要約することを目的とする. 記号実行によって実行可能性のあるパスが多数提示された場合の振舞い差分情報の抽出を容易にするため, 本研究ではコールスタック情報等を持った記号実行の状態遷移図を拡張記号実行ツリーとして定義し, ここからメソッド呼出しグラフを構成する. 同一メソッドの呼出し階層内における実行パスの共通部分と差分を抽出することでメソッド中においてメソッド呼出しを制御するフラグの役割の要約を容易にし, 開発者によるプログラムの振舞い理解を効果的に支援することを可能にした.
提案手法の有効性を確認するため JVM を対象とした記号実行器, JBSE を用いて本手法を実装した. サンプルプログラムに対して本手法を適用し, 副作用を伴うプログラムにおいて実際に通過するパス間でのメソッド呼出しの差分を抽出できることを確認した.