Tester sind alle großartig im Zeichnen. Mal sehen, wer nicht weiß, wie man Codediagramme verwendet?

Geben Sie allen 30 Sekunden Zeit, darüber nachzudenken, was das ist?

Anfängliches Klassendiagramm der Anmeldemodulfunktion eines bestimmten Systems 

Dies ist das anfängliche Klassendiagramm der Anmeldemodulfunktion eines bestimmten Systems.

Da moderne Software immer komplexer wird, bieten Code Graphs Testern eine intuitive Möglichkeit, komplexe Codelogik leicht verständlich zu machen. Dieser Artikel befasst sich mit Code-Graphen und zeigt, wie visuelle Code-Graphen die Fähigkeiten von Softwaretestern verbessern können und wie Tests anhand ausgegrabener realer Szenarien und praktischer Beispiele durchgeführt werden.

1. Was ist ein Codediagramm?

Codediagramm bezieht sich auf ein grafisches Werkzeug, das zur Darstellung der Codestruktur, der Beziehungen zwischen Klassen oder der Interaktionen zwischen Codeelementen verwendet wird. Zu den gängigen Typen gehören Klassendiagramme, Sequenzdiagramme, Aktivitätsdiagramme, Komponentendiagramme usw.

Die Codemap besteht aus den folgenden zwei Teilen:

  • Knoten ( Nodes ) repräsentieren Codeelemente wie Klassen, Objekte und Aktivitäten.
  • Kanten stellen Beziehungen zwischen Knoten dar, z. B. Assoziationen, Vererbungen und Abhängigkeiten .

Nehmen Sie als Beispiel das Klassendiagramm einer Kombinationsbeziehung:

Klassendiagramm der Kombinationsbeziehung

 

2. Vorteile der Codevisualisierung

Die Codevisualisierung stellt die Codestruktur und -beziehungen grafisch dar. Teammitglieder haben durch die Verwendung von Codediagrammen während des Softwaretestprozesses viele Vorteile, wie z. B. eine Verbesserung der Kommunikation und Zusammenarbeit untereinander, eine Steigerung der Effizienz und Konzentration usw. Dies hilft Softwaretestern, die Codelogik und -beziehungen schneller zu verstehen, wodurch der Zeitaufwand für das Lesen und Verstehen von Code reduziert wird.

1Verbessern Sie  die Kommunikation und Zusammenarbeit

Die wichtige Rolle von Codediagrammen besteht darin, die Lücke zwischen technischen und nichttechnischen Personen zu schließen. Tester können Managern, Kunden oder Mitgliedern, die mit dem Code nicht vertraut sind, den Codefluss einfach erklären.

Stelios Manioudakis, ein ehemaliger Siemens-Softwareentwickler, nahm sich selbst als Beispiel, um die Rolle von Codediagrammen bei der Verbesserung der Kommunikation und Zusammenarbeit umfassend zu veranschaulichen.

In seinen frühen Tagen als Softwaretester arbeitete er an einem Projekt zur Entwicklung einer neuen Fitness-Tracker-App. Sie analysieren Sensordaten mithilfe von Schlaf-Tracking-Algorithmen, um Schlafstadien (leichter Schlaf, tiefer Schlaf) zu bestimmen und Schlafberichte zu erstellen. Beim Testen des Algorithmus stießen sie jedoch auf viele Schwierigkeiten, da es für technisch nicht versierte Personen schwierig ist, die Logik des Algorithmus allein anhand des Codes zu verstehen.

Hier kommen Codediagramme zum Einsatz. Sie nutzen visuelle Algorithmenflüsse und Entscheidungspunkte für verschiedene Sensormesswerte und Schlafmusterberechnungen, um Produktmanagern und UI- Designern das Verständnis potenzieller Szenarien zu ermöglichen, die mithilfe von Codediagrammen getestet werden müssen, wie z. B. instabile Schlafmuster oder fehlende Sensordaten.

Darüber hinaus erleichtern Code Maps die Zusammenarbeit mit Entwicklern. Bei Codeüberprüfungen können Tester und Entwickler potenzielle Unterschiede zwischen der beabsichtigten Logik und der tatsächlichen Implementierung anhand der Codemap besser identifizieren. Am Ende hat der Schlaf-Tracking-Algorithmus in der Fitness-Tracking-Anwendung den Test erfolgreich bestanden und das Codediagramm spielte eine wichtige Rolle.

 

