Trucker Terminal System

- et adgangs kontrol system

 

 

Modultest

 

 

 

 

 

Udarbejdet af:            Gruppe 7 (I2)

 

            Medlemmer:              Alex Hede                              01065

                                                Jeppe Hasager                     01048

                                                Jesper Johansen                  02877

                                                Søren S Munk                        02847

                                               

            Vejleder:                     Michael E. Kristensen

 


Indholdsfortegnelse

1      Kommunikationsdel 2

1.1        Generel fremgangsmåde: 2

1.2        Modultest af HDLC. 2

1.3        Modultest af komm.. 8

2      Databasedel 12

2.1        Generel fremgangsmåde. 12

2.2        Modultest DB_Database. 13

2.3        Modultest DB_Opret_forb. 28

2.4        Modultest Faelles_Klasse. 29

2.5        Modultest af DB_Com.. 34

2.6        Modultest Af DB_Screen. 37

 


1                    Kommunikationsdel

1.1                  Generel fremgangsmåde

Alle funktioner er testet ved hjælp af stepfunktionerne F10 og F11 i Visual Studio. Ved at anvende denne metode, kan vi for hver enkelt funktion følge med i, hvilke variable der bliver ændrede, og hvad deres nye værdi bliver. Vi kan også se hvilke funktioner der eventuelt bliver kaldt, og hvad disse funktioner gør.

 

Mange af funktionerne er afhængige af, at nogle bestemte variable har en bestemt værdi. Der er blevet testet i en bestemt rækkefølge således at funktioner der sætter disse variable er gennemtestet først. Derfor kan vi godt teste de funktioner der anvender disse variable bagefter.

 

1.2                  Modultest af HDLC

 

void setType(int rammetype)

Testparametre:              -3, 0 = Iramme, 1 = Sramme, 3

Forventet resultat:          0 skal sætte rammetype til I-ramme.

1 skal sætte rammetype til S-ramme.

Alt andet skal sætte rammetypen til Unknown = -1.

Resultat:                       -3 og 3 satte rammetypen til -1.

0 satte rammetypen til I-ramme.

1 satte rammetypen til S-ramme.

Funktionen er korrekt.

 

bool setInfo(char *data, int infoLength)

Testparametre:              setType(Sramme), setType(Iramme),

*data = Tekststreng på 4 bogstaver

infoLength = -2,0,4,8

Forventet resultat:          rammetypen skal være en I-ramme, hvis det ikke er tilfældet ændrer funktionen ikke noget.

infoLength skal være >= 0, ellers bliver Info ikke ændret.

Hvis infoLength er >= 0, kopieres infoLength karakterer ind i pakken fra data[], og sætte adressen til ’1’

Hvis Info er sat i forvejen slettes det gamle info og det nye kopieres ind i pakken.

Resultat:                       S-ramme:

Der ændres ikke noget

                                    I-ramme:

                                    -2: Info kunne ikke sættes.

                                    0: Det blev kopieret 0 karakterer, og sætte adressen til ’1’

4: Det gamle info (0 karakterer) blev slettet og 4 karakterer blev kopieret, og sætte adressen til ’1’

8: De 4 karakterer og 4 tilfældige efterfølgende karakterer blev kopieret, og sætte adressen til ’1’

                                    Funktionen er korrekt.

 

char getCHK()

Testparametre:              Pakke = [1]1"D01234


Forventet resultat:          Funktionen skal returnere den udregnede xor sum for pakken fra DLE til ETX tegnet som er udregnet vha. lommeregner til 126 = ’~’

Resultat:                       Funktionen returnerede 126 hvilket er korrekt, dette kan jo være en tilfældighed, men under videre testning med terminalen gav det ingen problemer.

                                    Funktionen er korrekt.

 

 

void setId(char id)

Fremgangsmåde:           Funktionen er afhængig af at rammetype = I-ramme, og at der er oprettet en pakke vha. setInfo().

Testparametre:              id = D. Derudover:

I-ramme og pakke oprettet,

I-ramme og pakke ikke-oprettet,

S-ramme og pakke oprettet.

Forventet resultat:          I-ramme og pakke oprettet:                     id bliver sat til D.

                                    I-ramme og pakke ikke-oprettet:              id bliver ikke sat.

S-ramme og pakke oprettet:                    id bliver ikke sat.

Resultat:                       id blev kun sat når der blev testet med I-ramme og der var oprettet en pakke.

Funktionen er korrekt.

 

void send()

Testparametre:              setType(Iramme), setInfo("0123456789",10), setId(‘D’)

Forventet resultat:          Den modtagende PC skal vise 0123456789 omgivet af headeren.

Resultat:                       [1]1"D0123456789


V, hvilket er korrekt.

                                    Funktionen er korrekt.

 

 

bool receive()

Testparametre:              [1]1"DD201Indl‘s kort


È og [1]1"DD201Indl‘s kort
f

                                    [1]:                              DLE STX

                                    1:                                 ADR

                                    ”:                                  KON

                                    :                                 LEN

                                    D:                                 ID

                                    D201Indl‘s kort: INFO

                                   


:                                 ETX

                                    È:                                 korrekt CHK

                                    f:                                  forkert CHK

Forventet resultat:          Først skal den modtage korrekt, dernæst skal der være CHK fejl.

Resultat:                       Den første blev modtaget korrekt og i den næste var der CHK fejl.

                                    Funktionen er korrekt.

 

 

char* getInfo(int *length)

Testparametre:              setType(I-ramme), setInfo("INFO",4), setInfo("",0)

Forventet resultat:          info = ”INFO”, length = 4 og

                                    Info = ””, length = 0

Resultat:                       funktionen returnerede korrekt info, og length blev sat til hhv. 4 og 0.

Funktionen er korrekt.

 

 

bool setLEN(int length)

Testparametre:              setType(Iramme), setType(Sramme), length = -5, 0, 8

Forventet resultat:          rammetypen skal være en I-ramme for at man kan ændre længden.

Længden skal være mindst 8 i en I-ramme, så det er kun ved 8 det skal kunne lade sig gøre at sætte længden.

Resultat:                       S-ramme:

Der ændres ikke noget, LEN bliver ikke sat.

I-ramme:

-5 og 0: Da de er mindre end 8 stoppes funktionen med det samme.

                                    8: Længden bliver sat til 8.

                                    Funktionen er korrekt.

 

 

int getInfoLength()

Testparametre:              setType(Sramme), setType(Iramme), setInfo("INFO",4)

Forventet resultat:          Funktionen returnere 4 ved I-rammen og unknown = -1 ved S-ramme.

Resultat:                       InfoLength hhv. = 4 og 0.

                                    Funktionen er korrekt.

 

 

char getId()

Testparametre:              setType(Sramme), setType(Iramme), setInfo("INFO",4), setId('D')

Forventet resultat:          Funktionen skal returnere det der står i ID feltet, hvis rammetypen er sat til I-ramme ellers returneres der unknown = -1.

Resultat:                       Funktionen returnerede D ved I-ramme og -1 S-ramme.

                                    Funktionen er korrekt.

 

 

 

char getType()

Testparametre:              setType(Iramme), setType(Sramme), setType(2)

Forventet resultat:          Iramme = 0, Sramme = 1, ellers returneres -1 = Unknown

Resultat:                       Funktionen returnerede henholdsvis 0, 1, -1.

                                    Funktionen er korrekt.

 

 

void setAdr(char adresse)

Testparametre:              ’0’, ’1’, ’5’

Forventet resultat:          Funktionen skal kun acceptere adresser i intervallet ’1’-’4’.

Resultat:                       ’0’ og ’5’: adresse blev ikke sat.

’1’: adresse blev sat til ’1’.

                                    Funktionen er korrekt.

 

 

char getAdr()

Testparametre:              setType(Sramme), setAdr('2')

Forventet resultat:          Funktionen returnere det der står i adressefeltet = ’2’.

