Top Banner
Aktueller Stand: Tool zur Überdeckungsmessung und zum strukturorientierten Softwaretest Ronny Treyße & Hendrik Seffler HU Berlin Aktueller Stand – p.1/31
31

Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Aug 20, 2019

Download

Documents

hoangcong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Aktueller Stand: Tool zurÜberdeckungsmessung und zumstrukturorientierten Softwaretest

Ronny Treyße & Hendrik Seffler

HU Berlin

Aktueller Stand – p.1/31

Page 2: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Entwicklungsziele

Erstellung eines Programms, das den strukturorientiertenSoftwaretest unterstützt

Analyse (d.h. Parsen) von Quellcode in C++ und Java

Ableitung von Komplexitätsmaßzahlen

Ermittlung von Überdeckungsmaßen (imZusammenspiel mit ATOS)

Instrumentierung von Programmcode in beidenSprachen

Auswertung und Darstellung der Resultate

Aktueller Stand – p.2/31

Page 3: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Entwicklungsziele

Darstellung des Kontrollflusses

Nachvollziehen des Kontrollflusses für einzelneTestfälle bzw. Programmdurchläufe

Architekturinformationen gewinnen

Aktueller Stand – p.3/31

Page 4: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Struktur

Wie haben die Aufgabenstellung in zwei Teile zerlegt

Parser/InstrumentiererParsen des QuelltextesInstrumentierung des Quelltextes

Parser sowohl stand-alone als auch aus der grafischenOberfläche einsetzbar

Auswertung/SteuerungGrafische Oberfläche zurKonfiguration/ProjekterstellungAuswertung der Ergebnisse und deren Darstellung

Kapselung der Sprachabhängigkeiten im Parser

Aktueller Stand – p.4/31

Page 5: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

GrundsätzlicheImplementierungentscheidungen

Implementierung in Java (Instrumentierer undAuswerter)

Nutzung eines Parser-Generators (JavaCC)

Kontrollflussgraphen mit JGraph-Bibliothek

keine weiteren Abhängigkeiten

Aktueller Stand – p.5/31

Page 6: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Überblick Parserkomponente

Die Parserkomponente muss Folgendes leisten:

Parsen von C++ und Java-Programme

Filtern von Strukturinformationen des Programmes

Konstruktion eines Abstrakten Syntaxbaums (AST)

Erstellen einer instrumentierten Version desProgramms anhand des AST

Aktueller Stand – p.6/31

Page 7: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Subsystem Parser im Gesamtsystem

Logdateien

Testauswertung

Instrumentierer−komponente

TestsystemCompiler +

Hauptprogrammauswertendes

Quellcode

instrument. QC

reduz. SyntxbaumKonfig.daten

Aktueller Stand – p.7/31

Page 8: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

wesentliche Komponenten desSubsystems

Parser-Klassen für C++ und Java

ASTManager-Klasse und entsprechendeKnotenstrukturen

Klassen/Funktionen, die Logausschriften in C++ bzw.Java übernehmen

Aktueller Stand – p.8/31

Page 9: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

JavaCC

ist populärster CompilerCompiler für Javaprojekte

entwickelt bei Sun Labs

seit letztem Sommer OpenSource und unterBSD-Lizenz

geschrieben in Java und produziert Java-Code

generiert Lexer und TopDown-Parser (LL(1)) auseinem (EBNF-)Grammatikfile

bietet syntaktischen und semantischen Lookahead fürKonfliktauflösung

Aktueller Stand – p.9/31

Page 10: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

vorgefundene Grammatiken fürJavaCC

Java-Grammatik:aktuell und wird gewartetbisherige Testläufe ohne Probleme

C++-Grammatik:Date 97 ?!arbeitet nur auf präprozessierten Quellcodekein namespace, typename, type_id, keinedifferenzierten Casts (dynamic_cast, ...)bei Testläufen kleinere Unverträglichkeiten beispeziellen Konstrukten (z.B.: const double Pi(3); )

