Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.1 Complexe Interacties.

Slides:



Advertisements
Verwante presentaties

Advertisements

The stock market will go up De beurswaarden zullen stijgen YESNO JA NEEN Is Jefken a good person ? Is Jefken een goed mens ? YES NO JA NEEN Is Lonny a.
Project Software Engineering
Project Software Engineering Universiteit AntwerpenPlanning 4.1 Hoe snel loopt iemand de 100 meter ?
>>0 >>1 >> 2 >> 3 >> 4 >> Adobe Premiere CS4 – Edius 5.5 – Adobe Elements 7.
Update en evolutie in het ICT-infrastructuur dienstenaanbod van Cevi
1 Co-Design at Chess-iT Guus Bosman. 2 Afstuderen bij Chess Net.Footworks tot augustus 2003 Afstuderen augustus 2003 tot maart 2004 Chess full-time vanaf.
DokPlan.
Inleiding Software Engineering Universiteit AntwerpenBetrouwbaarheid 2.1 Ontdek de 7 verschillen.
Programmeren in Java met BlueJ
Wat is nieuw in MS Project 2010 Wil Jansen.  Dit!!
Simulatie van gedistribueerde voetbalstrategieën Tim Vermeulen Promotor: dr. Katja Verbeeck Copromotoren: ing. Tony Wauters, ing. Koen Vangheluwe, Opdrachtgever:
Virgielcollege Mede mogelijk gemaakt door uw Eerstejaarsch Commissie.
Project Software Engineering Universiteit AntwerpenBetrouwbaarheid 2.1 Ontdek de 7 verschillen.
Sunday, 20 July 2014 zondag 20 juli 2014 Click Klik.
IMAGINE John Lennon Muziek en tekst zijn gesynchroniseerd.
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Inleiding Software Engineering
Inleiding Software Engineering Universiteit AntwerpenPlanning 4.1 Hoe snel loopt iemand de 100 meter ?
Complexe Interacties Universiteit Antwerpen Aanpasbaarheid.
2 april 2005 Berkel - Enschot De druiventros Int. Cliff Richard & Shadows fanmeeting.
Directe rede  Indirecte rede
Maurice Siteur Testen college 4. © 2002 Cap Gemini Ernst & Young - All right reserved College TU Eindhoven / 2 Programma  TMap  Testen in embedded software.
Enterprise Application Integration Walter Moerkerken Ilona Wilmont Integratie Software Systemen 8 mei 2006.
ENGAGEMENT MEDMEC 04 Les 5. Weekplanning Lesweek 1: Urban Studio Lesweek 2: Kick off en spelopdracht deel l Lesweek 3: hoorcollege gaming, geen lessen.
© 2002 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied,
Databases I EER and Object Modeling Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Databases I (H. 1) Wiebren de Jonge Vrije Universiteit, Amsterdam Voorlopige versie 2003.
IOP and Vrije Universiteit1 Example of bad interface  Windows: Use Start to Stop.
EML en IMS Learning Design Colin Tattersall Onderwijstechnologish expertisecentrum Open Universiteit Nederland.
Educational Modelling Language (EML): verdere ontwikkelingen Colin Tattersall, Onderwijstechnologish expertisecentrum.
Kwaliteitsbeoordeling ‘M2M’ Groep 3. Agenda Wensen van de klant (Thorstin)‏ Kwaliteitsmodel(Bas)‏ Meetresultaten(Daniël)‏ Conclusie(Daniël)‏
Bij ons leer je de wereld kennen ICT&Onderwijs Programma universiteit Leiden Portfolio van projecten en activiteiten die optimaal bijdragen aan het behalen.
ALBRECHT DÜRER'S MAGIC SQUARE ALBRECHT DÜRERS MAGISCH VIERKANT
Multimedia CasesRob Zuidwijk Rekengereedschappen Logistieke Concepten Prestatiefactoren Kosten Doorlooptijd Betrouwbaarheid Binnenvaart
Automation SolutionsMFG/Pro Dutch usergroup 8 februari 2007 ISA S88 & S95 Het gebruik van deze normen in de productie.
Algoritmiek Software Development O-O Design Hoorcollege 11 - Ma. 13 nov L.M. Bosveld-de Smet.
Code Compressie Frank F.A. van der Pijl. Indeling LiteratuurLiteratuur Introductie van het probleemIntroductie van het probleem ProbleemProbleem Overzicht.
Reducing memory penalty by a programmable prefetch engine for on-chip caches Presentatie voor het vak computerarchitectuur door Armin van der Togt.
Faculteit Ingenieurswetenschappen & Wetenschappen Software Engineering Publicatie Management Systeem Groep se1 Software Engineering Thierry Coppens.
Kostenmodule Natuurplanner. Algemene opzet KOSTENMODULE DATABANK KOSTENNORMEN activiteiten Kosten Opbrengsten maatregelpakket -> activiteit 1 -> activiteit.
PROJECTMANAGEMENTPROJECTMANAGEMENT Assesment CMM RM:Requirements Management PP: Project Planning PTO: Project Tracking & Oversight SSM:Software Subcontract.
Shortest path with negative arc-costs allowed. Dijkstra?
Tuesday, 19 August 2014 dinsdag 19 augustus 2014.
Sketchpad - Introductie Mens en computer kunnen snel converseren door medium van line drawings Hexagons als één symbool (Ring Structure) Verschil met potlood.
Ontbijtsessie 2 juli 2014 Kwaliteitsverbeteringen in Infra Projecten.
EML en IMS Learning Design
Major/minor Kwantitatieve methoden (HIR) Predoctoraal traject (HIR) Minor Business Research (TEW/MBE) maart 2014.
PADS4 maakt het eenvoudig om informatie te verspreiden naar een specifiek publiek op de juiste plaats en het juiste moment PADS4 is een professionele oplossing.
Usability metrics Gebruiksvriendelijkheid ISO Effectiveness Efficiency Satisfaction Learnability Flexibility En nu? Inleiding Hoe gaan we de gebruiksvriendelijkheid.
Het geheim van Linked Data Marcel ReuversGeonovum CB-NL 20 november 2014.
Ecce ama! Is een EQUAL project van ESF: bijdragen tot de ontwikkeling van de werkgelegenheid door het bevorderen van inzetbaarheid, ondernemerschap, aanpasbaarheid.
 Het tot stand brengen van meervoudig ruimtegebruik 1. Ruimtelijk ontwerpen 2. Processen van ruimtelijke ontwikkeling 3. Verankering meervoudige ontwerpen.