Resultat:                       Funktionen returnerede ’2’.         

                                    Funktionen er korrekt.

 

 

bool setBoot(bool value)

Testparametre:              I-ramme og S-ramme. Value = true eller false.

Forventet resultat:          Funktionen skal kun acceptere S-rammer. Value sættes til true eller false.

Resultat:                       I-ramme: value blev ikke sat.

                                    S-ramme og true: bit 3 og 2 blev sat til 1.

                                    S-ramme og false: value blev sat til false.

                                    Funktionen er korrekt.

 

 

bool getReady()

Testparametre:              ingen parametre.

Forventet resultat:          Funktionen skal returnere true eller false, afhængigt af om bit 3 og bit 2, i S-rammens kontrolbyte, er 0.

Resultat:                       Funktionen læser og beregner bittene korrekt.

                                    Funktionen er korrekt.

 

 

void setNS(int value)

Testparametre:              -2, 5, 10

Forventet resultat:          NS består af 3 bits, og dermed skal value være i intervallet 0-7.

Resultat:                       -2 og 10: NS blev ikke sat.

5: NS blev sat.

                                    Funktionen er korrekt.

 

 

int getNS()

Testparametre:              setNS(6)

Forventet resultat:          Funktionen skal returnere 6

Resultat:                       NR = 6.

                                    Funktionen er korrekt.

 

 

void setNR(int value)

Testparametre:              -2, 5, 10

Forventet resultat:          NR består af 3 bits, og dermed skal value være i intervallet 0-7.

Resultat:                       -2 og 10: NR blev ikke sat.

5: NR blev sat.

                                    Funktionen er korrekt.

 

 

int getNR()

Testparametre:              setNR(6)

Forventet resultat:          Funktionen skal returnere 6

Resultat:                       NR = 6.

                                    Funktionen er korrekt.

 

 

void setPF(int value)

Testparametre:              -1, 0, 1, 2

Forventet resultat:          1 = P, 0 = F, -1 og 2: PF skal ikke sættes.

Resultat:                       0 og 1: PF blev sat korrekt.

                                    2 og -1: PF blev ikke sat.

                                    Funktionen er korrekt.

 

 

bool getPF()

Testparametre:              setPF(1), setPF(0)

Forventet resultat:          1 = true, 0 = false

Resultat:                       Funktionen returnerede først true, dernæst false.

                                    Funktionen er korrekt.

 

 

 

bool receiveOneCharTimeout(char *value)

Testparametre:              HDLC::send(’s’,1); og ingenting.

Forventet resultat:          Når der sendes en karakter, skal den hentes, inden der sker timeout.

Resultat:                       s blev hentet, og da der ingenting blev sendt kom der Timeout.

                                    Funktionen er korrekt.

Af: Alex Hede, Søren S. Munk

1.3                  Modultest af komm

 

void vent(int tid)

Testparametre:              -5000, 0, 5000.

Forventet resultat:          Venter det antal millisekunder der er indtastet.

Hvis tallet er negativt eller 0, ventes der 0 millisekunder.

Resultat:                       Ved test af -5000 og 0 afsluttede funktionen med det samme.

Ved test af 5000, ventede programmet ca. 5 sekunder.

Funktionen virker korrekt.

 

 

void taendLampe(int nr)

Testparametre:              -2, 1 = rodLampe, 2 = gronLampe, 3

Forventet resultat:          -2, og 3: der sker ikke noget

1 og 2 rød hhv. grøn lampe lyser.

Resultat:                       -2, 3: Begge lamper er slukkede, der skete ikke noget

                                    1: Rød lampe lyser.

                                    2: Grøn lampe lyser.

                                    Funktionen virker korrekt.

 

 

void slukLampe()

Testparametre:              taendLampe(1), taendLampe(2).

Forventet resultat:          rød lampe slukkes og grøn lampe slukkes.

Resultat:                       Begge lamper blev slukket.

                                    Funktionen virker korrekt.

 

 

void udgangstilstand()

Testparametre:              Ingen parametre.

Forventet resultat:          Displayet nulstilles, og lamperne slukkes.

Resultat:                       Displayet blev nulstillet og lamperne blev slukket.

                                    Funktionen virker korrekt.

 

 

void spaerrettilstand()

Testparametre:              Ingen parametre.

Forventet resultat:          Tænder rød lampe og venter 4 sekunder.

Resultat:                       Rød lampe blev tændt, og der blev ventet i ca. 4 sekunder.

                                    Funktionen virker korrekt.

 

 

void setAlfadisp (char *linie2, int length)

Testparametre:              ”Hej med dig” og ”Hej med dig jeg hedder Kaj”

Fremgangsmåde:           Der er plads til 20 tegn i displayet, så alt over 20 skal fjernes.

Forventet resultat:          ”Hej med dig” og ”Hej med dig jeg hedd”

Resultat:                       [1]1DD201Hej med dig


T

                                    [1]1­DD201Hej med dig jeg hedd


:

Funktionen virker korrekt.

                                   

 

bool givAdgang()

Testparametre:              Ingen parametre.

Forventet resultat:          Udskriver ”Godkendt” på skærmen. Tænder grøn lampe. Venter 3 sekunder. Nulstiller antallet af forkerte forsøg.

Resultat:                       Informationsdisplay: ”Godkendt”

                                    Grønlampe blev tændt.

                                    Der blev ventet i 3 sekunder.

                                    Antallet af forkerte forsøg blev nulstillet.

                                    Funktionen virker korrekt.

 

 

void opdaterTid()

Testparametre:              Ingen parametre.

Forventet resultat:          Udskriver dato, tid og år.

Resultat:                       [1]1"­DD101Jun 06 13:42:45 2003


^

                                    Funktionen virker korrekt.

 

 

void setNumdisp (char sign, char *tal)

Testparametre:              (-, 999), ( 999), (-1234567), ( 1234567)

Forventet resultat:          -00999, 000999, -12345, 123456

Resultat:                       -00999, 000999, -12345, 123456

                                    Funktionen virker korrekt.

 

 

bool getPinkode(int *pinkode)

Testparametre:              setInfo(”56”) og setInfo(”1234”) setID(’B’)

Forventet resultat:          56, 1234

Resultat:                       56, 1234

                                    Funktionen virker korrekt.

 

 

bool getKortnr(int *kortnummer)

Testparametre:              setInfo(”1234”), setInfo(”123456”), setID(’A’)

Forventet resultat:          Funktionen giver true hvis den modtager en pinkode inden der sker timeout og skriver pinkode hhv. 1234 og 123456 i kortnummer.

Resultat:                       kortnummer er hhv. 1234 og 123456

                                    Funktionen virker korrekt.

 

 

bool tjekKortnr(int kortnummer)

Testparametre:              -200, 1234, 8831, 8834, 123456

Forventet resultat:          -200:  Kortet er ukendt                rød lampe lyser og returnerer false

                                    1234: Kortet er ukendt                rød lampe lyser og returnerer false

                                    8831: Funktionen returnerer true

                                    8834: Kortet er spærret              rød lampe lyser og returnerer false

                                    123456: Kortet er ukendt            rød lampe lyser og returnerer false

Resultat:                       1234: Kortet er ukendt                rød lampe lyser og returnerer false

                                    8831: True

                                    8834: Kortet er spærret              rød lampe lyser og returnerer false

                                    123456: Kortet er ukendt            rød lampe lyser og returnerer false

                                    Funktionen virker korrekt.

 

 

bool naegtAdgang()

Testparametre:              8831 testes 3 gange i træk

Forventet resultat:          ”Pinkoden er forkert, prøv igen”

                                    ”Pinkoden er forkert, prøv igen”

”Forkert pinkode, kortet er spærret.”, spaerrettilstand() og blokerKort(8831) kaldes.

Resultat:                       ”Pinkoden er forkert, Prøv igen”

                                    ”Pinkoden er forkert, prøv igen”

