Verwenden der Lückenanalyse im Testprozess, um Entwickler und Tester aufeinander abzustimmen

Es ist eine weit verbreitete Überzeugung, dass Entwickler und Tester wie Kreide und Käse miteinander auskommen. Entwickler schauen Testern oft auf die Nase und betrachten sie als unflexiblen und wenig hilfreichen Hemmschuh bei der Entwicklung neuen Codes, die in ihren Bug-Tickets keine klaren Details angeben. Ebenso sehen Tester Entwickler oft irritiert, weil sie sie nicht über Codeänderungen auf dem Laufenden halten und neue Änderungen während der Testzyklen vorantreiben. Aus diesem Grund kann die Lückenanalyse im QS-Testprozess besonders vorteilhaft sein, um sowohl Entwickler als auch Tester aufeinander abzustimmen.

Während diese Ansicht apokryph sein mag, ist es oft der Fall, dass Entwickler und Tester nicht gut kommunizieren. Oft geschieht die Kommunikation nur über das Management (Projektleiter und Vorgesetzte) oder über Tickets in Jira. Das Ergebnis ist, dass sich Tests oft als unzureichend erweisen. Insbesondere wird neuer Code allzu oft schlecht oder gar nicht getestet. Untersuchungen haben gezeigt, dass dieser ungetestete neue Code die größte Quelle für zukünftige Fehler und Fehler ist. Hier kommt das Konzept der Test Gap Analysis ins Spiel.

In diesem Blog werden wir untersuchen, was Testlückenanalyse ist, zeigen, wie es helfen kann, den Code zu identifizieren, der getestet werden muss, und untersuchen, ob dieser Ansatz das Allheilmittel ist, das die Lücke zwischen Entwicklern und Testern schließen kann.

Was ist eine Testlückenanalyse?

Wenn Sie zum ersten Mal ein Softwaresystem entwickeln, können Sie leicht sicher sein, dass Sie das gesamte System testen. Tester sind in der Lage, die Code-Spezifikationen zu übernehmen und eine Kombination aus geplanten und explorativen Tests zu verwenden, um sicherzustellen, dass sie jeden beweglichen Teil der Codebasis testen. Die meiste Software ist jedoch nicht statisch. Unternehmen erstellen entweder monolithische periodische Releases von langlebigem Code oder setzen ein gewisses Maß an kontinuierlicher Integration und kontinuierlicher Bereitstellung (CI / CD) ein. In beiden Fällen ändert sich die Codebasis ständig. Allzu oft werden die Testfälle jedoch nicht mit der gleichen Geschwindigkeit aktualisiert. Manchmal wissen die Tester einfach nicht, dass eine Codeänderung vorgenommen wurde. In anderen Fällen wird die Codeänderung kurz nach dem Ausführen eines bestimmten Satzes von Tests verschoben. Diese Tests scheinen bestanden zu sein, aber die Codeänderung hat sie möglicherweise gebrochen.

Testlückenanalyse ist der Prozess der Identifizierung dieser Lücken, in denen neuer Code bereitgestellt, aber noch nicht getestet wurde. Dies erfordert eine Kombination aus statischer Analyse aller Codeänderungen und dynamischer Analyse aller aktuellen Tests. Durch den Vergleich dieser beiden Analysen können Sie leicht erkennen, wo Lücken bestehen. Das heißt, Bereiche des neuen Codes, die ausreichend getestet wurden. Typischerweise wird dies durch Plotten des Codes unter Verwendung einer Form von Baumdiagramm durchgeführt, wobei der Code in Funktionsblöcke unterteilt ist, unter jedem Block sind die konstituierenden Klassen, darunter sind die tatsächlichen Methoden und Funktionen. Auf jeder Ebene in der Hierarchie gibt die relative Größe des Blocks die Codemenge an. Durch Überlagern des Baums, der die Codeänderungen anzeigt, mit dem Baum, der den aktuellen Teststatus anzeigt, können die Bereiche, in denen die Testabdeckung fehlt, leicht erkannt werden.

 Überbrückung der Lücke zwischen Entwicklern und Testern. ist Test Gap Analysis eine Lösung?

Eine Baumkarte mit unverändertem Code (grau), überarbeitetem / neuem Code, der getestet wurde (grün), überarbeitetem Code, der nicht getestet wurde (orange) und neuem Code, der nicht getestet wurde (rot).

