楠本研究室

業績一覧

ホーム業績一覧

プログラム解析を目的としたループ実行前後の変数間に成り立つ写像導出

プログラム解析を目的としたループ実行前後の変数間に成り立つ写像導出
修士論文, 大阪大学
概要: プログラム解析手法には,プログラムを実行せずに解析を行う静的解析手法や,実際にプログラムを実行して実行結果の解析を行う動的解析手法など様々な手法が存在する.静的解析手法には記号実行やモデル検査などがあり,動的解析手法にはソフトウェアテストなどがある.静的解析手法では網羅的にプログラムを解析できるという利点があるが,一方で問題点の一つにループの解析が正しくできないという点がある.プログラムを実際に動かさないため,プログラム中で何回ループが実行されるかが静的解析では不明である.ループ回数を固定回数までに制限して解析を行う手法も存在するが,その場合固定回数以上のループ実行時の挙動を解析することはできない.例えば記号実行という手法では各実行パス実行時に成り立つ制約を求めるが,ループでは無限に実行パスが存在するため解析が不可能である.よって,ループ実行前後の変数間の関係を求めるのが難しいと言える.このような問題を解決する既存手法の1つが動的解析の応用である.この研究の最新の結果では動的解析と回帰分析を用いてループ実行前後の変数間に成り立つ写像を導出する.まずループ部分を実行し,ループ実行前後のループ中で用いられている変数の値を取得する.そしてループ実行前後の変数間に成り立つ写像を回帰分析を用いて導出する.しかし,写像が複雑である場合写像と実際の値の誤差が大きくなるという問題が生じる.本稿の提案手法では,プログラムの実行履歴を解析することで,ループの実行回数とループの制御変数の関係を統計的に求める.そしてループ中で用いられている各変数のループ実行時の変化を漸化式として表す.漸化式の一般項はMathematica というツールを用いて導出する.最終的に漸化式の一般項と回帰分析で導出した関係を組み合わせることで求めたい写像を導出する.評価実験として,提案手法を複数のJava プログラムに対して適用し,ループ実行前後に成り立つ写像を導出した.その結果,既存手法では導出できない有用な写像が導出されたことを確認した.
@mastersthesis{佐々木幸広2014,
  author = {佐々木 幸広},
  title = {プログラム解析を目的としたループ実行前後の変数間に成り立つ写像導出},
  school = {大阪大学},
  year = {2014},
  month = {feb}
}