NodeJS REST API のカスタム テスト フレームワークの一部として、考えられるすべての結果とテスト スイートが受け取った結果を 比較することで、テストが適切なカバレッジを提供しなくなったことを自動的に検出したいと考えています。
これを行うためにどのような方法がありますか? カバレッジ分析が必要なエントリ関数 (API エンドポイント) のリストを持つ REST API に使用され、各エントリ関数は標準的な方法でリクエスタに応答する既知の「終了関数」で終了すると想定できます。
これまでに見つけたものは次のとおりです。
1:基本的な解決策(現在実施中)
- 各 REST エンドポイントを記述するときは、たとえば、すべての可能な結果「コード」のリストを手動で作成します [Success、FailureDueToX、FailureDueToY]
- テストが実行されたら、リスト内のすべてのコードが各エンドポイントのテスト スイートによって認識されていることを確認します。
長所:非常に基本的で使いやすい。パフォーマンス テストの時間は変更されません
短所:多くの手動チェックでエラーが発生しやすい。「FailDueToX」に 5 つの方法があり、そのうちの 1 つだけをテストする場合、問題はフラグされません。「カバレッジ」の非常に基本的な定義
2: 静的解析
- コードをある種の解析ツリーに解析し、「終了関数」のすべてのインスタンスを探します
- API エンドポイントに到達するまでツリーをたどり、期待される出力としてその出口インスタンスをエンドポイントに追加します (ハッシュなどを介してそこに到達するには、スタック トレースの記録を保持する必要があります)。
- テストが実行されると、エンドポイントはスタック トレース ハッシュなどを返し、これが予想される出力リストと比較されます。
長所:自動。同じ出力コードになる可能性のあるさまざまな分岐をキャッチします
短所:解析ツリーの生成は簡単ではありません。実行されることのないデッド コードは検出されません。テストスイートは同期を保つ必要があります
3: プロファイリング
過去に、 GreenHills コード カバレッジ ツールを使用して組み込みシステムでこれを行ったことがあります。
- dtraceなどのプロファイラーを起動し、各テストのスタック ログを個別に記録します。
- スタック ログを解析し、コードの各行に「テスト」を割り当てます
- 注釈付きのコードを手動で分析して、ギャップを見つけます。
長所:半自動。総カバレッジに関する詳細情報を開発者に提供します。見える
短所:テストが遅くなります。パフォーマンス テストを並行して実行できません。考えられる結果が発生しない場合はフラグを立てません。
他に何があり、静的分析とプロファイリングの目標を達成するのに役立つツールは何ですか?