5.3 Tests | Inhaltsverzeichnis |
Mit dem Beginn der Umsetzung wurden Komponententests erstellt. Die Besonderheit von asynchronen Funktionsaufrufen bei automatischen Zoomanimationen wurden berücksichtigt (vgl. Abschnitt 4.5.1). Bei der Verwendung der delay_call-Methode sind dabei folgende zwei beachtenswerte Eigenschaften aufgefallen:
Für nahezu alle neu implementierten bzw. geänderten Funktionen von OpenLayers (vgl. Klassendiagramm im Anhang 6.3) wurden passende Komponententests erstellt. Dabei wurden drei Testseiten neu angelegt: test_WMS_Untiled.html, test_MouseDefaults.html und test_KeyboardDefaults.html. Die anderen vorhandenen Testdateien wurden um neue Methoden erweitert. Die animated zooming Implementierung machte es erforderlich, weitere Testfunktionen, die Zoomverhalten testen, anzupassen und mit delay_call-Methoden zu erweitern.
Zum Abschluß der Implementierung wurden alle Tests erfolgreich
durchlaufen. Die Komponententests trugen zur Qualitätssicherung bei
und stellen für künftige Erweiterungen die Korrektheit der
animated zooming und panning Features sicher.
function test_05_Map_center(t) { t.plan(6); map = new OpenLayers.Map('map'); var baseLayer = new OpenLayers.Layer.WMS("Test Layer", "http://octo.metacarta.com/cgi-bin/mapserv?", {map: "/mapdata/vmap_wms.map", layers: "basic"} ); map.addLayer(baseLayer); var ll = new OpenLayers.LonLat(2,1); map.setCenter(ll, 0); map.zoomIn(); t.delay_call( 1, function() { t.eq( map.getZoom(), 1, "map.zoom is correct after calling setCenter,zoom in"); t.ok( map.getCenter().equals(ll), "map center is correct after calling setCenter, zoom in"); // set zoomanimation flag manually, // reason: loadend event in layers.js will not achieved in unittests map.zoomanimationActive = false; map.zoomOut(); }, 1, function() { t.eq( map.getZoom(), 0, "map.zoom is correct after calling setCenter,zoom in, zoom out"); map.zoomTo(5); }, 1, function() { t.eq( map.getZoom(), 5, "map.zoom is correct after calling zoomTo" ); map.zoomToMaxExtent(); }, 1, function() { t.eq( map.getZoom(), 2, "map.zoom is correct after calling zoomToMaxExtent" ); var lonlat = map.getCenter(); var zero = new OpenLayers.LonLat(0, 0); t.ok( lonlat.equals(zero), "map center is correct after calling zoomToFullExtent" ); } ); }
Nach Abschluss der Implementierung wurde der erstellte Testplan an die tatsächlich umgesetzten Funktionalitäten angepasst. Der endgültige Testplan gliedert sich in sieben Testsuiten (vgl. Anhang 6.3).
Der komplette Test wurde in sieben unterschiedlichen Browsern durchgeführt. Dazu wurde jeweils ein Testprotokoll erstellt. Tabelle 5.3.2 stellt die gestesteten Browserversionen, gegliedert nach den genutzten Betriebssystemen, dar.
Debian GNU/Linux 3.1 | Mac OS 10.4 | Windows XP |
Firefox 1.5.0.7 | Safari 2.0.4 | Internet Explorer 7.0 |
Bon Echo 2.0.0.1 | Firefox 2.0.0.2 | Firefox 2.0.0.3 |
Opera 9.10 |
Darüber hinaus wurde überprüft, ob der KDE Konqueror46 (Version 3.5.5 und 3.3.2) tatsächlich nicht von OpenLayers unterstützt wird (vgl. auch OpenLayers). Die Karte blieb beim Aufruf der Demo leer. Der Grund dafür konnte auch nach einer Anfrage über die Entwickler-Mailingliste von OpenLayers nicht beantwortet werden.
Der Testdurchlauf mit dem Internet Explorer (IE) 7 deckte drei Probleme auf:
Punkt (1) sei vernachlässigbar, da es die Funktionsweise der Anwendung
nicht beeinträchtigt. Eine Lösung für dieses browserspezifische
Problem wird nicht gesucht.
Problem (2) ist ebenso nur im IE aufgetreten. Durch zwei zusätzliche
IE-spezifische keyCodes für die + und - Taste konnte das Problem
behoben werden (vgl. KeyboardDefaults.js).
Das Kernproblem von Punkt (3), dass ab 32768 Pixel keine Kacheln mehr
angezeigt werden, zeigte sich auch in den drei getesteten Browsern unter
Mac OS X und dem Firefox unter Windows. Eine Erklärung liegt nahe, dass
Grafiken in diesen Browsern nur in einer Größe von maximal 16 Bit dargestellt
werden können; d. h. 1 Bit für das Vorzeichen und 15 für die
Größenzahl, also 215=32768 px.
Die nur im IE aufgetretenden o. g. Performanceprobleme sind so
gravierend, dass eine Lösung hierfür zwingend erforderlich ist,
um eine stabile Anwendung zu gewährleisten. Da der IE Pixelgrößen über
215 anscheinend nicht abfängt, muss dies in der Anwendung
ausgeglichen werden. OpenLayers prüft nun vor jedem Skalieren der Kacheln
in den Methoden scaleTileTo(), scaleTilesOfGrid() und
scaleZoomOutTile_share() (in Layer.js), ob eine Überschreitung des o. g.
Wertes vorliegt. Die Kacheln werden dann nicht mehr weiter skaliert,
sondern behalten ihre letzte Kachelgröße bei. Für die Orientierung des
Nutzers ist dieser Umstand relativ unbedeutend, da sich die Karte bei
einer Größe von 32768 Pixeln bereits in einem sehr verpixelten Zustand
befindet. Die Tatsache, dass sich die Karte beim Bewegen des Zoomsliders
ab einer gewissen Zoomstufe nicht mehr »mitbewegt«, kann sich jedoch
irritierend auf den Nutzer, und damit auf das Smart Map
Browsing, auswirken.
Die durchgeführten Integrationstests stellen den Abschluß der Realisierungs- und Testphase dar und haben durch das Aufdecken neuer Probleme gezeigt, wie wichtig Testprotokolle für die Qualitätssicherung sind.
5.3 Tests | Inhaltsverzeichnis |