Warum spielt die Analyse von Testlücken im Testprozess eine Rolle?

In einem Artikel aus dem Jahr 2013 führten Forscher der Technischen Universität München eine Studie durch, um die Korrelation zwischen neuem, ungetestetem Code und zukünftigen Softwarefehlern zu untersuchen. Sie arbeiteten mit Munich Re (einer großen Versicherungsgesellschaft) zusammen und überwachten ihr langlebiges IT-System durch 2 Releases. Während der Veröffentlichung stellten sie fest, welcher Code neu war, und schauten sich auch an, welcher Code getestet und welcher Code ungetestet veröffentlicht wurde. Danach überwachten sie das System für eine lange Zeit und verfolgten alle gemeldeten Fehler zurück zur ursprünglichen Quelle. Sie entdeckten zwei wichtige Dinge. Erstens wurde ungefähr ein Drittel des gesamten Codes ungetestet veröffentlicht. Zweitens, als sie die Fehler aufspürten, entdeckten sie insgesamt zwischen 70 und 80% aller Fehler in ungetestetem Code. Die folgende Grafik zeigt dies deutlicher.

 Überbrückung der Lücke zwischen Entwicklern und Testern. ist Test Gap Analysis eine Lösung?

Wie Sie sehen können, hatte der alte getestete Code keine Fehler. Der neue getestete Code hatte zwischen 22 und 30% der Fehler und die verbleibenden Fehler wurden ziemlich gleichmäßig zwischen neuem ungetestetem Code und altem ungetestetem Code verteilt. Da der neue Code jedoch nur 15% des Gesamtcodes ausmachte, können Sie sehen, dass der neue ungetestete Code eine unverhältnismäßig hohe Anzahl von Fehlern ausmachte.

Die Testlückenanalyse wurde entwickelt, um diesen ungetesteten neuen Code zu identifizieren. Es kann Ihnen jedoch auch auf andere Weise helfen. Da es beispielsweise überwacht, was Sie testen, werden möglicherweise Bereiche des vorhandenen Codes identifiziert, die veraltet sind (z. B. werden sie noch getestet, aber von keinem Code aufgerufen). Es kann auch hervorheben, auf welche Bereiche Sie Ihre Testressourcen konzentrieren müssen. Durch regelmäßige Ausführung können Manager die Testplanung verbessern, sich auf das Testen neuen Codes konzentrieren und versuchen, eine gleichmäßige Testabdeckung sicherzustellen.

Entwickler und Tester durch Testlückenanalyse ausgerichtet

Die Testlückenanalyse ist eindeutig ein leistungsfähiges Konzept. Aber es ist auch klar, dass nicht alle Teams gleichermaßen davon profitieren werden. Die Teams, die am meisten davon profitieren werden, sind diejenigen, die langlebige Codebasen mit periodischen monolithischen Releases pflegen. In langlebigen Codebasen arbeiten Entwickler häufig an Code, der von anderen Personen geschrieben wurde. Tester können sich auf Testpläne verlassen, die zuvor in mehreren Versionen erstellt wurden. In Kombination können diese Faktoren dazu führen, dass niemand genau weiß, welcher Code getestet wird oder wie dieser Code mit anderen Teilen des Systems interagiert. Hier kann TGA den Testern ermöglichen, genau zu sehen, welcher Code sich geändert hat, wodurch sie sich darauf konzentrieren können. Sie können auch Code im vorhandenen System identifizieren, der nicht getestet wurde.

Teams, die CI / CD verwenden, können ebenfalls von diesem Ansatz profitieren, da die Tester schnell erkennen können, welcher Code geändert wurde, und sich so darauf konzentrieren können. Es kann auch das oben erwähnte Problem vermeiden, bei dem ein Code direkt nach dem Testen geändert und dann mit den nicht getesteten Änderungen freigegeben wird.

Andererseits profitieren Teams, die an neuem oder kurzlebigem Code arbeiten, weniger, da der meiste Code per Definition zunächst nicht getestet wird. Hier ist es wichtig, Standardtestmethoden zu verwenden, um sicherzustellen, dass Ihre Tests gut sind. Es kann jedoch für solche Teams nützlich sein, mit der Überwachung der Testabdeckung mithilfe von TGA zu beginnen, da sie dadurch zukünftige Probleme vermeiden können.

