Georg Heeg eK

Zork-Analysis

Package NameZork-Analysis
Package text (de)

Die Zork-Analyse kann Typ- und Coverage-Informationen dynamisch ermitteln, während Code ausgeführt wird. Diese Version setzt John Brants Method Wrappers Base voraus. Sie wurde auf VW9.0 getestet.

Der ursprüngliche Analysis-Browser wurde von Michel Tilman (mtilman@acm.org) geschrieben. Er wurde durch eine Integration der Codecoverage-Analysemaschinerie in den normalen SystemBrowser ersetzt.

  • Es werden Menüpunkte zum Installieren/Deinstallieren von Abdeckungsanalyse-Wrappern für Pundle/Klasse/Protokoll/Methode bereitgestellt.
  • Die Installation/Deinstallation für ausgewählte Pundles instrumentiert alle Instanz- und Klassenmethoden, die zu den ausgewählten Pundles gehören.
  • Bei der Installation/Deinstallation für eine einzelne Klasse oder Protokolle werden entweder Instanz- oder Klassenmethoden instrumentiert.

Die Ergebnisanzeige der Coverage-Prozentsätze wird zu den Listenelementen der Pundles/Klassen/Protokoll/Methodenlisten hinzugefügt; Prozentsätze für eine Klasse werden im Klassenhierarchiemodus nicht angezeigt.
Derzeit verlangsamt die Ergebnisanzeige für Bundles aufgrund umfangreicher Berechnungen den SystemBrowser-Betrieb, daher ist ein Setting verfügbar, um die Bundle-Anzeige standardmäßig ausschaltet (Settings -> Zork-Analysis -> Display Coverage Values for Bundles); Verwendung auf eigene Gefahr!

Die Anzeige der Coverageanalyse-Ergebnisse für Klassen erfolgt nach einer weiteren Einstellung: (Settings -> Zork-Analysis -> Display Instance and Class Coverage Values for Classes). Standardmäßig werden entweder Instanz- oder Klassenabdeckungswerte angezeigt, wie z.B. '[28%] Array'. Bei eingeschalteter Einstellung sieht die Anzeige wie folgt aus: '[28%/70%] Array'.

Coverageanalyse-Ergebnisse werden in jedem geöffneten SystemBrowser angezeigt.
Wenn eine Methode mit Coverage-Informationen ausgewählt wird, wird ein zusätzlicher Tab 'Coverage' als CodeTool zur Verfügung gestellt, mit dem die gesammelten Informationen für die Methode analysiert werden können. Anweisungen in der Methodenquelle werden mit einem grünen Hintergrund angezeigt, wo die Abdeckungsinformationen gesammelt wurden. Die Statements zeigen ihre gesammelten Typinformationen in einem Hover-Hilfefenster an. Beim Klicken in ein solches Statement öffnet sich entweder ein Broweser über den ermittelten Typ (also die Klasse), oder, falls mehrere Typen ermittelt wurden, ein Menü mit allen verfügbaren Typen (d.h. Klassennamen).
Einzelheiten zur Implementierung:
- für die Anzeige der Prozentwerte für PundleModels wurden einige Methoden aus dem Paket 'SUnitToo(lsoverage)' wiederverwendet.
BITTE versuchen Sie nicht, beide Coverage-Tools gleichzeitig zu laden!
(Verfasser: Ralf Propach, Roland Wagener, Georg Heeg eK)

Verwendung
=========
1) Starten Sie den SystemBrowser vom VisualLauncher aus. Wählen Sie ein Pundle, oder eine Klasse, oder ein Protokoll, oder eine Methode, und wählen Sie 'Install Coverage' aus dem entsprechenden Listenmenü. Als erste Rückmeldung wird der anfängliche Prozentsatz der Abdeckung der ausgewählten Elemente in den Listen '[0%]' vor jedem Element angezeigt.

2) Führen Sie den Code, den Sie gerade instrumentiert haben (d.h. führen Sie die Anwendung aus, an der Sie interessiert sind, führen Sie einige Tests durch, was auch immer).

