問題タブ [dynamic-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
code-analysis - 動的コード分析とは?
動的コード分析とは?
静的コード分析との違いは何ですか (つまり、静的コード分析ではキャッチできないものをキャッチできます)?
境界チェックとメモリ分析について聞いたことがありますが、これらは何ですか?
動的分析を使用してチェックされるその他の項目は何ですか?
-アダム
java - Java の可変共有データのバグを見つけるためのツール
維持しなければならない大規模なレガシー システムがあります。コードベースはいたるところでスレッドを使用しており、それらのスレッドは多くの変更可能なデータを共有しています。私は知っています、悪いですね。とにかく、「アプリケーション全体を最初から書き直す」と答えないでください。そうしないと、投票します:-)コードベースでいくつかの静的分析ツールを実行しようとしましたが、どれも頻繁に発生するこのケースをキャッチしていないようですソースコードでは、複数のスレッドが、揮発性または同期としてマークされていない変数を読み書きしています。通常、これは「runFlag」タイプの変数で発生します。この例は、Effective Java 2nd edition ページ 260 にあります。
この例は、Sun JVM に「-server」起動パラメータが指定されている Windows/Linux では決して終了しません。では、これらの問題を (半) 自動で見つける方法はありますか、それとも完全にコード レビューに頼る必要がありますか?
sql - 複雑な SQL クエリの作成を支援する最適なツールは?
特定の SUM() 集計が SQL クエリで間違って合計される理由を理解するのに多くの時間を費やしていることがよくあります。この問題は、JOIN を追加するときに注意を怠ると、重複した値が合計されるなどの結果になることがよくあります。多数の JOIN、ネストされたサブクエリ、GROUP BY などを含む大きなクエリを使用すると、デバッグが非常に複雑になります。
データの合計や結合などをグラフィカルに示すことで、複雑なクエリの作成とデバッグを容易にするツールが存在するかどうかを知りたいです。
私が探しているものの例はhttp://www.imada.sdu.dk/~sorenh07/misc/datacentric-querytool.pngに示されています
もちろん、これは初期のモックアップにすぎません。これに関するコメントをお待ちしております。
java - Java 用の興味深い無料のオープンソースの動的分析ツールは何ですか?
大学の課題で使用およびレポートする興味深い動的アナライザーを探しています。ツールは次のとおりです。
- オープンソース (彼らから学べるように)
- 無料(結果を共有できるようにしたいので、スピーチとビールの両方のように、それぞれタイトフィストです)
- Java 向け (ソースまたはバイトコード)
これには、パフォーマンス プロファイラーが含まれますが、これに限定されません。コードカバレッジ、マルチスレッドの正確性など、動的である限り、あらゆる種類の分析を実行できます。
生成された結果は何らかの形で役立つはずですが、工業的な強度である必要はありません。
同様の質問:
では、Java 用の興味深い無料のオープンソース動的分析ツールにはどのようなものがあるでしょうか?
c++ - static_cast、dynamic_cast、および reinterpret_cast の誤用を検出する C++ ツールはありますか?
次の質問に対する回答は、C++でのstatic_cast
、dynamic_cast
、およびの推奨される使用法を示しています。reinterpret_cast
static_cast、dynamic_cast、const_cast、および reinterpret_cast はいつ使用する必要がありますか?
この種のキャストの誤用を検出するために使用できるツールを知っていますか? PC-Lint や Coverity Static Analysis などの静的解析ツールはこれを行いますか?
この質問を促した特定のケースはstatic_cast
、ポインターをダウンキャストするための不適切な使用であり、コンパイラーは警告しません。ツールを使用してこのケースを検出したいと思います。開発者がこの間違いを決して犯さないとは思いません。
java - 時間の経過に伴うメソッド呼び出しをグラフ化するツール
Java アプリのメソッド呼び出しを経時的にグラフ化できるツールを探しています。おそらく、プロファイラーまたはその他のログ解析ツールでしょうか?
私はPythonで何かを書くことができることを知っており、これを行うために努力します。私は車輪を再発明しないことを望んでいました。
編集:
私が最終的にやったのは、ログを解析し、5 秒間隔でスナップショットを取得するための Python を作成することでした。次に、Google ドキュメントとスプレッドシートを使用して、時間と頻度の 2 列のデータを持つグラフでデータを視覚化しました。Google ドキュメントはとても役に立ちました。素敵なフルサイズのビューには、「チャートを自分のシートに移動」を使用してください。少しきれいになったら、Pythonを投稿します。
これは、コメントで指定したメソッドからの出力グラフです
python - 動的バイナリ インストルメンテーション フレームワーク PIN への Python インターフェイス
Python を使用して、バイナリ ファイルの分析に取り組んでいます。私はデバッガーを使用して動的分析を行っています (つまり、アプリケーションを実行し、ブレークポイントを使用してランタイム実行を取得します)。ただし、 PINなどのバイナリ インストルメンテーション フレームワークを使用できれば、結果を改善できます。PIN は C++ で開発され、クローズド ソース (dll のみ) として提供されます。PinTools と呼ばれるものを作成し、インターセプトする場所と対象を記述します。Python を引き続き使用できるように、PIN 機能を Python に移植したいと考えています。「ctypes」とboost-pythonを認識しています。
私の問題は、PIN を使用するために、pintool を作成し、Pin と pintool を使用してバイナリ実行可能ファイルを実行することです (JIT を使用してアプリケーションを実行するようなものです)。さて、ctypesなどを使用してPIN関数をインポートし、このpythonコードを使用してバイナリを動的に分析できるかどうかはわかりません。このタスクの進め方について、提案やガイドラインを教えてください。
そこで、基本的に、PIN フレームワークへの Python インターフェイス (ラッパー) を作成したいと思います。
java - 迅速な型分析と変数型分析のための定義済みアルゴリズム
Java ソースファイルに対してプログラム解析を実行しようとしています。変数の型分析と迅速な型分析を実行するための事前定義されたアルゴリズムはありますか?
clojure - Clojure 関数に影響を与える Var はどれですか?
Clojure で定義された関数の結果に影響を与える可能性がある Vars をプログラムで特定するにはどうすればよいですか?
次の Clojure 関数の定義を考えてみましょう。
これは の関数ですがx
、*increment*
(またclojure.core/+
(1)の関数でもあります。しかし、私はそれについてあまり関心がありません)。この関数のテストを作成するときは、関連するすべての入力を確実に制御したいので、次のようにします。
(誰かが合理的に変更する可能性のある構成値であると想像してください*increment*
。これが発生したときに、この関数のテストを変更する必要はありません。)
(f 1)
私の質問は次のとおりです: の値が依存する可能性がある*increment*
が他の Var には依存しないというアサーションをどのように記述すればよいですか? いつか誰かがコードをリファクタリングして関数を
テストを更新することを怠り、ゼロであってもテストを失敗させたいと思い*additional-increment*
ます。
もちろん、これは単純化された例です。大規模なシステムでは、多数の動的 Var が存在する可能性があり、それらは関数呼び出しの長いチェーンを通じて参照される可能性があります。Var を参照するf
呼び出しg
が呼び出された場合でも、ソリューションは機能する必要があります。に依存してh
いると主張しないのは素晴らしいことですが、これはそれほど重要ではありません。分析対象のコードがJava 相互運用機能を呼び出したり使用したりしている場合、もちろんすべての賭けは外れます。(with-out-str (prn "foo"))
*out*
eval
ソリューションの 3 つのカテゴリを考えることができます。
コンパイラから情報を取得する
存在しない Var を参照しようとすると、次のようにスローされるため、コンパイラは関数定義をスキャンして必要な情報を取得すると思います。
これは、問題のあるコードが実行されるかどうかに関係なく、コンパイル時に発生することに注意してください。したがって、コンパイラは、関数によって参照される可能性のある Vars を認識している必要があり、その情報にアクセスしたいと考えています。
ソース コードを解析して構文ツリーをたどり、Var がいつ参照されたかを記録する
コードはデータであり、そのすべてだからです。
macroexpand
これは、各 Clojure プリミティブとそれらが使用するあらゆる種類の構文を呼び出して処理することを意味すると思います。これはコンパイル フェーズに非常によく似ているため、コンパイラの一部を呼び出したり、独自のフックをコンパイラに追加したりできれば素晴らしいと思います。Var メカニズムを計測し、テストを実行して、どの Var がアクセスされるかを確認します。
他の方法ほど完全ではありませんが (私のテストが失敗したコードのブランチで Var が使用されている場合はどうなるでしょうか?)、これで十分です。
def
Var のように動作するが、何らかの方法でそのアクセスを記録するものを作成するには、再定義する必要があると思います。
(1)実際には、再バインドしてもその特定の機能は変わりません+
。しかし、Clojure 1.2 では、最適化を行うことでその最適化をバイパスでき、それ(defn f [x] (+ x 0 *increment*))
から を楽しむことができます(binding [+ -] (f 3))
。Clojure 1.3 では、再バインドを試みると+
エラーがスローされます。
c# - クラス間の *実行時* 依存関係をキャプチャする .Net/C# 用のツールはありますか?
クラス間の実行時の依存関係を取得するために .Net/C# プロジェクトに使用できるツールは何ですか? この質問は非常に有用であることがわかりましたが、提案されたツールは静的な依存関係グラフをキャプチャします。クラスのインスタンス化のグラフを見たいだけです。
私は VS 2008 を使用しています (ただし、必要に応じて他のバージョンをインストールできます)。
UPD: 私の目標はこれです。私は巨大な古いコードベースを持っています。(たとえば) 500 個のクラスがありますが、DB 駆動型のワークフローが何年にもわたって変更されたため、(たとえば) 現在は 100 個のクラスしか使用されていません。そのため、静的依存関係の分析は圧倒されすぎて消化できません。