プログラム分析の開始


10

プログラム分析を始めるためのリソースを探しています

私がこのトピックについて見つけた唯一の本は、ニールソンとニールソンの本です。

それ以外には、「プログラム分析」が章か何かに沿った「コンパイラ」本だけがあるようです。

人々は他のリソースを知っていますか?


3
ニールソンとニールソンを始めるのは難しい。Googleの調査報告書。Static Analysis Symposium(SAS)の最近の議事録をご覧ください。次に、あなたがに興味がある特定の分析をグーグル。
デイブ・クラーク

リストの質問はあまり好きではないこと注意してください。幸いなことにこれは良い答えを集めているようですが、そのような質問をすることは控えてください。自分でGoogleを検索して、見つけたリソースの内容について尋ねます。
ラファエル

回答:


7

残念ながら、このトピックに関する多くの教科書はありません。今日のプログラム分析を学ぶ最良の方法は、利用可能なさまざまなコースを調査し、いくつかの実装を試してから、特定のニーズに合わせていくつかの研究論文を検討することだと思います。以下は、そこにあるものの非常に小さなサンプルです。コンパイラー指向の分析は簡単に見つけられるとおっしゃっていたので、以下ではそのような資料については説明しません。

Webベースのリソース これらは、コンパイルコンテキスト外での静的分析の使用を強調する記事です。

  1. リバースエンジニアリングRedditのディスカッションプログラム解析には、多くの有用なリンクがあります。

  2. 抽象解釈に関するMozilla Wiki

  3. Flash SheridanによるDr. Dobbsの記事Static Deploying

  4. あと数十億行のコード:静的分析を使用して現実世界のバグを発見 ACMのコミュニケーションで。

プログラム分析に関する大学のコース

  1. オーフス大学のAndersMøller は、オブジェクト指向およびWebテクノロジーをカバーするコース教えています。
  2. コロラド大学ボルダー校のBor-Yuh Evan Changには、OCamlの実装と大学院コースを含む基礎コースがあります。
  3. カリフォルニア大学サンタバーバラ校のベンハーデコフ氏は、以前は素晴らしい課題を抱えていましたが、オンラインで利用できなくなりました。彼のコースを受講した一部の学生は、Pythonの実装を利用可能にしたようです。
  4. MarkusMüller-Olmは、Androidの分析に関する大学院コースを持っています。
  5. サーブリュッケン大学のラインハルトウィルヘルムは、タイミング分析、キャッシュ動作予測、形状分析などの静的分析アプリケーションをカバーする大学院コースを教えています。
  6. MSRのSumit Gulwaniがプログラミング言語に関するオレゴンサマースクールで、プログラムのリソース消費量(時間/メモリ)を静的に推定する方法についてのすばらしいコースを教えました。
  7. カリフォルニア大学バークレー校のKoushik Senは、バグの発見に焦点を当てたコース教えており、そのトピックは共謀実行とソフトウェアモデルチェックをカバーしています。
  8. メリーランド大学のジェフリーフォスターは、型システム、モデルチェック、エイリアス分析、その他多くの通常の資料をカバーするコースを教えています。
  9. Patrick CousotはMITで1年間過ごし、抽象的な解釈に関する包括的な基礎コース教えました。割り当てには、具体的な収集セマンティクスからアルゴリズム的に重要なアイデアに至るOCaml実装が含まれます。
  10. 大学院課程分野でいくつかの指導者が教え抽象解釈上はさらに理論に追いつくために良い場所です。
  11. Patrick Cousotは、2009年にプログラミング言語に関するオレゴンサマースクールで抽象的な解釈に関する短いコースを教えました。

遊ぶためのツール

ここには多くの調査ツールをリストしていません。それらの多くがありますが、私はあなたが領域をよりよく理解するためにダウンロードして遊ぶことができるいくつかをリストしようとしました。

  1. Interprocは、数値静的解析について学ぶための非常に教育的なツールです。

  2. あなたが本当に数値解析に夢中なら、エプロン数値抽象化ライブラリー

  3. Slayerは、Microsoft Researchの形状分析ツールです。

  4. jStarは、分離ロジックに基づくJavaのアナライザーです。

  5. Microsoft Researchには、多数のツールを開発している多数のグループがあり、その多くは、ダウンロードまたはWebデモを利用できます。ここにすべてをリストすることはできません。それらをいじることをお勧めします。

他にもたくさんありますが、それだけでしばらくは忙しいでしょう。


うわー、今ではそれが包括的な答えです!どうもありがとう!
abeln 2013年

@Vijayはあなたの答えをありがとう!コンパイラー分析のためのポインターをいくつか追加してもらえませんか?
AnneTheAgile 2013

@AnneTheAgile、拡張機能は別の質問と回答に値すると思います。ですから質問をしてください、私は答えを提供させていただきます。
Vijay D

@VijayD、ありがとう!私はそれを書きました。cs.stackexchange.com/questions/13392/...
AnneTheAgile

返信が遅すぎて、投稿が削除されました。@VijayDおそらくあなたは私にIMするか、ここに追加できますか?私が興味を持っているのは基本です。「見つけやすかった」「コンパイラ志向の分析」をどうやって見つけたらいいのか分かりません。私はこの分野に不慣れで、正しい方法で始めたいと思っています。ty!
AnneTheAgile 2013

2

このフィールドは非常に広範です...プログラムが正確であることの証明を探してください(Kleeのようないくつかのツールがあります)。次に、さまざまな洗練されたさまざまな種類の「プログラムチェッカー」(たとえば、範囲のサンプルについてはスプリント欠陥ファインダーを参照)、「プログラミングガイドラインの遵守」をチェックするプログラムがあります。Linuxの試合もこのカテゴリに分類されます。

動的なツールには、あらゆる種類のパフォーマンス/テストカバレッジツールがあり、valgrindなどのメモリチェック用のツールがあります。

関心のある範囲を絞り込んでから、ドリルダウンします。


ありがとう。あなたが言及するのはツールですが、本や調査については、静的プログラム分析についてはどうですか?
abeln 2013年

1

プログラム分析に2つの研究焦点があります。dynamicおよびstaticプログラム分析です。

プログラム分析を最初に理解するために、コンパイラのバックグラウンドがある場合は、ドラゴンブックの第4章、第6章、第9章を読むことをお勧めします。

または、少なくとも基本的なグラフを知っている場合は、MIT 6.820CMU 17-355 / 17-665 / 17-819などの大学院レベルのコースに従うことをお勧めします。

上記は静的プログラム分析に関するものです。動的プログラム分析にもっと関心がある場合は、プログラムプロファイリングから始めるのが良いでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.