私がこのトピックについて見つけた唯一の本は、ニールソンとニールソンの本です。
それ以外には、「プログラム分析」が章か何かに沿った「コンパイラ」本だけがあるようです。
人々は他のリソースを知っていますか?
私がこのトピックについて見つけた唯一の本は、ニールソンとニールソンの本です。
それ以外には、「プログラム分析」が章か何かに沿った「コンパイラ」本だけがあるようです。
人々は他のリソースを知っていますか?
回答:
残念ながら、このトピックに関する多くの教科書はありません。今日のプログラム分析を学ぶ最良の方法は、利用可能なさまざまなコースを調査し、いくつかの実装を試してから、特定のニーズに合わせていくつかの研究論文を検討することだと思います。以下は、そこにあるものの非常に小さなサンプルです。コンパイラー指向の分析は簡単に見つけられるとおっしゃっていたので、以下ではそのような資料については説明しません。
Webベースのリソース これらは、コンパイルコンテキスト外での静的分析の使用を強調する記事です。
リバースエンジニアリングRedditのディスカッションプログラム解析には、多くの有用なリンクがあります。
抽象解釈に関するMozilla Wiki。
Flash SheridanによるDr. Dobbsの記事Static Deploying
あと数十億行のコード:静的分析を使用して現実世界のバグを発見 ACMのコミュニケーションで。
プログラム分析に関する大学のコース
遊ぶためのツール
ここには多くの調査ツールをリストしていません。それらの多くがありますが、私はあなたが領域をよりよく理解するためにダウンロードして遊ぶことができるいくつかをリストしようとしました。
Interprocは、数値静的解析について学ぶための非常に教育的なツールです。
あなたが本当に数値解析に夢中なら、エプロン数値抽象化ライブラリー。
Slayerは、Microsoft Researchの形状分析ツールです。
jStarは、分離ロジックに基づくJavaのアナライザーです。
Microsoft Researchには、多数のツールを開発している多数のグループがあり、その多くは、ダウンロードまたはWebデモを利用できます。ここにすべてをリストすることはできません。それらをいじることをお勧めします。
他にもたくさんありますが、それだけでしばらくは忙しいでしょう。
このフィールドは非常に広範です...プログラムが正確であることの証明を探してください(Kleeのようないくつかのツールがあります)。次に、さまざまな洗練されたさまざまな種類の「プログラムチェッカー」(たとえば、範囲のサンプルについてはスプリントや欠陥ファインダーを参照)、「プログラミングガイドラインの遵守」をチェックするプログラムがあります。Linuxの試合もこのカテゴリに分類されます。
動的なツールには、あらゆる種類のパフォーマンス/テストカバレッジツールがあり、valgrindなどのメモリチェック用のツールがあります。
関心のある範囲を絞り込んでから、ドリルダウンします。
プログラム分析には、2つの研究焦点があります。dynamic
およびstatic
プログラム分析です。
プログラム分析を最初に理解するために、コンパイラのバックグラウンドがある場合は、ドラゴンブックの第4章、第6章、第9章を読むことをお勧めします。
または、少なくとも基本的なグラフを知っている場合は、MIT 6.820やCMU 17-355 / 17-665 / 17-819などの大学院レベルのコースに従うことをお勧めします。
上記は静的プログラム分析に関するものです。動的プログラム分析にもっと関心がある場合は、プログラムプロファイリングから始めるのが良いでしょう。