Vortrag zur Diplomarbeit - PowerPoint PPT Presentation

About This Presentation
Title:

Vortrag zur Diplomarbeit

Description:

Title: Pr sentation ATOS Author: Andreas Hirth Last modified by: Andreas Hirth Created Date: 2/8/2005 6:17:41 AM Document presentation format: Bildschirmpr sentation – PowerPoint PPT presentation

Number of Views:105
Avg rating:3.0/5.0
Slides: 37
Provided by: Andreas233
Category:

less

Transcript and Presenter's Notes

Title: Vortrag zur Diplomarbeit


1
Vortrag zur Diplomarbeit
  • Automatische Generierung von Testskript-Kommandos
    durch Capturing von Nutzereingaben
  • Andreas Hirth

2
Übersicht
  • Motivation, Intention
  • Realisierung
  • Fazit
  • Demonstration

3
ATOSbisheriger Funktionsumfang
  • Simulation von Nutzereingaben in Testobjekte
  • Auslesen des Status von Elementen eines
    Testobjekts und Vergleich mit erwarteten Werten
  • Unterstützung einer Skriptsprache zur Definition
    von Kommandos
  • Speichern von Kommandoabläufen in Testskripts
  • Zusammenfassen von Testskripts in Testpakten
  • Unterstützung bei der Erstellung von Testskripts
    mittels intelligentem Editor

4
ATOSeinige Einschränkungen
  • Quelltext des Testobjekts muss vorliegen
  • Notwendige Informationen werden zum großen Teil
    mit Softwareunterstützung aus den Fremdquellen
    ausgelesen
  • müssen per Hand nachbearbeitet, teilweise
    vollständig manuell eingegeben werden
  • Unterstützung abhängig von verwendeter
    Entwicklungsumgebung
  • Eigenschaften dynamisch erzeugter
    Fensterelemente müssen immer manuell eingegeben
    werden

5
ATOSKommandoerzeugung (bisher)
  • Schrittweiser Aufbau der Kommandostruktur
  • dabei Sicherstellung der Validität erzeugter
    Kommandos
  • Invalide Kommandos können nicht erstellt werden
  • direkte manuelle Eingabe ist nicht vorgesehen
  • die meisten Kommandos bestehen aus 5 oder mehr
    Komponenten

6
Neue Idee
  • Automatische Kommandoerzeugung
  • Aktionen
  • der Testskriptdesigner bedient das Testobjekt auf
    übliche Art und Weise
  • ATOS schneidet alle Eingaben mit (Capturing) und
    generiert daraus automatisch die entsprechenden
    Testskript-Kommandos (HTS)
  • Tests
  • in einem zweiten Modus klickt der
    Testskriptdesigner im laufenden Testobjekt ein
    Fensterelement an
  • ATOS generiert (nach Auswahl) automatisch
    Testskript-Kommandos, die den Status des
    Fensterelements mit den aktuellen Werten
    vergleichen
  • die Nutzeraktionen werden hierbei abgefangen, das
    Testobjekt erhält also keine Eingaben

7
Vorteile
  • enormer Performance-Gewinn bei der
    Testskript-Erstellung
  • automatisch generierte Kommandos sind syntaktisch
    und semantisch korrekt
  • der zu programmierende Testfall wird bei der
    Erstellung direkt durchgeführt
  • Vermeidung von logischen Design-Fehlern

8
Übersicht
  • Motivation, Intention
  • Realisierung
  • technische Grundlagen
  • Capturing
  • Integration
  • Fazit
  • Demonstration

9
Windows-Nachrichten
  • Windows-Nachrichten als Basiskonzept für
  • Kommunikation mit und zwischen Fenstern (Dialoge,
    Controls, )
  • Synchronisation
  • System-Queue ? FIFO
  • Übermittlung von Eingaben (Maus/Tastatur)
  • Timer

