KTN1 Gruppe 502 Håkon Sandsmark, Torbjørn Kvåle, Kristoffer Eckhoff, Daniel Børseth og Steffen Amundsen 12.3.2009
2 KTN1 Gruppe 502 Innhold Innhold...2 Sekvensdiagram over kommunikasjon mellom A1 og A2...3 Tilstandsdiagram for A1...4 Design og realisering av A1 en tilkoblingsorientert forbindelse...6 Feilhåndtering...7 Testing av A1...8 Test 1 A2 uten feil...8 Test 2 A2 med feilsannsynligheter på 10 % og 50 %...10 Test 3 A2 med flere feil samtidig...12 Test 4 A2 med alle feil samtidig...14
3 KTN1 Gruppe 502 Sekvensdiagram over kommunikasjon mellom A1 og A2
4 KTN1 Gruppe 502 Tilstandsdiagram for A1 [mislykket] Koble til Kobler fra Kobler opp Koble fra Sender [vellykket] Mottar Send Inaktiv Lytt Motta Avbryt lytting Lytter Kobler opp Koble til Send forespørsel [vellykket tilkobling] Lytter etter Svar Inaktiv [answertime>timeout] Meld fra om feil [try_count>max_try_count]
5 KTN1 Gruppe 502 Motta Mottar [Vellykket] Inaktiv Mottar Meld fra om feil [try_count>max_try_count] [mislykket] Sender Send [Vellykket] Inaktiv Sender Meld fra om feil [try_count>max_try_count] [mislykket] Se sekvensdiagrammet for en beskrivelse av kvitteringssystemet.
6 KTN1 Gruppe 502 Design og realisering av A1 en tilkoblingsorientert forbindelse Overordnet struktur A1 er en tilkoblingsorientert forbindelse realisert som en Java klasse som implementerer grensesnittet Connection med disse metodene: void connect(inetaddress remoteaddress, int remoteport) void accept() void send(string msg) String receive() void close() Vi skal realisere disse metodene ved hjelp av A2, som er en ferdiglaget tilkoblingsløs forbindelse med disse metodene: send(ktndatagram inpacket) receive(int port) cancelreceive() Problemer 1. A2 er tilkoblingsløs, mens A1 skal være tilkoblingsorientert. 2. A2 er ikke feilfri, mens A1 skal være feilfri. 3. A2 kan kun sende KtnDatagram, mens A1 skal kunne sende String. Løsninger 1. Vi må implementere en handshake mekanisme for å opprette en forbindelse. 2. To typer feil kan oppstå: endring av datagraminnhold (a) og tap av datagram (b). a. Vi løser førstnevnte problem ved å sende med en kontrollverdi (checksum) som beregnes ut fra innholdet i datagrammet etter en spesifisert algoritme (for eksempel SHA 1). Mottaker sjekker om mottatt kontrollverdi stemmer overens med mottatt innhold ved å benytte samme algoritme. Mottaker ber om retransmisjon dersom kontrollen mislyktes. b. For å oppdage tap, sender vi bekreftelser på mottatt innhold. Sender har en nedtellsingsklokke per datagram som sendes, og klokken går av dersom han ikke mottar en bekreftelse på sendt datagram innen en bestemt tidsfrist. Datagrammet sendes da på nytt. Slik vil sender hele tiden vite om datagrammene er mottatt. 3. En String må omformes til ett eller flere KtnDatagram på en avtalt måte. Disse må nummereres og settes sammen i samme rekkefølge hos mottaker.
7 KTN1 Gruppe 502 Feilhåndtering Problemstilling: Alle feil som oppstår i det underliggende A2 skal tas hånd i A1, og skal være transparente (usynlige) for applikasjonen. Kun om feilene er så alvorlige at forbindelsen er/kan regnes som brutt skal applikasjonen oppdage disse. Hvilke tiltak kan gjøres for å unngå feilene i tabell 1. Tabell 1: (A2 Ud, 3.1 Errors, [Table 1]) Name Cause Consequence Package lost The package did not manage to come through to the destination The packet does not arrive at the destination and the information is lost. Package delayed Package has errors Ghost package The package got delayed somewhere but appears eventually after some delay. The package has been contaminated somewhere along the way and is not valid any more. The checksum is wrong. A package from nowhere or anywhere appears to belong The package may occur twice as the package may be retransmitted because it was thought to be lost. The package can contain the wrong information when arriving at the destination. If the header is altered, then it can end up at the wrong computer. A packet that should not be received is received. Can Diskusjon og løsning: For å løse problemene i tabell 1 skal det lages et connection oriented interface. Ved diskusjon har vi kommet fram til følgende løsning som er basert på en implementasjon av tcp protokollen. Package lost: - Implementering av handshaking før sending av pakker i transportlaget - ACK og sequence nummer i datagram som sendes mellom klient/tjener. Nødvending for å sjekke at en pakke har kommet fram. - TCP timeout: Tid før pakker retransmiteres. - Retransmisjon av pakker som mistes. Oppbygging av pakker som er out of order, som følge av tap av pakker, skjer i tjenerens applikasjon Package delayed: - Nesten samme problemløsning som ved misting av pakker. - Hvis pakker som sendes ikke kommer fram før timeout anses de som mistet. Og må retransmiteres fra host. - Pakker som kommer fram til klient, og som klient allerede har mottatt forkastes Package has errors: - SHA 1 checksum for sjekking av pakker - Retransmisjon om pakkers checksum ikke er korrekt Ghost package: - Bruker også her checksum, sammen med sequence number for å kontrollere om pakken er ønskelig.
8 KTN1 Gruppe 502 Testing av A1 Test 1 A2 uten feil Innledning Vi skal sjekke om en instans av A1 klarer å koble seg opp, sende en tekststreng og koble seg fra en annen instans av A1 via en feilfri A2. Hva vi skal teste Vi skal teste at: oppkoblingen fungerer tekststrengen kommer fram det er samme tekststreng som kommer fram frakoblingen fungerer Hvordan skal vi teste Vi lager en klasse som simulerer en applikasjon. Så lager vi to instanser av denne applikasjonen på samme datamaskin og prøver å koble dem sammen med host localhost. Deretter sender vi en tekststreng som er så kort at den slipper å bli delt opp i flere KtnDatagram. Så prøver vi å sende vi en tekststreng som er så lang at den må deles opp i flere KtnDatagram. Til slutt tester vi om frakoblingen fungerer. Godkjenningskriterier Testen blir godkjent hvis alle følgende krav er oppfylt: oppkoblingen fungerer og er aktiv i begge applikasjoner samme tekststreng kommer fram den ene applikasjonen oppfatter at den andre ønsker å koble fra, og frakoblingen blir gjennomført Avbruddskriterier Testen blir avbrutt hvis: vi får feilmelding i løpet av testen ikke tilkoblingen fungerer i begge ender ikke samme tekststreng kommer fram ikke frakoblingen fungerer Hvis vi får et avbrudd, analyserer vi resultatet før vi går gjennom koden og fikser problemet. Deretter begynner vi å teste på nytt igjen.
9 KTN1 Gruppe 502 Omgivelser Stiller krav om at: A2 er riktig programmert At kommunikasjon via localhost fungerer Risikoanalyse Ting som kan gå galt er: Alle punktene under Hva vi skal teste kan gå galt. o Tiltak: Feilene må analyseres og fikses. Vi kan ha skrevet testen/applikasjonen feil o Tiltak: Dersom dette mistenkes (for eksempel fordi vi ikke finner noen feil i A1), må vi gå gjennom testkoden og fikse den Avhengigheter Både testing av sending og testing av frakobling avhenger av at oppkoblingen fungerer. Testing av at det er samme tekststreng som kommer fram, avhenger av at tekststrengen kommer fram (!).
10 KTN1 Gruppe 502 Test 2 A2 med feilsannsynligheter på 10 % og 50 % Innledning Vi skal kontrollere hver feilkategori isolert med sannsynlighet på 10 % og 50 %. Vi planlegger følgende tester: Feil \ feilsannsynlighet 10 % 50 % Pakketap Pakkeforsinkelse Pakkefeil Spøkelsespakke Hva vi skal teste Vi skal teste at: tapte pakker retransmitteres at duplikate pakker blir ignorert at kontrollalgoritmen oppdager pakkefeil og ber om retransmisjon at uønskede pakker ignoreres Hvordan skal vi teste Vi utfører denne testen når test 1 er godkjent, og dermed kan vi også utføre denne testen ute hos applikasjonen. Vi stiller inn feilsannsynlighetene i settings.xml og kjører koden for hvert tilfelle i tabellen ovenfor. Vi sender en tekststreng som må deles opp i flere KtnDatagram og sjekker om samme tekststreng dukker opp i andre enden. Godkjenningskriterier Testen blir godkjent hvis alle følgende krav er oppfylt: samme tekststreng dukker opp i andre enden ved alle kombinasjoner av feil og feilsannsynligheter Avbruddskriterier Testen blir avbrutt hvis: vi får feilmelding i løpet av testen ikke samme tekststreng kommer fram Hvis vi får et avbrudd, analyserer vi resultatet før vi går gjennom koden og fikser problemet. Deretter begynner vi å teste på nytt igjen.
11 KTN1 Gruppe 502 Omgivelser Stiller krav om at: A2 er riktig programmert at test 1 avdekket alle feil, som for eksempel i oppdeling og sammensetting av KtnDatagram Risikoanalyse Ting som kan gå galt: at ikke sender oppdager pakketap og retransmitterer pakken o Tiltak: Vi må se på stoppeklokken som tar tiden på godkjenning at vi bruker duplikate pakker o Tiltak: Sjekke mekanismen som organiserer pakker på mottakersiden at pakkefeil ikke oppdages o Tiltak: Gjennomgå kontrollalgoritmen at vi lar oss lure av spøkelsespakker o Tiltak: Sjekke mekanismen som organiserer pakker på mottakersiden Avhengigheter Alt avhenger av at mekanismene som ble testet i test 1 fungerer som de skal.
12 KTN1 Gruppe 502 Test 3 A2 med flere feil samtidig Innledning Vi skal kontrollere A1 når flere feilkategorier er representert samtidig. Feil Feilsannsynlighet 1. Pakketap og pakkeforsinkelse 10 % på begge 2. Pakketap og pakkeforsinkelse 50 % på begge 3. Pakkeforsinkelse og spøkelsespakke 10 % på begge 4. Pakkeforsinkelse og spøkelsespakke 50 % på begge 5. Pakkefeil og spøkelsespakke 10 % på begge 6. Pakkefeil og spøkelsespakke 50 % på begge Vi setter sammen de feilene som vi antar påvirker hverandre: 1 og 2: Pakketap kan forveksles med pakkeforsinkelse. 3 og 4: Spøkelsespakker kan bli tatt for god fisk dersom den pakken vi virkelig ønsker er forsinket. 5 og 6: Pakker med feil og spøkelsespakker er begge uønsket, men vi ønsker kun retransmisjon av pakker med feil, og ikke av spøkelsespakkene. Vi øker feilsannsynligheten til 50 % dersom første test med 10 % sannsynlighet var vellykket. Hva vi skal teste Vi skal teste at: A1 setter en fornuftig tidsfrist på pakkebekreftelse slik at vi klarer å skille mellom tap og forsinkelse (for å gjøre A1 så effektiv som mulig) at spøkelsespakker ikke blir godtatt (for å gjøre A1 feilfri) at vi ber om retransmisjon av alle feilpakker (eventuelt lar være å sende bekreftelse, helst førstnevnte for størst effektivitet) at vi ber om retransmisjon av så få spøkelsespakker som mulig (antar at sender skjønner at denne er uineteressant, eller kanskje at den sender en duplikat pakke). Det vil nok fungere uansett, men best å unngå for høy effektivitet. Hvordan skal vi teste I denne testen holder det ikke å sjekke at riktig tekststreng kommer fram, vi må også sjekke for unødvendige retransmisjoner m.m. Derfor må vi bruke loggefunksjonaliteten i admin systemet for å sjekke hvilke pakker som blir sendt.
13 KTN1 Gruppe 502 Godkjenningskriterier Testen blir godkjent hvis alle følgende krav er oppfylt: samme tekststreng dukker opp i andre enden det skjer innen rimelig tid og uten for mange unødvendige pakkesendinger Avbruddskriterier Testen blir avbrutt hvis: vi får feilmelding i løpet av testen ikke samme tekststreng kommer fram ting tar usannsynlig lang tid Hvis vi får et avbrudd, analyserer vi feilmeldingen/loggen før vi går gjennom koden og fikser problemet. Deretter begynner vi å teste på nytt igjen. Omgivelser Stiller krav om at: A2 er riktig programmert at test 1 avdekket alle feil, som for eksempel i oppdeling og sammensetting av KtnDatagram Risikoanalyse Ting som kan gå galt: det samme som i test 2 Avhengigheter Alt avhenger av at mekanismene som ble testet i test 1 fungerer som de skal.
14 KTN1 Gruppe 502 Test 4 A2 med alle feil samtidig Innledning Vi skal kontrollere A1 når alle feilkategorier er representert samtidig. Her er målet å få gjennomført en så realistisk test som mulig, så vi vil prøve å benytte høye, men realistisk fordelte feilsannsynligheter. Feil Feilsannsynlighet Pakketap 35,00% Pakkeforsinkelse 35,00% Pakkefeil 10,00% Spøkelsespakke 5,00% Hva vi skal teste Vi skal teste at: at samme tekststreng kommer fram i andre enden av A1 innen rimelig tid Hvordan skal vi teste Vi sender en tekststreng og sjekker om den kommer fram i andre enden. Vi tar også tiden på hvor lang tid det tar og går gjennom admin loggen. Godkjenningskriterier Testen blir godkjent hvis alle følgende krav er oppfylt: samme tekststreng dukker opp i andre enden det skjer innen rimelig tid og uten for mange unødvendige pakkesendinger Avbruddskriterier Testen blir avbrutt hvis: ikke samme tekststreng kommer fram ting tar usannsynlig lang tid Hvis vi får et avbrudd, analyserer vi feilmeldingen/loggen før vi går gjennom koden og fikser problemet. Deretter begynner vi å teste på nytt igjen.
15 KTN1 Gruppe 502 Omgivelser Stiller krav om at: A2 er riktig programmert at test 1 avdekket alle feil, som for eksempel i oppdeling og sammensetting av KtnDatagram Risikoanalyse I denne testen tester vi ting som allerede har blitt testet hver for seg, så eventuelle feil som oppdages her kan være vanskelig å identifisere. Avhengigheter Alt avhenger av at mekanismene som ble testet i test 1 fungerer som de skal.