3) Die Aktualisierung im Browser sollte fast augenblicklich stattfinden, wenn Sie das Pundle, das den instrumentierten Code enthält, erneut auswählen. Untersuchen sie nun die Ergebnisse:

  • für eine instrumentierte Methode zeigt der Coverage-Tab die gesammelten Informationen an,
    • Bewegen Sie den Mauszeiger über ein Statement im Codefenster, um den/die gefundenen Typ(en) in einem Hover-Hilfefenster zu sehen,
  • Klicken Sie auf ein Statement, um direkt zu einem einzelnen ermittelten Typ zu navigieren, oder wählen Sie den gewünschten Typ aus dem Menü;
    • klicken Sie auf die Zurück-Schaltfläche des Browsers, um wieder zur gewählten Methode zurückzukehren.
  • grün gefärbter Code bedeutet: diese Anweisungen der Methode wurden ausgeführt,
  • Code, der nicht farbig ist, bedeutet: die Anweisungen wurden nicht ausgeführt
    • es wird keine Schwebehilfe angezeigt, da keine Informationen gesammelt wurden.

4) Deinstallieren Sie die Coverageanalyse-Wrapper, wenn Sie fertig sind. Dies kann wahlweise für eine einzelne Methode, ein Protokoll oder eine Klasse oder für den gesamten Code eines Pundle erfolgen. Beim Schließen des SystemBrowser-Fensters werden Wrapper NICHT deinstalliert! Wenn Sie das Image speichern, werden auch installierte Wrapper gespeichert. (Zu Ihrer Information: "Refactory.Wrappers.MethodWrapper nuke" ist eine "last ditch"-Methode zum Entfernen von Wrappern aus Ihrem Image, wenn Sie nicht mehr wissen, welcher Code instrumentiert wurde).

Instrumentierter Code läuft etwa 6 Mal langsamer als normaler Code.

Bekannte Einschränkungen
====================
Diese Entwicklung ist im Fluss, an einigen Stellen besteht Refaktorisierungsbedarf.

  • Gegenwärtig gibt es keine Sicherheitsvorkehrungen, die verhindert, dass Methodnen analysiert werden, die vom Tool selbst genutzt werden. Dies kann zu Problemen führen, daher sollten Sie entweder Kernel-Klassen nicht analsieren, bis dies behoben ist, oder Sie gehen das Risiko ein, aber speichern Sie vorher ihr Image (was ohnehin vor jeder Analyse ratsam ist!).
  • Nicht alle Smalltalk-Konstrukte werden unterstützt; z.B. wird 'thisContext' nicht erkannt.
  • Die Hypertext-Funktionalität ist derzeit eher ad-hoc (so auch die Implementierung).
  • In früheren Versionen hatte der PDP-Debugger Probleme bei der Auswahl bestimmter Stack-Frames in Methoden mit installierten Wrappern innerhalb eines #eval: durch den Analyse-Browser-Wrapper. Dies wird derzeit untersucht.

Weitere Informationen
===============
Die Webseite von Michel Tilman beschreibt die VW2.5-Implementierung und hat ein Bild der 5i.3-Version:
http://users.pandora.be/michel.tilman/Smalltalk/

Der ESUG2000-Konferenzbericht von Niall Ross beschreibt das Werkzeug im Abschnitt über Meta-Programmierung, Bericht über "Building Run-Time Analysis Tools using Pluggable Interpreters":
http://www.esug.org/summerschools/2000_Southampton/report/ESUG2000publicV2.pdf



 

Package text (en)

Zork-Analysis may dynamically recover type and coverage information as code is run. This version prereqs John Brant's Method Wrappers Base. It has been tested on VW9.0.

The original Analysis Browser was written by Michel Tilman (mtilman@acm.org). It has been replaced with an integration of the code coverage analysis machinery into the normal SystemBrowser.

  • MenuItems are provided to install/uninstall coverage analysis wrappers to pundle/class/protocol/method.
  • Installing/Uninstalling for selected pundles will instrument all instance and class methods belonging to the selected pundles.
  • Installing/Uninstalling for a single class or protocols will instrument either instance or class methods.

