Complexe Interacties Universiteit Antwerpen Aanpasbaarheid.

Slides:



Advertisements
Verwante presentaties
De gemiddelde leerling
Advertisements

Gerund = WW. gebruikt als zelfstandig Nw.
Leer de namen van de noten 1
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Project Software Engineering Universiteit AntwerpenPlanning 4.1 Hoe snel loopt iemand de 100 meter ?
HM-ES-th1 Les 9 Hardware/Software Codesign with SystemC.
Personalisatie van de Archis website Naam: Sing Hsu Student nr: Datum: 24 Juni 2004.
Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.1 Complexe Interacties.
Electronic Resource Management (ERM) Els Schaerlaekens Anet Gebruikersdag 15 juni 2011.
Ronde (Sport & Spel) Quiz Night !
Case5: No-Audio Game: from design document to first prototype Tom Ramakers Cmd gad 30/05/2012.
Inleiding Software Engineering Universiteit AntwerpenBetrouwbaarheid 2.1 Ontdek de 7 verschillen.
Programmeren in Java met BlueJ
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
prNBN D addendum 1 Deel 2: PLT
Project Software Engineering Universiteit AntwerpenBetrouwbaarheid 2.1 Ontdek de 7 verschillen.
Datastructuren Analyse van Algoritmen en O
Leer de namen van de noten 2
© GfK 2012 | Title of presentation | DD. Month
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
2 3 Natuurkunde ≥ 6 Wiskunde ≥
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
1 SOCS Hoofdstuk 1 Computerarchitectuur. 2 Overzicht Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s C.
Informatica Universiteit AntwerpenScripting 5.1 Informatica 1rste BAC Biologie Hoofdstuk 5 Scripting.
Inleiding Software Engineering Universiteit AntwerpenPlanning 4.1 Hoe snel loopt iemand de 100 meter ?
Passie - Verrijzenis Arcabas
en ‘If-zinnen’ (klik hier als je meteen naar If-zinnen wilt.)
1 FLOWer Referenties Functionaliteit: Componenten Role model Data handling model Demonstratie Studio en Beheeromgeving Architectuur en integratie UWV architectuur.
1/1/ / faculty of Computer Science eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(2): Vertalen.
Neurale Netwerken Kunstmatige Intelligentie Rijksuniversiteit Groningen April 2005.
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
TUDelft Knowledge Based Systems Group Zuidplantsoen BZ Delft, The Netherlands Caspar Treijtel Multi-agent Stratego.
Algoritmen en Datastructuren (ALDAT) EVMINX4 Dagdeel 2.
Werken aan Intergenerationele Samenwerking en Expertise.
Breuken-Vereenvoudigen
De FFT spectrumanalyzer
Instructions and warnings. Instructions Om in het Engels een instructie te maken gebruikt men, net als in het Nederlands de Gebiedende Wijs.
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
1 Van Harvard naar MIPS. 2 3 Van Harvard naar MIPS Microprocessor without Interlocked Pipeline Stages Verschillen met de Harvard machine: - 32 Registers.
PLAYBOY Kalender 2006 Dit is wat mannen boeit!.
DB&SQL8- 1 VBA Visual Basics for Applications: eigen Office versie vanaf Office2000 gelijk voor alle applicaties Programmeren onder meer nodig voor Het.
1 Hoofdstuk 11: Strings en karakters Inleiding In dit hoofdstuk bespreken we de mogelijkheden van de klassen : String StringBuffer Character StringTokenizer.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  D3EEMS1  programmed I/O: de.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 3 - onderwerpen Het.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Het ARM bord met wat library functies.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag GUI  command line redirection.
Economische impact sluiting Ford Genk Ludo Peeters en Mark Vancauteren (Universiteit Hasselt)
1 Controleplan 2005 Raadgevend comité Hotel President – donderdag 21 april 2005.
ZijActief Koningslust 10 jaar Truusje Trap
Deltion College Engels C1 Gesprekken voeren [Edu/006] thema: ‘I was wondering what you think of…’ can-do : kan deelnemen aan de conversatie bij zeer formele.
OHT 9.1 De Pelsmacker,Geuens & Van den Bergh, Marketingcommunicatie, vierde editie © Pearson Education 2011 Reclameonderzoek In dit hoofdstuk zul je het.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
2 januari 2009Nieuwjaarsreceptie "Meule wal straete" 1 Nieuwjaarsreceptie 2 januari 2009 Eerste bijeenkomst van de bewoners van de “Meule wal straete”
Shortest path with negative arc-costs allowed. Dijkstra?
TOPIC O: Pointers | pag. 1 Pointer = adres in het geheugen, is zelf geen geheugen! Expliciet geheugen aanvragen vóór gebruik.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 3.
Fractale en Wavelet Beeldcompressie
Plan Coordination by Revision in Collective Agent Based Systems Adriaan ter Mors en Gijsbert Deelder Plan Coordination by Revision in Collective.
De financiële functie: Integrale bedrijfsanalyse©
Logistics: a driver for innovation Low costs High value Flexibility now and later Superior technology Timwood - T > No transport - I > No Inventory - M.
aangename ont - moeting
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
ZijActief Koningslust
1 XSLT processing & control Datamodellering 2006.
Transcript van de presentatie:

