Wie kann man testen und optimieren, wenn man die Umgebung nicht reproduzieren kann?


17

In der Vergangenheit habe ich in einer Vielzahl von Umgebungen gearbeitet. Desktop-Apps, Spiele, eingebettete Inhalte, Webdienste, Befehlszeilenaufträge, Websites, Datenbankberichte usw. Alle diese Umgebungen hatten das gleiche Merkmal: Unabhängig von ihrer Komplexität und Größe konnte ich immer eine Teilmenge oder einen Teil der Anwendung auf meinem Computer oder in einer Entwicklungsumgebung testen.

Heute mache ich nicht. Heute befinde ich mich in einer Umgebung, deren Hauptaugenmerk auf Skalierbarkeit liegt. Das Reproduzieren der Umwelt ist unerschwinglich teuer. Ein Teil der Umgebung ist zwar plausibel (einige der Teile müssten simuliert oder in einem Einzelinstanz-Modus verwendet werden, für den sie nicht vorgesehen sind), hat aber den Zweck verfehlt, da dadurch die Parallelität und das Laden der Teile verdeckt wird das reale System begegnet. Sogar ein kleines "Test" -System hat seine Mängel. Die Dinge werden sich anders verhalten, wenn Sie 2 Knoten haben und wenn Sie 64 Knoten haben.

Mein üblicher Optimierungsansatz (messen, etwas ausprobieren, Richtigkeit überprüfen, Unterschiede messen, wiederholen) funktioniert hier nicht wirklich, da ich die Schritte 2 und 3 für die Teile des Problems, die wichtig sind (Robustheit und Leistung bei gleichzeitiger Verwendung), nicht effektiv ausführen kann Belastung). Dieses Szenario scheint jedoch nicht eindeutig zu sein. Was ist der übliche Ansatz, um diese Art von Aufgabe in einer solchen Umgebung zu erledigen?

Es gibt einige verwandte Fragen:

  • Diese Frage hat damit zu tun, dass keine Hardware (wie Spektrumanalysatoren) verfügbar ist, die (relativ) leicht emuliert werden kann.
  • Bei dieser Frage geht es darum, Fehler aufzuspüren, die nur in Produktionsumgebungen vorhanden sind, was hilfreich ist - aber eine andere Art von Aktivität.

1
Kurze Antwort: Die Antworten auf die zweite verknüpfte Frage gelten ebenfalls. Mehr Protokollierung hilft nicht nur beim Debuggen, sondern auch beim Testen und Optimieren. Möglicherweise müssen Sie nur verschiedene Dinge protokollieren, insbesondere die Laufzeiten und die Ressourcennutzung.
Doc Brown

Können Sie Teile der Produktionsumgebung zwischen Produktion und Test zeitmultiplexen?
Patrick

@DocBrown - sicher, aber die Protokollierung hilft mir nicht, festzustellen, ob eine alternative Implementierung in der Produktion korrekt oder leistungsfähiger ist, bis sie tatsächlich in der Produktion ist - was sicherlich zu spät zu sein scheint.
Telastyn

2
Reproducing the environment is prohibitively costly.- Was kostet ein Produktionsfehler? Was ist mit 2 Bugs? Zu unvorhersehbaren Zeiten (am wahrscheinlichsten, wenn die Mehrheit Ihrer Benutzer gleichzeitig das System belastet). Wägen Sie dies gegen die Kosten für die Einrichtung einer minimalen Reproduktionsumgebung ab - Sie werden vielleicht feststellen, dass dies doch nicht unerschwinglich teuer ist.
Jess Telford

Aus irgendeinem Grund habe ich das Gefühl, dass dies nur bedeutet, dass das System schlecht aufgebaut und organisiert ist. Wenn das System gut organisiert und modular aufgebaut ist, wäre es nicht sinnvoll, einen Testfall oder ein Optimierungsszenario einzurichten prohibitively costly.
Informiert

Antworten:


11

