「静的解析ツール」の版間の差分
ナビゲーションに移動
検索に移動
imported>Mono Book (→関連項目) |
imported>Mono Book (→概要) |
||
8行目: | 8行目: | ||
なんとも夢のような技術であるが、[[契約による設計]]に対応している[[プログラミング言語]]で[[ソースコード]]がきちんと記述されていれば凄い高い精度を叩き出すが、その他大勢の一般的な[[プログラミング言語]]では期待はずれな残念な結果しか得られないことが多い。 | なんとも夢のような技術であるが、[[契約による設計]]に対応している[[プログラミング言語]]で[[ソースコード]]がきちんと記述されていれば凄い高い精度を叩き出すが、その他大勢の一般的な[[プログラミング言語]]では期待はずれな残念な結果しか得られないことが多い。 | ||
+ | |||
+ | ==例== | ||
+ | 静的解析が[[コンパイラ]]に標準搭載されている[[D言語]]の記述例。 | ||
+ | 関数square_rootを呼び出してる箇所で引数xが0未満になる可能性のあるところはすべて[[コンパイルエラー]]となる。 | ||
+ | <source lang="d"> | ||
+ | long square_root(long x) | ||
+ | in | ||
+ | {//事前条件 | ||
+ | assert(0 <= x); | ||
+ | } | ||
+ | out (result) | ||
+ | {//事後条件 | ||
+ | assert((result * result) <= x && x < (result+1) * (result+1)); | ||
+ | } | ||
+ | body | ||
+ | {//関数本体 | ||
+ | return cast(long)std.math.sqrt(cast(real)x); | ||
+ | } | ||
+ | </source> | ||
==関連項目== | ==関連項目== |
2014年8月7日 (木) 08:28時点における版
静的解析ツールとは、解析ソフトにソースコードを食わせると、バグの原因になりそうな箇所を指摘してくれるという物である。
概要
静的解析を用いると、わざわざデバッガーを雇い、人力でプログラムを実行してデバッグをせずとも、人為的なコーディング時のバグによりエラーになるであろう箇所を見つけ出してくれる。たとえば「ある関数の引数は0から100の値をとる仕様」だとすると、それを呼び出す側でそれ以外になる例外パターンは無いか、などを芋づる式に調べてくれ、例外パターンがあるとバグとして報告してくれる。
契約による設計に対応しているプログラミング言語の多くは、コンパイラの機能のひとつとして実装していることが多い。 たとえばVisual Studioのお高いエディションがこれに対応しているが、ビルドが激遅になるうえに、C#でちょろっと書いたhello worldすらエラーでまくりで焦ること請け合いである。
なんとも夢のような技術であるが、契約による設計に対応しているプログラミング言語でソースコードがきちんと記述されていれば凄い高い精度を叩き出すが、その他大勢の一般的なプログラミング言語では期待はずれな残念な結果しか得られないことが多い。
例
静的解析がコンパイラに標準搭載されているD言語の記述例。 関数square_rootを呼び出してる箇所で引数xが0未満になる可能性のあるところはすべてコンパイルエラーとなる。
long square_root(long x)
in
{//事前条件
assert(0 <= x);
}
out (result)
{//事後条件
assert((result * result) <= x && x < (result+1) * (result+1));
}
body
{//関数本体
return cast(long)std.math.sqrt(cast(real)x);
}