Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für diese Azure Well-Architected Framework Operational Excellence-Checkliste:
| OE:09 | Verbessern Sie die Qualität Ihrer Arbeitsauslastung, indem Sie Testpraktiken einführen, die den Geschäftlichen Zielen entsprechen und Qualitätsstandards einhalten. |
|---|
Wenn Sie eine Änderung an Ihrer Workload einführen, müssen Sie sicherstellen, dass sie wie beabsichtigt funktioniert und keine neuen Probleme verursachen. Tests sind die Bewertung dieser Änderungen. Es ist eine wichtige Praxis, um Qualität aufrechtzuerhalten und Vertrauen in Ihre Arbeitsauslastung zu schaffen.
Effektive Tests bieten eine zuverlässige, qualitativ hochwertige Arbeitsauslastung. Sie verhindert, dass Defekte in die Produktion gelangen, kostspielige Überarbeitungen und Verzögerungen reduzieren und Ihre Arbeit während des gesamten Entwicklungslebenszyklus mit den Geschäftszielen in Einklang hält.
Dieser Artikel enthält Strategien, mit denen Sie durch effektive Testpraktiken eine qualitativ hochwertige Arbeitsauslastung bereitstellen können. Sie dient als grundlegende Anleitung für die spezielle Testanleitung in anderen Säulen wie Leistung, Zuverlässigkeit und Sicherheit.
Formalisieren Ihrer Teststrategie und Ihres Plans
Ihre Teststrategie und Testpläne sind wesentliche Artefakte. Sie bieten eine klare Roadmap für Ihre Testbemühungen und stellen sicher, dass alle an den gleichen Qualitätszielen arbeiten.
Definieren Sie Ihre Teststrategie
Ihre Teststrategie ist ein übergeordneter Plan, der Ihren Testansatz leitet. Es definiert Ihre Testziele, Umfang, Methoden, Tools, Rollen und Zuständigkeiten. Es hilft Ihnen, fundierte Entscheidungen zu Testprioritäten, Ressourcenzuordnung und Risikomanagement zu treffen. Außerdem wird erfasst, wie Sie mit Projektbeteiligten kommunizieren und Ergebnisse melden.
Eine gut definierte Teststrategie erhält Buy-In von Projektbeteiligten und stellt sicher, dass alle Teammitglieder konsistente Qualitätsstandards einhalten. Es bietet Richtung und Struktur, richtet Tests an geschäftsziele aus und schützt langfristige Qualität.
Ihre Teststrategie bleibt in der Regel in allen Versionen für eine bestimmte Workload konsistent. Passen Sie sie jedoch immer an, um die spezifischen Anforderungen und geschäftlichen Ziele dieser Arbeitsauslastung widerzuspiegeln.
Hinweis
Wenden Sie nicht dieselbe standardisierte Strategie auf verschiedene Workloads an. Sie haben einzigartige Überlegungen, die einzigartige Ansätze benötigen.
Erstellen Ihres Plans
Sobald Sie die Teststrategie mit Ihrem Team vereinbart haben, formalisieren Sie sie in einem Testplan mit Anwendungsfällen, die auf geschäftsziele ausgerichtet sind.
Ihr Testplan ist ein detailliertes Dokument, das die Testausführung für eine bestimmte Freigabe anleitet. Er beschreibt den Umfang der Tests, spezifische Testfälle, Fehlerberichte, Zeitachsen, Ressourcenzuordnungen sowie Einstiegs- und Ausgangskriterien für Testaktivitäten.
Ein gut strukturierter Testplan macht Tests effizient und abgestimmt auf die Ziele und Zeitachsen der Veröffentlichung. Es ist Ihr Referenzpunkt, um den Fortschritt nachzuverfolgen und fundierte Entscheidungen während des gesamten Tests zu treffen.
Beispiel: Bei einem E-Commerce-Checkout-System stellt die Teststrategie einen konsistenten Ansatz für alle Versionen her. Es definiert, dass Zahlungsflüsse immer priorisiert werden, Testtools für das System wie Selenium für UI-Tests, JMeter für Auslastungstests und OWASP ZAP für Sicherheitstests angeben und Teamverantwortlichkeiten für verschiedene Testtypen klären. Der Testplan für die Version v2.5 konzentriert sich auf das Hinzufügen des Apple Pay-Supports. Es definiert genau, was für Apple Pay in dieser Version getestet werden soll, ordnet Ressourcen zu (zwei Ingenieure und drei iPhones), legt einen vierwöchigen Zeitplan fest und etabliert klare Eingabekriterien (Code abgeschlossen und Umgebung konfiguriert) sowie Beendigungskriterien (alle Tests bestehen, Null kritische Fehler und eine zwei Sekunden SLA).
Hinweis
Beginnen Sie nicht mit dem Testen, bevor Sie Ihre allgemeine Teststrategie und Ihren Plan klar definieren. Ein solider Testplan sorgt dafür, dass Ihre Bemühungen fokussiert und an Workloadziele ausgerichtet sind.
Testen Sie frühzeitig, häufig, testen Sie, was wichtig ist
Beginnen Sie mit dem Testen in den frühesten Phasen Ihres Softwareentwicklungslebenszyklus. Wenn Sie kritische Probleme spät finden, werden Sie mit erhöhten Überarbeitungen und langsameren Versionen konfrontiert. Zu häufig übersehen Architekten die Testanforderungen in der Entwurfsphase, was sich negativ auf die Gesamtqualität auswirkt.
Entwickler sollten eine Denkweise zur Qualitätssicherung übernehmen. Denken Sie auch während des Entwurfs an Tests. Verwenden Sie sie, um Anforderungen zu klären und potenzielle Einschränkungen zu erkennen. Machen Sie das Testen eines integralen Teils Ihres Entwicklungsprozesses. Übernehmen Sie die Verantwortung für das Schreiben und Verwalten von Tests zusammen mit Ihrem Code.
Wenn Sie Probleme frühzeitig erkennen, können Sie schnell reagieren. So können Sie beispielsweise wichtige Entwurfsänderungen priorisieren, die sich auf die Benutzererfahrung gegenüber Routinefehlerbehebungen auswirken. Durch frühzeitiges Handeln werden Last-Minute-Überraschungen und Verzögerungen reduziert.
Das Testen ist kein einmaliges Ereignis. Halten Sie Tests nach dem Start, als Teil einer kontinuierlichen Test-Mentalität. Überprüfen, aktualisieren und erweitern Sie Ihre Testsuite regelmäßig, um neue Features abzudecken und Fehler zu beheben, die in der Produktion entdeckt wurden, um eine langfristige Qualität aufrechtzuerhalten.
Hinweis
Verzögern Sie Tests in großen Batches nicht bis spät in den Lieferzyklus hinein. Verzögerte Tests führen zu verpassten Problemen, erhöhten Überarbeitungen und langsameren Versionen.
Kompromiss. Frühe und kontinuierliche Tests können die Betriebskosten erhöhen und die Entwicklung zunächst verlangsamen oder Teamreibung schaffen. Treffen Sie ein Gleichgewicht, identifizieren Sie, welche Tests und Änderungen frühzeitig erforderlich sind und welche Sie zu späteren Phasen zurückstellen können. Dies sorgt für Effizienz ohne Kompromisse bei der Qualität.
Testen in der Produktion mit Sicherheitsvorkehrungen
Selbst bei starken Test- und Validierungspraktiken treten einige Probleme nur unter echtem Produktionsverkehr auf. Um Probleme zu finden, die Sie nicht simulieren können, führen Sie in der Produktion kontrollierte Tests mit Schutzmaßnahmen durch, die die Benutzerexposition begrenzen und das Risiko verringern.
Planen, Isolieren und Überwachen von Produktionstests. Auf diese Weise können Sie echte Benutzerfeedback- und Leistungsdaten sammeln und gleichzeitig Unterbrechungen für die breitere Benutzerbasis minimieren.
Erwägen Sie progressive Expositionsstrategien, wie beispielsweise Canary-Releases, erst, nachdem Ihre Arbeitslast die Beendigungskriterien erfüllt und eine hohe Qualität aufweist. Bei diesem Ansatz werden Updates für eine kleine, zielgruppenorientierte Benutzergruppe zuerst veröffentlicht, sodass Sie probleme schnell aufdecken können, die in Vorabversionen nicht angezeigt werden. Mit diesem Ansatz beschleunigen Sie Ihren Testprozess und reduzieren möglicherweise die damit verbundenen Kosten.
Risiko: Seien Sie vorsichtig, wenn Sie in der Produktion testen, da sie sich direkt auf echte Kunden auswirkt. Implementieren Sie immer Schutzmaßnahmen und begrenzen Sie die Exposition, um potenzielle negative Auswirkungen auf Ihr Unternehmen zu minimieren.
Verwenden Sie einen mehrschichtigen Ansatz in der Testabdeckung
Eine Mehrschicht-Testabdeckungsstrategie bietet Ihnen schnelles Feedback, frühere Fehlererkennung und schnellere Freigaben. Wenn Sie Tests auf Ebenen strukturieren, können Sie Fehler schnell isolieren und debuggen, sodass Sie Probleme leichter anheften und beheben können.
Verwenden der Testpyramide als Leitfaden
Das Testpyramidenmodell veranschaulicht diesen mehrschichtigen Ansatz für die Testautomatisierung. Sie verteilt Tests auf verschiedenen Ebenen, um die Abdeckung zu maximieren und gleichzeitig die Ausführungszeit und Wartungskosten zu minimieren.
- Basisebene: Komponententests überprüfen einzelne Komponenten isoliert. Sie laufen schnell und geben sofortiges Feedback.
- Mittlere Ebene: Integrationstests überprüfen die Interaktionen zwischen Komponenten und Diensten. Sie werden langsamer als Komponententests ausgeführt, bieten jedoch eine breitere Abdeckung des Systemverhaltens.
- Oberste Ebene: End-to-End-Tests validieren Benutzerreisen durch das gesamte System und simulieren reale Szenarien. Diese Tests laufen am langsamsten, bieten jedoch die größte Sicherheit in Bezug auf die Gesamtqualität.
Sie können Base- und Middle Layer-Tests einfacher in Ihre Pipelines integrieren, da sie minimale Abhängigkeiten aufweisen. Diese Integration ermöglicht schnelles Feedback, wenn Tests fehlschlagen, und lässt den Build-Prozess sofort stoppen, um zu verhindern, dass fehlerhafter Code weiter voranschreitet.
Wenn ihre Testabdeckung wächst, kann sich die Ausführungszeit der Pipeline erheblich erhöhen. Verwalten Sie eine schnelle Feedbackschleife, indem Sie parallele und verteilte Testausführungsstrategien verwenden und Pipelines auch dann effizient halten, wenn die Abdeckung zunimmt.
Hinweis
Schließen Sie nicht jeden möglichen Test in die anfängliche Buildpipeline ein, die Ihren Code kompiliert und überprüft. Diese Wahl verlangsamt Veröffentlichungszyklen und besteht das Risiko, dass wichtige Tests umgangen werden. Konzentrieren Sie sich auf Tests, die kritische Workflows direkt schützen und ein sinnvolles Vertrauen in die Systemqualität bieten.
Kompromiss. Es gibt einen Kompromiss zwischen Testabdeckung und Pipelineeffizienz. Während größere Testsuiten die Abdeckung erhöhen, erhöhen sie auch die Ausführungszeit und die Kosten. Sie liefern nicht immer eine sinnvolle Rendite für Investitionen.
Separate Anwendungs- und Infrastrukturtests
Erstellen Sie eine klare Segmentierung zwischen dem Testen des Anwendungscodes und dem Infrastrukturcode. Überprüfen Sie Ihre Infrastruktur, indem Sie das Anwendungsverhalten beobachten, indem Sie die Software bereitstellen und Tests ausführen.
Die Ausführung von Anwendungsrauchtests kann Infrastrukturprobleme wie Netzwerkfehler, DNS-Fehlkonfigurationen oder Ressourceneinschränkungen erkennen, bevor sie sich auf die Produktion auswirken. Beispielsweise kann ein Rauchtest, der API-Integritätsendpunkte überprüft, schnell Infrastrukturbereitstellungsprobleme oder Netzwerkrichtlinienprobleme erkennen.
Mit diesem Ansatz identifizieren und lösen Anwendungsspezifische Tests proaktiv Infrastrukturprobleme, wodurch die Notwendigkeit einer separaten Infrastrukturüberprüfung reduziert wird. Es gibt Ihnen Vertrauen, dass Sowohl Ihr Code als auch die zugrunde liegende Infrastruktur ordnungsgemäß zusammenarbeiten.
Integrieren verschiedener Testtypen
Verwenden Sie verschiedene Testmethoden während der gesamten Workload. Das Abschließen von Unittests bedeutet nicht, dass man mit dem Testen fertig ist. Jeder Aspekt Ihrer Arbeitsauslastung benötigt einen eindeutigen Ansatz. Mehrere Testtypen verbessern die allgemeine Qualität und schaffen vertrauen, dass das System wie beabsichtigt funktioniert.
Wählen Sie den passenden Testtyp auf der Grundlage von Ihrem Workload-Reifegrad und Risikoprofil aus. Beginnen Sie mit der funktionalen Überprüfung über die Testpyramidenebenen, und fügen Sie dann nicht funktionale Tests wie Leistung, Sicherheit und Resilienz hinzu. Richten Sie Ihre Auswahl des Testtyps mit den kritischen Szenarien und Risiken Ihrer Workload aus.
In der folgenden Tabelle wird gezeigt, wann verschiedene Testtypen während des gesamten Testzyklus angewendet werden sollen. Jede behebt spezifische Risiken. Obwohl diese Tabelle keine vollständige Liste aller möglichen Testtypen ist, dient sie als illustratives Beispiel.
| Testtyp | Hauptzweck | Wann zu verwenden | Kosten & Überlegungen |
|---|---|---|---|
| Manuelle Tests | Überprüfen Sie Szenarien, die menschliches Urteil, exploratives Lernen, Benutzerfreundlichkeit und UX-Nuancen erfordern. | Frühe Entwicklung, Benutzeroberflächenänderungen, mehrdeutige Flüsse oder wenn die Automatisierung nicht machbar ist. | Hohe Kosten, geringe Skalierbarkeit. Verwenden Sie sparsam und konzentrieren Sie sich auf Bereiche, in denen menschliche Erkenntnisse unersetzbaren Wert schaffen. |
| Komponententests | Überprüfen Sie einzelne Komponenten oder Funktionslogik isoliert. | Kontinuierlich während der Entwicklung. | Niedrigste Kosten und höchster Wert. Schnell, zuverlässig und entscheidend für die Vermeidung von Regressionen. Streb eine breite Abdeckung an. |
| Integrationstests | Überprüfen Sie Interaktionen zwischen Komponenten, APIs, Verträgen und gemeinsamen Diensten. | Wenn Komponenten und Dienste für die Interaktion oder die Integration neuer Abhängigkeiten bereit sind. | Mittlere Kosten. Wichtig für den frühzeitigen Abfangen von Fehlkonfigurationen und Interaktionsfehlern. |
| Vertragstests | Stellen Sie sicher, dass Ihr Dienst weiterhin die Interaktionen erfüllt, von denen seine Verbraucher abhängig sind, ohne dass vollständige Integrationstests erforderlich sind. | Wenn Sie eine API ändern, von der andere Teams oder Dienste abhängig sind, insbesondere über unabhängige Release-Zyklen hinweg. | Mittlere Kosten. Es gibt Frameworks, die Ihnen helfen, Nutzererwartungen zu erfassen und sie als Tests in Ihrer eigenen Pipeline auszuführen. |
| End-to-End-Tests (E2E) | Überprüfen Sie die Richtigkeit des vollständigen Workflows im gesamten System, von der Benutzeraktion bis hin zu Backend-Diensten. | Wenn sich die Kern-Benutzerreisen stabilisiert haben und automatisiert werden können. | Hohe Kosten und zerbrechlich. Verwenden Sie diese selektiv für die geschäftskritischsten Abläufe. |
| Testen der Benutzeroberfläche | Erkennen visueller, Layout- und Interaktionsregressionen. | Nach der Stabilisierung des UI-Designs oder wenn visuelle Treue eine Anforderung für den Release ist. | Hohe Wartungskosten. Beschränken Sie sich auf kritische UI-Pfade und kritische Szenarien für die Barrierefreiheit. |
| Auslastungs- und Leistungstests | Überprüfen Sie die Leistung, Latenz, Durchsatz und Skalierbarkeit unter erwarteter Workload. | Beginnen Sie so früh wie möglich und wiederholen Sie, wenn sich die Architektur weiterentwickelt. | Hohe Kosten, aber für die Produktionsbereitschaft erforderlich, insbesondere für kundenorientierte Workloads. |
| Belastungstests | Legen Sie Systemgrenzwerte, Unterbrechungspunkte und Wiederherstellungsverhalten fest. | Vor Produktionsbereitschaft oder großen Architektonischen Änderungen. | Hohe Kosten bieten Einblicke in die Resilienz. Die Ausführung erfolgt selektiv aufgrund von Umweltauswirkungen. |
| Sicherheitstests | Identifizieren Sie Sicherheitsrisiken, Fehlkonfigurationen und Angriffsvektoren. | Wenden Sie es während des gesamten Entwicklungslebenszyklus an. | Mittelhohe Kosten, aber extrem hoher Wert. Wichtig für den Schutz von Daten, die Einhaltung von Vorschriften und die Verringerung des Geschäftsrisikos. |
Bewerten Sie die einzelnen Features oder Änderungen basierend auf den Auswirkungen und Risiken des Unternehmens. Priorisieren Sie Testtypen basierend auf dieser Bewertung. Heben Sie für kundenorientierte Workloads End-to-End- und UI-Tests hervor. Konzentrieren Sie sich für API-gesteuerte Workloads auf Integrations- und Vertragstests. Für Hochverfügbarkeitssysteme investieren Sie in Resilienz- und Chaostests.
Kompromiss. Priorisieren Sie Sicherheitstests am Anfang des Releaseprozesses. Dieser Ansatz trägt dazu bei, Sicherheitsrisiken zu verhindern und sicherere Bereitstellungen zu gewährleisten. Diese Priorität kann jedoch das Tempo verlangsamen, in dem Sie neue Features für die Produktion bereitstellen.
Behandeln Sie Testressourcen ebenso wichtig wie Code-Ressourcen.
Testressourcen erfassen wichtige Geschäftsregeln, Edgefälle, historische Fehlermuster und wertvolles Organisationswissen. Wenn die Testqualität beeinträchtigt wird, verschwenden Teams Zeit beim Debuggen unzuverlässiger Tests, anstatt echte Fehler zu finden. Diese Situation verursacht Frustration, und Entwickler verlieren vertrauen in das Testframework.
Behandeln Sie Testressourcen mit demselben Rigor wie Coderessourcen. Die volle Verantwortung für Ihre Testressourcen erhöht sowohl die Zuverlässigkeit als auch die allgemeine Qualität Ihres Testframeworks.
Strukturieren und Sichern Ihrer Tests
Strukturtestcode mit den gleichen Architekturprinzipien wie Ihr Anwendungscode. Wenn möglich, behalten Sie Ihre Tests zusammen mit Ihrem Code im selben Repository bei, um die Wartung zu optimieren und die Konsistenz zu fördern.
Wenn sich Ihre Automatisierungssuite in einem separaten Repository befindet, implementieren Sie gleichwertige Governance-Kontrollen wie obligatorische Codeüberprüfungen, Pull-Request-Richtlinien und Build-Validierungspipelines, um Qualitätsstandards aufrechtzuerhalten.
Tests interagieren häufig mit Produktionsdaten und -systemen, wodurch Risiken aus importierten Bibliotheken oder anfälligen Testcode entstehen können. Implementieren Sie sichere Codierungsmethoden in Ihrem Testcode, um Sicherheitsrisiken zu verhindern. Behandeln Sie Tests mit den gleichen Sicherheitsstandards wie Produktionscode.
Versionieren Sie Ihre Testdaten zusammen mit Ihrem Code. Wenn Sie Datenschemas oder Geschäftsregeln ändern, aktualisieren Sie Testdaten so, dass sie dem aktuellen Workloadstatus entsprechen.
Führen Sie die grundlegende Überprüfung Ihrer eigenen Tests durch, um sicherzustellen, dass sie wie erwartet funktionieren. Fehler sollten auf tatsächliche Anwendungsprobleme und nicht auf Testfehler verweisen. Stellen Sie sicher, dass Tests ordnungsgemäß fehlschlagen und konsistent bestehen, wenn die Workload stabil ist. Behandeln Sie unzuverlässige Tests umgehend, und stellen Sie sicher, dass Testassertionen die Absicht jedes einzelnen Tests verstärken.
Richten Sie Methoden ein, die die Testunabhängigkeit und Zuverlässigkeit sicherstellen, z. B. Testdaten isolieren, gemeinsam genutzten Zustand vermeiden und ordnungsgemäße Einrichtungs- und Abrissprozesse implementieren. Implementieren Sie die automatisierte Bereinigung von Testdaten. Um von der parallelen Testausführung zu profitieren, entwerfen Sie Ihre Tests so, dass sie unabhängig sind, damit sie in beliebiger Reihenfolge ausgeführt werden können, ohne die Ergebnisse zu beeinträchtigen. Unabhängige Tests sollten immer eigene Daten und Abhängigkeiten einrichten und abbauen, sodass Zustände nicht in die nächste Testausführung übertragen werden.
Wenn Ihre Anwendung Sequenzierung in Tests erfordert, verwenden Sie Testframeworks, die die geordnete Testausführung unterstützen.
Verwalten und Entwickeln Ihrer Tests
Die Aufrechterhaltung Ihrer Testressourcen ist entscheidend für die Erhaltung der Arbeitsauslastungsqualität. Diese Ressourcen enthalten häufig wertvolle Organisationskenntnisse. Wenn Sie sie nicht regelmäßig pflegen, werden sie schnell veraltet und unterminieren ihre Effektivität und Ihre Fähigkeit, qualitativ hochwertige Versionen bereitzustellen.
Während sich Ihre Arbeitsauslastung weiterentwickelt, müssen sich Ihre Testressourcen parallel entwickeln, um mit den Geschäftszielen in Einklang zu bleiben. Verwenden Sie die gleichen Architekturprinzipien für Ihren Testentwurf wie für Produktionscode.
Ihre Regressionstestsuite sollte Ihre wertvollsten und stabilsten Tests enthalten. Beginnen Sie mit einer kleinen Regressionssuite und erweitern Sie sie gezielt. Fügen Sie Tests hinzu, wenn Produktionsvorfälle auftreten, wenn Sie kritische Fehler beheben und änderungen mit hohem Risiko einführen. Automatisieren Sie Ihre Regressionssuite so, dass sie konsistent ohne menschliche Eingriffe ausgeführt wird. Erstellen Sie schnelle Rauchtests, die bei jedem Commit ausgeführt werden, und umfassendere Regressionstests, die nachts oder vor der Freigabe ausgeführt werden.
Testfälle erfassen die Absicht, den Umfang und die erwarteten Ergebnisse. Die Synchronisierung von Testautomatisierungsskripts und Testfällen ist unerlässlich. Wenn Automatisierungsskripts von ihren entsprechenden Testfällen abweichen, ist es schwierig, zu verfolgen, was überprüft wird, was zu Lücken bei der Abdeckung und Rechenschaftspflicht führt.
Planen Sie proaktiv regelmäßige Updates für Ihre Testfälle, während Sie neue Features und Verbesserungen für Ihre Workload einführen. Wenn Sie einen Testfall automatisieren, verknüpfen Sie die Automatisierung mit dem ursprünglichen Testfall, damit Sie die Abdeckung nachverfolgen können.
Verwalten von technischen Schulden aus Tests
Planen Sie regelmäßige Testwartungs-Sprints, um die Ansammlung technischer Schulden anzugehen, bevor sie überwältigend wird.
Flaky-Tests, doppelte Abdeckung, veraltete Tests und schlechtes Testdesign tragen alle zu Testschulden bei. Wenn Sie unzuverlässige Tests identifizieren, priorisieren Sie das Beheben oder Entfernen dieser Tests, um die Integrität Ihrer Testsuite aufrechtzuerhalten. Ein kleinerer Satz zuverlässiger Tests ist wertvoller als ein großer Satz instabiler Tests.
Strategische Entscheidungen zum Überspringen oder Zurückstellen von Tests sind ebenso wichtig wie das, was Sie testen. Ziehe in Betracht, Tests für trivialen oder risikoarmen Code zu überspringen, wie einfache Getter und Setter ohne Geschäftslogik, extrem seltene Randfälle, Bibliotheken von Drittanbietern und Legacy-Code, der zur Entfernung vorgesehen ist. Dokumentieren Sie diese Entscheidungen, damit Ihr Team sie überdenken kann, wenn sich der Kontext ändert.
Bewerten Sie Ihre Testsuite und trennen Sie zuverlässige, konsistente Tests von den anfälligen externen Änderungen. Tests, die aufgrund von Faktoren außerhalb Ihrer Kontrolle häufig fehlschlagen – wie UI-Tests, die von häufigen UI-Updates betroffen sind – sind möglicherweise nicht ideal für die Automatisierung. Diese Trennung hilft Ihnen bei der Entscheidung, welche Tests automatisiert werden sollen und welche manuell gehalten werden sollen.
Kompromiss. Wenn Sie zerbrechliche Tests entfernen, reduzieren Sie ihre Automatisierungsabdeckung. Ausgleichen Sie diese Reduzierung, indem Sie die Automatisierung auf stabile Schnittstellen und kritische Workflows konzentrieren und manuelle Tests für häufig ändernde UI-Elemente akzeptieren.
Nicht alle Tests verdienen eine laufende Wartung. Stellen Sie Tests für entfernte Funktionen ein, Tests, die die Abdeckung duplizieren, und Tests, die keinen Wert mehr bieten. Dokumentieren Sie, warum Sie Tests entfernen, damit die Entscheidung für Ihr Team klar ist.
Erweitern Sie die Observability auf Ihr Testframework.
Die Beobachtbarkeit bei Tests führt zu zwei wichtigen Zielen: Sicherstellen, dass das Testframework zuverlässig funktioniert und kontinuierlich Einblicke in die Qualität und Integrität Ihrer Arbeitsauslastung bietet. Wenn Sie Observability-Praktiken in Ihr Testframework integrieren, stärken Sie Diagnosefunktionen, erleichtern die Echtzeitüberwachung der Stabilität und fördern eine kontinuierliche Verbesserung der Testprozesse.
Ohne diese Sichtbarkeit haben Sie erhebliche Schwierigkeiten, Probleme zu diagnostizieren, eine eingeschränkte Fähigkeit, Systeme in Echtzeit zu überwachen, und Sie erhalten keine klaren, umsetzbaren Einblicke in die Effektivität Ihrer Automatisierungsabdeckung.
Testsuiten verschlechtern sich im Laufe der Zeit, Tests werden unzuverlässig, verlieren an Relevanz oder halten mit Arbeitslaständerungen nicht Schritt. Durch die Einbeziehung von Observability können Sie die Integrität Ihrer Testsuite effektiv überwachen, Fehler schnell anheften und beheben und fundierte Entscheidungen zu Wartungsprioritäten und Verbesserungen treffen. Durch das Generieren von Abdeckungsberichten können Lücken in der Automatisierung leichter identifiziert werden. Wenn die Testabdeckung mit Observability-Daten aus Produktionsvorfällen übereinstimmt, erhalten Teams Einblicke, in welche Szenarien eine angemessene Validierung fehlt.
Verwenden Sie branchenübliche Testabdeckungs- und Berichtswerkzeuge in Ihrem Framework, um:
- Bereitstellen klarer Einblicke in getestete Codepfade
- Identifizieren von konsistent fehlerhaften Tests
- Analysieren langfristiger Trends bei der Testsicherheit
- Verfolgen der Ursprünge von Fehlern für gezielte Verbesserungen
Risiko: Wenn Protokolle inkonsistent und übermäßig detailliert sind, erzeugen sie möglicherweise mehr Rauschen als Wert, wodurch das Debuggen erschwert wird. Implementieren Sie die strukturierte Protokollierung mit klaren und umsetzbaren Nachrichten sowie unterschiedlichen Ausführlichkeitsstufen, um sicherzustellen, dass Protokolle aussagekräftige Einblicke bieten, ohne Ihr Team zu überwältigen.
Simulieren realistischer Bedingungen
Bewerten Sie Ihre Workflows aus der Sicht des Endbenutzers, um sicherzustellen, dass sie wirklich kundenanforderungen und -erwartungen erfüllen. Definieren Sie klare Akzeptanzkriterien für Ihre Workloads, und entwerfen Sie Tests, die echte Benutzerflüsse und -erfahrungen genau widerspiegeln, nicht nur isoliertes Systemverhalten.
Abdeckung strategisch skalieren
Skalieren Sie Ihre Testabdeckung basierend auf Risiko und Wert. Priorisieren Sie die Abdeckung für hochwertige Benutzerreisen und kritische Pfade, die sich direkt auf die Benutzererfahrung auswirken. Wenn die Komplexität der Arbeitslast zunimmt, erweitern Sie Ihre Testabdeckung, indem Sie Szenarien auswerten, die das höchste Vertrauen in die Qualität und Zuverlässigkeit der Arbeitslast bieten.
Risiko: Investieren Sie nicht zu viel in einen einzelnen Benutzerfluss über den Punkt hinaus, an dem die Rendite abnimmt. Nachdem Sie eine ausreichende Abdeckung für kritische Pfade erreicht haben, setzen Sie den Fokus auf andere wichtige Bereiche. Streben Sie nach ausgewogener Berichterstattung und nicht nach Perfektion in einem einzigen Ablauf.
Ausrichten an geschäftszielen und SLOs
Richten Sie Ihre Tests sowohl an geschäftsziele als auch an Service Level Objectives (SLOs) aus. Legen Sie messbare Qualitätsschwellenwerte fest, die Geschäftsverpflichtungen und Benutzererwartungen widerspiegeln. Stimmen Sie diesen Schwellenwerten zu, da sie einen Referenzpunkt bereitstellen, um Abweichungen zu erkennen und Fehler zu beheben. Dieser Ansatz schützt die Benutzererfahrung, indem sichergestellt wird, dass wichtige Schwellenwerte für die Dienstqualität nicht kompromittiert werden. Überprüfen und aktualisieren Sie regelmäßig Ihre Basismetriken, um sicherzustellen, dass sie die aktuellen Kundenanforderungen und Erwartungen weiterhin erfüllen.
Repräsentative Testdaten verwenden
Testdaten sollten reale Szenarien so genau wie möglich darstellen. Synthetische Daten können authentische Benutzerszenarien simulieren und gleichzeitig die Komplexität der Verarbeitung von Produktionsdaten vermeiden. Beispielsweise können synthetische Tests reale Szenarien replizieren, indem repräsentative Datasets generiert werden, um zu bewerten, wie Ihre Workload unter geplanten Skalierungsbedingungen ausgeführt wird.
Wenn Sie Produktionsdaten für Tests verwenden müssen, stellen Sie sicher, dass Sie alle Informationen ordnungsgemäß anonymisiert haben, um vertrauliche Informationen zu schützen.
Verwenden Sie synthetische Daten als Standardauswahl. Reservieren Sie Produktionsdaten für bestimmte Szenarien, in denen synthetische Daten die erforderliche Komplexität nicht replizieren können, z. B. das Testen von Datenmigrationsskripts.
Simulieren der Produktionsumgebung
Die Produktionsumgebung ist Ihre Quelle der Wahrheit, um zu verstehen, wie sich Ihre Arbeitsauslastung unter realen Bedingungen verhält. Erstellen Sie eine Umgebung, die die realen Bedingungen genau widerspiegelt, damit Sie vertrauen können, dass das System wie erwartet in der Produktion ausgeführt wird.
Passen Sie Ihren Ansatz zur Spiegelung von Produktionsumgebungen an die spezifischen Anforderungen Ihrer Workload an. Testen Sie bei unternehmenskritischen Workloads, die eine hohe Verfügbarkeit erfordern, in einer dedizierten Umgebung, die der Produktion ähnlich ist. Für diese Workloads sollten Sie die Kostenoptimierung sorgfältig mit der Notwendigkeit einer robusten Validierung in Einklang bringen. Verwenden Sie eine dedizierte produktionsähnliche Umgebung für Leistungs- und Lasttests, um sicherzustellen, dass das Dienstverhalten unter realistischen Bedingungen genau bewertet wird.
Bei anderen Arbeitslasten spiegeln Sie ihre Umgebung eng mit der Produktionsinfrastruktur zusammen, um falsch positive Ergebnisse zu reduzieren. Fälle, in denen Tests in niedrigeren Umgebungen erfolgreich sind, aber in der Produktion fehlschlagen. Streben Sie die Konsistenz in allen Umgebungen an, während Ihr Code durch die Pipeline voranschreitet. Simulieren Sie Produktionsbedingungen in verschiedenen Aspekten Ihrer Arbeitsauslastung, einschließlich Infrastruktur, Daten und Sicherheit, um zuverlässige Testergebnisse sicherzustellen.
Wenn Sie Ihre Umgebungen in die Produktion spiegeln, kann die Konfigurationsabweichung ein falsches Vertrauen in die Qualität schaffen. Verhindern Sie dies, indem Sie automatisierte Überprüfungen für Konfigurationsabweichungen implementieren, um sicherzustellen, dass Ihre Umgebung mit der Produktion übereinstimmt. Richten Sie gegebenenfalls Bereitstellungsgates ein, um zu überprüfen, ob die richtige Version bereitgestellt wird, bevor die Tests beginnen.
Risiko: Wenn Sie Produktionsumgebungen spiegeln, kann dies die Betriebskosten erheblich erhöhen. Bewerten Sie, ob kurzlebige Umgebungen oder persistente Testumgebungen die optimale Balance zwischen Kosteneffizienz und Qualität für Ihre Workload bieten.
Erstellen zweckgesteuerter Testumgebungen
Designumgebungen mit einem klaren Fokus auf ihren beabsichtigten Zweck. Bewerten Sie die unterschiedlichen Anforderungen jeder Phase im Testlebenszyklus, und stellen Sie sicher, dass die Umgebung eng mit den Zielen dieser Phase übereinstimmt.
Entwerfen Sie absichtlich jede Testumgebung so, dass sie der spezifischen Stufe und den Zielen des Tests entspricht, unabhängig davon, ob es sich um funktionale Validierung, Integrationstests oder andere Zwecke handelt. Wenn eine optimierte Umgebung Ihren Testanforderungen effektiv entspricht, priorisieren Sie diesen Ansatz, um die Effizienz zu maximieren.
Verwenden von Pseudodiensten
Die vollständige Replikation von Produktionssystemen für jedes Testszenario ist häufig unpraktisch. Bewerten Sie, welche Komponenten Ihrer Workload Sie sicher für Tests replizieren können, ohne kritische Geschäftsworkflows zu gefährden. Wenn die vollständige Replikation nicht machbar ist, verwenden Sie simulierte Dienste, die Produktionsdienstverhalten genau simulieren, um Szenarien effektiv zu überprüfen, ohne Livevorgänge zu riskieren.
Zweckgesteuerte Testumgebungen bieten eine ideale Grundlage für die Bereitstellung von Pseudodiensten in kurzlebigen Umgebungen. Ephemerale Umgebungen bieten eine kostengünstige Möglichkeit, Produktionsbedingungen für Tests zu simulieren. Sie können Interaktionen und Verhaltensweisen überprüfen, ohne den Aufwand für die Aufrechterhaltung vollständiger produktionsähnlicher Umgebungen für jedes Testszenario zu gewährleisten. Diese On-Demand-Umgebungen werden für bestimmte Testzwecke erstellt und nach der Verwendung zerstört, wodurch die Infrastrukturkosten reduziert werden, während die Testqualität beibehalten wird.
Das Erstellen ephemerer Umgebungen erfordert, dass Ihre Arbeitsabläufe eine höhere Reifestufe erreichen, bei der Automatisierung mit Infrastructure as Code (IaC) und Bereitstellungspipelines gut etabliert ist.
Azure-Unterstützung
Azure Test Plans ist eine browserbasierte Testverwaltungslösung, die alle Funktionen bereitstellt, die für geplante manuelle Tests, Benutzerakzeptanztests, explorative Tests und Sammeln von Feedback von Projektbeteiligten erforderlich sind. Es umfasst Test Analytics , um Ihre Testqualität im Laufe der Zeit nachzuverfolgen und Bereiche zur Verbesserung zu identifizieren.
Azure Pipelines ermöglicht es Ihnen, Tests in Ihre CI/CD-Pipeline zu integrieren. Sie können auch GitHub-Aktionen verwenden, die in Azure integriert sind.
Azure App Testing ist ein Dienst, der Funktions- und Leistungstests unterstützt. Sie können funktionsbezogene Tests mit Arbeitsbereiche für Dramatiker und Leistungstests mithilfe von Azure Load Testing ausführen.
Azure Deployment Environments kann dazu beitragen, die App-Infrastruktur mit projektbasierten Vorlagen bereitzustellen, die Konsistenz und bewährte Methoden gewährleisten und gleichzeitig die Sicherheit maximieren.
Azure bietet auch plattformeigene Tools, die Zuverlässigkeit, Leistung und Sicherheitstests unterstützen.
Verwandte Links
- Empfehlungen für Leistungstests
- Empfehlungen für Zuverlässigkeitstests
- Empfehlungen für Sicherheitstests
Checkliste für operative Exzellenz
Lesen Sie die vollständigen Empfehlungen.