2  Verbessern Sie Effizienz und Konzentration

Tester können Tests mithilfe von Codediagrammen effizienter planen, schreiben und ausführen, wodurch sich wiederholende Arbeiten reduziert und dadurch die Testabdeckung und -qualität verbessert werden.

Nehmen Sie als Beispiel den News-Push-Algorithmus. Dieser Algorithmus gibt Benutzern basierend auf ihren Interessen und Interaktionen personalisierte Empfehlungen. Zunächst müssen Tester den Code Zeile für Zeile sorgfältig durchgehen. Dies ist ein zeitaufwändiger und mühsamer Ansatz, der es schwierig macht, alle potenziellen Testszenarien zu identifizieren. Aber Codediagramme zeigen Einflussfaktoren wie Benutzerpräferenzen, Post-Interaktionen und die Aktualität von Inhalten auf intuitive Weise an. Darüber hinaus bieten Codediagramme klare Entscheidungspunkte und Verzweigungspfade.

  • Heiße Themen: Konzentrieren Sie sich auf Testszenarien, bei denen aktuelle Themen zuerst im Informationsstrom angezeigt werden, um sicherzustellen, dass Benutzer keine beliebten Inhalte verpassen.
  • Personalisierte Empfehlungen: Priorisieren Sie das Testen verschiedener Benutzerprofile mit unterschiedlichen Interessen und Interaktionen, um zu überprüfen, ob der Algorithmus relevante Inhalte korrekt empfiehlt.
  • Grenzfälle: Potenzielle Grenzfälle wie inaktive Benutzer oder Benutzer mit eingeschränkter Interaktion werden hervorgehoben. Tester können spezifische Testfälle entwerfen, um sicherzustellen, dass der Algorithmus unter diesen Umständen nicht versagt.

Es ist offensichtlich, dass die Verwendung von Codediagrammen viel schneller ist als die zeilenweise Überprüfung des Codes. Dies ermöglicht es Testern, Schlüsselbereiche des Algorithmus zu priorisieren, um gründliche Tests sicherzustellen und Benutzern ein zuverlässigeres und personalisierteres Newsfeed-Erlebnis zu bieten.

 

3Verbessern Sie  die Wartbarkeit von Dokumenten

Die Dokumentation kann Teammitgliedern dabei helfen, den Programmablauf und potenzielle Testpunkte nach einer Code-Umgestaltung oder wenn neue Teammitglieder den Code überprüfen müssen, schneller zu verstehen.

Ein Beispiel: Das Warenwirtschaftssystem einer E-Commerce-Plattform ist mittlerweile schon vor vielen Jahren etabliert, die Wartung wird immer komplexer und neue Funktionen immer schwieriger zu implementieren. Während des Systemanpassungsprozesses, der mit einer komplexen Bestandsverwaltungslogik konfrontiert wird, zeigt das Codediagramm intuitiv alles an, von der Produkthinzufügung und -aktualisierung bis hin zur Auftragsabwicklung und Bestandsverwaltung.

Auf diese Weise können Tester sicherstellen, dass das angepasste Bestandsverwaltungssystem effizient gewartet wird und die Rolle von Codediagrammen offensichtlich ist.

  • Kommunizieren Sie klarer: Verwenden Sie Codediagramme, um neuen Teammitgliedern die Funktionalität des Systems zu erklären. Zusammen mit Codekommentaren bieten diese Diagramme einen klaren und prägnanten Überblick, sodass Sie die Systemlogik und Testüberlegungen schneller verstehen können.
  • Effiziente Codeüberprüfung: Während der Codeüberprüfung kann die Bezugnahme auf Codediagramme und Codekommentare dabei helfen, potenzielle Probleme frühzeitig zu erkennen. Durch die Visualisierung der Auswirkungen von Änderungen auf den Gesamtprozess können Teams sicherstellen, dass Änderungen keine unbeabsichtigten Nebenwirkungen auf andere Teile des Systems haben.
  • Zukunftssichere Wartung: Während sich das System weiterentwickelt und neue Funktionen hinzugefügt werden, dienen Codediagramme als wertvolle Referenzpunkte. Selbst Tester, die nicht am Projekt beteiligt waren, können die bestehende Logik und die potenziellen Wirkungsbereiche leicht verstehen und so effizientere und gezieltere Testbemühungen durchführen.

 

