vi er her !!!

02120

DifferentielGPS
home

Exel-Modulet

Dette module er gennemtestet i alle aspekter under dets konstruktion. Hver gang en lille del af det var færdigt, blev det udsat for en særdeles grundig funktionel test, som i mange tilfælde også indebar en fuldstændig logisk test af den pågældende stump programmering.

Lad os tage udgangspunkt i den følgede dialog:

Testen udførtes ved ikke at sende forespørgslen til selve databaseserveren men bare at udskrive den genererede SQL-sætning i stdout. Testen udførtes direkte i interfacet og der er således ikke nogen externe data man kan sende ind i modulet. Modulet blev nemlig konstrueret på den måde, at den grafiske brugergrænseflade var det første der blev lavet, hvorefter logikken blev bygget ovenpå. Det er godt nok den omvendte procedure i forhold til de fleste lærebøger og anbefalinger, men det fandtes at være den nemmeste måde at konstruere dette modul på. Det er testet at der genereres den korrekte SQL-statement i følgende cases:

Dette er den stum kode der genererer where betingelsen for satelitterne:

// generate the where-clause for the satellites
// if all of the satelittes are chosen, there's no reason to specify criteria
if (antalSats != sats.length-1) {

    // if there's a low number of selected satelittes
    if (antalSats <= sats.length/2) {
        whereSQL = whereSQL.concat("( satelliteId in ( ") ;
        for (int index = 1 ; index < sats.length ; index++) {
            if (sats[index].getSelectedObjects() != null) {
                whereSQL = whereSQL.concat(index+" , ") ;
            }
        }
    }

    // if there's a low number of non-selected satelittes
    if (sats.length/2 < antalSats) {
        whereSQL = whereSQL.concat("( satelliteId not in ( ") ;
        for (int index = 1 ; index < sats.length ; index++) {
            if (sats[index].getSelectedObjects() == null) {
                whereSQL = whereSQL.concat(index+" , ") ;
            }
        }
    }
    // remove the last ',' and add the final parantheses
    whereSQL = whereSQL.substring(0,whereSQL.length()-3) ;
    whereSQL = whereSQL.concat(" ))") ;
}

Med bare et enkelt Database Felter valgt, samtlige Interfaces valgt og Tidsgrænser med både laveste og højeste valgt:

  1. ingen satelitter valgt (skal give en dialog med fejlmeddelelse)
  2. 1 satelit valgt
  3. 2 satelitter valgt
  4. alle satelitter/2 - 1
  5. alle satelitter/2
  6. alle satelitter/2 + 1
  7. alle satelitter/2 + 2
  8. alle satelitter - 2 valgt
  9. alle satelitter - 1 valgt
  10. alle satelitter valgt (ingen where betingelse)

Ovenstående gør, at man kun genererer en where betingelse for satelitterne alene. De ovenstående cases et testet både for et begrænset antal satelitter registreret i databasen som illustreret og med samtlige satelitter til stede i databasen. I alle tilfælde genereredes den korrekte SQL where betingelse eller fejl-meddelelse. Den første test kontrollerer om man fanger at der ved en fejl ikke er valgt nogen satelitter. Den sidste test kontrollerer om der dannes en tom where-betingelse. Test numrene 2-5 kontrollerer den første af de indre if-blokke. Test numrene 6-9 kontrollerer den anden af de indre if-blokke

Med bare et enkelt Database Felter valgt, samtlige Satelitter valgt og Tidsgrænser med både laveste og højeste valgt: En database modifieceredes således at der var 10 interfaces til rådighed

  • ingen interfaces valgt (skal give en dialog med fejlmeddelelse)
  • 1 interface valgt
  • 2 interfaces valgt
  • alle interfaces - 2 valgt
  • alle interfaces - 1 valgt
  • alle interfaces valgt (ingen where betingelse)

Ovenstående gør, at man kun genererer en where betingelse for interfacene alene. I alle tilfælde genereredes den korrekte SQL where betingelse eller fejl-meddelelse. I øvrigt er koden for satelitter og interfaces stort set ens med rimeligt trivielle forskelle imellem de to stumper logik. Så da testen af satelitterne var gennemført succesfuldt, var det rimeligt at forvente samme succesfulde resultat for interfaces.

Med bare et enkelt Database Felter valgt, samtlige Satelitter og Interfaces valgt:

  • explicit angivelse af både laveste og højeste tidsgrænse
  • explicit angivelse af både laveste og højeste tidsgrænse men med den højeste tidsgrænse sat tidligere end den laveste (skal give en dialog med fejlmeddelelse)
  • explicit angivelse af laveste tidsgrænse og højeste afkrydset
  • explicit angivelse af højeste tidsgrænse og laveste afkrydset
  • forkert format på en eller begge tidsgrænser

Ovenstående gør, at man kun genererer en where betingelse for tidsgrænserne alene. I alle tilfælde genereredes den korrekte SQL where betingelse eller fejl-meddelelse.

Samtlige otte kombinationer af om der er en where betingelse for Satelitter, Interfaces eller Tidsgrænse eller ej testedes for at se om 'and' blev indsat de rigtige steder. I alle tilfælde genereredes den korrekte SQL where betingelse.


home