Parasoft C/C++test 2022.2 unterstützt das neue MISRA C:2012 Amendment 3 und eine Entwurfsversion von MISRA C++ 202x. Erfahren Sie mehr >>

Nichtfunktionale Tests und Leistungstests könnten nicht mehr nach links verschoben werden

Von Jason Englisch

28. Mai 2020

4  min lesen

Beim Softwaretesten sind nicht funktionale Probleme am schwierigsten zu erkennen. Hier ist ein Beitrag, der nichtfunktionale und Leistungstests und die besten Ansätze für deren Implementierung erläutert.

Ein Intellyx BrainBlog für Parasoft von Jason English

Hatten Sie jemals einen Freund, der wegen der Weiße seiner Zähne zwanghaft war? Sie gehen zu einem kosmetischen Zahnarzt für eine Laseraufhellung und beschweren sich dann, dass es nicht weiß genug ist? Schließlich erreichen sie einen asymptotischen Punkt, an dem die Zahnoberfläche 99.9 % des Lichts nicht mehr reflektieren kann, sodass eine Behandlung, die zu 99.999 % weiße Zähne liefert, zu kostspielig und unmöglich wäre.

Testingenieure, Leistungstester und SREs sind davon besessen, auf der letzten Meile der Softwarebereitstellung ein Zuverlässigkeitsniveau von fünf Neun (oder manchmal sogar noch höher) zu erreichen, das die Kunden am meisten beeinträchtigt.

Wenn auch Sie eine OCD über die Zuverlässigkeit von Anwendungen haben, haben Sie bereits die Mathematik ausgearbeitet und festgestellt, dass 5 9 insgesamt etwa 5.26 Minuten Ausfallzeit pro Jahr entsprechen. Und Sie erkennen auch, dass die Kosten und der Aufwand für die Testtechnik, 99.9% zu überschreiten, um eine Verfügbarkeit von 99.999% zu gewährleisten, enorm sind.

Wenn die Produktion von 3 9 auf 5 9 erhöht wird, wird in den meisten Fällen viel mehr IT-Budget verbraucht als bei 3 9!

Es scheint, dass alle Leistungstests vor der Produktion in der Welt niemals alle unbekannten Bedingungen klären werden, die 0.001% der Ausfallzeiten verursachen könnten. Egal wie viel wir ausgeben. Raus, verdammter Ort!

Ah ... aber machen wir uns keine Sorgen um die eine Sache, die Sie nicht verbessern können, ganz auf der rechten Seite der Softwarebereitstellung. Nein, nein, nein ... Die Lösung von Problemen kostet hier ohnehin viel mehr, wenn die Anwendung vollständig gebacken ist. Ich kann nicht davon besessen sein.

Nur ein winziges Aufflackern. Niemand ist vollkommen. Entspannen.

Holen Sie sich mit frühen DevTest-Teams eine neue Perspektive

Lassen Sie die Produktion für eine Weile in Ruhe und treffen Sie sich stattdessen zu Beginn des Software-Lebenszyklus mit den DevTest-Teams.

Hier auf der linken Seite der Softwarebereitstellung zeichnen sie Karten, schreiben Code und wählen Komponenten aus. Keine Sorge auf der Welt. Keine Angst vor was unbekannte Unbekannte kann bei der Bereitstellung auftreten.

Sie führen eine agile Test-First-Entwicklung durch und führen bei jedem Build zahlreiche strukturelle Codeprüfungen durch, wobei automatisierte Einheiten- und Regressionstestsuiten ausgeführt werden. Bei solchen Tests haben sie sich nach links verschoben.

Sie machen sich auch keine großen Sorgen über die Auswirkungen ihrer Entscheidungen. Wenn verschiedene Dienste, Software und Infrastrukturkomponenten hinter einer funktionierenden Anwendung integriert werden, können sie bei der Interaktion unter Last eine unendliche Vielfalt nicht funktionierender Probleme erzeugen.

Frühe Design- und Entwicklungsauswahlen können später schlechte Nachrichten liefern, aber nichtfunktionale Tests (NFT) und Leistungstests finden traditionell näher an der Produktion statt.

Warten Sie, was wäre, wenn Sie NFT für Design und Entwicklung einsetzen könnten? Könnte dies eine ausreichende Frühwarnung bieten, um die kostspieligsten Fehler zu vermeiden?

NFT und PerfTest nach links verschieben

Nichtfunktionale Probleme lassen sich in der Software nur schwer frühzeitig erkennen, da reale Bedingungen im Labor naturgemäß schwer zu reproduzieren sind.

Sie können Selenium-Funktionstestsuiten auf einer App-Oberfläche oder einem Benutzerautorisierungsprozess ausführen oder eine Reihe von API-Servicetestaufrufen und -datensätzen ausführen, um die Antworten zu überprüfen, oder eine Reihe von JUnit- oder NUnit-Tests für Code ausführen. Alle diese Methoden können jedoch nur auf die Probleme testen, die Sie in diesem frühen Stadium erwarten.

Um den Bedingungen der realen Welt näher zu kommen, stehen dem Team drei Optionen zur Verfügung.

