https://d226lax1qjow5r.cloudfront.net/blog/blogposts/quality-and-velocity-our-seven-year-journey-to-availability/Blog_1200x600-1.png

Qualität und Schnelligkeit: Unsere siebenjährige Reise zur 99,999%igen Verfügbarkeit

Zuletzt aktualisiert am February 17, 2021

Lesedauer: 5 Minuten

Angesichts eines hochdynamischen Software-Ökosystems stagniert die Welt der Softwaretests. Da die Produkte immer komplexer werden, sehen sich die Entwicklungsteams mit einem Dilemma konfrontiert: Die Forderung nach einer schnellen Lieferung steht im Konflikt mit der Notwendigkeit, qualitativ hochwertige Produkte zu gewährleisten.

Wie können Ihre Teams einen stärkeren Ansatz für Softwaretests verfolgen, ohne Kompromisse bei Geschwindigkeit und Produktwachstum einzugehen?

Das wachsende SDET-Team (Software Developer in Test) innerhalb der Vonage-Forschung und -Entwicklung definierte eine Lösung. Wir nennen sie Qualocity: der mehrschichtige Testansatz, der sowohl Qualität als auch Geschwindigkeit berücksichtigt.

Wo hat es also angefangen?

Die meisten Unternehmen konzentrieren ihre Testbemühungen auf zwei Hauptbereiche: funktionale Tests, die die grundlegende Nutzung einer Anwendung nachbilden, und nichtfunktionale Systembelastung. Testgruppen messen die Produktqualität in der Regel an der Abdeckung der Anforderungen und an der Anzahl der gefundenen, entgangenen und wieder geöffneten Fehler - im Wesentlichen werden die Fehler verherrlicht, anstatt sie von vornherein zu verhindern.

Aber die Welt hat sich verändert. Wir sind mit einer zunehmenden Fragmentierung in Bezug auf Betriebssysteme, Geräte und Netzlatenz konfrontiert. Wir sind weit in der Ära der Apps, einer Ära, die dynamisch und wettbewerbsintensiv ist. Wir sehen APIs und gemeinsame Bibliotheken, die jetzt eine schnellere Entwicklung ermöglichen, sowie verschiedene Cloud-Dienste, die dem Entwickler eine Umgebung bieten, die nicht von Betriebssystemen, Sicherheit, Redundanz oder sogar Skalierung abhängig ist. All dies bedeutet, dass Unternehmen mit monatelangen Wasserfall-Release-Zyklen nicht mehr mit der Nachfrage nach Funktionen und Innovationen konkurrieren können.
Unternehmen, die nicht schnell liefern können, kommen zu spät auf den Markt.

Die Schichten

Doch trotz der Notwendigkeit, schnell zu sein, birgt es ein Risiko, mit nur wenigen Methoden veralteter Qualitätstests zur Produktion zu eilen. Denn wenn wir so weitermachen wie bisher, werden wir uns am Ende in einem Kreislauf von Qualitätsproblemen und Eskalationen in der Produktion verheddern, was niemandem Spaß macht. Bleiben noch diese beiden kritischen Faktoren: Die Qualität muss verbessert werden, aber wir müssen in der Lage sein, Änderungen konsequent und bewusst in die Produktion zu übernehmen.

Vor sieben Jahren begannen wir, zusätzliche Methoden zu erforschen, um die beiden ursprünglichen Ebenen, Funktions- und Lasttests, zu ergänzen. In dieser Zeit haben wir kontinuierlich den Qualitäts- und Geschwindigkeitsansatz aufgebaut, der uns zu einer Systemverfügbarkeit von 99,999 % geführt hat, die umgangssprachlich als "Five Nines" bezeichnet wird.

Durch Forschung und Experimentieren haben wir das hier vorgestellte Verfahren entwickelt, das aus drei mehrdimensionalen Schichten besteht:

quality layers

Disziplin der Kodierung

Es mag offensichtlich erscheinen, dass eine angemessene Code-Disziplin das Herzstück der Softwarequalität ist. Das Testen beginnt hier, bei der konsequenten Einhaltung von Standards und Verfahren.

  • Code-Überprüfungen sollten immer von Gleichgesinnten durchgeführt werden, und automatisierter Code sollte auf die gleiche Weise behandelt werden.

  • Einheitliche Tests mit breiter Abdeckung ermöglichen es uns, einfach und sicher zu testen, dass wir die Codebasis nicht beschädigt haben.

  • Werkzeuge zur statischen Analyse entdecken statische Fehler und Sicherheitsschwachstellen. Es gibt viele davon auf dem Markt, die unterschiedliche Spezifikationen für unterschiedliche Bedürfnisse bieten.

  • Funktionale Tests sollten sich auf Mocking konzentrieren. Testen Sie auf API-Ebene und umgeben Sie Ihre Automatisierung mit Mocks, die genau das testen, wonach Sie gefragt haben. Vermeiden Sie automatisierte End-to-End-Tests, denn Sie testen Ihren Code und nicht das End-to-End-Produkt. Dadurch erhöht sich die Abdeckung, und die Tests werden stabiler.

Sicherstellen, dass die Funktionstests überallnicht nur in Entwicklungs- und QA-Umgebungen, sondern auch in der Produktion. Wenn sie richtig aufgebaut sind, sind sie ein hervorragendes Überwachungsinstrument und fallen nicht so oft aus. Wir alle wissen, wie frustrierend es ist, um 2 Uhr morgens wegen eines Fehlalarms alarmiert zu werden.