Gemaakt door: Anouk Hultermans Dewi Priem Bente Mulders
HM-ES-th1 Les 12 Hardware/Software Codesign with SystemC.
Refactoring en Unit Testing. Geschiedenis Hoe maken we complexe code duidelijker? Hoger abstractieniveau –Assembly –“Hogere” programmeertalen –Object-orientatie.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail: Sheets en.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Maak, uitgaande van een MIDI file, een (klein) programma.
Methods of Development #2: Logistiek. Conceptfase Pre-productiefase Productiefase Post-productiefase.
FLOWer is… Case Handling Proces management zonodig tot op het bot
- prettig KENNIS maken, prettig KENNIS delen Onderzoeksdatabase Ingeborg van Dusseldorp 31 mei 2016.
Promoting inquiry in mathematics and science education across Europe ECENT
Sprint 2 Demo Movie Energy Meter. Inhoudsopgave  Plan van Aanpak  Software  Onderzoeksplan  UML documenten  Use Case Diagram  Matrix  Domeinmodel.
Innovatie met IBM Cloud Orchestrator.
Buy Metformin Online Cheap
“Conquest of Paradise”
Educational support & innovation
“Conquest of Paradise”
“Conquest of Paradise”
<Geef de titel van het probleem op>
Transcript van de presentatie:

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.1 Complexe Interacties

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.2 Een optimale werkverdeling play

Project Software Engineering 3. Aanpasbaarheid versie 1.3 (displayGame) –0, 1, infinity principle –say things once and only once versie 1.4 (displayGame) –coupling / cohesion –[testen] ASCII uitvoer versie 1.5 (Player) –domeinmodel versie 1.6 (Player.moves) –vermijd gebruikersinvoer versie 1.7 (Player. winner()) –Basisfunctionaliteit Conclusie Universiteit AntwerpenAanpasbaarheid 3.3

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.4 "Ontwikkel" vereisten Vereisten Betrouwbaarheid Aanpasbaarheid Planning Technieken Testen + Contracten Objectgericht ontwerp Tijdsschatting