Was sind die möglichen Probleme?

Es gibt einige Probleme mit TGA. Einer der größten betrifft die Tatsache, dass es Ihnen nicht sagen kann, welcher Code aktiv in der Codebasis aufgerufen wird. Entwickler fügen häufig neuen Code in Vorbereitung auf zukünftige Versionen hinzu, aber da dieser inaktiv ist, kann die Testsuite ihn nicht aufrufen. Daher wird dieser Code immer als neuer ungetesteter Code angezeigt. Ebenso enthalten viele große Codebasen Blöcke alten oder verwaisten Codes. Diese sollten regelmäßig gereinigt werden, aber auch diese verzerren das Bild für die Testlückenanalyse.

Eine weitere wichtige Beobachtung ist, dass nur weil ein Stück Code getestet wird, dieser Code nicht daran gehindert wird, Fehler an anderer Stelle auszulösen. Einige der schlimmsten Fehler sind solche, bei denen eine kleine Änderung in einem Codeteil dazu führt, dass eine Funktion oder Methode in einem völlig unabhängigen Codeblock fehlschlägt. Daher ist es wichtig, sowohl explorative Tests als auch Regressionstests durchzuführen. TGA kann Bereiche in Ihrer vorhandenen Codebasis identifizieren, die während Ihrer Regressionstests nicht ordnungsgemäß getestet werden.

Welche anderen Alternativen helfen, die Lücke zu schließen?

Test Gap Analysis ist definitiv ein nützliches Werkzeug für einige Teams. Es gibt jedoch andere Möglichkeiten, eine Nichtübereinstimmung zwischen dem, was Ihre Tester testen, und dem, was Ihre Programmierer codieren, zu vermeiden. Eine Möglichkeit besteht darin, eine intelligentere Testautomatisierung zu verwenden, die erkennen kann, wo und wann sich Dinge geändert haben, sowohl im Frontend als auch, was wichtig ist, im Backend. Hier bei Functionize verwenden unsere Tests intelligentes Fingerprinting in Verbindung mit maschinellem Lernen und Selbstheilung, um die Testwartung zu reduzieren. Dadurch können sich die Tests proaktiv an Frontend-Änderungen anpassen sowie Dinge wie Serveraufrufe, Antwortzeiten und ob Schaltflächen / Funktionen tatsächlich sichtbar sind, überwachen. Dies bedeutet, dass Ihre Tester nicht von Änderungen im Backend-Code oder Design- / CSS-Änderungen, die das Frontend-Layout verändern, erfasst werden.

Unser intelligentes System kann auch Tests erstellen, indem es überwacht, wie Benutzer mit dem System interagieren. Dies hilft sicherzustellen, dass es weniger Lücken in der Testabdeckung gibt. Eines unserer neuesten Tools ermöglicht es Ihnen, neue Tests in einfachem Englisch zu schreiben. Diese werden von unserem Natural Language Processing Tool analysiert und in brauchbare Tests umgewandelt. Dies bedeutet, dass Entwickler während der Entwicklung einfach angeben können, was mit normalem Englisch getestet werden muss, wodurch die Lücke zwischen den beiden Disziplinen weiter geschlossen wird.

Schlussfolgerungen

Die Testlückenanalyse hilft Ihnen zu identifizieren, welcher Code ungetestet veröffentlicht wird, und kann Ihnen so helfen, Ihre Testressourcen effektiver zu fokussieren. Es überrascht nicht, dass sich herausstellt, dass ungetesteter Code weitaus häufiger Fehler enthält, und daher ist jedes Tool nützlich, mit dem sichergestellt werden kann, dass dieser Code ordnungsgemäß getestet wird. Wie wir jedoch gesehen haben, kann TGA nur bestehende Best Practices ergänzen. Es ist wichtig, Ihre Regressionstests und explorativen Tests aufrechtzuerhalten. Viele der Vorteile von TGA können auch durch den Einsatz intelligenter Testwerkzeuge erreicht werden. Insgesamt sollten Sie jedoch vor allem vermeiden, Ihr Testteam von der Arbeit Ihrer Entwickler zu isolieren. Um ein altes Sprichwort falsch zu zitieren, sollten Sie sicherstellen, dass die linke Hand weiß, was die rechte Hand tut!

Leave a Reply