”Forkert pinkode, kortet er spærret.”, spaerrettilstand() og blokerKort(8831) kaldes.

                                    Funktionen virker korrekt.

Af: Alex Hede, Søren S. Munk

 

 


2                    Databasedel

2.1                  Generel fremgangsmåde

 

Modultesten af de enkelte funktioner i applikationen er opdelt, således at alle utility funktioner testes først, derefter alle funktioner.

For at kunne teste utility funktioner og medlemsdata erklæres disse midlertidigt public: for at kunne tilgå dem fra main.

Alle små testprogrammer skrives i main og koncentrerer sig om at teste at funktionen returnerer det forventede, samt et tjek på om de forventede operationer er foretaget i den tilknyttede database.

Til at tjekke om de rigtige værdier er blevet rettet/tilføjet/fjernet i databasen benyttes Microsoft Access.

Vi finder det ikke nødvendigt at teste om Access fungerer korrekt, men henviser til Microsoft’s dokumentation på området.

 

Der er valgt at dokumentere alle resultater med screen dumps i stedet for at skrive resultatet for at bevare en ægthed i dokumentationen. Da de screen dumps, som anvendes her, er små og let overskuelige ødelægger det ikke læsbarheden.

 

Alle tests af hver enkelt funktion er opstillet således, at hver test er læsbar uafhængig af de øvrige tests. Dvs. at der til hver test opridses de udgangs betingelser / parametre, som testen anvender.

 

De interessante data i de screen dumps der er anvendt til dokumentationen er indkredset i en cirkel for læsbarhedens skyld. Den hvide cirkel markerer returværdier fra funktioner.

Af: Jesper Johansen


2.2                  Modultest DB_Database

Da alle funktionerne i denne klasse kaldes af andre funktioner i den færdige applikation, testes ikke om de modtagne parametre ligger inden for de rigtige rammer. Den funktion ligger i public funktionerne i DB_Screen klassen.

 

Funktionsnavn

DB_Database::DB_Database() - constructor

Bemærkninger

Der tilføjes kode i

1.              Funktionen DB_Database

2.              Funktionen opretForbindelse, , se test af denne

3.              main

Udførelse

Kode tilføjes:

 

1.            cout << "Constructor DB_Database kaldt\n";

2.            cout << "Opret forbindelse kaldt!!\n";

3.            DB_Database p;

 

Forventet resultat

Det forventes, at følgende skrives på skærmen:

 

’Constructor DB_Database kaldt!!’

’Opret forbindelse kaldt!!’

 

Resultat

RKonklusion

Det ses, at der er overensstemmelse mellem forventede resultat og det resultat, der kommer på skærmen.

Funktionen er hermed godkendt.

 

 

 


Funktionsnavn

bool DB_Database::findesBruger ( const char *brugerNavn)

Bemærkninger

Brugere I Databasen (Tabel_Brugerdata) findes i Access:

 

 

Der undersøges om:

1.              Karl Børge Jensen findes, og funktionen returnerer true.

2.              Et tilfældigt navn f. eks. Karl List findes , og funktionen returnerer false.

 

Udførelse

Der skrives følgende kode I main (I to omgange):

 

1.     int svar;
DB_Database p;
svar = p.findesBruger("Karl Børge Jensen");
cout << svar << endl;

 

2.     int svar;
DB_Database p;
svar = p.findesBruger("Karl List");
cout << svar << endl;

 

Forventet resultat

 

1.              Det forventes, at der skrives ’1’ på skærmen for at funktionen har returneret true – at bruger findes i tabellen.

 

2.              Det forventes, at der skrives ’0’ på skærmen for at funktionen har returneret false – at bruger ikke findes i tabellen.

 

 

Resultat

1.

2.

RKonklusion

 

  1. Det ses, at der er overensstemmelse mellem det forventede resultat og det faktiske resultat.
  2. Det ses, at der er overensstemmelse mellem det forventede resultat og det faktiske resultat.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

bool DB_Database::setNyNavn (const char *brugerNavn)

Betingelser

Der undersøges om:

  1. Funktionen indsætter et nyt navn i Tabel:Brugerdata og returnerer true.
  2. Der er blevet indsat et nyt navn i Tabel_Brugerdata med Access.

Udførelse

Der skrives følgende kode i main:

 

int svar;
DB_Database p;
svar = p.setNyNavn ("Karl børge jensen");
cout << svar << endl;

 

 

Forventet resultat

 

1.              Det forventes, at der på skærmen skrives et ’1’ for at funktionen setNyNavn har returneret true og dermed arbejdet korrekt.

2.              Det forventes desuden, at det navn – Karl Børge Jensen – som medgives funktionen er tilføjet i tabellen Tabel_Brugerdata.

 

Resultat

1.

 

2.

Før Kørsel af kode

 

Efter kørsel af kode:

RKonklusion

 

1.              Det ses, at der udskrives ’1’ for true som forventet. Funktionen er dermed korrekt.

2.              Det ses, at navnet Karl Børge Jensen er tilføjet til tabellen.

Funktionen er hermed godkendt.

 

 

 

Funktionsnavn

int DB_Database::getKundeNummer (const char *brugerNavn)

Betingelser

Følgende data findes i Tabel_Brugerdata:

 

Der undersøges om:

  1. Om funktionen returnerer det korrekte kundenummer for Karl Børge Jensen
  2. Om funktionen returnerer et nul for en bruger, som ikke findes f. eks Jens Jensen.

 

Udførelse

Der skrives følgende kode i main (i to imgange)

 

1.     int svar;
DB_Database p;
svar = p.getKundeNummer( "Karl børge jensen" );
cout << svar << endl;

 

2.     int svar;
DB_Database p;
svar = p.getKundeNummer( "Jens jensen" );
cout << svar << endl;

 

 

Forventet resultat

 

  1. Det forventes, at der udskrives ”12” på skærmen.
  2. Det forventes, at der udskrives ”0” på skærmen.

 

Resultat

1.

 

2.

RKonklusion

  1. Det ses, at der fremkommer det forventede, at funktionen har returneret det rigtige brugernummer.
  2. Det ses, at der returneres det forventede, nemlig et nul hvis brugeren ikke findes i tabellen.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

bool DB_Database::setNyKortNummer(int kortNummer)

Betingelser

Følgende kortnumre er i tabel_kortdata:

 

Der undersøges:

  1. Om funktionen kan indsætte 1234 i tabellen.
  2. Funktionens returværdi.

 

Udførelse

Følgende kode skrives i main:

bool svar;
DB_Database o;
svar = o.setNyKortNummer(1234);
cout << svar << endl;

Forventet resultat

Det forventes at:

  1. Funktionen tilføjer 1234 i en ny række i kolonnen ’Kortnummer’ i tabel_Kortdata.
  2. Funktionen returnerer true (skriver ’1’ på skærmen)

Resultat

1.

2.

RKonklusion

1.       Det ses, at der er tilføjet 1234 i en ny række i kolonnen ’Kortnummer’ i tabel_Kortdata.

2.       Det ses, at der er returneret true.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

bool DB_Database::setNyKundeNummer (int kundeNummer, int kortNummer)

Betingelser

Følgende data findes i Tabel_Kortdata:

 

Der undersøges:

  1. Om funktionen kan indsætte en værdi i kolonnen ’Kundenummer’ i den række hvor kortnummer er 1234.
  2. Funktionens returværdi.

Udførelse

Der skrives følgende kode i main:

int svar;
DB_Database p;
svar = p.setNyKundeNummer(2211,1234);
cout << svar;

Forventet resultat

Det forventes at:

  1. Der bliver tilføjet 2211 i
  2. Der bliver returneret true (skriver ’1’ på skærmen).

Resultat

1.

2.

RKonklusion

  1. Det ses, at der er tilføjet 2211 i kolonnen ’Kundenummer’ i rækken hvor ’kortnummer’ = 1234.
  2. Det ses, at der er returneret true.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

