Verification of programs using Continuation based C
Yasutaka Higa
研究目的
コードセグメントとデータセグメントという単位を用いてプログラムを記述する手法を提案する
プログラムはコードセグメントという処理の集合として表され、相互に接続される
個々のコードセグメントを検証し、検証されたコードセグメントどうしの組み合わせによりプログラム全体を検証する
研究内容
コードセグメントとデータセグメントを用いたプログラムに対し、検証を行なう
コードセグメントどうしの接続の間にメタ計算として検証機構を導入する
コードを検証用に変更することなく、仕様を満たすか検証する
検証の対象として Gears OS のデータ構造を用いる
近況報告
clang の revision を 111 に変更
tip は 112
cbmc で検証するコードを書いた
どうやら cbmc では上手く検証できない様子
cbmc での検証
goto を return に変更して assert を使って bounded model check
素直に実行すると終わらない
–property で特定の property のみをチェック
loop をどのくらい展開するかのオプション –unwind がある
–unwind 1 ではチェックできず
array too large for flattening
どのくらいの深さをチェックするかのオプション –depth がある
–depth 400 くらいでチェックできず
array too large for flattening
depth 400 以下でのチェックは有効なのか
木に挿入する要素は8
llrb のコードにバランスを乱すようにわざとバグを仕込む
akasha では反例が返る
cbmc では verification successful と出る
ので cbmc では llrb はチェックできなさそう
あとやること
(doing) 仮に書いている C function を全部 cs に変換する
速度計測?
論文作成
論文提出締切: 2016/07/08