Project Software Engineering Magic Numbers Universiteit AntwerpenAanpasbaarheid 3.5 void displayGame(TicTacToe& ttt) {... for (row = '1'; row <= '3'; row++) { cout << row; for (col = 'a'; col <= 'c'; col++) {... } void TicTacToe::doMove() {... col = (char) (_nrOfMoves % 3) + 'a'; row = (char) (_nrOfMoves / 3) + '1';... } TEST_F(TicTactToeTest, HappyDay) {... for (col = 'a'; col <= 'c'; col++) for (row = '1'; row <= '3'; row++) {... } TicTacToe12

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.6 Vuistregel “0, 1, infinity” principle Allow- none of foo, - one of foo, or - any number of foo. Waarom ? zet geen arbitraire limieten ⇒ Vroeg of laat zullen deze limieten aangepast moeten worden Refactor: creëer een constante die de arbitraire waarde voorstelt

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.7 Vuistregel say things once and only once Waarom ? duplicatie en redundantie ⇒ veranderen moet op twee, drie … plaatsen (eentje wordt vroeg of laat vergeten) Refactor: creëer abstractie via naam, functie, klasse, … Variant op "Keep It Stupidly Simple"

Project Software Engineering Y2K Universiteit AntwerpenAanpasbaarheid 3.8 Y2K Cost in Perspective (Sources: Gartner Group and Congressional Research Service) World War II: $4200 billion Millennium bug (Y2K): $600 billion Vietnam conflict: $500 billion Kobe earthquake: $100 billion Los Angeles earthquake: $60 billion kalenderjaar = laatste twee cijfers '98 '99 ?? '00 '01

Project Software Engineering IPv4 address space Internet Protocol (version 4) address ruimte = 2 32 ≈ 4 × 10 9 ≈ 4 miljard 3 februari 2011 –laatste nummer toegewezen door Internet Assigned Numbers Authority (IANA) Internet Protocol (version 6) address ruimte = 2 32 ≈ 3,4 × ∀ aardbewoner ± 50 quadriljard adressen Universiteit AntwerpenAanpasbaarheid 3.9

Project Software Engineering Magic Numbers ⇒ Constantes Universiteit AntwerpenAanpasbaarheid 3.10 void displayGame(TicTacToe& ttt) {... for (row = minRow; row <= maxRow; row++) { cout << row; for (col = minCol; col <= maxCol; col++) {... } void TicTacToe::doMove() {... col = (char) (_nrOfMoves % 3) + minCol; row = (char) (_nrOfMoves / 3) + minRow;... } TEST_F(TicTactToeTest, HappyDay) {... for (col = minCol; col <= maxCol; col++) for (row = minRow; row <= maxRow; row++) {... } TicTacToe13

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.11 TicTacToeMain (1.3) aGame: TicTacToe : TicTacToe Main *[aGame.notDone()] main displayGame(ttt) doMove() ??? Wat moeten we hier doen ? int main(int argc, char **argv) { TicTacToe ttt; while (ttt.notDone()) { ttt.doMove(); cout << endl << endl; displayGame(ttt); }; }

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.12 void displayGame(TicTacToe& ttt) { char col, row; cout << "TicTacToe numberOfMoves = " << ttt.nrOfMoves() << endl; cout << " a b c " << endl; cout << " " << endl; for (row = minRow; row <= maxRow; row++) { cout << row; for (col = minCol; col <= maxCol; col++) { cout << " | " << ttt.getMark(col, row); } cout << " |" << endl; }; cout << " " << endl; } Afhankelijk van 4 constantes & 1 operatie

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.13 Sterke Koppeling TicTacToeMain displayGame() TicTacToe minRow : Integer maxRow : Integer minCol : Integer maxCol: Integer getMark (col, row: CHAR): CHAR TicTacToeMain is sterk gekoppeld aan TicTacToe Er zijn veel afhankelijkheden van TicTacToeMain naar TicTacToe Een verandering aan TicTacToe betekent meestal dat we ook TicTacToeMain moeten aanpassen Aanpasbaarheid :( TicTacToe13

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.14 Vuistregel Plaats het gedrag dicht bij de data Waarom ? veranderingen zullen eerder lokaal effect hebben ⇒ zwakke koppeling Refactor: Routines die veel "get" operaties oproepen ⇒ verplaats naar de corresponderende klasse.

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.15 Zwakke Koppeling TicTacToe displayGame () TicTacToeMain displayGame(ttt TicTacToe) void displayGame(TicTacToe& ttt) {... for (row = minRow; row <= maxRow; row++) {... ttt.getMark(col, row);... } void TicTacToe::displayGame() {... for (row = minRow; row <= maxRow; row++) {... this->getMark(col, row);... } Aanpasbaarheid :) TicTacToeMain is zwak gekoppeld aan TicTacToe Er is maar één afhankelijkheid van TicTacToeMain naar TicTacToe Een verandering aan TicTacToe heeft zelden een effect op TicTacToeMain TicTacToe13TicTacToe14

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.16 void TicTacToe::displayGame() { char col, row; REQUIRE(this->properlyInitialized(), "TicTacToe wasn't initialized when calling displayGame"); std::cout nrOfMoves() << std::endl; std::cout << " a b c " << std::endl; std::cout << " " << std::endl; for (row = minRow; row <= maxRow; row++) { std::cout << row; for (col = minCol; col <= maxCol; col++) { std::cout getMark(col, row); } std::cout << " |" << std::endl; }; std::cout << " " << std::endl; } TicTacToe is afhankelijk van cout ⇒ alleen uitvoer op console 

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.17 Vuistregel Nooit user-interface code in de basisklassen Waarom ? Minder kans op veranderingen in basisklassen (user-interface wordt vaak veranderd) Refactor: Extra parameter als in/uitvoerkanaal naar de buitenwereld

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.18 void TicTacToe::writeOn(std::ostream& onStream) { char col, row; REQUIRE(this->properlyInitialized(), "TicTacToe wasn't initialized when calling displayGame"); onStream nrOfMoves() << std::endl; onStream << " a b c " << std::endl; onStream << " " << std::endl; for (row = minRow; row <= maxRow; row++) { onStream << row; for (col = minCol; col <= maxCol; col++) { onStream getMark(col, row); } onStream << " |" << std::endl; }; onStream << " " << std::endl; } Extra parameter als uitvoerkanaal + betere naamgeving

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.19 Cohesie 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 Aanpasbaarheid TicTacToe TicTacToe(); getMark (col, row: CHAR): CHAR setMark (col, row, marker: CHAR): CHAR notDone (): BOOLEAN doMove () writeOn (o: ostream) > properlyInitialized() & ("a"<=col) & (col<="c") & ("1"<=row) & (row<="3") > (result = "O”) OR (result = "X") OR (result = " ") > … > getMark(col, row) = marker TicTacToe14

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.20 Koppeling vs. Cohesie Koppeling =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

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.21 Testen van ASCII uitvoer (TicTacToe14) TicTacToe TicTacToe(); getMark (col, row: CHAR): CHAR setMark (col, row, marker: CHAR): CHAR notDone (): BOOLEAN doMove () writeOn (o: ostream) Als de functionaliteit groeit, dan groeit de test mee Hoe testen we de uitvoer ?

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.22 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 vergelijk verwachte uitvoer met gegenereerde uitvoer

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.23 TEST_F(TicTactToeTest, OutputHappyDay) { ASSERT_TRUE(DirectoryExists("testOutput")); //if directory doesn't exist then no need in proceeding with the test ofstream myfile; myfile.open("testOutput/happyDayOut.txt"); while (ttt_.notDone()) { ttt_.doMove(); ttt_.writeOn(myfile); }; myfile.close(); EXPECT_TRUE( FileCompare("testOutput/happyDayExpectedOut.txt”, "testOutput/happyDayOut.txt")); } Schrijf alles op een bestand … … en vergelijk met wat je verwacht code voor “DirectoryExists” en “FileCompare” ⇒ Zie TicTacToe14

Project Software Engineering TEST_F(TicTactToeTest, FileCompare) { ASSERT_TRUE(DirectoryExists("testOutput"));... //compare 2 empty files EXPECT_TRUE(FileCompare("testOutput/file1.txt", "testOutput/file2.txt"));... //compare an empty and a non-empty files... //compare two equal files... //compare 2 non-empty files which are off by a character in the middle... //compare 2 non-empty files where one is one character shorter than the other... //compare existing against non existing file } Universiteit AntwerpenAanpasbaarheid 3.24 Test the hulpfuncties in de tests !

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.25 TicTacToe 1.5 play player 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 Waar voegen we dit bij ?

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.26 Vuistregel 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

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.27 Zelfstandige Naamwoorden play player 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 Legende Substantief Werkwoord

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.28 TTT1.5: Player TicTacToe notDone(): BOOLEAN doMove() currentPlayer : Player doMove() doMove (t) Player doMove() mark(): CHAR t: TicTacToe 2 switchPlayer ()

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.29 class TicTacToe; // forward declaration class TicTacToePlayer {... void doMove(TicTacToe& game);... private: TicTacToePlayer * _initCheck; //use pointer to myself... char _marker; }; class TicTacToe {... private:... TicTacToePlayer _players [2]; }; TicTacToe & TicTacToePlayer circulair afhankelijk ! ⇒ forward declaration Opgelet: Magic Number

Project Software Engineering void TicTacToePlayer::doMove(TicTacToe& game) { REQUIRE(this->properlyInitialized(), "TicTacToePlayer wasn't initialized when calling getMarker"); REQUIRE(game.properlyInitialized(), "game wasn't initialized when passed to Player->doMove"); char col, row; col = (char) (game.nrOfMoves() % 3) + minCol; row = (char) (game.nrOfMoves() / 3) + minRow; game.setMark(col, row, _marker); } Universiteit AntwerpenAanpasbaarheid 3.30 Verplaatst van TicTacToe naar Player Tests blijven lopen Opgelet: Magic Number

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.31 TicTacToe 1.6 play player 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 Hoe verkrijgen we gebruikersinvoer ?

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.32 Vuistregel Een test verwacht géén gebruikersinvoer Waarom ? Veel & frequent testen ⇒ onmogelijk om steeds invoer te geven Hoe dan wel ? Invoerdata wordt gecreëerd door testprogramma (testbestand ?) Ontwerp basisklassen onafhankelijk van het data invoer kanaal

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.33 int main(int argc, char **argv) { TicTacToe ttt; ttt.setMoves("a1c1b2a3c3", "b1a2c2b3"); while (ttt.notDone()) { ttt.doMove(); cout << endl << endl; ttt.writeOn(cout); }; }... void TicTacToe::setMoves(const char *oMoves, const char *xMoves) { //REQUIRE(this->properlyInitialized(), "TicTacToe... //REQUIRE(legalMoves(oMoves), "TicTacToe::setMoves requires... //REQUIRE(legalMoves(xMoves), "TicTacToe::setMoves requires... een reeks zetten ⇒ invoerdata door (test)programma abc1OXO2XOX3OXOabc1OXO2XOX3OXO TTT1.6: Reeks van zetten

Project Software Engineering // Tests the "happy day" scenario TEST_F(TicTactToeTest, HappyDay) { EXPECT_EQ(0, ttt_.nrOfMoves()); EXPECT_TRUE(ttt_.notDone()); ttt_.setMoves("a1c1b2a3c3", "b1a2c2b3"); while (ttt_.notDone()) { ttt_.doMove(); }; char col, row; bool markIsX = false; // start with 'O' for (col = minCol; col <= maxCol; col++) for (row = minRow; row <= maxRow; row++) { if (markIsX) EXPECT_EQ('X', ttt_.getMark(col, row));... } Universiteit AntwerpenAanpasbaarheid 3.34 Geen gebruikersinvoer

Project Software Engineering Universiteit AntwerpenBetrouwbaarheid 2.35 Vuistregels (vorige week) Minstens één test per "normaal" scenario Waarom ? Minimum veiligheidsnorm Hoe ? Controleer de tussentijdse toestand via ”EXPECT_…” Als de functionaliteit groeit, dan groeit de test mee Waarom ? Veiligheidsmaatregel: gecontroleerde groei Hoe ? Pas bestaande tests aan

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.36 // Tests whether a given string of moves is legal TEST_F(TicTactToeTest, LegalMoves) { EXPECT_TRUE(tttPlayer_.properlyInitialized()); EXPECT_TRUE(legalMoves("")); EXPECT_TRUE(legalMoves("a1")); … EXPECT_TRUE(legalMoves("a1a2a3b1b2b3c1c2c3")); //illegal moves EXPECT_FALSE(legalMoves(" ")); … EXPECT_FALSE(legalMoves("b1c4a1")); } // Tests the "happy day" scenario for a player TEST_F(TicTactToeTest, HappyDayPlayer) { EXPECT_TRUE(tttPlayer_.properlyInitialized()); tttPlayer_.setMarker('O'); EXPECT_EQ('O', tttPlayer_.getMarker()); … }

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.37 TicTacToe 1.7 play player 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 Waar voegen we dit bij ?

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.38 Conclusie Eerst moet je het 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

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.39 Vuistregels Ontwerpen “0, 1, infinity” principle Say things once and only once Plaats het gedrag dicht bij de data Nooit user-interface code in de basisklassen –*Zeker* niet voor invoer — frequent testen Maak een model van het probleemdomein (= het domeinmodel) –zelfstandige naamwoorden & werkwoorden als indicators Testen Test lange uitvoer door het vergelijken van files –Test the hulpfuncties in de tests ! Een test verwacht géén gebruikersinvoer

Project Software Engineering Universiteit AntwerpenAanpasbaarheid 3.40 “0, 1, infinity” principle Say things once and only once Nooit user-interface code in de basisklassen Maak een model van het probleemdomein Test lange uitvoer door het vergelijken van files Een test verwacht géén gebruikersinvoer Evaluatie Criteria Plaats het gedrag dicht bij de data