bool DB_Database::setNavn (const char *brugerNavn, int brugerNummer)

Betingelser

Følgende navne findes i tabel_Brugerdata:

 

 

Der undersøges om:

  1. Funktionen kan ændre navnet Gynter Hansen til Jens Hansen, og returnerer true hvis den modtager brugerNummer = 22 og brugerNavn = ”Jens Hansen”.

 

  1. Funktionen ikke ændrer noget hvis den modtager et brugerNummer som ikke findes f.eks. 11, og returnerer false.

 

 

Udførelse

Følgende kode skrives i main (i to omgange)

 

1.     bool svar;
DB_Database o;
svar = o.setNavn("Jens Hansen", 22);
cout << svar << endl;     

 

2.     bool svar;
DB_Database o;
svar = o.setNavn("Jens Hansen", 11);
cout << svar << endl;     

 

 

Forventet resultat

 

  1. Det forventes, at navnet Gynter Hansen ændres til Jens Hansen, og at funktionen returnerer true – der skrives 1 på skærmen.

 

  1. Det forventes, at der ikke ændres i navnet, og at funktionen returnerer false – der skrives 0 på skærmen.

 

Resultat

1.

2.

RKonklusion

  1. Det ses, at funktionen har ændret navnet Gynter Hansen til Jens Hansen og returnerer true.
  2. Det ses, at funktionen ikke har ændret, og returnerer false.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

bool DB_Database::setKortNummer (int kortNummer, int kortNrGammel)

Betingelser

Følgende kortnumre findes i Tabel_Kortdata:

 

Der undersøges om:

  1. Funktionen kan ændre værdien i kolonnen ’kortnummer’ til 4321 i den række hvor kortnummer er 1234, hvis den modtager værdierne 4321og 1234, og returnerer den korrekte værdi.
  2. Funktionen ikke ændrer nogen værdi, hvis den modtager et kortnummer, som ikke findes i tabel_Kortdata.

Udførelse

Der skrives følgende kode i main: ( i to omgange)

 

1.     int svar;
DB_Database p;
svar = p.setKortNummer(4321, 1234);
cout << svar << endl;

 

  1. int svar;
    DB_Database p;
    svar = p.setKortNummer(1234, 4321); //Her medgives et kortnummer,
    cout << svar << endl;         //som ikke findes

Forventet resultat

  1. Det forventes, at tallet 1234 bliver erstattet af tallet 4321, og at der returneres true.
  2. Det forventes, at der ikke bliver ændret i tabellen, og at der returneres true.

Resultat

1.

2.