4.  Erkennen Sie Probleme frühzeitig

Codediagramme können Probleme aufdecken, die bei einer Klartext-Codeüberprüfung möglicherweise übersehen werden, da unübersichtlichere Codediagramme auf komplexeren Code hinweisen, der fehleranfälliger ist.

Beispielsweise führte das Terminplanungssystem des Krankenhauses während des Aktualisierungsprozesses eine neue Funktion ein: Patienten können Termine online verschieben. Nach der Codeüberprüfung und dem Testfallentwurf können neue Funktionen in Betrieb genommen werden, sofern keine größeren Probleme festgestellt werden.

Angesichts der Komplexität, die mit der Handhabung bestimmter Teile widersprüchlicher Termine verbunden ist, entschieden sich die Tester jedoch für die Verwendung von Codediagrammen zur weiteren Prüfung und Validierung. Codediagramme veranschaulichen potenzielle Probleme, die bei einer reinen Textüberprüfung möglicherweise übersehen werden:

  • Mehrere Entscheidungspunkte: Zahlreiche Entscheidungspunkte basierend auf verschiedenen Faktoren wie bestehenden Terminen, Arztverfügbarkeit und Zeitbeschränkungen. Diese komplexe Verzweigungsstruktur birgt ein höheres Fehlerrisiko, da es schwierig ist, alle möglichen Szenarien beim Testen zu berücksichtigen.
  • Verborgene Logik: Die Komplexität von Diagrammen macht es sehr schwierig, die Codelogik visuell zu verstehen. Dies wirft Bedenken hinsichtlich möglicher versteckter Bedingungen oder unerwartetem Verhalten im Code auf.

Daraufhin haben die Tester die neuen Funktionen anhand des Codediagramms neu angepasst:

  • Tests priorisieren: Priorisieren Sie Tests von Szenarien mit widersprüchlichen Daten. Konzentrieren Sie sich auf Grenzfälle und Kombinationen, die potenzielle Fehler in komplexer Logik aufdecken können.
  • Zusammenarbeit mit Entwicklern: Mithilfe visueller Darstellungen diskutieren Tester entdeckte Komplexitäten mit Entwicklern. Die Zusammenarbeit führte zu Code-Refactoring-Bemühungen, die die Logik vereinfachten und die zyklomatische Komplexität reduzierten.

Tester verwenden Code Maps, um potenzielle Probleme proaktiv zu identifizieren und mit Entwicklern zusammenzuarbeiten, um sie zu lösen. Dadurch wird die Integrität und Zuverlässigkeit des Terminplanungssystems im Krankenhaus gewährleistet.

 

5  Strukturierte Programmierverbindungen

Codediagramme fügen sich nahtlos in die Prinzipien der strukturierten Programmierung (Sequenz, Auswahl und Wiederholung) ein. Diese Grundstrukturen lassen sich direkt auf bestimmte Grafikmuster abbilden und vereinfachen so das Testen dieser allgemeinen Strukturen.

(1) Vereinfachtes Testdesign:   Strukturierte Programmierung legt Wert auf klar definierte Strukturen wie Sequenz, Auswahl (if-else) und Wiederholung (Schleife). Codezuordnungen ordnen diese Strukturen direkt bestimmten Mustern zu:

  • Sequenz: Ein geradliniger Knoten, der eine Anweisung nach einer anderen Anweisung darstellt
Reihenfolge
  • Auswahl: eine verzweigte Struktur mit einem einzelnen Eingangsknoten, einem bedingten Knoten und zwei ausgehenden Kanten (eine für wahr und eine für falsch), die zu einer separaten Folge von Anweisungen führt
wählen
  • Wiederholung: Ein Schleifenmuster mit einem Eingangsknoten, einem Bedingungsknoten, einer Kante, die den Bedingungsknoten zurückgibt, und einer Kante, die auf den Schleifenkörper (Anweisungsfolge) zeigt.