Complexe Interacties Universiteit Antwerpen Aanpasbaarheid

Een optimale werkverdeling play play play play Universiteit Antwerpen Aanpasbaarheid

Inleiding Software Engineering Universiteit Antwerpen 3. Aanpasbaarheid Aanpasbaarheid: TicTacToe versie 1.1b (displayGame) koppeling / cohesie versie 1.2 (Player) domeinmodel versie 1.3 (Player.moves) vermijd gebruikersinvoer versie 1.4 (Player. winner()) Basisfunctionaliteit versie 1.5 (TictacToeTest.compareFiles(...)) ASCII uitvoer Conclusie Universiteit Antwerpen Aanpasbaarheid Aanpasbaarheid

"Ontwikkel" vereisten Vereisten Betrouwbaarheid Aanpasbaarheid Planning Technieken Testen + Contracten Objectgericht ontwerp Tijdsschatting Universiteit Antwerpen Aanpasbaarheid

Inleiding Software Engineering Universiteit Antwerpen TicTacToeGame (1.1b) : TicTacToe Game aGame: TicTacToe *[aGame.notDone()] displayMove () play doMove() displayGame() ??? Wat moeten we hier doen ? Universiteit Antwerpen Aanpasbaarheid Aanpasbaarheid

Wat moeten we hier doen ? PROCEDURE Play*; VAR aGame: TicTacToe.TicTacToe; BEGIN initDisplay; NEW(aGame); aGame.init(); displayGame(aGame); WHILE aGame.notDone() DO aGame.doMove(); END; END Play; Wat moeten we hier doen ? Universiteit Antwerpen Aanpasbaarheid

Afhankelijk van 4 constantes & 1 operatie PROCEDURE displayGame(aGame: TicTacToe.TicTacToe); VAR i, j: INTEGER; BEGIN ... FOR i := ORD(TicTacToe.MinRow) TO ORD(TicTacToe.MaxRow) DO OutExt.Char(CHR(i));OutExt.Char("|"); FOR j := ORD(TicTacToe.MinCol) TO ORD(TicTacToe.MaxCol) DO OutExt.Char(aGame.getMark(CHR(j), CHR(i))); OutExt.Char("|"); END; OutExt.Ln; END displayGame; Afhankelijk van 4 constantes & 1 operatie Universiteit Antwerpen Aanpasbaarheid

