導入に際し、ドキュメントに書いてないこととか色々あってつらかったため、軽くメモ代わりに投稿しておきます。 また、Prusti を使う最も簡単な方法は VSCode の拡張である Prusti-Assistant を使うことですが、Vimの使用を見越しコマンドだけで使えるようにアレコレ設定しました。 Prusti の紹介 プログラミングにおいて、関数に対してプログラマが明示的に制約を課すことはよくあります。 例えば、次のような単純な関数 max を考えます。 fn max(x: i32, y: i32) -> i32 { let result = if x > y { x } else { y }; result } さて、この関数は次のような性質を持つことが期待されます。 resultはx以上かつy以上 resultはxまたはy そういった情報は多くの場合ライブラリのドキュメントなどに書い
はじめに 皆さん、SQLチューニングしてますか?(唐突) 私は仕事柄RDBMSのSQLチューニングをすることが多いのですが、たまにチューニングの一環で SQL文の書き換え をすることがあります。 その際に問題になるのが、書き換えたSQL文が等価であるかどうかの確認が大変なことです。 SQL文を書き換えた場合には、想定通りの結果を取得できるか確認するために、テストをやり直す必要があります。 これが開発早期のフェーズならまだましなのですが、結合テスト以降だと手戻りも多くかなりコストがかかりますし、既に本番運用が始まったシステムともなると、テスト自体が困難なこともあります。 また、複雑なSQL文だと網羅的なテストケースを作成すること自体が困難であるため、完全に正しいと確信することはできません。 なので、SQL文の書き換えの正しさを証明する良い手段はないかと考えていました。 SQLチューニングとは
こんにちは、チェシャ猫です。 Alloy は関係論理を用いた形式手法ツールの一種です。本記事では、2021 年 11 月にリリースされた Alloy 6 の新機能、Mutable Field を用いた検査について解説します。この機能を使用することで、時間発展するタイプのシステムをよりシンプルに記述できるようになりました。 なお、本記事は従来の v5 以前の Alloy に触ったことがある読者を想定しています。したがって Alloy のツールとしての位置付けや基本的な文法・機能については説明しません。興味のある読者には『抽象によるソフトウェア設計ーAlloy ではじめる形式手法』(以下 Jackson 本)をお勧めします。 それでは早速、Alloy 6 をダウンロードして始めましょう。 TL;DR Mutable Field が導入され、時刻に従って変化するような関係が記述可能になった それ
\( \def\ldef{≜} \) \( \def\globally{□} \) \( \def\eventually{◇} \) \( \def\openleftarrowplus{\overset{+}{⇾}} \) \( \def\equalv{⫤} \) 概要 このページでは PlusCal を使って記述したシステムが正しいことをどのように証明するかについて説明する。サンプルを実行するための環境セットアップは環境設定と検証の実行を参照。 Table of Contents 概要 TLA+ は何を証明するのか? Safety 特性 Liveness 特性 スタッターリング 公平性特性 終了の検査 例: 信号機と歩行者 歩行者用信号の故障 歩行者の青信号見逃し 歩行者用と自動車用の信号を青にする TLA+ は何を証明するのか? 一般的なプログラミング言語のアサーションが「ある時点での
唐突にlock-freeをAlloyで書いてみたくなったので書いた。 what is lock-free 冬のLock free祭り safe from Kumazaki Hiroki www.slideshare.net kumagiさんの資料によると、lock-free stackはリンクリストみたいなもので、先頭へのポインタをCAS(Compare and Swap)で切り替えるらしい。 素直にAlloy化するとこうなる。 sig Data {} // linked elements of stack. sig StackElem { data:Data , next:lone StackElem // edge dosen't have next element. } { no next & this // prevent self pointing. } sig HeadPoin
~エンタプライズ系ソフトウェア開発で利用できるノウハウ~ 2012年9月28日公開 独立行政法人情報処理推進機構 技術本部 ソフトウェア・エンジニアリング・センター 概要 IPA/SECでは、ソフトウェア開発の高信頼化に向けた有効な手法と一つとして形式手法の普及活動に取り組んできました。今回、代表的な形式手法である Event-B, SPIN, VDM++ を用いて、基本設計書の品質向上のための検証方法をガイドする「形式手法活用ガイドならびに参考資料」を公開します。 本資料は、「Dependable Software Forum(略称:DSF)(※)」から譲渡されたもので、2012年4月20日に公開した「情報系の実稼働システムを対象とした形式手法適用実験報告書」でも活用されています。実験報告書と共に参照し、実践的な取組みに活用いただけることを期待します。 ※Dependable Softw
原文(投稿日:2020/02/27)へのリンク ZetZ、略してZZは、RustにインスパイアされたCのダイアレクト(diarect, 方言)だ。コンパイル時に仮想マシン内でシンボリック実行することによって、コードの形式的検証を行う。 ZZはハードウェアに近い部分で動作するソフトウェアをターゲットにしているが、クロスプラットフォームなANSI-C準拠のライブラリ構築にも使用することができる。実際には、ZZはCコードのトランスパイラとして、処理結果を任意の標準的Cコンパイラに入力することで動作する。多くの言語が行っている安全性へのアプローチとは対照的に、ZZは、例えば生のポインタアクセスのように"安全でない(unsafe)"と見なした機能の除外や制限は行わない。その代わりに静的単一代入(static single assignment, SSA)を使用して、yices2やz3といったSMTプ
This report was written by Maciej Grochowski as a part of developing the AFL+KCOV project. How Fuzzing works? The dummy Fuzzer. The easy way to describe fuzzing is to compare it to the process of unit testing a program, but with different input. This input can be random, or it can be generated in some way that makes it unexpected form standard execution perspective. The simplest 'fuzzer' can be wr
The following resources are available: Slides Lecture notes for Chapters 1-10, 12 and 14 of the book. (*revised 2015) Demonstration Programs The set of demonstration programs in the book may be run as applets in a Java Java™ 2 enabled browser from here. The program source is also included. The complete set of applets, Java™ source and Web pages can be downloaded as a zip file from here. (*revised
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く