functional tests

Nicht-funktionale Tests

Hierfür müssen Sie Ihre Komfortzone verlassen und über den Tellerrand hinausschauen. Sie müssen die durchschnittliche Nutzung Ihres Produkts kennen und es bis an seine Grenzen bringen.

Stellen Sie sich eine API vor, von der Sie wissen, dass sie im Durchschnitt 1000 Anrufe pro Sekunde erhält, mit einer Spitze von 1200 um 10 Uhr und 15 Uhr und einem Tiefststand von 800 um 22 Uhr.

  • Für Lasttest sollten Sie ein paar Stunden lang 1000 Anrufe pro Sekunde tätigen.

  • Unter Stresstests fügen Sie so lange Anrufe hinzu, bis Sie auf einen Fehler stoßen. Das ist Ihr Stresspunkt. Entscheiden Sie, was zu tun ist, und versuchen Sie es erneut.

  • Stabilitätsprüfungen Berücksichtigen Sie die durchschnittliche Nutzung im Laufe der Zeit. Führen Sie über einen längeren Zeitraum hinweg zu Spitzenzeiten 1200 Anrufe pro Sekunde durch, zu Zeiten geringer Auslastung 800 und in der übrigen Zeit 1000. Auf diese Weise wird sichergestellt, dass Sie bei Ihrer durchschnittlichen Auslastung stabil bleiben können.

Wenn Ihre Software Funktionen enthält für automatische Skalierungbietet, stellen Sie sicher, dass die Tests auf zusätzlichen Instanzen durchgeführt werden, sobald das Limit erreicht ist. Testen Sie Redundanz für Regionen und Zonen, denn denken Sie daran, dass Ihre Cloud-Dienste werden von Zeit zu Zeit ausfallen. Sicherheit bezieht sich in diesem Zusammenhang auf Penetrationstests von Anwendungen, OSS-Tests (externe Bibliotheken und APIs) und statische Analysetools. Code-Reviews sind in dieser Phase von entscheidender Bedeutung und sollten Teil des Lebenszyklus der Softwareentwicklung sein.

DevOps-Disziplin

Lassen Sie es einweichen. Machen Sie sich nicht vor, dass Sie sich vor allen Eventualitäten geschützt haben, wenn alles oben genannte gut funktioniert. Das können Sie einfach nicht. Es gibt noch mehr Geräte, mehr Account-Funktionen und mehr Konfigurationen zu berücksichtigen. Nehmen Sie sich die Zeit, um sicherzustellen, dass die Tests tatsächlich genau sind.

Denken Sie daran, die Freigaben schrittweise vorzunehmen

  • Ermutigen Sie Fehlerbeseitigung durch das Entwicklungsteam vor der Übergabe an das Staging

  • Versuchen Sie es dann mit dem alpha (internen) Nutzern, bevor Sie es mit den Beta (externe) Benutzer. Diese ausgewählten Betagruppen sollten die Mehrheit Ihrer Produktionsbasis in Bezug auf Instanzen und Geräte repräsentieren.

  • Sobald die Version allgemein verfügbar ist, aktivieren Sie eine blau-grünes Bereitstellungssystem, das abwechselnd Produktions- und Staging-Server einsetzt und es Ihnen ermöglicht, bei Bedarf schnell auf eine frühere Version zurückzugreifen.

  • Überwachen Sie den Zustand Ihres Systems genau, richten Sie Warnmeldungen ein und analysieren Sie die Testdaten.

  • Sprechen Sie mit Ihren Kundenerfolgsteams und erkunden Sie andere Feedback-Quellen, z. B. in App-Stores, sozialen Medien und Community-Plattformen.

Wenn Sie all diese Schritte befolgt haben, können wir Ihnen so gut wie garantieren, dass Sie jetzt bereit für GA sind.

Fazit

Was wir oben vorgestellt haben, ist ein Ansatz für eine Qualitätsstrategie, die wir für nahezu perfekt halten, die aber dennoch erreichbar ist. Wir haben ihn zwar noch nicht für alle unsere Services vollständig umgesetzt, insbesondere nicht für Legacy-Code und geerbte Software, aber wir können mit Sicherheit sagen, dass jede Ebene nachweislich einen erheblichen Unterschied ausmacht. Das Team von SDETs und DevOps-Ingenieuren bei Vonage wird das bestätigen. Es ist ein großes Unterfangen, aber wir ermutigen Sie, schrittweise eine Schicht nach der anderen hinzuzufügen, bis Sie die für Sie richtige Abdeckung erreicht haben.

Wir hoffen, dass wir Ihnen damit helfen konnten und hoffen, dass diese Recherche Sie Ihrer gewünschten Verfügbarkeit noch näher bringt.

Teilen Sie:

https://a.storyblok.com/f/270183/256x251/daad3250b9/yuvalgolan.png
Yuval GolanVonage VP für Qualitätssicherung

Yuval ist VP Quality Assurance Engineering bei Vonage, wo er die Softwaretests, die Automatisierung und die Bereitstellung auf mehreren Vonage-Plattformen leitet. Yuval hat sich schon immer für die Herstellung qualitativ hochwertiger Produkte begeistert und ist überzeugt, dass die Menschen den Unterschied ausmachen. Nach der Arbeit geht Yuval gerne schwimmen, spielt Tennis und verbringt viel Zeit mit seiner Familie und Freunden.