(2) Einfachere Visualisierung von Testfällen:  Durch die Identifizierung dieser bekannten Muster in Codediagrammen können Tester den Programmablauf und die entsprechenden Testfälle schnell verstehen. Das Schleifenmuster im Diagramm stellt beispielsweise die Notwendigkeit dar, dass Testfälle verschiedene Iterationen der Schleife abdecken, einschließlich Randbedingungen und erwartetem Verhalten.

 

6  Mehr zur Komplexitätsmessung

Die Zykluszahl ist ein Maß, das auf der Komplexität des Codediagramms basiert und dabei hilft, die Schwierigkeit beim Testen eines Programms zu bewerten. Je höher die Komplexität (je mehr Pfade), desto gründlicher wird der Test sein. Aber lassen Sie uns näher auf die Details eingehen.

  • Schleifenanzahl: Diese Metrik wird aus der Struktur des Codediagramms abgeleitet und dient zur Schätzung der Anzahl unabhängiger Ausführungspfade in einem Programm. Je höher die Schleifenanzahl, desto höher die Komplexität, normalerweise aufgrund von Faktoren wie verschachtelten Schleifen, mehreren Entscheidungspunkten oder  GOTO-  Anweisungen.
  • Clevere Testplanung: Zykluszahlen dienen Testern als Orientierung und geben Aufschluss über den Aufwand, der für umfassende Tests erforderlich ist. Ein Programm mit einer höheren Schleifenanzahl erfordert mehr Testfälle, um alle potenziellen Ausführungspfade abzudecken, als ein Programm mit einer niedrigeren Schleifenanzahl. Dies hilft Testern, ihre Arbeit zu priorisieren und eine umfassende Abdeckung komplexer Abschnitte sicherzustellen.

Hier ist ein kurzes Beispiel. Betrachten Sie ein einfaches Programm mit zwei aufeinanderfolgenden  if-else  -Anweisungen:

if condition1:
  # statements for if condition1 is true
else:
  if condition2:
    # statements for if condition2 is true
  else:
    # statements for both conditions false

Ein einfaches Programm mit zwei aufeinanderfolgenden if-else-Anweisungen

 

Knoten:

  • Knoten 1 : Der Startpunkt des Programms, der den Beginn der Codeausführung darstellt.
  • Knoten  2 : Entscheidungsknoten Bedingung1 . Dieser Knoten wertet die Bedingung aus und bestimmt den Ausführungsablauf basierend auf dem Ergebnis (wahr oder falsch).
  • Knoten  3 : Der Anweisungsblock Bedingung1 wird ausgeführt, wenn er wahr ist . Dieser Knoten repräsentiert den gesamten Code innerhalb des „if“ -Blocks von condition1 . 
  • Knoten  4 : Der mit „ condition1 “ verknüpfte  „else“ -Knoten . Dieser Knoten stellt den alternativen Pfad dar, wenn Bedingung2 nicht überprüft wird (d. h. Bedingung1 ist falsch).
  • Knoten  5 : Entscheidungsknoten von Bedingung2 . Dieser Knoten wertet die Bedingung aus und entscheidet über den Ausführungsablauf basierend auf dem Ergebnis (wahr oder falsch).
  • Knoten  6 : Der Anweisungsblock, der ausgeführt wird, wenn Bedingung2 wahr ist. Dieser Knoten stellt den gesamten Code im „if“-Codeblock von „ condition2 “ dar. 
  • Knoten  7 : Der mit Bedingung2 verknüpfte „else“ -Knoten  dieser Knoten stellt das Ende des Programms dar und stellt den Code dar, der ausgeführt wird, wenn sowohl Bedingung1 als auch Bedingung2 falsch sind.

 