Eigentlich ist es schwierig, aber ich bin mir sicher, dass es sich in vielen vergleichbaren Situationen in erster Linie um ein organisatorisches Problem handelt. Der einzig praktikable Ansatz ist wahrscheinlich eine Mischung aus kombinierten Maßnahmen, nicht nur "eine Silberkugel". Einige Dinge, die Sie ausprobieren können:

  • Protokollierung: Wie ich bereits in einem Kommentar schrieb, kann die übermäßige Protokollierung von Zeit und Ressourcen (eine Art Profilerstellung) Ihnen helfen, die tatsächlichen Engpässe in der Produktion zu identifizieren. Dies sagt Ihnen möglicherweise nicht, ob eine alternative Implementierung besser funktioniert, hilft Ihnen jedoch sicherlich dabei, die Optimierung des völlig falschen Teils Ihrer Anwendung zu vermeiden.

  • Testen Sie vorher, was Sie testen können - gründlich und mit viel Vorausplanung. Sicher, die Dinge werden sich in der Produktion anders verhalten, aber nicht alle Dinge. Die Richtigkeit einer anderen Implementierung kann oft im Voraus überprüft werden - wenn eine Implementierung gut skaliert, ist das eine andere Frage. Aber Planung kann viel helfen. Überlegen Sie genau, welche Probleme Ihre Testumgebung für Sie lösen kann und welche nicht. Es gibt fast immer Dinge, von denen Sie auf den ersten Blick glauben, dass sie nicht vorab getestet werden können. Wenn Sie jedoch zweimal nachdenken, ist oftmals mehr möglich.

  • Arbeite als Team. Besprechen Sie einen neuen Ansatz oder eine neue Idee mit mindestens einer anderen Person Ihres Teams. Bestehen Sie bei der Implementierung eines anderen Algorithmus auf Code-Inspektionen und Qualitätssicherung. Je mehr Fehler und Probleme Sie im Voraus vermeiden können, desto weniger schwerwiegende Probleme müssen Sie in der Produktion lösen.

  • Da Sie nicht alles im Voraus testen können, müssen Sie mit Problemen in der Produktion rechnen. Versuchen Sie daher, eine wirklich gute Fallback-Strategie vorzubereiten, wenn Sie neuen Code in die Produktion bringen. Wenn Ihr neuer Code langsamer als die alte Lösung sein könnte oder wenn das Risiko eines Absturzes besteht, stellen Sie sicher, dass Sie so schnell wie möglich zur vorherigen Version wechseln können. Wenn das Risiko besteht, dass Produktionsdaten zerstört werden, stellen Sie sicher, dass eine gute Sicherung / Wiederherstellung vorhanden ist. Stellen Sie sicher, dass Sie solche Fehler erkennen, indem Sie Ihrem System einen Validierungsmechanismus hinzufügen.

  • Führen Sie ein Projekttagebuch oder ein Lösungsprotokoll - im Ernst. Jeden Tag erfährst du etwas Neues über die Umwelt und schreibst es auf - sowohl Erfolgsgeschichten als auch Fehlergeschichten. Machen Sie nicht zweimal den gleichen Fehler.

Das Wichtigste ist also: Wenn Sie sich nicht mit Try-and-Error auseinandersetzen können, sind konservative, klassische Vorausplanungs- und QS-Techniken die beste Option.


6

Wenn Sie die Live-Umgebung nicht reproduzieren können, ist die unangenehme Realität, dass alles, was Sie tun, nicht ausreichend getestet wurde.

Also was kannst du tun?

Was auch immer skaliert werden muss, sei es ein Prozess, ein Server-Cluster oder ein Datenbank-Volume, sollte mit der Null-Eins-Unendlich-Regel getestet werden , um herauszufinden, wo die potenziellen Engpässe / Einschränkungen liegen: IO, CPUs, CPU-Auslastung, Inter -Prozesskommunikation etc.

Sobald Sie dies haben, sollten Sie ein Gefühl dafür bekommen, welche Art von Tests betroffen ist. Wenn es sich um Komponententests handelt, liegt dies traditionell beim Entwickler. Wenn es sich um Integrations- / Systemtests handelt, kann es Berührungspunkte mit anderen Teams geben, die möglicherweise mit zusätzlichem Fachwissen oder, noch besser, Tools behilflich sind.

Apropos Tools, es ist nicht wirklich Aufgabe des Entwicklers, ein System zu testen, das über das in seiner Entwicklungsumgebung mögliche Maß hinausgeht. Dies sollte auf die Testabteilung oder einen anderen Dritten übertragen werden.

Der Elefant im Raum ist natürlich, dass Systeme nicht immer vorhersehbar skalieren!

Früher war ich ein Datenbankadministrator für Bankdatenbanken mit Milliarden von Zeilen und mit Ausführungsplänen ausgestattet, die wir allgemein vorhersagen konnten, wie lange Abfragen in einer inaktiven Datenbank angesichts der Eingabevolumina dauern würden. Sobald diese Volumes jedoch eine bestimmte Größe erreicht haben, ändert sich der Ausführungsplan und die Leistung verschlechtert sich rapide, es sei denn, die Abfrage / Datenbank wurde optimiert.


0

Ich würde Experimente vorschlagen.

Bei der Protokollierung treten Engpässe auf. Sie können dann eine alternative Implementierung auf einigen Computern oder sogar auf allen Computern mit einer bestimmten Wahrscheinlichkeit oder für einen begrenzten Zeitraum versuchen. Vergleichen Sie anschließend die Protokolle erneut, um nach Verbesserungen zu suchen.

Es ist derselbe Theorie-Experiment-Messzyklus, an den Sie gewöhnt sind, dessen Einrichtung jedoch teurer ist, da Hypothesen in der Produktion ausgeführt werden müssen. Abhängig von Ihrem Volumen kann es auch langsam sein, wichtige Daten aus der Produktion zu erhalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.