Sterke Koppeling Aanpasbaarheid :( TicTacToe TicTacToeGame Evaluatie Criteria Inappropriate intimacy TicTacToe MinRow : Integer MaxRow : Integer MinCol : Integer MaxCol: Integer getMark (col, row: CHAR): CHAR TicTacToeGame displayGame() TicTacToeGame is sterk gekoppeld aan TicTacToe Er zijn veel afhankelijkheden van TicTacToeGame naar TicTacToe Een verandering aan TicTacToe betekent meestal dat we ook TicTacToeGame moeten aanpassen Aanpasbaarheid :( Universiteit Antwerpen Aanpasbaarheid

Vuistregel Plaats het gedrag dicht bij de data Refactor: Routines die veel "get" operaties oproepen => verplaats naar de corresponderende klasse. Universiteit Antwerpen Aanpasbaarheid

Plaats gedrag bij Data TicTacToeGame TicTacToe TicTacToeGame displayGame() TicTacToe write() FOR i := ORD(TicTacToe.MinRow) TO ORD(TicTacToe.MaxRow) DO OutExt.Char(CHR(i));OutExt.Char("|"); FOR j := ORD(TicTacToe.MinCol) TO ORD(TicTacToe.MaxCol) DO OutExt.Char(aGame.getMark(… Universiteit Antwerpen Aanpasbaarheid

TicTacToeGame is zwak gekoppeld aan TicTacToe Zwakke Koppeling Evaluatie Criteria Data Encapsulatie TicTacToeGame TicTacToe TicTacToeGame displayGame() TicTacToe write() TicTacToeGame is zwak gekoppeld aan TicTacToe Er is maar één afhankelijkheid van TicTacToeGame naar TicTacToe Een verandering aan TicTacToe heeft zelden een effect op TicTacToeGame Aanpasbaarheid :) Universiteit Antwerpen Aanpasbaarheid

Eén afhankelijkheid van TicTacToeGame naar TicTacToe PROCEDURE displayGame(aGame: TicTacToe.TicTacToe); BEGIN aGame.write; END displayGame; PROCEDURE (aTicTacToe: TicTacToe) write* (); VAR i, j: INTEGER; OutExt.... FOR i := ORD(MinRow) TO ORD(MaxRow) DO OutExt.Char(CHR(i));OutExt.Char("|"); FOR j := ORD(MinCol) TO ORD(MaxCol) DO END; ... Eén afhankelijkheid van TicTacToeGame naar TicTacToe Maar nu is TicTacToe afhankelijk van OutExt => Geen uitvoer op Out, Oberon.Log Universiteit Antwerpen Aanpasbaarheid

Nooit user-interface code in de basisklassen Vuistregel Nooit user-interface code in de basisklassen Refactor: Extra parameter als in/uitvoerkanaal naar de buitenwereld Universiteit Antwerpen Aanpasbaarheid

Extra parameter als uitvoerkanaal PROCEDURE displayGame(aGame: TicTacToe.TicTacToe); BEGIN aGame.writeOn(globalWriter); OutExt.Writer(globalWriter); END displayGame; PROCEDURE (aTicTacToe: TicTacToe) writeOn* (VAR w: Texts.Writer); VAR i, j: INTEGER; Texts.WriteString(w, .... ... Extra parameter als uitvoerkanaal Universiteit Antwerpen Aanpasbaarheid

TicTacToe is redelijk cohesief init(); positionInRange (col, row: CHAR): BOOLEAN markerInRange (marker: CHAR): BOOLEAN getMark (col, row: CHAR): CHAR notDone (): BOOLEAN doMove () writeOn (w: Texts.Writer) <<precondition>> positionInRange(col, row) <<postcondition>> markerInRange(result) <<precondition>> notDone() TicTacToe is redelijk cohesief 1 operatie gebruiken impliceert ook het gebruik van alle andere alle operaties zijn nodig/nuttig veranderingen aan de interface zijn weinig waarschijnlijk setMark is nt. geëxporteerd Aanpasbaarheid :) Universiteit Antwerpen Aanpasbaarheid

Koppeling vs. Cohesie Koppeling Cohesie Ideaal = mate waarin een component afhankelijk is van andere componenten te MINIMALISEREN => veranderingen hebben minder impact Cohesie = mate waarin de onderdelen van een component afhankelijk zijn van elkaar te MAXIMALISEREN => veranderingen zijn minder waarschijnlijk Ideaal = een component die niks doet => perfectie is niet haalbaar Universiteit Antwerpen Aanpasbaarheid

TTT1.2 Waar voegen we dit bij ? Use Case 1: play Goal: 2 players play TicTacToe, 1 should win Precondition: An empty 3x3 board Success end: 1 player is the winner Steps 1. Two players start up a game (First is "O"; other is "X") 2. WHILE game not done 2.1 Current player makes move 2.2 Switch current player 3. Anounce winner play player Waar voegen we dit bij ? Universiteit Antwerpen Aanpasbaarheid

Maak een model van het probleemdomein Vuistregel Evaluatie Criteria Goeie ADT Maak een model van het probleemdomein = het DOMEINMODEL Tips: Zelfstandige naamwoord als indicator voor object / klasse. Werkwoord als indicator voor operatie Naamgeving in basisklassen = naamgeving in probleemdomein Universiteit Antwerpen Aanpasbaarheid

Zelfstandige Naamwoorden Use Case 1: play Goal: 2 players play TicTacToe, 1 should win Precondition: An empty 3x3 board Success end: 1 player is the winner Steps 1. Two players start up a game (First is "O"; other is "X") 2. WHILE game not done 2.1 Current player makes move 2.2 Switch current player 3. Anounce winner play player Legende Substantief Werkwoord Universiteit Antwerpen Aanpasbaarheid

TTT1.2: Player currentPlayer : Player t: TicTacToe TicTacToe notDone(): BOOLEAN doMove() doMove() makeMove () switchPlayer () 2 Player makeMove() mark(): CHAR Universiteit Antwerpen Aanpasbaarheid

Verplaats dit stuk code naar Player PROCEDURE (aTicTacToe: TicTacToe) doMove* (); VAR row, col, mark: CHAR; BEGIN ASSERT(aTicTacToe.notDone(), 100); IF ODD(aTicTacToe.nrOfMoves) THEN mark := "X" ELSE mark := "O"; END; col := CHR((aTicTacToe.nrOfMoves MOD 3) + ORD("a")); row:= CHR((aTicTacToe.nrOfMoves DIV 3) + ORD("1")); aTicTacToe.setMark(col, row, mark); aTicTacToe.nrOfMoves := aTicTacToe.nrOfMoves + 1; END doMove; Verplaats dit stuk code naar Player Universiteit Antwerpen Aanpasbaarheid

Verplaatste code ... TYPE Player* = POINTER TO PlayerData; PlayerData* = RECORD marker: CHAR; END; ... PROCEDURE (aPlayer: Player) initMarked* (m: CHAR); PROCEDURE (aPlayer: Player) makeMove* (aTicTacToe: TicTacToe); VAR row, col: CHAR; BEGIN ASSERT(aTicTacToe.notDone(), 100); col := CHR((aTicTacToe.nrOfMoves MOD 3) + ORD("a")); row:= CHR((aTicTacToe.nrOfMoves DIV 3) + ORD("1")); aTicTacToe.setMark(col, row, aPlayer.mark()); END makeMove; Verplaatste code ... Universiteit Antwerpen Aanpasbaarheid

... vervangen door operatie TYPE TicTacToeData* = RECORD ... players: ARRAY 2 OF Player; END; PROCEDURE (aTicTacToe: TicTacToe) init*; NEW(aTicTacToe.players[0]); NEW(aTicTacToe.players[1]); aTicTacToe.players[0].initMarked("O"); aTicTacToe.players[1].initMarked("X"); END init; PROCEDURE (aTicTacToe: TicTacToe) doMove* (); BEGIN ASSERT(aTicTacToe.notDone(), 100); aTicTacToe.players[aTicTacToe.nrOfMoves MOD 2].makeMove(aTicTacToe); aTicTacToe.nrOfMoves := aTicTacToe.nrOfMoves + 1; END doMove; ... vervangen door operatie Universiteit Antwerpen Aanpasbaarheid

Een test verwacht géén gebruikersinvoer Vuistregel Een test verwacht géén gebruikersinvoer Waarom ? Veel & frequent testen => onmogelijk om steeds invoer te geven Hoe dan wel ? Invoerdata wordtgecreëerd door testprogramma (testbestand ?) Ontwerp basisklassen onafhankelijk van het data invoer kanaal Universiteit Antwerpen Aanpasbaarheid

een reeks zetten => invoerdata door testprogramma TTT1.3: Reeks van zetten PROCEDURE TicTacToeTest.Main; ... BEGIN NEW(aTest); aTest.init(); aTest.setUp("testBasicGame", "a1 c1 b2 a3 c3", "b1 a2 c2 b3"); IF ~ aTest.testBasicGame (TRUE) THEN testsPassed := FALSE; END; aTest.tearDown(); END Main; PROCEDURE (aTicTacToe: TicTacToe) init* (mvO, mvX: ARRAY OF CHAR); PROCEDURE (aPlayer: Player) initMarkedMoves* (marked: CHAR; moves: ARRAY OF CHAR); a b c 1 O X O 2 X O X 3 O X O een reeks zetten => invoerdata door testprogramma Universiteit Antwerpen Aanpasbaarheid

Uitzonderingen tijdens 2.1 kan "Illegal Move" voorkomen Use Case 1: play … Steps 1. Two players start up a game (First is "O"; other is "X") 2. WHILE game not done 2.1 Current player makes move 2.2 Switch current player 3. Anounce winner Exceptions 2.1. [Illegal Move] System issues a warning => continue from step 2.1 play player tijdens 2.1 kan "Illegal Move" voorkomen Universiteit Antwerpen Aanpasbaarheid

Minstens één test per "uitzondering" Vuistregel Minstens één test per "uitzondering" Waarom ? Alle scenarios in de specificaties moeten getest worden Hoe ? Controleer resultaat uitzondering via "should" & "shouldNot" => denk eraan: " Een test produceert zo weinig mogelijk uitvoer" Universiteit Antwerpen Aanpasbaarheid

PROCEDURE (t: TicTacToeTest) testLegalMoves* (v: BOOLEAN): BOOLEAN; PROCEDURE aux (in: ARRAY OF CHAR; legal: BOOLEAN): BOOLEAN; VAR result: BOOLEAN; BEGIN result := TicTacToe.LegalMoves(in); IF ~ aTest.should(legal = result, …) THEN RETURN FALSE; END; END IF ~ aux("a1 c1 b2 a3 c3", TRUE) THEN RETURN FALSE END; IF ~ aux("b1 a2 c2 b3", TRUE) THEN RETURN FALSE END; IF ~ aux("", TRUE) THEN RETURN FALSE END; IF ~ aux(" b1 a2 c2 b3 ", TRUE) THEN RETURN FALSE END; IF ~ aux("A1", FALSE) THEN RETURN FALSE END; IF ~ aux("a5", FALSE) THEN RETURN FALSE END; IF ~ aux("a19", FALSE) THEN RETURN FALSE END; RETURN TRUE; END testLegalMoves; Universiteit Antwerpen Aanpasbaarheid

Test verifieert winnaar + aantal zetten TTT1.4: Winnaar PROCEDURE TicTacToeTest.Main; ... BEGIN NEW(aTest); aTest.init(); aTest.setUp("testRealGame (diagonal wins)", "a1 c1 b2 a3 c3", "b1 a2 c2 b3"); IF ~ aTest.testRealGame (TRUE, "O", 7) THEN testsPassed := FALSE; END; aTest.tearDown(); END Main; a b c 1 O X O 2 X O X 3 O Test verifieert winnaar + aantal zetten Universiteit Antwerpen Aanpasbaarheid

ASCII Uitvoer (TTT15) Use Case 2: play simple output Extension of use case 1 Steps use case 1 + additional steps afer 2.2 2.3 write game on ASCII text during 3 3 write winner on ASCII text player <<extends>> play simple output (Minstens één test per "normaal" scenario) nieuwe use case => uitbreiding tests Universiteit Antwerpen Aanpasbaarheid

Vergelijk gegenereerde met verwachte uitvoer oproep v.d. test PROCEDURE (aTest: TicTacToeTest) testOutputGame* (verbose: BOOLEAN; useOutput, expectedOutput: ARRAY OF CHAR): BOOLEAN; … Texts.OpenWriter(w); WHILE aTest.aGame.notDone() DO aTest.aGame.doMove(); aTest.aGame.writeOn(w); END; lenWritten :=aTest.writerToFile(w, useOutput); IF ~ aTest.should(aTest.compareFiles(useOutput, expectedOutput), "output written is not what was expected") END testOutputGame; aTest.setUp("testOutputGame (full board)", "a1 c1 b2 b3 c3", "b1 a2 c2 a3"); IF ~ aTest.testOutputGame (FALSE, "testOutput1.txt", "fullboard.txt") Vergelijk gegenereerde met verwachte uitvoer oproep v.d. test Universiteit Antwerpen Aanpasbaarheid

Vuistregel Test lange uitvoer door het vergelijken van files. Waarom ? Veel & frequent testen => makkellijk om steeds uitvoer te testen Hoe ? Verwachte uitvoerdata wordt één maal manueel gecreëerd Achteraf wordt verwachte uitvoer vergeleken met gegenereerde uitvoer Universiteit Antwerpen Aanpasbaarheid

Conclusie Eerst moet je het doen Daarna moet je het goed doen KISS principle: klein beginnen en langzaam groeien tests lopen + contracten worden nageleefd Daarna moet je het goed doen lage koppeling, hoge cohesie model van het probleemdomein en ... tests blijven lopen + contracten blijven nageleefd goed ontwerp Universiteit Antwerpen Aanpasbaarheid

Vuistregels Ontwerpen Testen Plaats het gedrag dicht bij de data Nooit user-interface code in de basisklassen Maak een model van het probleemdomein (= het domeinmodel) zelfstandige naamwoorden & werkwoorden als indicators Testen Een test verwacht géén gebruikersinvoer Minstens één test per "uitzondering" Test lange uitvoer door het vergelijken van files Universiteit Antwerpen Aanpasbaarheid