QAスタッフは、表示できないキャッシュロジックをどのようにテストできますか?


33

Webアプリケーションにキャッシングレイヤーを実装しましたが、キャッシングはユーザーに対して透過的であるため、QAがどのようにテストするのか疑問に思っています。

私が持っているアイデアの1つは、キャッシュに入力するコードを呼び出すメソッドにログを記録し、オブジェクトがキャッシュからプルされたときと、データベースからの再作成が必要なときを記録し、テスターがログを表示して、たとえば、特定のオブジェクトは、すべてのページビューではなく、10分ごとにデータベースからリロードされます。

しかし、この状況に対してより良い実践を提案できる人はいますか?




5
私は終日パフォーマンスに取り組んでおり、「QAで変更をテストするにはどうすればよいですか?」よく聞かれる質問です。
ブランドン

1
通常、キャッシュは、別のソース(db、リモートサーバー、計算コストの高いメソッドなど)からの結果をメモリに保存することで、操作を高速化することを目的としています。したがって、キャッシュをヒットするときに物事にかかる時間を測定することは、最も簡単な方法のようです。また、古いキャッシュの問題も確認します(以前のバージョンがまだキャッシュされているために実際のデータの更新が表示されない)
GordonM

回答:


37

1つの質問は、キャッシュ自体が本当にQAによってテストされる必要がある要件であるかどうかです。キャッシュによりパフォーマンスが向上するため、パフォーマンスの違いをテストして、要件を満たしていることを確認できます。

ただし、キャッシュを担当する人はだれでも、キャッシュに関するテストを行うことをお勧めします。パフォーマンスカウンターを使用しました。キャッシュシステムがこれらを利用する場合、簡単です。キャッシュ自体からカウントを取得する方法がある場合、それは別のオプションです。

あなたのアプローチを使用することもいいです。これらのいずれかが結果をチェックする自動テストにラップされている場合、誰もログを調べて回答を見つける必要はありません。


キャッシュの代わりにパフォーマンスをテストするために+1。単独でキャッシュするビジネス上の価値は何ですか?(なし。)確かに、何かに顕著な影響を与えることに取り組んでいます-他になぜそれを実装するのに時間を費やすのですか その影響をテストします。
アレクサンダーバード

74

システムのパフォーマンスが十分ではなかったため、キャッシュを実装しました(私は推測します)。それはユーザーに関連するものです。QAが確認できることは次のとおりです。

  • キャッシュが導入された後、システムがまだ正しいこと。これは、キャッシュをだまして失効したデータを提供しようとする必要があることを意味します。
  • システムがパフォーマンスのしきい値を満たすようになったことは、パフォーマンスを改善することを決定したときに満たされていなかったことです。古い測定値と新しい測定値を比較できます。

ユーザー(ひいてはQA)は、問題の解決方法を気にしないことを忘れないでください。彼らは、問題が解決たことだけを気にし新しい問題を作成しませんでした。これは、キャッシュの実装、文字列解析の改善、ハードウェアのアップグレード、または魔法の妖精の粉塵をサーバーに振りかけた場合に当てはまります。


1
。あなたは問題がQAが興味を持っているものの非常に単純化した図であり、解決方法QAは気にしないことを示す彼らは気にします実際にパフォーマンスの向上、導入される追加技術などの債務、リスク、または欠陥が、どうか
エリック・

4
@Ericソフトウェア開発では、グループとしての「QA」は通常、開発者/エンジニアを指しません。技術的負債は、開発者/技術者の関心事です(また、スケジュール、コストなどに影響を与える可能性があるため、管理上の関心事です)。リスクについても同じことが言えます。QAの仕事は、ソフトウェアが要件を満たしていることを確認することです(不明確な要件をフラッシュするプロセスで偶然にも役立つ可能性があります)。実装にまったく関心がある場合、それはシステムを破壊する創造的な方法を見つけるための手段としてのみである必要があります。
jpmc26

3
@Eric私は何も混乱していない。「QA」ソフトウェアのテスターを指します。あなたはとても広く以来、それは、彼らのためにカスタムを構築し、システムの場合、それはソフトウェアの一部を開発し、会社全体、さらにはクライアントを含めるべきであると用語を解釈している誰もが品質に手を持っています。
jpmc26

1
@Eric言語とセマンティクスがどのように機能するかについて私に議論させないでください。このStackExchangeで、30分以内に用語がそのように使用される5つのインスタンスを見つけるように挑戦します。さらに、その定義によっても、個別のQAグループが製品自体以外の問題に対処するためにできる最善の方法は、開発者にポリシーを課すことです。ポリシーとプロセスが良い製品を作る上で引き上げられると、通常は悪い製品になります。また、私が一緒に働く「QA」の人たちは間違いなくテスターであり、私の開発プロセスについてはほとんど発言していないことを保証できます。
jpmc26

4
@Eric:「QA」をより全体的な見方に定義する会社または人々のグループを止めるものは何もありません。しかし、私の経験ではQA段階(5つの非常に異なる企業間で)という名前の通り -とそれに特化した者-ソフトウェア開発では、通常、システム動作のブラックボックステストに焦点を当てています。より広い品質問題に関する専門家の角度をカバーするために、「品質管理」、「クワリティー」、およびより多くの発明された名前もあります。
ニールスレーター

3