10
Was sind Hooks?
  • Hooks erlauben es einer Applikation, eine eigene
    Subroutine in die systemweite Nachrichtenverarbeit
    ung einzuschalten
  • Möglichkeiten
  • Nachrichten "mitschneiden"
  • Nachrichten modifizieren oder blockieren
  • Systemweite vs. Thread-spezifische Hooks

11
Typen von Hooks
  • WH_CALLWNDPROC Hook
  • WH_CALLWNDPROCRET Hook
  • WH_CBT Hook
  • WH_DEBUG Hook
  • WH_FOREGROUNDIDLE Hook
  • WH_GETMESSAGE Hook
  • WH_JOURNALPLAYBACK Hook
  • WH_JOURNALRECORD Hook
  • WH_KEYBOARD_LL Hook
  • WH_KEYBOARD Hook
  • WH_MOUSE_LL Hook
  • WH_MOUSE Hook
  • WH_MSGFILTER and WH_SYSMSGFILTER Hooks
  • WH_SHELL Hook

12
Was können Hooks nicht?
  • Idee
  • Nachrichten verarbeiten wie in der
    Nachrichten-Schleife der Fensterfunktion
    WndProc()
  • Nutzen der von Controls gesendeten Notifications
  • z.B BN_CLICKED, EN_CHANGE
  • Control-bezogene Aktionen
  • Aber
  • ob Controls wirkliche die benötigten
    Notifications senden, ist programmabhängig
  • Client-Client-Nachrichten laufen nicht über die
    systemweite Nachrichtenverwaltung ? kein Zugriff
    über Hooks

13
"Mitschneiden" von Eingaben
  • Abfangen von reinen Eingabe-Ereignissen (Maus,
    Tastatur) für das Testobjekt
  • Mausklick
  • Bestimmen des Ziel-Fensters des Mausklicks aus
    den Koordinaten
  • Interpretation abhängig vom Typ des Fensters
  • Tastendruck
  • Ermittlung des aktiven Fensters
  • Interpretation abhängig vom Typ des Fensters

14
Bestimmen des Controltyps (1)
  • Ermitteln des Klassennamens des Fensters
    (GetClassName())
  • Edit
  • Static
  • Button
  • Problem 1
  • Programme können Controls in ihrer Funktionalität
    erweitern, ohne das Basisverhalten einzuschränken
  • normal steuerbar über HTS-Kommandos
  • Aber abweichender Klassenname
  • Lösung nutzereditierbare Liste mit Synonymen für
    Klassennamen

15
Bestimmen des Controltyps (2)
  • Problem 2
  • Controls desselben Typs können unterschiedliche
    Eigenschaften haben (und unterschiedliche
    Behandlung erfordern)
  • Klasse "Button" realisiert eine Reihe
    unterschiedlichster Controls
  • Pushbutton
  • Radiobutton
  • Checkbox
  • Groupbox
  • Identifizierung über gesetzte Stylebits möglich
    (GetWindowLong(, GWL_STYLE))

16
Übersicht
  • Motivation, Intention
  • Realisierung
  • technische Grundlagen
  • Capturing
  • Integration
  • Fazit
  • Demonstration

17
Capturing (Übersicht)
Nachrichten
Hook
Code-Segment
installiert steuert
Nachrichten
Daten-Segment
Daten-Segment
Shared Data
sendetInformationen
Testobjekt
ATOS
Abfragen
Antworten
18
Capturing
Übersicht
  • ATOS installiert Hooks für den Thread des
    Testobjekts
  • WH_MOUSE Mausklicks
  • WH_KEYBOARD Tastatureingaben
  • WH_CALLWNDPROC Menüaufrufe
  • jede Nachricht, die einen der installierten Hooks
    betrifft, durchläuft zunächst die zugehörige
    Hook-Funktion (im Kontext des Testobjekts)
  • Analyse der Nachricht
  • ggf. Informationsübermittlung an ATOS mittels
    nutzerdefinierter Nachricht
  • ggf. Stoppen der Übermittlung ? Testobjekt erhält
    die Nachricht nicht