Aktueller Stand – p.10/31

Page 11: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

aktueller Stand - Parser

Java-Parser:funktionstüchtig, aber noch nicht umfangreichgetestet

C++-Parser:parst mit gefixter Grammatik neuere SchlüsselworteUnverträglichkeiten sind noch zu beseitigenoffene Fragen:

lässt sich das Präprozessieren umgehen?wie mit Makros umgehen?

Aktueller Stand – p.11/31

Page 12: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Abstrakte Syntaxbaum

AST-Managerbaut während des Parsens den AST aufführt Aktionen über den AST aus

AST-Strukturentspricht strukturell dem Kontrollflussgraphenenthält spezielle Knoten für kontrollflussrelevanteStrukturen (if, while, ..)lässt komplette Rekonstruktion des Quellcodes inkl.Instrumentiereungsansweisungen zuspeichert Informationen über die Erfüllung vonÜberdeckungsmaßen nach Logauswertung

Aktueller Stand – p.12/31

Page 13: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

aktueller Stand - AST

Konstruktion des AST für Javaprogramme undrudimentäre Instrumentierung funktioniert

noch zu erledigen:Bedingungsanalyse vollendenInstrumentierung nach verschiedenen Levelimplementieren

Aktueller Stand – p.13/31

Page 14: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Logger-Klasse

stellt Klassen bzw. Funktionen zur Verfügung, die dieLogging-Funktion im instrumentierten Programmübernehmen

globale Struktur, die überall im Quellcode zugänglichsein muss

offene Fragen:Synchronisation des Logfilezugriffs und derDatenaktualisation bei geforkten Prozesseneleganteste Logging-Methode

Aktueller Stand – p.14/31

Page 15: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Logging-Testversuch

Testsystem: Simulationsprogramm(24kB) auf Basis derOdem-Bibliothek (J.Fischer)

Laufzeit: <2 Sek, startet ca. 1000 Prozesse

Ergebnis: naives, episodisches Logging erstelltLogfile >1MB

Ergo: Logging-Struktur muss während LaufzeitDatenstruktur halten, warten und sichern

Aktueller Stand – p.15/31

Page 16: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Fazit - Parsersubsystem

Parser für Java einsatzbereit

Parser für C++ noch mit grundlegenden Problemen

AST wird optimiert und bzgl. der Bedürfnisse bei derAuswertung modifiziert

Logger-Funktionalität muss geeignet für komplexereSzenarien entworfen werden

Aktueller Stand – p.16/31

Page 17: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Aufgaben des Hauptprogramms

Aufgaben des Hauptprogramms

Projekterstellung und SpeicherungPfade, Parameter und Einstellungen

statische Quelltextanalyse

Ergebnisse von Testdurchläufen auswerten

Aktueller Stand – p.17/31

Page 18: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Struktur

Grundsätzliche Struktur der Oberfläche

Projekt-Management

Komplexitätsauswertung

Überdeckungsmaße bestimmen

Architektur

Aktueller Stand – p.18/31

Page 19: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Projekt-Management

Daten über Projekte werden in Projekt-Dateien abgelegt

beim Laden: Prüfung auf Aktualität

Ablage in XML

enthalten: Schlüssel-Wert Zuordnungen in Kategorien

Erstellung von Projekt manuell oder mit Assistent

Format festgelegt, wird gelesen und geschrieben. Abzule-

gende Daten festgelegt.

Aktueller Stand – p.19/31

Page 20: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Sichten auf ein Projekt

Drei grundsätzliche Sichten auf ein geladenes Projekt

Komplexität

Architektur

Überdeckung

Diese Sichten werden jeweils zusammengesetzt aus

Grundtypen, die auf den gleichen Daten operieren und die-

se jeweils passend darstellen

Aktueller Stand – p.20/31

Page 21: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Sichten auf ein Projekt

Sichten auf ein Projekt

Kontrollflüsse

Quelltextansicht