重要なビジネスロジックやシステム状態をブラックボックスの奥深くに埋めると、正しいシステム動作の検証が困難になります。システム全体よりも、システム内の単一のコンポーネントの動作を徹底的にテストする方が簡単です。このようなことを何らかのメカニズムを通じて明示的に公開することで、ユニット/回帰/統合/ QAを何らかの意味のある方法でテストできるようになりました。

キャッシュを使用する1つのオプションは、キャッシュの詳細(コンテンツ、状態など)を提供する特別なページを公開することです。これは、開発および潜在的に本番環境でのデバッグに役立ちます。QAはこのページを使用して、キャッシュの予想される動作に関する詳細が提供されている場合、キャッシュのテストケースを作成することもできます。パフォーマンスカウンターやログファイルを使用してキャッシュの動作を明示的に文書化することも、あまり見られないが実行可能なアプローチです。

このアプローチは、エンドツーエンドのパフォーマンステストに代わるものではないことに注意してください。これは、キャッシュ自体が正しく動作することを保証するメカニズムです。キャッシュがパフォーマンスに意図した影響を与えるかどうかを判断するには、パフォーマンステストを使用する必要があります。

また、システムのコンポーネントを、キャッシュの導入など、同じインターフェースを実装する新しいコンポーネントと交換することは、不安定で一見複雑な変更になる可能性があることに注意してください。キャッシュの例では、以前はステートレスであった状態を導入しているため、発見や再現が困難なバグを作成する可能性があります。このような変更には、予想されるシステムの動作を検証するための完全な回帰テストを常に伴う必要があります。


3

Andyの答えに示されているように、パフォーマンスをテストします。

多くの組織でキャッシング(およびパフォーマンス)を実装する際の最大の障害は、実際にさまざまな実世界の負荷およびパフォーマンステストのために優れたパフォーマンステストとテストを実行できる環境を持っていることです。

これを実現するには、できる限り厳密にコストを考慮して、本番環境をミラーリングするパフォーマンステスト環境をセットアップする必要があります。これはおそらく、迅速なアプリケーション開発を可能にするために小さく、より自己完結型である必要がある現在の開発環境ではないでしょう。また、開発環境ではキャッシュの使用量が少なくなる傾向があるため、パフォーマンステストのために実稼働環境を適切に表すことはできません。

パフォーマンステスト環境では、アプリを実稼働「モード」で実行する必要があります。本番環境では複数のサーバーを使用する必要があり、データベース接続プールとキャッシュは本番環境などに設定する必要があります。

また、負荷テストに役立つツールを検討する必要があります。
jmeterは非常に人気がありますが、使用するのは非常に非友好的で原始的です。
私が使用した別のルートはcurl、Rubyスクリプトでurlを使用することです。

明確にする

  • ベースラインパフォーマンステストは、1つのリクエストが行う時間をテストするためのものです。
  • 負荷テストはパフォーマンステストに似ていますが、システムが他の要求からも負荷を受けている場合の応答を調べます。

また、次のリンクが役立つ場合があります。


2

テスターに​​サーバーをリブートさせ、入力したデータがまだ存在することを確認してください。私は、何ヶ月もテストを行ったシステムを見ましたが、それが完了すると失敗しました!

テストが最も難しいのは、データが更新されても、キャッシュから古い結果が返されることは決してないということです。

これは、キャッシュ内のデータを常に使用して、ユーザーが変更を行った後に表示される確認ページにデータを入力することにより、部分的に役立ちます。たとえば、データベースの更新に使用したオブジェクトは使用しませんが、キャッシュからデータを要求し、次にデータをデータベースから要求します。少し遅くなりますが、バグがより早く表示される可能性が高くなります。


1

これは実際には非常に簡単な答えがあり、キャッシングのレベルに関連しています。キャッシングが正しいときに観察するのは、リクエストのターゲットにリクエストがないことです。そのため、「期待される結果」というハックされたQAフレーズに帰着します。

Web層でキャッシュを実装する場合、キャッシュの対象となるアイテムは、テストされた各ユーザーセッション(クライアントキャッシュを実装する場合)ごとに1回、または複数のユーザー(CDNスタイルキャッシュを実装する場合)ごとに1回しか表示されないと予想します。一般的な結果を得るためにデータ層にキャッシュを実装する場合、データ層のプロファイルログにクエリがないことに加えて、キャッシュ層のキャッシュヒット率が高いことが予想されます。

等...


0

おそらく、ユニットテストを使用して、コード(おそらくコードを作成したプログラマー)によってテストされるものがあります。キャッシングコードの正確性をテストすることは、その1つです。(あなたがこの質問をする方法から、私はあなたのQAの人々がアプリケーションを「ブラックボックス」として扱い、その外部インターフェースを通してそれをテストすると推測します。)


0

QAは主にブラックボックステストを行うため、キャッシングロジックは開発者がユニットテストする必要があります。

QAはパフォーマンスの側面または実装した修正のみに関心があるため、QAにキャッシュを有効/無効にするメカニズムまたはパフォーマンスを改善するために使用したメカニズムを提供し、パフォーマンスの違いを検証できます。もちろん、QAは古いリリースをパフォーマンスが改善されたリリースと照合することもできます。


-4

キャッシングソリューションをテストしていたときに、基本的にパフォーマンスをテストしたものを実装しました。XML結果のキャッシュソリューションを実行しました。キャッシュ後、応答に非常に短い時間がかかります。また、ログエントリを確認して、サーバーログで確認しました。


3
あなたが何を言っているのか、またはあなたの答えがそれが前の7つの答えにないということを理解しているのか、私にはよくわかりません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.