19
Capturing (Beispiel 1)
  • Beispiel Übermittlung der Information zum
    Ereignis "linke Maustaste gedrückt"
  • define WM_CAPTURE_LMOUSEDOWN USER100
  • ...
  • SendMessage(
  • hWnd, // Dialog des Capturing-Moduls
  • WM_CAPTURE_LMOUSEDOWN,
  • wParam, // LOWORD x-Koordinate
  • // HIWORD y-Koordinate
  • lParam // Handle des Zielfensters
  • )

20
Capturing (Beispiel 2)
  • Beispiel Übermittlung der Information zum
    Ereignis "Tastatureingabe"
  • define WM_CAPTURE_KEY USER102
  • ...
  • SendMessage(
  • hWnd, // Dialog des Capturing-Moduls
  • WM_CAPTURE_KEY,
  • wParam, // LOWORD 0
  • // HIWORD virtueller Tastenkode
  • lParam // Handle des Fensters mit dem
  • // Fokus
  • )

21
Interpretation der Eingaben (Mausklick)
Übersicht
  • Mausklick (links)
  • Prüfen, ob Drücken der Maustaste und Loslassen
    auf demselben Control stattfanden
  • Ermitteln des Control-Typs
  • Prüfen des Control-Status (aktiviert)
  • Generieren eines Kommandos in Abhängigkeit vom
    Control-Typ
  • Button Klick
  • Radiobutton Auswahl
  • Checkbox Setzen/Löschen
  • Listbox Auswahl (ggf. Mehrfachauswahl ? mehrere
    Kommandos)
  • Combobox Auswahl oder Wert
  • Tab Auswahl
  • Editbox, Static -
  • bei bestimmten Controls überflüssige
    Zwischenkommandos vermeiden (z.B. Editbox,
    Listbox, Combobox)

22
Interpretation der Eingaben (Tastatur)
Übersicht
  • Tastatureingabe
  • Prüfen des virtuellen Tastenkodes
  • Ermitteln des Control-Typs (des aktuell
    fokusierten Fensters)
  • ggf. Generierung eines Kommandos in Abhängigkeit
    vom Typ des Controls und der gedrückten
    Tastez.B
  • Button SPACE Klick
  • Button ENTER Klick
  • Checkbox ENTER Tastendruck ENTER
  • Button 'A' -
  • Editbox 'A' Wert setzen
  • Combobox 'A' Auswahl oder Wert setzen

23
Capturing von Menüaktionen (1. Möglichkeit)
  • 1. Möglichkeit Auswerten von WM_COMMAND
    Notification
  • das high-order word von wParam gibt Auskunft, ob
    es sich um eine Menüaktion handelt
  • Aber unzuverlässig
  • Aber nachträglich keine Möglichkeit, das Fenster
    zu ermitteln, zu dem das Menü gehörte
  • nicht realisiert

24
Capturing von Menüaktionen (2. Möglichkeit)
  • 2. Möglichkeit (wurde realisiert) Auswerten der
    WM_MENUSELECT Notification
  • Nachricht wird immer empfangen, wenn der Cursor
    über einen neuen Menüpunkt kommt oder mittels
    Tastatur zu einem anderen Menüpunkt gesprungen
    wird
  • zwischen auswählbaren und nicht auswählbaren
    (inaktive, Trennlinien, Submenüs) Menüpunkten
    unterscheiden
  • aktives Rechteck des Menüpunkts speichern und bei
    nächstem Klick-Ereignis Treffer prüfen
  • Fenster, das das Menü aufgerufen hat ermitteln
    zum Zeitpunkt der ersten WM_INITMENU Notification

25
Übersicht
  • Motivation, Intention
  • Realisierung
  • technische Grundlagen
  • Capturing
  • Integration
  • Fazit
  • Demonstration

26
Ziele für die Integration in das ATOS-Grundsystem
  • die ATOS-Testsuite soll weiterhin wie bisher
    nutzbar bleiben
  • die Erweiterung soll sich möglichst ohne Bruch in
    das ATOS-System einfügen
  • die generierten Kommandos müssen gültige
    HTS-Befehle darstellen
  • generierte Kommandos sollen nachbearbeitet werden
    können