1. Fügen Sie Funktionstests für das Benchmarking ein. Wenn Sie Selenium-Funktionstests in die CI / CD-Software-Pipeline einfügen und diese mit einem Begleittool wie automatisieren Parasoft Selenic Um die Ausführungszeiten bei jedem Build zu überwachen, können Sie einen ziemlich guten Benchmark für jede Anwendung, Komponente oder jeden Dienst erfassen.

Wenn aus irgendeinem Grund eine gewisse Abweichung in der Reaktionszeit auftritt, kann der Build die Build-Plattform oder den Entwickler benachrichtigen, dass eine Ausnahme (wahrscheinlich nicht funktionsfähig) dazu geführt hat, dass eine bestimmte Komponente langsamer wurde.

2. Tests wiederverwenden und unter Last wiederholen. Warum bis zum Ende warten und Tools wie LoadRunner verwenden, für deren Aufruf nahezu fertige Benutzeroberflächen erforderlich sind, spezielle Testfähigkeiten und hohe Kosten pro Sitzplatz?

Was wäre, wenn Sie stattdessen die Selenium-Tests und einige Sicherheitsüberprüfungen sowie Service- und Integrationstests mit einem Tool wie durchführen würden? Parasoft SOAtest, dann mit dem Radfahren begonnen und sie erneut ausgeführt, möglicherweise mit einer gewissen Variabilität der Daten oder des Timings, bei höheren Frequenzen? Sie würden einen frühen Leistungstest von erhalten Linksverschiebungstest.

Von dort aus können Sie verschiedene Kombinationen von Webstil-, UI-Aufrufen, Nicht-UI-Aufrufen an APIs oder Ereigniswarteschlangen für einen hybriden Leistungstest kombinieren, der mehrere Ebenen des Ziel-Ökosystems der Anwendung ausführen kann, ohne auf eine fertige App zu warten.

3. Isolieren Sie sich gegen Umweltabhängigkeiten. Die letzte Hürde, um NFT nach links zu verschieben, ist die Umgebung, in der Anwendungen tatsächlich leben. Eine moderne Anwendung funktioniert in einer Welt voller Daten- und Dienstabhängigkeiten.

Hier ist wo umweltbasierte Tests Mit einer Service-Virtualisierungslösung ist es sinnvoll, alle Upstream- und Downstream-Abhängigkeiten rund um die Live-App zu instrumentieren. Auf diese Weise können Sie beispielsweise das System eines Bankpartners oder ein nationales Wetter- oder Flugverkehrssystem simulieren, das niemals unter Ihrer Kontrolle steht oder für den Import in Ihr eigenes DevTest-Labor verfügbar ist.

Abhängigkeiten können abgehört und als virtuelle Dienste erfasst werden - Komponenten, die beim Testen von Software „besser als die Realität“ reagieren können.

Eine kanadische Bank verwendete eine Kombination aller drei Techniken. Sie automatisierten Funktionstests, um einen Benchmark für eine Kreditantragskomponente zu erfassen, und führten die Tests dann mit einigen anderen Tests für Datenabfragen und API-Aufrufe an einen Virtualisierungsdienst durch, der einen Kreditdienst eines Drittanbieters „nachahmte“.

Sie waren besorgt. Wenn der virtuelle API-Dienst zu langsam reagiert - was würde mit der zu testenden Komponente geschehen? Es reagierte wie erwartet, aber dann beschleunigte das Testteam den virtuellen Dienst dieser Antwort eines Drittanbieters auf die kürzestmögliche Zeit. Es trat eine „Race-Bedingung“ auf, die dazu führte, dass die Komponententransaktion fehlschlug, wenn eine zu schnelle Antwort erhalten wurde!

Die Intellyx nehmen

In der Software gibt es nur eine Definition von Perfektion, aber das Scheitern ist unendlich.

Egal wie viel wir putzen, wir werden niemals 100% weiße Zähne haben. Egal wie viel wir testen, wir werden niemals 100% frei von Fehlern sein, die es bis zur Produktion schaffen, wo Fehler schwer zu isolieren und kostspielig zu beheben sind.

Aber mit einer angemessenen Test-Left-Hygiene, die Nichtfunktions- und Leistungstests umfasst, können wir ein Frühwarnsystem erhalten, das viele dieser aufkommenden Probleme unterbindet, bevor sie die Chance haben, im Leistungslabor aufzutauchen oder vor Kunden zu scheitern.

Kontinuierliches Testen von Low-Code-Anwendungen

© 2020 Intellyx, GMBH. Intellyx behält die redaktionelle Kontrolle über den Inhalt dieses Dokuments. Zum Zeitpunkt des Schreibens Parasoft ist ein Intellyx-Kunde. Keiner der anderen hier genannten Anbieter ist Intellyx-Client. Bildquellen: Steve Snodgrass, Kristopher Volkmann, Johannes Königin, Gauthier DELECROIX - 郭 天, flickr Open Source.

Von Jason Englisch

Jason English ist Principal Analyst und CMO bei Intellyx, wo er führende Anbieter von Technologielösungen und Software-Startups bei der Steuerung der digitalen Transformation berät. Sein Hintergrund umfasst Kundenerfahrung und interaktives Design, Entwicklungs- / Testlebenszyklus von Unternehmenssoftware, Virtualisierung, Cloud und Blockchain.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.