Seite:

  • Kante  1 : Verbindet Knoten  1  und Knoten  2 und stellt den anfänglichen Fluss vom Startpunkt zum ersten Entscheidungspunkt dar
  • Kante  2 (wahr): Bedingung1 verbindet Knoten  2  und Knoten  3 und gibt den auszuführenden Prozess an, wenn sie wahr ist.
  • Kante  3 (falsch): Bedingung1 verbindet Knoten  2  und Knoten  4 und zeigt an, dass der alternative Ablauf übernommen wird, wenn sie falsch ist
  • Kante  4 : Verbindet Knoten  4  und Knoten  5 und zeigt den Fluss vom „else“ -Block zum zweiten Entscheidungspunkt von Bedingung1 an
  • Kante  5 (wahr): Bedingung2 verbindet Knoten  5  und Knoten  6 und gibt den auszuführenden Prozess an, wenn wahr
  • Kante  6 (falsch): Bedingung2 verbindet Knoten  5  und Knoten  7 und gibt den Endpunkt an, wenn sie falsch ist

Der entsprechende Codegraph weist eine Verzweigungsstruktur mit drei Entscheidungspunkten und mehreren Ausführungspfaden auf. Die Anzahl der Zyklen dieses Graphen beträgt  4 (Knoten   Kanten  + 2 ). Dies weist darauf hin, dass die Logik möglicherweise komplexer ist und mehr Testfälle erfordert als ein Programm mit einer einfacheren Struktur.

Durch das Verständnis dieser Vorteile können Softwaretester Codediagramme nutzen, um die Programmlogik effektiv zu steuern, effektive Testfälle zu entwerfen und zur Bereitstellung hochwertiger Software beizutragen.

Lassen Sie uns im Detail erklären, wie man die Kreiszahl  4 ableitet .

  • Die zyklomatische Komplexität sagt uns, wie viele unabhängige Pfade es in einem Programm gibt. Je mehr Pfade vorhanden sind, desto komplexer ist der Test.
  • In diesem Code haben wir zwei Entscheidungen (überprüfen Sie Bedingung1 und Bedingung2 ). Jede Entscheidung erzeugt eine potenzielle Weggabelung (wahr oder falsch).
  • Da der else- Block „condition1“ jedoch direkt auf die Entscheidung „condition2“ zeigt , gibt es dort keinen echten Zweig. Es ist wie eine Einbahnstraße, die zu einem anderen Entscheidungspunkt führt. 
  • Daher zählen wir nur unabhängige Entscheidungspunkte: Anfangspunkt , Bedingung1 (wahr oder falsch) , Bedingung2 (wahr oder falsch).

Da wir  drei  Entscheidungspunkte haben, das Hinzufügen von  1 aufgrund des Startpunkts jedoch  eine gängige Methode zur Berechnung der zyklomatischen Komplexität ist, ist die endgültige Zahl  3 + 1 = 4 .

erinnern:

  • Eine höhere zyklomatische Komplexität bedeutet nicht unbedingt, dass der Code schlecht ist, weist jedoch darauf hin, dass möglicherweise weitere Testszenarien in Betracht gezogen werden müssen.
  • Mit einer Komplexität von  4 ist dieser Codeschnipsel zwar nicht allzu komplex, aber mit zunehmender Anzahl an Entscheidungen und Verschachtelungen von Bedingungen nimmt die zyklomatische Komplexität und der Testaufwand deutlich zu.

 

3. Einschränkungen von Codediagrammen

Obwohl Codediagramme den Vorteil haben, dass sie die Kommunikation und Zusammenarbeit verbessern sowie die Effizienz und Konzentration steigern, müssen Tester auch auf die folgenden Dinge achten:

1  kann Element nicht ausführen

  • Kommentare und Deklarationen ignorieren: Codediagramme konzentrieren sich hauptsächlich auf den Kontrollfluss innerhalb eines Programms, dargestellt durch ausführbare Anweisungen. Nicht ausführbare Elemente wie Kommentare und Datendeklarationen werden normalerweise ignoriert, da sie keinen direkten Einfluss auf die Codeausführung haben.
  • Mögliche Missverständnisse: Das Weglassen dieser Elemente kann zwar das Diagramm vereinfachen, kann aber auch zu Missverständnissen führen. Tester müssen sich dieser ignorierten Elemente bewusst sein und sicherstellen, dass sie beim Testen berücksichtigt werden, um potenzielle Probleme im Zusammenhang mit der Dateninitialisierung, Logikkommentaren oder anderen nicht ausführbaren Codeabschnitten nicht zu übersehen.

 