Klassen-/Struktursicht

Testfälle

Aktueller Stand – p.21/31

Page 22: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Kontrollfluss

Aufgabe der Komponente: Darstellung des Kontrollflusseseiner Methode

Darstellung von Graphen komplexe Materie

Verwendung einer Grafik-Bibliothek: JGraph

Open-Source unter LGPL

Alternativen? Grappa (Java Graph Package von AT&T)vergleichbar, Doku aber leider grausig

Aktueller Stand – p.22/31

Page 23: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Kontrollfluss

Stand der EntwicklungJGraph bietet keinen Layout-Algorithmus für Graphen, dasLayout ist selbst auszuführen

Nutzung eines generischen Algorithmus´ vs. Nutzungeines eigenen?

Einfachere Prüfung der Korrektheit vs. Kontrolle überdas Layout

Noch nicht entschieden. Im Moment eigener, nichtkompletter Algorithmus, der nicht alleSprachkonstrukte kennt

Algorithmus wählen, Unterstützung allerSprachkonstrukte

Aktueller Stand – p.23/31

Page 24: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Quellcodeansicht

Sicht auf einzelne Methoden des Programms

Quellcodeanzeige

Formatierung wie im Original-Programm

Farbige Hervorhebung von Kontrollflüssen

Anzeige von (atomaren) Bedingungen und derenBelegungen

Aktueller Stand – p.24/31

Page 25: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Quellcodeansicht

Stand der Dinge

Einfache Darstellung von Quellcode ohne weitereFormatierung realisiert

Darstellung von strukturiertem, formatiertem Text mitJava-Mechanismen möglich, aber recht komplexerMechanismus

Aktueller Stand – p.25/31

Page 26: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Testfalldarstellung

Darstellung von Testfällen

Primär Anbindung an ATOS

Auslesen und Verwalten von Testfällen ausATOS-Projektdateien

Zusammen mit den Informationen, die der instrumentier-

te Quellcode liefert, ist so eine Zuordnung zwischen Pro-

grammdurchläufen und Testfällen, die sie ausgelöst haben,

möglich

Aktueller Stand – p.26/31

Page 27: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Klassen-/Strukturansicht

Darstellung der logischen Struktur des zugrundeliegendenQuellcodes: Klassen und Methoden

Darstellung in einem Baum

Übersicht über Programm

Navigationshilfe

Auswahl eines Elementes fokussiert andere Ansichtenmit ausgewähltes Objekt

Fertig, funktioniert. Allerdings reagieren nicht alle Sichten

auf Fokussierung

Aktueller Stand – p.27/31

Page 28: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Logik

Von den GUI-Komponenten getrennt existiert eineLogikschicht, die die Auswertung der Ergebnisse derstatischen und dynamischen Analyse übernimmtInsbesondere

Komplexitätsbestimmung (essentiell, zyklomatisch)

Überdeckungsbewertung

Aktueller Stand – p.28/31

Page 29: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Logik-Komplexität

Auswertung der Komplexität von Quelltext

Da Graph intern schon konstruiert relativ einfach

Durchlauf durch Datenstruktur einer Methode undzählen von Knoten und Kanten

essentieller Komplexität: nicht alle Knoten zählen, jenach Typ

Noch nicht realisiert, aber Infrastruktur dafür schon da

Aktueller Stand – p.29/31

Page 30: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Logik-Überdeckung

Komplex. Erfordert intensive Auswertung der Daten derLog-Dateien des instrumentierten Codes inkl. überwachenvon Konditionalen

abhängig von instrumentiertem Programm

Instrumentierung noch nicht fertig

daher noch nicht in Angriff genommen

Aktueller Stand – p.30/31

Page 31: Aktueller Stand: Tool zur Überdeckungsmessung und zum ... · Entwicklungsziele Erstellung eines Programms, das den strukturorientierten Softwaretest unterstützt Analyse (d.h. Parsen)

Ende

Aktueller Stand – p.31/31