Wie können QA-Mitarbeiter Caching-Logik testen, die sie nicht sehen können?

33

Ich habe gerade eine Caching-Ebene in meine Webanwendung implementiert und frage mich nun, wie die Qualitätssicherung dies testen soll, da das Caching für den Benutzer transparent ist.

Eine Idee, die ich habe, besteht darin, die Protokollierung in die Methoden zu integrieren, die den Code aufrufen, der den Cache auffüllt, und aufzuzeichnen, wann ein Objekt aus dem Cache abgerufen wird und wann eine Neuerstellung aus der Datenbank erforderlich ist. Anschließend können die Tester die Protokolle anzeigen, um festzustellen, ob Beispielsweise wird ein bestimmtes Objekt alle 10 Minuten aus der Datenbank neu geladen, anstatt aus jeder Seitenansicht.

Aber kann jemand bessere Praktiken für diese Situation vorschlagen?

Joshua Frank
quelle
6
verwandt: Load Test Methodology
Mücke
5
Ich arbeite den ganzen Tag an der Leistung und "Wie kann die Qualitätssicherung Ihre Änderung testen?" ist eine Frage, die mir ständig gestellt wird.
Brandon
1
Im Allgemeinen soll ein Cache einen Vorgang beschleunigen, indem Ergebnisse in einem Speicher gespeichert werden, der ansonsten von einer anderen Quelle stammt (Datenbank, Remoteserver, rechenintensive Methode usw.). Daher scheint es der einfachste Weg zu sein, die Zeit zu messen, die die Dinge benötigen, um den Cache zu erreichen. Überprüfen Sie auch auf veraltete Cache-Probleme (Aktualisierungen der tatsächlichen Daten werden nicht
angezeigt

Antworten:

37

Eine Frage ist, ob der Cache selbst wirklich eine Anforderung ist, die von der Qualitätssicherung getestet werden sollte. Durch das Zwischenspeichern wird die Leistung verbessert, sodass sie den Leistungsunterschied testen können, um sicherzustellen, dass er bestimmten Anforderungen entspricht.

Aber es ist eine gute Idee, einige Tests zum Thema Caching durchzuführen, wer auch immer dafür verantwortlich ist. Wir haben Leistungsindikatoren verwendet. Wenn Ihr Cache-System diese Vorteile nutzt, sind sie unkompliziert. Wenn es eine Möglichkeit gibt, eine Zählung aus dem Cache selbst zu erhalten, ist dies eine weitere Option.

Die Verwendung Ihres Ansatzes ist auch nett. Wenn einer dieser Tests in automatisierte Tests eingebunden ist, die die Ergebnisse überprüfen, muss niemand die Protokolle durchsehen, um Antworten zu finden.

Andy Wiesendanger
quelle
+1 zum Testen der Leistung anstatt zum Zwischenspeichern. Welchen geschäftlichen Wert hat Caching für sich? (Keine.) Sicherlich arbeiten Sie an einer spürbaren Auswirkung auf etwas - warum würden Sie sonst die Zeit damit verbringen, es umzusetzen? Testen Sie auf diese Auswirkungen.
Alexanderbird
74

Sie haben einen Cache implementiert (ich nehme an), weil das System nicht gut genug lief. Das ist etwas, das für den Benutzer relevant ist. Hier sind Dinge, die die Qualitätssicherung überprüfen kann:

  • Dass das System nach Einführung des Cache noch korrekt ist. Dies bedeutet, dass sie versuchen sollten, den Cache dahingehend zu täuschen, dass veraltete Daten bereitgestellt werden. Dies kann von der Qualitätssicherung überprüft werden. Außerdem sollten sie sicherstellen, dass keine anderen Daten beschädigt wurden.
  • Dass das System jetzt Leistungsschwellenwerte erfüllt, die es nicht erfüllt hat, als Sie sich entschieden haben, die Leistung zu verbessern. Sie können die alten Maße vergleichen und mit den neuen vergleichen.

Denken Sie daran, dass es Benutzern (und damit auch der Qualitätssicherung) egal ist, wie Sie ein Problem gelöst haben. Sie kümmern sich nur darum, dass das Problem gelöst wurde und keine neuen Probleme entstanden sind. Dies gilt unabhängig davon, ob Sie das Caching implementiert, das String-Parsing verbessert, ein Hardware-Upgrade durchgeführt oder magischen Feenstaub auf den Server gestreut haben.

durron597
quelle
1
Die Aussage, dass es der Qualitätssicherung egal ist, wie Sie das Problem lösen, ist eine sehr vereinfachte Sichtweise dessen, woran die Qualitätssicherung interessiert ist. Dabei geht es darum, ob Sie tatsächlich die Leistung verbessert, zusätzliche technische Schulden, Risiken oder Mängel usw. eingeführt haben.
Eric
4
@Eric In der Softwareentwicklung bezieht sich "QA" als Gruppe im Allgemeinen nicht auf Entwickler / Ingenieure. Technische Schulden sind ein Problem für Entwickler / Ingenieure (und ein Problem für das Management, da sie sich auf Zeitpläne, Kosten usw. auswirken können). Gleiches gilt für das Risiko. Die Aufgabe von QA besteht darin, sicherzustellen, dass die Software die Anforderungen erfüllt (und möglicherweise auch beim Herauslösen von Anforderungen hilft, die unklar waren). Wenn sie sich überhaupt um die Implementierung kümmern, sollten sie nur kreative Wege finden, um das System zu durchbrechen.
jpmc26
3
@Eric Ich verwirre nichts. "QA" bezieht sich auf Tester in Software. Sie interpretieren den Begriff so weit, dass er das gesamte Unternehmen einschließen sollte, das die Software entwickelt, und sogar den Kunden, wenn es sich um ein System handelt, das speziell für ihn entwickelt wurde, da jeder eine Hand in der Qualität hat.
jpmc26
1
@Eric Bitte lassen Sie mich nicht darüber streiten, wie Sprache und Semantik bei Ihnen funktionieren. Ich fordere Sie auf, in weniger als 30 Minuten 5 Instanzen auf dieser StackExchange zu finden, in denen der Begriff auf diese Weise verwendet wird. Selbst nach dieser Definition kann eine separate QS-Gruppe Probleme über das Produkt hinaus am besten lösen, indem sie den Entwicklern Richtlinien auferlegt. Wenn Richtlinien und Prozesse über die Herstellung guter Produkte hinausgehen, erhalten Sie in der Regel schlechte Produkte. Außerdem kann ich Ihnen versichern, dass die "QA" -Leute, mit denen ich auf jeden Fall zusammenarbeite, Tester sind und wenig Einfluss auf meinen Entwicklungsprozess haben.
jpmc26
4
@Eric: Es gibt nichts, was ein Unternehmen oder eine Gruppe von Menschen daran hindert, "QA" als ganzheitliche Sichtweise zu definieren. Doch meine Erfahrung (über 5 sehr unterschiedliche Unternehmen) die QS - Phase als Name - und diejenigen , die darin spezialisiert - in der Softwareentwicklung ist in der Regel auf schwarz-Box - Test des Systemverhaltens fokussieren. Möglicherweise verfügen wir auch über "Qualitätskontrolle", "Kwalitee" und mehr erfundene Namen, um spezielle Aspekte in Bezug auf umfassendere Qualitätsprobleme abzudecken.
Neil Slater
3

Das Verbergen wichtiger Geschäftslogik oder des Systemzustands in einer Blackbox erschwert die Überprüfung des korrekten Systemverhaltens. Es ist einfacher, das Verhalten einer einzelnen Komponente im System ausführlich zu testen als das gesamte System. Ich bevorzuge es, solche Dinge explizit durch einen Mechanismus aufzudecken, damit sie auf sinnvolle Weise auf Einheit / Regression / Integration / Qualitätssicherung getestet werden können.

Eine Option für einen Cache wäre, eine spezielle Seite bereitzustellen, die einige Details zum Cache enthält (Inhalt, Status usw.). Dies kann beim Debuggen in der Entwicklung und möglicherweise in der Produktion hilfreich sein. Auf dieser Seite kann die Qualitätssicherung auch Testfälle für den Cache erstellen, wenn ihnen Einzelheiten zum erwarteten Verhalten des Caches mitgeteilt werden. Die Verwendung von Leistungsindikatoren und / oder Protokolldateien zur expliziten Dokumentation des Cache-Verhaltens ist ein weiterer weniger sichtbarer, aber praktikabler Ansatz.

Beachten Sie, dass dieser Ansatz kein Ersatz für End-to-End-Leistungstests ist. Dies ist ein Mechanismus, um sicherzustellen, dass sich der Cache selbst korrekt verhält. Leistungstests sollten verwendet werden, um festzustellen, ob das Caching die beabsichtigte Auswirkung auf die Leistung hat.

Beachten Sie auch, dass das Austauschen von Systemkomponenten durch neue, die dieselbe Schnittstelle wie das Einführen eines Caches implementieren, eine destabilisierende und täuschend komplexe Änderung sein kann. Mit dem Cache-Beispiel führen Sie den Status in dem Zustand ein, der zuvor statuslos war, wodurch Fehler verursacht werden können, die schwerer zu finden oder zu reproduzieren sind. Eine solche Änderung sollte immer mit einem vollständigen Regressionstest einhergehen, um das erwartete Systemverhalten zu überprüfen.

Eric
quelle
3

Testleistung, wie in Andys Antwort angegeben.

Ich habe festgestellt, dass das größte Hindernis für die Implementierung von Caching (und Leistung) in vielen Organisationen in einer Umgebung besteht, in der Sie gute Leistungstests durchführen und Tests für verschiedene reale Last- und Leistungstests durchführen können.

Um dies zu erreichen, sollten Sie eine Umgebung für Leistungstests einrichten , die die Produktion so genau wie möglich und unter Berücksichtigung der Kosten widerspiegelt. Dies wird wahrscheinlich NICHT Ihre aktuelle Entwicklungsumgebung sein, die kleiner und eigenständiger sein sollte, um eine schnelle Anwendungsentwicklung zu ermöglichen. Entwicklungsumgebungen verwenden in der Regel auch weniger Caching und eignen sich daher nicht für Leistungstests.

In der Umgebung für Leistungstests sollte die App im Produktionsmodus ausgeführt werden. Sie sollten mehr als einen Server verwenden, wenn die Produktion, der Datenbankverbindungspool und das Caching für eine Produktionsumgebung usw. festgelegt werden sollen.

Sie sollten auch ein Tool in Betracht ziehen, das beim Auslastungstest hilft.
jmeter ist sehr beliebt, obwohl ich es als ziemlich unfreundlich und primitiv empfinde.
Ein anderer Weg, den ich gewählt habe, ist, einfach eine URL curlmit einem Ruby-Skript zu erstellen.

Deutlich sein

  • Basisleistungstests dienen zum Testen der Zeit, die EINE Anforderung benötigt.
  • Der Auslastungstest ähnelt dem Leistungstest, berücksichtigt jedoch die Reaktion, wenn das System aufgrund anderer Anforderungen ebenfalls ausgelastet ist.

Möglicherweise finden Sie auch die folgenden Links hilfreich:

Michael Durrant
quelle
2

Denken Sie daran, die Tester zu veranlassen, die Server neu zu starten und zu überprüfen, ob die von ihnen eingegebenen Daten noch vorhanden sind. Ich habe ein System gesehen, das viele Mannmonate lang getestet wurde.

Der schwierigste Teil zu testen ist , dass jedoch die Daten aktualisiert werden, gibt es nie irgendwelche out-of-date Ergebnisse aus dem Cache zurückgegeben.

Dies kann teilweise dadurch unterstützt werden, dass immer die Daten im Cache verwendet werden, um die Bestätigungsseite auszufüllen, die einem Benutzer nach einer Änderung angezeigt wird. Verwenden Sie beispielsweise nicht das Objekt, mit dem Sie die Datenbank aktualisiert haben, sondern fordern Sie die Daten aus dem Cache an, die sie dann von der Datenbank anfordern. Ein bisschen langsamer, aber viel wahrscheinlicher, dass Fehler schneller auftauchen.

Ian
quelle
1

Dieser hat tatsächlich eine sehr einfache Antwort und hängt mit dem Grad der Zwischenspeicherung zusammen. Was Sie feststellen werden, wenn die Zwischenspeicherung korrekt ist, ist das Fehlen von Anforderungen am Ziel der Anforderungen. Es kommt also auf den abgedroschenen QS-Satz "erwartete Ergebnisse" an.

Wenn Sie einen Cache auf der Webebene implementieren, würde ich erwarten, dass Elemente, die der Zwischenspeicherung unterliegen, nur einmal für jede getestete Benutzersitzung (wenn Sie den Client-Cache implementieren) oder einmal für mehrere Benutzer (wenn Sie einen Cache im CDN-Stil implementieren) angezeigt werden. Wenn Sie einen Cache auf der Datenebene implementieren, um allgemeine Ergebnisse zu erzielen, würde ich erwarten, dass Ihre Cache-Ebene eine hohe Cachetrefferquote aufweist und im Profilprotokoll für die Datenebene keine Abfragen vorhanden sind.

etc...

James Pulley
quelle
0

Einige Dinge werden besser von einem Programmierer getestet, vielleicht demjenigen, der den Code mit Unit-Tests geschrieben hat. Das Testen der Richtigkeit Ihres Caching-Codes ist eines dieser Dinge. (Aufgrund der Art und Weise, wie Sie diese Frage stellen, gehe ich davon aus, dass Ihre QA-Mitarbeiter die Anwendung als "Black Box" behandeln und über die externe Schnittstelle testen.)

Alex D
quelle
0

Die Caching-Logik sollte vom Entwickler getestet werden, da die Qualitätssicherung hauptsächlich Black-Box-Tests durchführt.

Die QA kümmert sich nur um die Leistungsaspekte oder die von Ihnen implementierte Fehlerbehebung. Sie können der QA einen Mechanismus zum Aktivieren / Deaktivieren des Cachings oder einen anderen Mechanismus zur Leistungsverbesserung bereitstellen und dann den Leistungsunterschied überprüfen. Natürlich könnte QA auch einfach eine alte Version mit Ihrer leistungsverbesserten Version vergleichen.

Fred Thomsen
quelle
-4

Als ich Caching-Lösung getestet habe, haben wir implementiert, was wir im Grunde die Leistung getestet haben. Wir haben diese Caching-Lösung für XML-Ergebnisse durchgeführt und nach dem Cache dauert es sehr kurz, bis die Antwort angezeigt wird. Wir haben es auch mit dem Serverprotokoll überprüft, indem wir die Protokolleinträge überprüft haben.

user204667
quelle
3
Ich bin nicht ganz sicher, ob ich verstehe, was Sie sagen oder was Ihre Antwort sagt, was nicht in den sieben vorherigen Antworten steht.