RKonklusion

  1. Det ses, at funktionen har ændret værdien 1234 til 4321, og har returneret true (skriver ’1’ på skærmen.
  2. Det ses, at der ikke er ændret noget i tabellen, og der er returneret false.

Funktionen er hermed godkendt.

 


 

Funktionsnavn

bool DB_Database::setPinkode (int pinkode, int kortNummer)

Betingelser

Følgende data findes i Tabel_Kortdata:

 

Der undersøges om:

  1. Funktionen kan ændre værdien i kolonnen ’pinkode’ i den række hvor ’kortnummer’ har værdien 4321, hvis den modtager værdierne 2211 og 4321, samt om funktionen returnerer true.
  2. Funktionen ikke ændrer nogen værdi, hvis den modtager et kortnummer, som ikke findes i tabellen, og returnerer true.

Udførelse

Der skrives følgende kode i main (i to omgange):

1.     int svar;
DB_Database p;
svar = p.setPinkode(2211,4321);
cout << svar << endl;

 

  1. int svar;
    DB_Database p;
    svar = p.setPinkode(2211,1234);
    cout << svar << endl;

 

Forventet resultat

Det forventes at:

  1. Tallet 2211 bliver indsat i kolonnen ’pinkode’ i den række hvor ’kortnummer’ = 4321, samt at funktionen returnerer true (skriver 1 på skærmen).
  2. Funktionen ikke ændrer noget og returnerer false.

Resultat

1.

2.

RKonklusion

 

  1. Det ses, at funktionen opdaterer tabellen med indsættelse af værdien 2211 det ønskede sted, samt at funktionen returnerer true.
  2. Det ses, at funktionen ikke ændrer noget, samt returnerer false.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

bool DB_Database::setKortSpaerret (int kortNummer)

Betingelser

Følgende data gfindes i tabel_kortdata:

 

Der undersøges, om:

  1. Funktionen kan sætte kort_spærret til false (ikke spærret) hvis den modtager et kortnummer, som findes i tabellen, samt om den returnerer den korrekte værdi.
  2. Funktionen ikke ændrer noget hvis den modtager et kortnummer, som ikke findes i tabellen, samt returnerer false.

Udførelse

Følgende kode skrives i main (i to omgange):

 

1.     bool svar;
DB_Database p;
svar = p.setKortSpaerret(4321);
cout << svar << endl;

 

2.     bool svar;
DB_Database p;
svar = p.setKortSpaerret(1234);
cout << svar << endl;

 

 

Forventet resultat

Det forventes, at:

  1. Funktionen ændrer værdien i kolonnen ’kort_spærret’ fra true til false. (afkrydsningen fjernes), samt at funktionen returnerer true.
  2. Funktionen ændrer intet, samt returnerer false.

Resultat

1.

2.

RKonklusion

  1. Det ses, at ’kort_spærret’er ændret fra true til false, samt at returværdien er true (et ettal på skærmen)
  2. Det ses, at der intet er ændret, samt at returværdien er false.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

const char * DB_Database::getNavn (int brugerNummer)

Betingelser

Følgende data findes i tabel_brugerdata:

 

Der undersøges om:

  1. Funktionen returnerer det rigtige navn, hvis den modtager kundenummer (brugernummer) 22.
  2. Funktionen returnerer et nul hvis den modtager et kundenummer, som ikke findes f.eks. 10.

Udførelse

Der skrives følgende kode i main (i to omgange):

1.     const char *svar;
DB_Database o;
svar = o.getNavn(22);
cout << svar << endl;

 

2.     const char *svar;
DB_Database o;
svar = o.getNavn(10);
cout << svar << endl;

 

 

Forventet resultat

Der forventes, at:

  1. Funktionen returnerer navnet ’Jens Hansen’, som udskrives på skærmen.
  2. Funktionen returnerer tegnet ’0’, som udskrives på skærmen.

Resultat

1.

2.

RKonklusion

Det ses, at funktionen returnerer navnet ”Jens Hansen”.

Det ses, at Funktionen returnerer tegnet ’0’.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

int DB_Database::getTerminalStatus ()

Betingelser

Følgende værdier er i tabel_terminaldata:

 

Der undersøges om:

Funktionen returnerer værdien i feltet ’status’ hvor ’terminalnummer’ = 1.

Udførelse

Der skrives følgende kode i main:

int svar;
DB_Com o;
svar = o.getTerminalStatus();
cout << svar << endl;

Forventet resultat

Det forventes, at funktionen returnerer tallet ’11’.

Resultat

RKonklusion

Det ses, at funktionen returnerer tallet ’11’, som udskrives på skærmen.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

bool DB_Database::findesKortNummer(int kortNummer)

Betingelser

Følgende værdier er i tabel_kortdata:

 

Der undersøges om:

  1. Funktionen returnerer true hvis den modtager et kortnummer, som findes i tabel_kortdata.
  2. Returnerer false hvis den modtager et kortnummer, som ikke findes i tabel_kortdata.

 

Udførelse

Der skrives følgende kode i main: ( i to omgange)

1.     bool svar;
DB_Database o;
svar = o.findesKortNummer(4321);
cout << svar << endl;

 

2.       bool svar;
DB_Database o;
svar = o.findesKortNummer(1234);
cout << svar << endl;

Forventet resultat

Der forventes at:

  1. Funktionen returnerer true, skriver 1 på skærmen.
  2. Funktionen returnerer false, skriver 0 på skærmen.

 

Resultat

1.

2.

RKonklusion

  1. Det ses, at funktionen har returneret true – kortnummer findes
  2. Det ses, at funktionen returnerer false, kortnummer findes ikke.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

bool DB_Database::sletBruger (int brugerNummer)

Betingelser

Følgende data findes i tabel_brugerdata og tabel_kortdata:

                  

 

Der undersøges om:

  1. Funktionen sletter alle data i tabel_brugerdata og i tabel_kortdata hvor kundenummer (brugernummer) er det samme – f. eks 22, og findes i tabellen, og returnerer true.
  2. Funktionen ikke sletter noget hvis kundenummer (brugernummer) ikke findes i tabellerne – f.eks. 10, og returnerer false.

Udførelse

Følgende kode skrives i main:

1.     bool svar;
DB_Database o;
svar = o.sletBruger(22);
cout << svar << endl;

 

2.       bool svar;
DB_Database o;
svar = o.sletBruger(10);
cout << svar << endl;

Forventet resultat

Der forventes at:

  1. Funktionen sletter alle poster i tabel_brugerdata hvor ’kundenummer’ = 22, sletter alle poster i tabel_kortdata hvor ’kundenummer’ = 22 og returnerer true.
  2. Funktionen sletter intet, og returnerer false.

Resultat

1.

                                                                     

2.

                                                                     

RKonklusion

Det ses, at:

  1. Funktionen har slettet alle poster i tabel_brugerdata hvor ’kundenummer’ = 22, og slettet alle poster i tabel_kortdata hvor ’kundenummer’ = 22 og returneret true.
  2. Funktionen intet har slettet, og returneret false.

Funktionen er hermed godkendt.

 

Funktionsnavn

bool DB_Database::opretNyBruger (const char *brugerNavn, int kortNummer, int pinkode)

Betingelser

Det undersøges om funktionen kan oprette en ny bruger med: brugernavn, kundenummer, pinkode, samt nulstilling af kort_spærret og antal_forsøg.

Da funktionen kalder følgende funktioner:

  • DB_Database::bool findesBruger ( const char *brugerNavn)
  • DB_Database::bool setNyNavn (const char *brugerNavn)
  • DB_Database::int getKundeNummer (const char *brugerNavn)
  • DB_Database::bool setNyKortNummer(int kortNummer)
  • DB_Database::bool setNyKundeNummer ( int kundeNummer, int kortNummer)
  • DB_Database::bool setPinkode (int pinkode, int kortNummer)
  • DB_Database::bool setKortSpaerret ( int kortNummer)
  • Faelles_klasse::bool setAntalForsoeg (int kortNummer, int antal)

som er testet separat undersøges her kun opm funktionen returnerer true, som svar på at alle underfunktionerne har returneret true.

Udførelse

Følgende kode skrives i main:

 

Forventet resultat

At funktionen returnerer true.

Resultat

RKonklusion

Det ses, at funktionen har returneret true.

Funktionen er hermed godkendt.

 

Funktionsnavn

bool DB_Database::getBrugerAll (char *searchName)

Betingelser

Følgende poster findes i tabel_brugerdata:

 

Der undersøges om

Funktionen kan udskrive alle de poster, som starter med den streng, som funktionen modtager, f.eks. ”J”, og returnerer true.

Funktionen ikke udskriver nogle poster hvis den modtager f.eks. ”Ni”, og returnerer true.

Udførelse

Der kode i main: (i to omgange)

1.     int svar;
DB_Database p;
svar = p.getBrugerAll("J");
cout << svar << endl;

 

2.       int svar;
DB_Database p;
svar = p.getBrugerAll("Ni");
cout << svar << endl;

Forventet resultat

 

Resultat

1.

2.

RKonklusion

  1. Det ses, at funktionen har udskrevet de poster fra tabel_brugerdata, som starter med ”J”, og returnerer true.
  2. Det ses, at funktionen har udskrevet en tom liste da ingen poster starter med ”Ni”, og returnerer true.

Funktionen er hermed godkendt.

 


 

Funktionsnavn

bool DB_Database::getKortData (int brugerNummer)

Betingelser

Følgende poster findes i tabel_kortdata:

 

Der undersøges om:

  1. Funktionen kan udskrive alle de poster, som starter med det kundenummer, som funktionen modtager, f.eks. 30, og returnerer true.
  2. Funktionen ikke udskriver nogle poster hvis den modtager f.eks. 22, og returnerer true.

 

Udførelse

Der skrives følgende kode i main (i to omgange):

1.     bool svar;
DB_Database o;
svar = o.getKortData(30);
cout << svar << endl;

 

2.       bool svar;
DB_Database o;
svar = o.getKortData(22);
cout << svar << endl;

Forventet resultat

Der forventes at:

  1. Funktionen udskriver alle de poster hvor ’kundenummer’ = 30, og returnerer true.
  2. Funktionen ikke udskriver nogen poster, og returnerer true.

Resultat

1.

2.

RKonklusion

  1. Det ses, at funktionen udskriver alle de poster hvor ’kundenummer’ = 30, og returnerer true.
  2. Det ses, at funktionen ikke udskriver nogen poster, og returnerer true.

Funktionen er hermed godkendt.

 

Af: Jesper Johansen


2.3                  Modultest DB_Opret_forb

 

Funktionsnavn

bool DB_Opret_forb::Opret_Forbindelse ()

Betingelser

Det undersøges om funktionen kan oprette en forbindelse til den ODBC, som er tilknyttet. Funktionen skal returnere true hvis forbindelsen er oprettet.

Da funktionen kaldes af hvert objekt der oprettes af DB_Database klassen er funktionen blevet testet i hver funktion, som har skrevet eller hentet data fra databasen.

Udførelse

Følgende kode skrives i main:

bool svar;

DB_Opret_forb o;

svar = o.Opret_Forbindelse();

cout << svar;

 

Forventet resultat

Der returneres true.

Resultat

RKonklusion

Det ses, at der er returneret true.

Desuden er alle funktionerne, som har skrevet eller hentet data fra databasen godkendt.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

void DB_Opret_forb::Luk_Forbindelse ()

Betingelser

Funktionen DB_Opret_Forb returnerer intet, og det er derfor ikke muligt at teste om funktionen er veludført.

 

Funktionen kaldes FØR der er oprettet forbindelse til ODBC’en.

Udførelse

Følgende kode skrives i main:

DB_Database o;

o.Luk_Forbindelse();

 

 

Forventet resultat

At der opstår en fejl.

Resultat

RKonklusion

Der opstår en fejl, når Opret_forbindelse ikke er kaldt, og der ikke gør når funktionen bliver kaldt efter hver test af de øvrige funktioner.

Funktionen er hermed godkendt.

 

Af: Jesper Johansen

2.4                  Modultest Faelles_Klasse

Funktionsnavn

bool Faelles_klasse::blokerKort (int kortNummer, bool skrivLaes)

Betingelser

Følgende data findes tabel_kortdata:

 

Der  undersøges om:

  1. Funktionen kan returnere true hvis modtaget kortnummer (f.eks. 30),  findes i kolonnen’kortnummer’ og værdien af’Kort_spærret’ = true, eller returnere false hvis ’kort_spærret’ = false. I begge tilfælde er skrivLaes = true.
  2. Funktionen kan returnere false hvis modtaget kortnummer ikke findes i kolonnen ’kortnummer’ ligegyldigt om skrivLaes er true eller false.
  3. Funktionen kan sætte ’kort_spærret’ = true i den række hvor modtagne  kortnummer findes i kolonnen ’kortnummer’  hvis den modtager skrivLaes = false.

Udførelse

  1. Der skrives følgende kode i main:

bool svar;
DB_Com o;
svar = o.blokerKort(7894,true);
cout << svar << endl;

a.    Koden køres

Herefter ændres værdien false i kolonnen ’Kort_spærret’ til true (feltet afkrydses)

b.    Koden køres igen.

  1. Der skrives følgende kode i main: (i to omgange)

a.  bool svar;
    DB_Com o;
    svar = o.blokerKort(1111,true);
    cout << svar << endl;

 

b.  bool svar;
    DB_Com o;
    svar = o.blokerKort(1111,true);
       cout << svar << endl;

  1. Der skrives følgende kode i main:

bool svar;
DB_Com o;
svar = o.blokerKort(7894,false);
cout << svar << endl;

 

 

Forventet resultat

Det forventes at:

  1.  

a.       Funktionen returnerer false ( ”0”)

b.       Funktionen returnerer true (”1”)

Funktionen returnerer false i begge tilfælde.

Funktionen opdaterer værdien i ’Kort_spærret’ til true, og returnerer true.

Resultat

1.

a.

b.

2.

          I begge tilfælde: a. + b.

3.

RKonklusion

  1. Det ses, at funktionen returnerer: a. false og b. true
  2. Det ses, at funktionen returnerer false i begge tilfælde.
  3. Det ses, at funktionen ændrer værdien kort_spærret til true, og returnerer true.

Funktionen er hermed godkendt.

 

Funktionsnavn

bool Faelles_klasse::setAntalForsoeg (int kortNummer, int antal)

Betingelser

Følgende data findes i tabel_kortdata:

 

Der undersøges om:

Funktionen opdaterer kolonnen ’Antal_forsøg’ i den række hvor ’kortnummer’ = modtagne paremeter: kortNummer

  1. Hvis kortNummer findes i tabellen returneres true, og der opdateres.
  2. Hvis kortNummer ikke findes i tabellen returneres false, og der opdateres ikke.

 

NB: Der testes ikke om det kortNummer funktionen modtager er for stort eller for lille, da et ikke matchende kortnummer medfører at der intet bliver ændret. Ligeledes testes der ikke om det modtagne antal er for stort, dette varetages af den kaldende funktion.

Udførelse

Der skrives følgende kode i main: ( i to omgange)

1.     bool svar;
DB_Com o;
svar = o.setAntalForsoeg(7777,3);
cout << svar << endl;

 

2.     bool svar;
DB_Com o;
svar = o.setAntalForsoeg(7894,3);
cout << svar << endl;

 

Forventet resultat

  1. Feltet ’Antal_forsøg’ bliver opdtateret med den angivne værdi antal.
  2. Der bliver opdateret intet, og returneret false. 

Resultat

1.

      

2.

      

RKonklusion

  1. Det ses, at funktionen har opdateret med den rigtige værdi, og returneret true.
  2. Det ses, at funktionen ikke har opdateret, og har returneret false.

Funktionen er hermed godkendt.

 


 

Funktionsnavn

int Faelles_klasse::getAntalForsoeg (int kortNummer)

Betingelser

Følgende data findes i tabel_kortdata:

Der undersøges om:

  1. Funktionen returnerer værdien i kolonnen ’Antal_forsøg’ i den række hvor ’kortnummer’ = det modtagne kortNummer.
  2. Funktionen returnerer ’0’ hvis det modtagne kortNummer ikke findes i kolonnen ’kortnummer’.

NB: Der testes ikke om det kortNummer funktionen modtager er for stort eller for lille, da et ikke matchende kortnummer medfører at der intet bliver ændret.

Udførelse

Der skrives følgende kode i main: (i to omgange)

1.     int svar;
DB_Com o;
svar = o.getAntalForsoeg(7894);
cout << svar << endl;

 

2.       int svar;
DB_Com o;
svar = o.getAntalForsoeg(4321);
cout << svar << endl;

Forventet resultat

Det forventes at:

  1. Funktionen returnerer 3.
  2. Funktionen returnerer 0.

Resultat

1.

2.

RKonklusion

  1. Det ses, at funktionen har returneret det ønskede.
  2. Det ses, at funktionen har returneret det ønskede.

Funktionen er hermed godkendt.

 

 

Funktionsnavn

int Faelles_klasse::getPinkode (int kortNummer)

Betingelser

Følgende data findes i tabel_kortdata:

Der undersøges om:

  1. Funktionen returnerer værdien i kolonnen pinkode’ i den række hvor ’kortnummer’ = det modtagne kortNummer.
  2. Funktionen returnerer ’0’ hvis det modtagne kortNummer ikke findes i kolonnen ’kortnummer’.

NB: Der testes ikke om det kortNummer funktionen modtager er for stort eller for lille, da et ikke matchende kortnummer medfører at der intet bliver ændret.

Udførelse

Følgende kode skrives i main: (i to omgange)

1.     int svar;
DB_Database o;
svar = o.getPinkode(7894);
cout << svar << endl;

 

 

 

2.       int svar;
DB_Database o;
svar = o.getPinkode(7777);
cout << svar << endl;

Forventet resultat

Det forventes at:

  1. Funktionen returnerer 5284.
  2. Funktionen returnerer 0.

Resultat

1.

2.

RKonklusion

  1. Det ses, at funktionen returnerer det forventede.
  2. Det ses, at funktionen returnerer det forventede.

Funktionen er hermed godkendt.

Af: Jesper Johansen

 

2.5                  Modultest af DB_Com

Funktionsnavn

DB_Com::DB_Com()

Betingelser

Der tilføjes kode i

1.              Funktionen DB_Database

2.              Funktionen opretForbindelse, , se test af denne

3.              main

Udførelse

Kode tilføjes:

 

1.            cout << "Constructor DB_Database kaldt\n";

2.            cout << "Opret forbindelse kaldt!!\n";

3.            DB_Database p;

 

Forventet resultat

Det forventes, at følgende skrives på skærmen:

’Constructor DB_Database kaldt!!’

’Opret forbindelse kaldt!!’

Resultat

RKonklusion

Det ses, at der er overensstemmelse mellem forventede resultat og det resultat, der kommer på skærmen. Funktionen er Godkendt.

 


 

Funktionsnavn

bool DB_Com::validerPinkode (int kortNummer, int pinkode)

Betingelser

Følgende data er i tabel_kortdata:

Der undersøges om:

1.              Funktionen returnerer true hvis modtagne pinkode =’pinkode’ i tabel_kortdata i den række hvor ’kortnummer’ = det modtagne kortNummer.

2.              Funktionen returnerer false hvis modtagne pinkode ikke matcher ’pinkode’ i tabel_kortdata.

3.              Funktionen returnerer false hvis det modtagen kortNummer ikke findes i tabel_kortdata.

NB: Der testes ikke om:

Det kortNummer og pinkode funktionen modtager er for stort eller for lille. Det er op til kaldefunktionen.

Det kortNummer funktionen modtager findes i tabel_kortdata. Det er op til kaldefunktionen (ved kald af findesKortNummer)

Udførelse

Der skrives følgende kode i main: (i tre omgange)

1.            bool svar;
DB_Com o;
svar = o.validerPinkode(7894,5284);
cout << svar << endl;

2.           
bool svar;
DB_Com o;
svar = o.validerPinkode(7894,1111);
cout << svar << endl;

 

3.             bool svar;
DB_Com o;
svar = o.validerPinkode(1234,4567);
cout << svar << endl;

Forventet resultat

Det forventes at:

1.              Funktionen returnerer true. (Skriver ’1’ på skærmen)

2.              Funktionen returnerer false (skriver ’0’ på skærmen)

3.              Funktionen returnerer false (skriver ’0’ på skærmen)

Resultat

1.

2.

3.

RKonklusion

1.              Det ses, at funktionen returnerer det ønskede.

2.              Det ses, at funktionen returnerer det ønskede.

3.              Det ses, at funktionen returnerer det ønskede.

Funktionen er Godkendt.

 

 

 

Funktionsnavn

bool DB_Com::setTerminalStatus (int fejlkode)

Betingelser

Følgende data findes i tabel_Terminaldata:

Der undersøges om funktionen opdaterer ’status’ i rækken hvor ’Terminalnummer’ = 1 med den modtagne værdi: fejlkode, og returnerer true.

Udførelse

Der skrives følgende kode i main:

bool svar;
DB_Com o;
svar = o.setTerminalStatus(11);
cout << svar << endl;

Forventet resultat

At feltet ’status’ i den række hvor ’terminalnummer’ = 1 opdateres med den modtagne værdi – fejlkode, og der returneres true.

Resultat

              

RKonklusion

Det ses, at funktionen har opdateret feltet ’status’ og returneret true, som forventet.

Funktionen er Godkendt.

Af: Jesper Johansen

2.6                  Modultest Af DB_Screen

Funktionsnavn

bool DB_Screen::modtagPinkode ()

Betingelser

Der undersøges:

  1. Om funktionen afviser tal på andet end 4 cifre.
  2. Om funktionen returnerer false hvis der tastes –1
  3. Om funktionen sætter variablen pinKode til den indtastede værdi på 4 cifre.

Udførelse

Følgende kode skrives i main:

bool svar;
DB_Screen o;
svar = o.modtagPinkode();
cout << svar << endl;
cout << o.pinKode << endl;

 

  1. Der indtastes en pinkode på 3 cifre 012– startende med 0. Der efter en pinkode på 5 cifre, startende med 0, 01234
  2. Der tastes –1.
  3. Der indtastes et fircifret tal 1234.

Forventet resultat

Følgende resultat forventes:

  1. At funktionen udskriver: Pinkode skal være på 4 cifre. Indtast ny pinkode - begge tilfælde.
  2. At funktionen returnerer false, og at pinKode ikke bliver sat.
  3. At funktionen sætter pinKode til det indtastede, og returnerer true.

Resultat

1.

2.

3.

RKonklusion

  1. Det ses, at funktionen skriver det forventede på skærmen.
  2. Det ses, at funktionen returnerer false, og ikke sætter pinKode.
  3. Det ses, at funktionen returnerer true, og sætter pinKode.

Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::modtagKortNummer()

Betingelser

Der undersøges om:

  1. Funktionen afviser tal på andet end 4 cifre.
  2. Funktionen returnerer false hvis der tastes –1.
  3. Funktionen fortæller hvis det indtastede tal allerede findes i tabel_kortdata.
  4. Funktionen sætter variablen kortNr til det indtastede hvis det indtastede tal er på 4 cifre, og ikke findes i tabel_Kortdata.

Udførelse

Følgende kode skrives i main:

bool svar;
DB_Screen o;
svar = o.modtagKortNummer();
cout << svar << endl;
cout << o.kortNr << endl;

 

  1. Der indtastes en pinkode på 3 cifre 012– startende med 0. Der efter en pinkode på 5 cifre, startende med 0, 01234
  2. Der tastes –1.

3.        Der indtastes tallet: 5682, som findes i tabel_kortdata.

4.        Der indtastes et fircifret tal 1234.

 

Forventet resultat

Følgende resultat forventes:

1.         At funktionen udskriver: Kortnummer skal være på 4 cifre.- begge tilfælde.

2.         At funktionen returnerer false, og at KortNr ikke bliver sat.

3.         At funktionen udskriver: Kortnummer findes allerede. Indtast kortnummer:

4.         At funktionen sætter kortNrtil det indtastede, og returnerer true.

Resultat

1.

2.

3.

4.

RKonklusion

Det ses i alle 4 tilfælde, at funktionen opfører sig som ønsket.

 Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::modtagBrugerNavn()

Betingelser

Der undersøges om:

  1. Funktionen returnerer false hvis der skrives –1
  2. Funktionen sætter variablen Navn til det indtastede, hvis der ikke tastes –1.

Udførelse

Følgende kode skrives i main:

bool svar;
DB_Screen o;
svar = o.modtagBrugerNavn();
cout << svar << endl;
cout << o.Navn << endl;

 

  1. Der indtastes –1
  2. Der tastes et navn: Klaus diter.

Forventet resultat

Der returneres false, og Navn sættes ikke.

  1. Der returneres true, og navn sættes til det indtastede.

Resultat

1.

2.

           

RKonklusion

Det ses i begge tilfælde, at funktionen opfører sig som ønsket.

 Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::retAntalForsoeg()

Betingelser

Der undersøges om:

  1. Funktionen returnerer false hvis der indtastes –1.
  2. Funktionen kalder getAntalForsoeg og setAntalForsoeg hvis der IKKE tastes *.

Udførelse

Der skrives følgende kode i main:

bool svar;
DB_Screen o;
svar = o.retAntalForsoeg();
cout << svar << endl;

 

Der tilføjes følgende kode I getAntalForsoeg:

cout << "getAntalForsøg kaldt..";

og følgende kode i setAntalForsoeg:

cout << "setAntalForsøg kaldt..";

 

Der tastes –1.

Der tastes * og derefter 3.

 

 

Forventet resultat

Der forventes at:

  1. Funktionen kalder getAntalForsoeg og der udskrives getAntalForsøg kaldt og Funktionen returnerer false, og kalder ikke yderligere..
  2. Hvis der tastes 3:
    Funktionen kalder getAntalForsoeg og der udskrives getAntalForsøg kaldt og at funktionen kalder setAntalForsoeg og der udskrives setAntalForsøg klaldt. Der returneres true
    Hvis der tastes *:
    Funktionen kalder getAntalForsoeg og der udskrives getAntalForsøg kaldt Der returneres true

 

Resultat

1.

           

2.

           

           

RKonklusion

Det ses, at funktionen returnerer og kalder det forventede.

Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::retKortSpaerret()

Betingelser

Der testes om:

  1. Funktionen kalder blokerKort.

Hvis blokerKort returnerer true:

  1. Hændelser når der tastes J eller j
  2. Hændelser når der tastes –1
  3. Hvis blokerKort returnerer false:
  4. Hændelser når der tastes J eller j
  5. Hændelser når der tastes -1

Udførelse

Der skrives følgende kode i main:

bool svar;
DB_Screen o;
svar = o.retKortSpaerret();
cout << svar << endl;

 

Der tilføjes følgende kode I blokerKort: (pkt 2, 3,)

 

Cout << ” blokerKort kaldt..\n”;
/*
. (Al den oprindelige kode)
*/

return true;

 

Der tilføjes følgende kode i blokerKort (pkt 4, 5)

 

Cout << ” blokerKort kaldt..\n”;
/*
. (Al den oprindelige kode)
*/
return false;

Der tilføjes følgende kode i setKortSpaerret:

Cout << ” setKortSpaerret kaldt..”;

 

2. + 4. Der tastes først J så j

3. + 5. Der tastes -1

Forventet resultat

Det forventes at:

  1. Der udskrives: blokerKort kaldt.. (blokerKort kaldes)
  2. Der udskrives: setKortSpærret kaldt og der returneres true (setKortSpærret kaldes)
  3. Der returneres false
  4. Der udskrives: blokerKort kaldt. og der returneres true (blokerKort kaldes)
  5. Der returneres false

Resultat

1.

 

 

 

2.

                        

3.

           

 

 

 

 

4.

 

 

 

 

5.

           

           

           

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

 


 

Funktionsnavn

bool DB_Screen::retPinkode()

Betingelser

Der testes:

  1. Om getPinkode kaldes.
  2. Hændelser når der tastes *
  3. Hændelser når der tastes –1
  4. Hændelser når der tastes pinkode på 3 cifre.
  5. Hændelser når der tastes pinkode på 5 cifre.
  6. Hændelser når der tastes pinkode på 4 cifre.

Udførelse

Der skrives følgende kode i main:

bool svar;

DB_Screen o;

svar = o.retPinkode();

cout << svar << endl;

 

Der skrives følgende kode i getPinkode

cout << "getPinkode kaldt";

 

Der skrives følgende kode i setPinkode:

cout << "setPinkode kaldt";

 

  1. Progarmmet køres.
  2. Der tastes *
  3. Der tastes –1
  4. Der tastes 123
  5. Der tastes 12345
  6. Der tastes 1234

Forventet resultat

 

  1. Der skrives : ”getPinkode kaldt” (getPinkode kaldes)
  2. Der bliver returneret true.
  3. Der bliver returneret false.
  4. Der bliver bedt om en ny indtastning.
  5. Der bliver bedt om en ny indtastning.
  6. Der skrives : ”setPinkode kaldt” (setPinkode kaldes)

 

Resultat

1.

           

2.

           

3.

           

4.

           

5.

           

6.

           

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::retBrugerNavn()

Betingelser

Der testes:

  1. Om Funktionen kalder getNavn
  2. Hændelser når der tastes *
  3. Hændelser når der tastes –1
  4. Hændelser når der tastes et navn.

Udførelse

Følgende kode skrives i main:

bool svar;

DB_Screen o;

svar = o.retBrugerNavn();

cout << svar << endl;

cout << Navn;

 

Følgende kode skrives i getNavn:

Cout << ”getNavn kaldt”;

 

  1. Funktionen køres.
  2. Der tastes *
  3. Der tastes –1
  4. Der tastes Jens Jensen.

 

Forventet resultat

1.         Der skrives: ”getNavn” kaldt

2.         Der returneres true. Variablen Navn sættes ikke

3.         Der returneres false. Variablen Navn sættes ikke

4.         Variablen Navn sættes til det indtastede og der returneres true.

Resultat

1.

           

2.

           

3.

           

4.

           

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 


 


Funktionsnavn

bool DB_Screen::ErDerStatus ()

Betingelser

Det testes:

Om funktionen kalder: getTerminalStatus

Der udskrives fejl hvis getTerminalStatus returnerer et tal forskelligt fra 0.

Udførelse

Der skrives følgende kode i main:

bool svar;

DB_Screen o;

svar = o.ErDerStatus();

cout << svar << endl;

 

Der tilføjes følgende kode i getTerminalStatus

Cout << ” getTerminalStatus kaldt”;

/*

.

*/

return 7.

 

Forventet resultat

Der skrives: Der er fejl paa terminal 1. Fejlkode: 7. Der returneres false

Resultat

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::retKortNummer()

Betingelser

Det testes:

  1. Hændelser når der tastes -1
  2. Hændelser når det tastes kortnummer på 3 cifre
  3. Hændelser når det tastes kortnummer på 5 cifre
  4. Hændelser når det tastes kortnummer på 4 cifre
  5. Hændelser når der tastes *

 

Udførelse

Der skrives følgende kode i main:

      int svar;

       DB_Screen o;

       svar = o.retKortNummer();

       cout << svar << endl;

       cout << o.kortNrRet << endl;

 

  1. Der Tastes -1
  2. Der Tastes 123
  3. Der Tastes 12345
  4. Der tastes 1234
  5. Der tastes *

Forventet resultat

  1. Der returneres false, og kortNrRet opdatres ikke.
  2. Der skrives: ”Kortnummer Skal være på 4 cifre”
  3. Der skrives: ”Kortnummer Skal være på 4 cifre”
  4. Der returneres true og udskrives det indtastede
  5. Der returneres true. og kortNrRet opdatres ikke

 

Resultat

1.

           

2.

           

3.

           

4.

           

5.

           

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::spaerKort()

Betingelser

Det testes:

  1. Hændelser når der tastes -1

Der tastes brugernavn, brugernummer og derfeter

  1. -1
  2. Kortnummer som ikke findes i tabel_Kortdata: 9999
  3. Kortnummer som findes i tabel_Kortdata: 1234

 

Udførelse

Der skrives følgende kode i main:

      int svar;

       DB_Screen o;

       svar = o.spaerKort();     

       cout << svar << endl;

Forventet resultat

  1. Der returneres false
  2. Der returneres false
  3. Der skrives ”Koetnummer findes ikke ..”
  4. Der skrives: Kort 1234 er spærret. Og der returneres true.

Resultat

1.

           

2.

           

3.

           

4.

           

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::fjernBruger()

Betingelser

Der testes:

  1. Hændelse når der tastes -1
  2. Om sletBruger kaldes.

Udførelse

Der skrives følgende kode i main:

      bool svar;

       DB_Screen o;

       svar = o.fjernBruger();

       cout << svar << endl;

 

Der tilføjes følgende kode i sletBruger

      cout <<"SletBruger kaldt\n<n";

       /*

       .

       */

 

  1. Der tastes -1
  2. Der tastes et gyldigt brugernavn og derefter et brugernummer.

Forventet resultat

Der returneres false.

sletBruger kaldes, og der returneres true.

Resultat

1.

           

2.

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::redigerBruger()

Betingelser

Det testes:

  1. Hændelse når der tastes -1
  2. Om retBrugerNavn , retKortNummer, retPinkode, retKortSpaerret, retAntalForsoeg kaldes.

Udførelse

Følgende kode skrives i main:

      bool svar;

       DB_Screen o;

       svar = o.redigerBruger();

       cout << svar << endl;

Forventet resultat

  1. Der returneres false.
  2. At alle funktionerne kaldes, og der udskrives kvittering på skærmen.

Resultat

1.

2.

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

 

Funktionsnavn

bool DB_Screen::nyBruger()

Betingelser

Det testes:

  1. Hændelse når der tastes -1
  2. Om modtagBrugerNavn, modtagKortNummer, modtagPinkode og opretNyBruger kaldes.

 

Udførelse

Der skrives følgende kode i main:

 

       bool svar;

       DB_Screen o;

       svar = o.nyBruger();

       cout << svar << endl;

Forventet resultat

  1. Der returneres false
  2. At alle funktionerne kaldes, og der udskrives kvittering på skærmen.

Resultat

1.

           

2.

           

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

 

Funktionsnavn

void DB_Screen::hovedMenu()

Betingelser

Der testes:

  1. Om ErDerStatus kaldes.
  2. Om nyBruger og ErDerStatus kaldes når der tastes o eller O
  3. Om redigerBruger og ErDerStatus kaldes når der tastes r eller R
  4. Om fjernBruger og ErDerStatus kaldes når der tastes f eller F
  5. Om spaerKort og ErDerStatus kaldes når der tastes s eller S
  6. Hændelse når der tastes andet end det ovenfor nævnte.

Udførelse

Der skrives følgedne kode i main:

 

      DB_Screen o;

       o.hovedMenu();

 

  1. Programmet køres
  2. Der tastes o og O
  3. Der tastes r og R
  4. Der tastes f og F
  5. Der tastes s og S
  6. Der tastes andet : K

Forventet resultat

  1. Der skrives erDerStatus og ErDerStatus kladt.
  2. Der skrives nyBruger og ErDerStatus kladt.
  3. Der skrives redigerBruger og ErDerStatus kladt.
  4. Der skrives fjernBruger og ErDerStatus kladt.
  5. Der skrives spaerKort og ErDerStatus kladt.
  6. Der ændres intet og ErDerStatus bliver kaldt.

Resultat

1.

 

2.

        I begge tilfælde

3.

            I begge tilfælde.

4.

                        I begge tilfælde

5.

           I begge tilfælde

6.

Skærmen viser stadig hovedmenu.

RKonklusion

Det at funktionen opfylder det forventede resultat.

Funktionen er Godkendt.

 

Der er i klassen DB_Screen ikke testet, om funktionerne, som modtager tal, kan håndtere at modtage karakterer fra skærmen. Denne sikkerhed er ikke implementeret i funktionerne til afleveringstidspunktet, men kan implementeres til demonstrationen.

NB: Der er ingen krav i kravspecifikation om at applikationen skal kunne håndtere fejlagtige indtastninger.

Af: Jesper Johansen