The result display of coverage percentages is added to the list items of the pundle/class/protocol/method lists; percentages for a class will not be shown when in class hierarchy mode.
Currently, the result display for Bundles slows down the SystemBrowser operation because of extensive calculations, therefore a setting is available which switches the bundle display off by default (Settings -> Zork-Analysis -> Display Coverage Values for Bundles); use at your own risk!

Coverage results for classes are displayed according to another setting: (Settings -> Zork-Analysis -> Display Instance and Class Coverage Values for Classes). By default, either instance or class coverage values are displayed, like '[28%] Array'. With the setting switched on, the display will be like: '[28%/70%] Array'.

Coverage results are displayed in every open SystemBrowser.
If a method with coverage information is selected, an additional Tab 'Coverage' is provided as a CodeTool, allowing to analyze the collected information for the method. Statements in the methods source will be displayed with a green background where coverage information was collected. Such statements will show their collected type information in a hover help window. When clicking into such a statement, either a browser opens on the tracked type (a.k. the class), or if multiple types were traced, a Menu opens with all available types (a.k. class names).
Implementation details:
- display of the percentage values for PundleModels reuses some methods also to be found in package 'SUnitToo(lsoverage)'.
PLEASE do not try to load both coverage tools at the same time!
(Authors: Ralf Propach, Roland Wagener, Georg Heeg eK)

Use
===
1) Launch the SystemBrowser from the VisualLauncher. Select a pundle, or a class, or a protocol, or a method, and choose 'Install Coverage' from the respective list menu. As a first feedback, the initial percentage of coverage of the selected items in the lists will show '[0%]' in front of each item.

2) Exercise the code you have just instrumented (i.e. run the application you are interested in, run some tests, whatever).

3) Refresh the browser should be almost instantly, if you re-select the pundle containing the instrumented code. Now browse the code:

  • for an instrumented method, the Coverage-Tab will show the collected information,
  • hover over an expression element in the code pane to see the recovered type(s) in a hover help window,
  • click on the expression element to navigate directly to a single collected type, or choose the desired type from the menu;
    • click on the browsers back button to go back to the selected method again.
  • code colored green means: these statements of the method were executed,
  • code that is not colored means: the statements were not executed
    • no hover help will be shown, because there was no information collected.

4) Uninstall wrappers when you are done. This may be done selectively for a single method, a protocoll or a class, or for all code of a pundle.
Closing the SystemBrowser window will NOT uninstall wrappers! If you save the image, installed wrappers will also be saved.
(FYI, "Refactory.Wrappers.MethodWrapper nuke" is a last ditch method for eliminating wrappers from your image if you don't know what is wrapped.)

Wrapped code runs some 6 times slower than unwrapped.

Known Limitations
==============
This is work in progress and needs refactoring in places.

  • There are currently no safeguards against tracing methods used by the tool. This may lead into all sorts of problems, hence either stay away from monitoring kernel classes until this is remedied or take the risk but save first (which might be prudent anyway when methods are being wrapped).
  • Not all Smalltalk constructs are supported; e.g. 'thisContext' is not recognized.
  • The hypertext functionality is currently rather ad-hoc (so is the implementation).
  • In prior versions, with wrappers installed, the PDP debugger had trouble when selecting certain stack frames within an #eval: by an Analysis Browser wrapper. This is being examined.

Further information
===============
Michel Tilman's web page describes the VW2.5 implementation and has a picture of the 5i.3 version: visit
http://users.pandora.be/michel.tilman/Smalltalk/

Niall Ross' ESUG2000 conference report describes the tool in the section on meta-programming, report on 'Building Run-Time Analysis Tools using Pluggable Interpreters': visit
http://www.esug.org/summerschools/2000_Southampton/report/ESUG2000publicV2.pdf

Package image
Package tag
Package prerequisiteVisualWorks 9.0
Package video
Package PDF
Package responsibleRoland Wagener
Contact
Imprint
Press