2  Unterscheiden Sie die Machbarkeit des Pfads

  • Herausforderungen bei der Identifizierung sinnvoller Pfade: Nicht alle Pfade in einem Codediagramm stellen gültige oder sinnvolle Ausführungssequenzen dar. Bestimmte Pfade sind je nach Graphenstruktur technisch machbar (topologisch machbar), im Kontext der Programmlogik jedoch unlogisch oder bedeutungslos (semantisch nicht machbar).
  • Erhöhter Testaufwand: Die Identifizierung und Priorisierung praktikabler Testpfade kann eine Herausforderung sein und zusätzlichen Aufwand von den Testern erfordern. Sie müssen die Programmlogik und den Kontext analysieren, um gültige von ungültigen Pfaden zu unterscheiden, was zu einer zusätzlichen Testfallentwurfs- und Ausführungszeit führen kann.

 

3  Linderung dieser Einschränkungen

  • Kombination mit anderen Testtechniken: Codediagramme funktionieren am besten, wenn sie mit anderen Testtechniken wie Codeüberprüfung oder Datenflussanalyse kombiniert werden. Diese Techniken können dabei helfen, nicht ausführbare Elemente und ihre potenziellen Auswirkungen zu identifizieren und gleichzeitig dabei zu helfen, die Logik eines Programms zu verstehen, um die Machbarkeit eines Pfads besser beurteilen zu können.
  • Konzentrieren Sie sich auf kritische Pfade: Tester können das Testen von risikoreichen oder kritischen Pfaden im Codediagramm priorisieren. Dabei müssen Faktoren wie Schleifenbedingungen, erwartete Benutzereingaben und potenzielle Fehlerszenarien berücksichtigt werden, um den Pfad zu bestimmen, der den größten Einfluss auf den Test hat.

Durch das Verstehen und Umgehen dieser Einschränkungen können Tester Codediagramme effektiv nutzen. Umfassende und effiziente Tests können durchgeführt werden, wobei die inhärenten Einschränkungen und die Notwendigkeit einer Kombination mit anderen Testmethoden berücksichtigt werden.

4. Schreiben Sie am Ende

Die vom ZenTao-Softwareteam unabhängig entwickelte Unternehmens -IM- Software integriert die Open-Source-Anwendung draw.oi , die Chat und Zusammenarbeit organisch kombiniert. Alle Codediagramme in diesem Artikel werden mit dieser Funktion vervollständigt. Durch die Verwendung von Codediagrammen können Softwaretester ein tieferes Verständnis der Programmlogik erlangen. Sie können effektivere Testfälle entwerfen und zur Bereitstellung hochwertiger Software beitragen.

laut

Wir müssen zugeben, dass Codediagramme im Zuge der Weiterentwicklung der Softwarelandschaft weiterhin ein wichtiges Werkzeug zur Gewährleistung der Zuverlässigkeit und Robustheit von Anwendungen sein werden.

*Referenz: Code Graphs: A Guide for Testers von Stelios Maniooudakis

RustDesk hat den inländischen Dienst Taobao (taobao.com) aufgrund von grassierendem Betrug eingestellt, die Arbeit zur Optimierung der Webversion wurde wieder aufgenommen, Apple veröffentlichte den M4-Chip, High-School-Schüler erstellten im Rahmen einer Coming-of-Age-Zeremonie ihre eigene Open-Source-Programmiersprache – Netizens kommentierten: Verlassen auf Die Verteidigung, Yunfeng sei von Alibaba zurückgetreten und plane, in Zukunft das Ziel für unabhängige Spieleprogrammierer Visual Studio Code 1.89 zu produzieren, wurde von Huawei offiziell bekannt gegeben. Yu Chengdongs Jobanpassung wurde an die „FFmpeg-Säule der Schande“ genagelt „Vor 15 Jahren, aber heute muss er sich bei uns bedanken – Tencent QQ Video rächt seine bisherige Schande?“ Die Open-Source-Spiegelstation der Huazhong University of Science and Technology ist offiziell für den externen Netzwerkzugriff geöffnet
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/candou/blog/11106077
Empfohlen
Rangfolge