27
Integration eines neuen Dialogs
  • Beschränkung auf notwendige und sinnvolle Steuer-
    und Informationselemente
  • selbsterklärende Bedienung
  • geringer Platzbedarf
  • Dialog wird im Vordergrund gehalten
  • optisches Feedback bei Generierung neuer
    Kommandos
  • grün neues Kommando erfolgreich erzeugt
  • gelb letztes Kommando erfolgreich modifiziert
  • rot Fehler bei der Kommandoerzeugung

28
Modellierung der neuen Klasse'CapturingProcessor'
  • Funktionalität
  • Hookinstallation, -steuerung
  • Auswertung der Hook-Nachrichten
  • Ermittlung weiterer benötigter Informationen aus
    dem Testobjekt
  • Generierung von kommentierten Kommandos
  • Undo-Funktion

29
Klasse 'CapturingProcessor'
CapturingProcessor
- struct TEMPORARYDATA UINT uiVal HWND
hWnd HMENU hMenu RECT area
mTempData - unsigned short munInternalState - bo
ol mbHookRunning - HWND mhRunningAppWnd - DWORD
mdwRunningAppPId - HWND mhCallingDlgWnd - UINT
muiGeneratedCmdsCnt
- LineList mCommandList - LineList
mPostCommands - LineList mPreCommands - unsign
ed short munWorkingMode - unsigned short
munLastCmdCreationMode - LRESULT
(mfnStartTestSelDlg)(HWND, Line ) - LineList
mControlTypeSynonyms
CapturingProcessor(const char
szConfigFilePath) virtual CapturingProcessor()
bool Initialize(const char szAppPath,
LRESULT (fnStartTestSelDlg)(HWND, Line ),
HWND hDlgWnd) void Uninitialize() HWND
GetRunningAppTopMostWnd() bool
StartCapturing(HWND hWndMsgTarget) bool
StopCapturing() bool SetWorkingMode(unsigned
short NewWorkingMode) unsigned short
GetWorkingMode() Line Undo() unsigned
short GetLastCmdCreationMode() UINT
GetGeneratedCmdsCnt() LineList
GetCommands(bool bClearCommands) void
ClearCommands() char GetCtrlInfo(HWND
hCtrl) Line CaptureClick(HWND hCtrl, POINT
pt) Line CaptureKey(HWND hCtrl, UINT
uiKeyCode) Line CaptureMenuCmd(HMENU hMenu,
UINT uiMenuItemID) Line CaptureMenuInit(HWND
hWnd) - bool ImportTypeSynonymsFile(char
szFilename) - HWND StartApplication(char
szPath) - void PreparePreAndPostCommands() - UI
NT GetControlType(HWND hWndControl, char
szName) - BOOL IsRunningAppWndValid() - void
MaskQuotes(char szText) - static BOOL CALLBACK
EnumWindowsProc(HWND hWnd, LPARAM lParam)
- Line CaptureClickACTION(HWND hCtrl, POINT
pt) - Line CaptureKeyACTION(HWND hCtrl, UINT
uiKeyCode) - Line CaptureMenuCmdACTION(HMENU
hMenu, UINT uiMenuItemID) - Line
CaptureMenuInitACTION(HWND hWnd) - Line
CaptureClickTEST(HWND hCtrl, POINT pt) - bool
CreateCmdEDITBOX(HWND hCtrl, Line commentLine,
Line commandLine) - bool CreateCmdBUTTON(HWND
hCtrl, Line commentLine, Line
commandLine) - bool CreateCmdTAB(HWND hCtrl,
Line commentLine, Line commandLine) - bool
CreateCmdLISTBOX(HWND hCtrl, Line commentLine,
Line commandLine) - bool CreateCmdLISTBOXMULTI
SEL(HWND hCtrl, Line commentLine, Line
commandLine, UINT uiCmdArraySize) - bool
CreateCmdCOMBOBOX(HWND hCtrl, Line commentLine,
Line commandLine) - bool CreateCmdMENU(HWND
hWnd, HMENU hMenu, UINT uiMenuItemID, Line
commentLine, Line commandLine) - bool
CreateCmdKEY(UINT uiKeyCode, Line commentLine,
Line commandLine) - bool CreateTestCmd(HWND
hCtrl, Line commentLine, Line commandLine,
UINT uiCmdArraySize, unsigned short
unTestMode) - void AddCommandToList(Line
commentLine, Line commandLine, UINT
uiCmdArraySize) - unsigned short
GetKeyHandlingForCtrl(UINT uiKeyCode, UINT
uiControlType) - bool IsLastCmdOfCtrl(char
szControl, HWND hCtrl)
30
Trennung von GUI und Logik
Hook
installiert, steuert
ATOS
GUI
Logik
Testsequenz
sendetNachrichten
übermittelt Daten steuert
startet
Capturing Dialog
31
Besonderheiten aus dem Capturing erzeugter
HTS-Kommandos
  • "herkömmliche" HTS-Befehle beinhalten verbale
    Bezeichner an Stelle der numerischen
    Identifikatoren von Controls
  • die Zuordnung wird durch Informationen aus
    URF-Dateien hergestellt
  • beim Capturing werden die numerischen
    Identifikatoren ermittelt
  • Rückwärts-Zuordnung über Daten aus URF-Dateien
    wäre möglich, würde aber dem Ziel einer
    Quelltext-Unabhängigkeit entgegenstehen
  • projektgebundenes Umschalten zwischen entweder
    Nutzung der manuellen Testskript-Erstellung oder
    des Capturings widerspricht Zielstellung
  • "herkömmliche" und generierte HTS-Befehle sollen
    innerhalb derselben Testsequenz kombiniert werden
    können
  • Einführung eines "Schalters" zum Deaktivieren der
    Substitutionen beim Übersetzen der Kommandos von
    HTS nach ATS

