「正確なテスト」を1つの記事で徹底解説してみました

ソフトウェアのテストでは、多くの場合、次の 2 つの基本的な問題 (困難) に遭遇します。

テスト漏れがないことを保証するのは困難です。私たちは多くのテストを実施しましたが、テストがどのように進むかはわかりません。また、ソフトウェアがオンラインになった後に問題が発生するかどうかもわかりません。

実行するテスト ケースを選択する: 大量の回帰テスト ケースに直面すると、テストを完了するのに十分な時間がありません。効果的なテスト ケースを選択するにはどうすればよいでしょうか? リスクベースのテスト戦略、動作プロファイルベースのテスト戦略、または組み合わせたテスト戦略など、いくつかの戦略がありますが、それらは主にテスターの経験に依存しており、比較的主観的です。

人々はそのような基本的な問題を解決しようとしたため、「精密テスト」が生まれました。アジャイル開発モデルでは、開発ペースが加速し、テストリソースが従来よりも少なくなるため、この問題がより顕著となるため、「正確なテスト」に一層の注意を払っています。

1. 精密検査とは何ですか?

正確なテストとは、データを通じて 2 つの基本的な質問に答えることです: 何を測定するのか、何を測定するのか? つまり、正確なテストでは、特定のアルゴリズム、技術的手段、ツールを使用して、コード、プログラムの実行プロセス、テスト ケースなどとその関係を分析します。これにより、関連する情報と知識を取得し、テスト範囲を正確に位置付けて最適化し(テスト ケースの合理化など)、正確なデータを使用してテスト結果と製品品質を評価し、テスト プロセス全体をより効率的、正確かつ信頼できるものにします。テスト漏れのリスクを効果的に削減し、テストのコストを最小限に抑えます。

正確なテストは、品質エンジニアリングのインテリジェントな構築における重要なトレンドであり、デジタル ソフトウェア テストの具体化でもあり、テスト プロセスを明確に理解し、必要な定量的なテスト目標 (テスト カバレッジなど) を達成することができます。

2. 正確なテスト実施方法

正確なテストを実現することは原理的には比較的簡単ですが、重要なのは次の 2 つの基本タスクを実行することです。

効果的なコード依存関係分析を完了し、ビジネス依存関係分析まで拡張して、各コード変更によって影響を受けるコード スコープを正確かつ正確に特定できます。コード影響範囲は、クラス メソッド、関数レベル、またはコード ブロックまで正確です。

コードとテスト ケース間のマッピング関係を確立し、特定された影響範囲に基づいて実行する必要があるテスト ケースを推奨できるようにします。

コードとテスト ケースの間のマッピング関係を確立したい場合、または正確なテストの効果を評価したい場合は、通常、コード カバレッジ分析を使用して、どのコードがテスト ケースによって実行されるかをよりよく理解し、テスト ケースでどのコードがカバーされているかをさらに明確にします。テスト実行。テスト実行でカバーされないコードなど。

写真

3. 正確なテストの実践

正確なテストの実装を実践するには、上記の 2 つの基本タスクを達成するために、いくつかのオープンソース ツールを使用するか、いくつかのプラットフォームを自分で開発する必要があります。たとえば、コード カバレッジ監視プラットフォームを使用して、プログラムの実行中に動的なコード カバレッジ データを収集し、これに基づいてユース ケースのナレッジ ベースを構築できます。オープン ソースの JVM サンドボックス (https://github.com/) を使用します。 alibaba/jvm-sandbox) は、実際のシステム動作状況を記録できます (トラフィック記録など)。

手動で実行されたテスト ケースと自動化されたテスト スクリプトにもさまざまな処理が行われます。たとえば、手動で実行されるテスト ケースの記録では、クライアントに埋め込まれた SDK を使用して、ユーザーが記録操作を実行し、データのクリーニング、収集、レポートを完了し、サーバー上でリアルタイムで分析するための UI インターフェイスを提供します。自動テスト スクリプトは比較的シンプルで、1 つずつ実行してカバレッジ データを収集でき、コードとユース ケースの関係を簡単に確立できます。

ここに画像の説明を挿入します

コード レベルでの依存関係分析は、呼び出しチェーンの分析にも拡張できます。これは、コードの依存関係分析を行う場合と同様に、プログラムの実行時に収集される情報がコードの呼び出し関係 (依存関係) をより正確に反映できるためです。ソース コードからコンパイルされたバイナリ バイトコードに至るまで、メソッドとコード ブロックの呼び出し関係をより正確に反映できます。

また、ユースケースの推奨効率を向上させるために、ユースケース ID のインデックスを作成する必要があります。ユースケースに関連するメソッド(またはコードブロック)、上流および下流のコールリンク、および対応するカバレッジに基づいて、異なる粒度でさまざまなバージョンのコール情報を構築し、テストケースインデックスサービス、ユースケースリコールサービスなどを提供します。

AI が普及している今日の時代では、ナレッジ グラフと機械学習アルゴリズムを自然に導入して、正確なテストの効果をさらに最適化できます。例えば:

コードの依存関係構造は、「(パッケージに属するコード)-[インクルード]->(ファイル)-[インクルード]->(関数)-[呼び出し]->(関数」のような構造など、グラフを通じて保存できます。 )"。プロジェクト呼び出しチェーンの元のデータを取得した後、各呼び出しリンクを深くトラバースして、各パッケージ、ファイル、関数の対応関係に加え、パス、場所、入出力パラメーター、コメント、コードを収集します。ラインおよびその他の情報。

さらに「ユースケースと関数の呼び出しチェーン」の重みを収集し、その重みに基づいてユースケースを推奨できます。

ユースケースの類似度に応じて、すべてのユースケースのセグメント化、語彙の確立、tf-idf法を使用したユースケース間のテキスト類似度の計算、GCN(グラフ畳み込みニューラル)の使用など、類似性の高い一部のユースケースを除外することができます。ネットワーク) を使用してユースケースの類似性を計算します。

