5.4 SchwierigkeitenTop5.2 Implementierung5.3 TestsInhaltsverzeichnisEnglish

5.3 Tests

5.3.1 Komponententests

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:

  1. Innerhalb einer Testfunktion darf nach der delay_call-Methode keine weitere Testaussage folgen, die auf Aussagen und Anweisungen der delay_call-Methode aufbaut. Andernfalls schlägt die Testfunktion fehl.
    Hintergrund: Durch die definierte Verzögerungszeit werden Anweisungen, die nach der delay_call-Methode stehen, vorgezogen und abgearbeitet bevor delay_call() ausgeführt wird. In den erstellten Komponententests wird delay_call() daher stets als letzte Anweisung in Testfunktionen verwendet (vgl. Listing 5.3.1; Zeile 33/34).
  2. Bei Testfunktionen, in denen mehrere automatische Zoomanimationen ablaufen sollen, müssen darauf ebenso viele delay_call-Aufrufe folgen. Nach (1) dürfen diese nicht nacheinander aufgelistet werden. Eine Lösung wäre, sie ineinander zu verschachteln; d. h. innerhalb eines Aufrufs einen neuen Aufruf ausführen. Eleganter ist es jedoch, die einzelnen Funktionen und deren Verzögerungszeiten in der Parameterliste einer delay_call-Methode aufzulisten (vgl. Listing 5.3.1).

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.

   
Listing: mehrere delay_call-Aufrufe in einer Testfunktion; test_Map.html
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" );
        }
    );   
}    

5.3.2 Integrationstests

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.7Safari 2.0.4Internet Explorer 7.0
Bon Echo 2.0.0.1Firefox 2.0.0.2Firefox 2.0.0.3
Getestete Browserversionen
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:

  1. Folgende Testplanfrage wurde stets mit Nein angekreuzt:
    »Symbolisiert die Statusleiste des Browsers nach vollständigem Laden der gesamten Karte die Beendigung des Ladevorgangs (z. B. durch die Meldung done)?«
  2. Das Zoomen über die Tastatur funktionierte im IE nicht.
  3. Sobald die PNG-Kachelgrafiken beim Skalieren eine Größe von 32768 Pixeln überstiegen, waren sie in der Karte nicht mehr sichtbar. Zusätzlich ging die CPU-Last sprunghaft in die Höhe. Teilweise reagierte der IE kurzzeitig nicht mehr oder stürzte ganz ab.

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.


© 1. Juni 2007, Emanuel Schütze, some rights reserved.
Diese Arbeit ist unter der Creative Commons Lizenz Namensnennung-Weitergabe unter gleichen Bedingungen 2.0 Deutschland lizensiert.

5.4 SchwierigkeitenTop5.2 Implementierung5.3 TestsInhaltsverzeichnisEnglish