32
Neues HTS-Kommando NOSUBST
  • Erweiterte HTS-Syntax
  • anweisung aktionsschritt auswertungsschritt
    interaktion dateioperation loopstruktur
    kommentar deakt_kommando nosubst_kommando..
    .nosubst_kommando NOSUBST,anweisung
  • Kommandos mit dem Präfix NOSUBST werden normal
    verarbeitet, bis auf folgende Einschränkungen
  • an Stelle von Control-Bezeichnern oder Menübäumen
    werden die entsprechenden numerischen
    Identifikatoren der Controls oder Menükommandos
    erwartet
  • NOSUBST-Kommandos können im ATOS-Befehls-Editor
    bearbeitet werden, eine automatische
    Fehlerkontrolle ist jedoch nicht möglich

33
Übersicht
  • Motivation, Intention
  • Realisierung
  • Fazit
  • Demonstration

34
Fazit und Ausblick
  • Erreichte Ziele
  • zuverlässiges Capturing der Nutzeraktionen durch
    Interpretation von Eingabe-Nachrichten auf
    niedrigem Level
  • schnelle, intuitive Generierung von Aktions- und
    Testkommandos
  • Unterstützung des Testens von Applikationen, für
    die kein Quellkode vorliegt
  • saubere Einbettung in das ATOS Grundsystem
  • Möglichkeit der kombinierten Verwendung von
    manueller Testskript-Erstellung und Capturing
  • Erweiterungen, Verbesserungen
  • Verwendung der URF-Daten zur Kommando-Generierung,
    wenn vorhanden
  • ggf. Unterstützung weiterer Controls
  • Abhängig auch von Unterstützung durch HTS

35
Übersicht
  • Motivation, Intention
  • Realisierung
  • Fazit
  • Demonstration
  • Rechner
  • Editor

36
Diskussion
  • Vielen Dank für Ihre Aufmerksamkeit!
Write a Comment
User Comments (0)
About PowerShow.com