4. よくある質問

Q1: 0から1まで正確なテストシステムを構築するにはどうすればよいですか?

A1: Java テクノロジー スタックと対応するツールに基づいて開始し、それらを 1 つずつ克服できます。カバレッジ分析と開発から始めて、テスト ケースの有効性を理解し、テスト ケースの品質と効率を向上させます。次に、コードの依存関係分析を行い、コードの差分を使用してコードの影響範囲を理解し、コードとテスト ケースの関係をゆっくりと確立します。依存関係により、より正確かつ効果的なテストを実現できます。最終的には、完全に自動化されたアプローチに移行して、効率的で正確なテスト システムを構築します。つまり、コードのナレッジ ベースとユース ケースのナレッジ ベースの構築、完全なトラフィックの記録、および自動分析が完了します。コールチェーンの構築、ユースケースの自動推奨やリコールなどのツールプラットフォームの構築。

Q2: 完全かつ詳細で再利用可能な正確なテスト計画を提供してもらえますか? この正確なテスト プラットフォームを構築するためにどのオープン ソース ツールを使用できるかについて詳しく知りたいですか? 正確なテストの迅速な実施をサポートできるツールチェーンを形成するにはどうすればよいでしょうか?

A2:: 先に紹介した ByteDance と Youkudu は、トラフィック収集とコード分析という 2 つの基本機能のおかげで、完全な実装ソリューションを実装しています。トラフィック収集は、二次開発が必要ですが、オープンソースの JVM サンドボックスに基づいて実行できます。コード分​​析では、コード差分ツールを使用してコードの変更を理解できる一方で、AST ツール (Babel、jscodeshift、esprima、recast、acorn、estraverse など)、カバレッジ分析を使用できます。ツール (JaCoCo など)、Java 依存関係分析 (JDA) + Java 独自の jdeps およびコード依存関係分析用のその他のソリューション。

Q3: 1 から N までの正確なテストを実現し、1 つのチームで大規模なレプリケーションを実現するにはどうすればよいですか?

A3: 正確なテスト システム (プラットフォーム) が構築されると、チームを使用する利点に基づいて推進するのは比較的簡単です。メリットが明らかであるためです。特に完全に自動化された方法で正確なテストを実行する場合は、調整も可能です。いくつかの統一されたルールとプロセスを備えたものであり、さらに重要なことに、精密テスト プラットフォームは企業の研究開発プラットフォームとシームレスに接続されている必要があり、理想的には、CI/CD パイプラインと柔軟に統合され、チームが手間なく使用できるようにする必要があります。

Q4: 正確なテストは回帰にのみ使用できますが、新機能のテストを有効にするにはどうすればよいですか?

A4: 回帰テストのケースは増え続けており、膨大なレベルに達するため、完全な回帰のコストは非常に高くなりますが、同時に、新規/変更コードの量は比較的少なく、影響範囲は限られています。すべての回帰テスト ケースを実行する必要はありませんが、経験に基づいてユース ケースを選択するとテストの見逃しにつながるため、正確なテストを行うことが非常に必要です。新しい機能は比較的限られており、新しい機能用に作成されたテスト ケースを実行する必要があるため、通常は「正確なテスト」戦略は必要ありません。ただし、正確なテスト プラットフォームの助けを借りて、テスト カバレッジをより適切に達成し、テスト ケースの品質とテスト結果の適切性を向上させることができます。さらに、新しい関数は次のイテレーションでは古い関数になり、そのために書かれたテスト ケースも回帰テスト ケースになるため、コードに関する情報を取得するには、新しい関数も正確なテスト プラットフォームで実行する必要があります。およびテスト ケースを作成し、コードのナレッジ ベースとユース ケースのナレッジを向上させます。

最後に、私の記事を注意深く読んでくださった皆さんに感謝します。互恵性は常に必要です。それほど価値のあるものではありませんが、使用できる場合は、直接受け取ることができます。

ここに画像の説明を挿入します

この情報は、[ソフトウェア テスト] の友人にとって最も包括的かつ完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。また、皆さんのお役に立てれば幸いです。 

おすすめ

転載: blog.csdn.net/2301_78276982/article/details/132832529