Hoe snel loopt iemand de 100 meter ?

33
Inleiding Software Engineering Inleiding Software Engineering Universiteit Antwerpen Planning 4.1 Hoe snel loopt iemand de 100 meter ?

description

Hoe snel loopt iemand de 100 meter ?. 4. Planning. Tijdsschatting Analogie & Decompostie Empirische schatting Plan 2.0 & Plan 2.1 Conclusie TicTacToe Code Hergebruik => TestCase HTML Uitvoer => polymorfisme “Undo” => Lijsten & polymorfisme. "Ontwikkel" vereisten. Vereisten - PowerPoint PPT Presentation

Transcript of Hoe snel loopt iemand de 100 meter ?

Page 1: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.1

Hoe snel loopt iemand de 100 meter ?

Page 2: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.2

4. Planning• Tijdsschatting

– Analogie & Decompostie– Empirische schatting

• Plan 2.0 & Plan 2.1

• Conclusie• TicTacToe

– Code Hergebruik=> TestCase

– HTML Uitvoer=> polymorfisme

– “Undo”=> Lijsten & polymorfisme

Page 3: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.3

"Ontwikkel" vereisten

Vereisten• Betrouwbaarheid• Aanpasbaarheid• Planning

Technieken• Testen + Contracten• Objectgericht ontwerp• Tijdsschatting

Page 4: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.4

Schatting door analogieAnalogie

• Schatting = tijd gelijkaardig project• Wanneer gelijkaardig ?

– Zelfde probleemdomein– Zelfde mensen– Zelfde technologie

Empirischgespendeerde tijd voorbije projecten dient als

basis voor schatting volgende

Page 5: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.5

Empirische schatting (project)

Grootte project

On

twik

kelt

ijd

= Voorbij

= Prognose

Legende

y = a x b

(b ±= 1)

Schat totale duur van project op basis van vorige projecten

X

Y

Page 6: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.6

Schatting door decompositieDecompositie

• Schatting = tijd componenten + integratiekost

• Tijd componenten ?– cfr. opgeleverde componenten

• Integratiekost ?– constant (mits testen en OO)

Empirischgespendeerde tijd eerste componenten dient als

basis voor schatting volgende

Page 7: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.7

Empirische schatting (component)

Grootte component

On

twik

kelt

ijd

co

mp

on

ent

= Opgeleverd

= Prognose

Legende

y = m x

Schat duur van één component op basis van opgeleverde componenten

X

Y

Page 8: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.8

Grootte en Tijd• x = Grootte Component ?

# stappen + #uitzonderingenin use case

• y = Ontwikkellingstijd ?Zie tijdsbladen

Na oplevering n componenten: (xn, yn) => m = ∑ yn / ∑ xn

Schatting yn+1 voor grootte xn+1 => yn+1 = m.xn+1

vergelijking benaderende rechte

y = mx

Page 9: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.9

Vuistregel

Empirische schatten is de basis voor een realistische

planning.

Waarom ?• Betere controle over aanpassingen aan de planning

Hoe ?• Hou tijdsbladen nauwkeurig bij• Maak prognose op basis van gespendeerde werk in het verleden

Page 10: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.10

Use Case Grootte

play

player

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

#stappen = 5#uitzond. = 1grootte = 6

Page 11: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.11

Voorbeelden

Zie voorbeelden in PlanTmpl20 & PlanTmpl21

Page 12: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.12

Conclusie

• Betrouwbare prognoses zijn belangrijk– Hou tijdsbladen nauwkeurig bij !

• Schatten impliceert fouten– Voorzie een redelijke marge– Vertrouw niet blindelings op de cijfertjes

Page 13: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.13

Code Hergebruik

TicTacToeTest is groot• code leesbaarheid• hergebruik ? copy + delete + insert

Aanpasbaarheid :(

TicTacToeTest

setUp()tearDown()init()fail(msg: ARRAY OF CHAR)should(b: BOOLEAN, msg: ARRAY OF CHAR): BOOLEANshouldNot(b: BOOLEAN, msg: ARRAY OF CHAR): BOOLEANcompareFiles(fileName1, fileName2: ARRAY OF CHAR): BOOLEANtestBasicPlayer(verbose: BOOLEAN): BOOLEANtestLegalMoves(verbose: BOOLEAN): BOOLEANtestRealGame(verbose: BOOLEAN): BOOLEANtestOutputGame(verbose: BOOLEAN): BOOLEAN

Page 14: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.14

UnitTest

setUp()tearDown()init()fail(msg: ARRAY OF CHAR)should(b: BOOLEAN, msg: ARRAY OF CHAR): BOOLEANshouldNot(b: BOOLEAN, msg: ARRAY OF CHAR): BOOLEANcompareFiles(fileName1, fileName2: ARRAY OF CHAR): BOOLEAN

TicTacToeTest

setUp()tearDown()init()testBasicPlayer(verbose: BOOLEAN): BOOLEANtestLegalMoves(verbose: BOOLEAN): BOOLEANtestRealGame(verbose: BOOLEAN): BOOLEANtestOutputGame(verbose: BOOLEAN): BOOLEAN

UnitTest is superklasse• bevat algemene code• hergebruik ? subklasse per

te testen component/klasse

Code Hergebruik

TicTacToeTest is subklasse• erft algemene code• overschrijft setup, init & teardown• bevat alleen relevante code

Page 15: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.15

Vuistregel

“Hollywood Principle”

wij roepen jouw op als we je nodig hebben

Waarom ?• Uitbreiding van bibliotheken via subklasses

Hoe ?• Superklasse in bibliotheek legt protocol van oproepen vast • Subklassen kunnen gedrag uitbreiden

Page 16: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

BetrouwbaarheidUniversiteit Antwerpen

2.16

Generisch Unittest Protocol

UnitTest

setUp(testCase:ARRAY OF CHAR)

run()tearDown()should (…): BOOLEANshouldNot (…): BOOLEAN

objectunder test: UnitTest

testXXXX()

xxx1stStimulus

setUp("testXXX")

run()

shouldNot(xxx1stObservation)

tearDown()

NEW(); init();

should(xxx2ndObservation)

xxx2ndStimulus

Evaluatie CriteriaObj. Collaboratie

Page 17: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.17

Vuistregel

Klassen die vaak herbruikt worden hebben preciese

contracten

Waarom ?• Betere betrouwbaarheid door precieze beschrijving interface

Hoe ?• Leg de “normale” volgorde van oproepen vast • Specifieer volgorde via de respectievelijke pre- en postcondities

Page 18: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.18

Oproepvolgorde voor “UnitTest”

Init()Setup

Initialized

SetUp()Running

Run()

TornDown TearDown()

Page 19: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.19

Contracten voor “UnitTest”PROCEDURE (aTest : UnitTest) Init;

(* postcondition (120): aTest^.IsInitialized() *) (* postcondition (120): ~ aTest^.IsSetup() *)

(* postcondition (120): ~ aTest^.IsRunning() *) (* postcondition (120): aTest^.IsTornDown() *)

PROCEDURE (aTest : UnitTest) SetUp (testCase: ARRAY OF CHAR);

(* precondition (100): aTest^.IsInitialized() *) (* precondition (100): aTest^.IsTornDown() *)

(* precondition (100): LEN(testCase) < MaxTestCaseLength *)

(* postcondition (120): aTest^.IsSetup() *) (* postcondition (120): ~ aTest^.IsTornDown() *)

PROCEDURE (aTest : UnitTest) Run;

(* precondition (100): aTest^.IsInitialized() *) (* precondition (100): aTest^.IsSetup() *)

(* postcondition (120): ~ aTest^.IsSetup() *) (* postcondition (120): aTest^.IsRunning() *)

PROCEDURE (aTest : UnitTest) TearDown;

(* precondition (100): aTest^.IsInitialized() *) (* precondition (100): aTest^.IsRunning() *)

(* postcondition (120): ~ aTest^.IsRunning() *) (* postcondition (120): aTest^.IsTornDown() *)

Page 20: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.20

Vuistregel

Schrijf testcode als subklasse(n) van

“UnitTest”

Waarom ?• Betere onderhoudbaarheid van de testcode

Hoe ?• Maak een subklasse van “UnitTest” per te testen component • Overschrijf Init(), SetUp(), TearDown(), Run ()

Page 21: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.21

HTML Uitvoer (TTT16b)

play

player

Use Case 3: play HTML output• Extension of use case 1

Steps

use case 1 + additional steps

afer 2.2

2.3 write game on HTML (table)

during 33 write winner on HTML text

play HTML output

<<extends>>

(Erg gelijkaardig aan use case 2)=> inheritance & polymorfisme ?

Page 22: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.22

PROCEDURE (aTicTacToe: TicTacToe) writeHTMLOn* (VAR w: Texts.Writer);…BEGIN

Texts.WriteString(w, "<P>");Texts.WriteString(w, "TicTacToe game after move ");Texts.WriteInt(w, aTicTacToe.nrOfMoves, 0);Texts.WriteString(w, "</P>");Texts.WriteLn(w);Texts.WriteString(w, "<TABLE BORDER>");Texts.WriteLn(w);FOR i := 0 TO 2 DO

Texts.WriteString(w, " <TR>");Texts.WriteLn(w);FOR j := 0 TO 2 DO

Texts.WriteString(w, " <TD>");…END;

"Ongeveer" gelijkaan writeOn=> duplicatie

Page 23: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.23

PROCEDURE (aTest: TicTacToeTest) testOutputGame* (…writeHTML: BOOLEAN): BOOLEAN;

…IF writeHTML THEN

Texts.WriteString(w, "<HTML>");Texts.WriteLn(w);Texts.WriteString(w, "<HEAD>");Texts.WriteLn(w);…

END;WHILE aTest.aGame.notDone() DO

aTest.aGame.doMove();IF writeHTML THEN aTest.aGame.writeHTMLOn(w);

ELSE aTest.aGame.writeOn(w); END;END;IF writeHTML THEN

Texts.WriteString(w, "</BODY></HTML>");Texts.WriteLn(w);END;

=> complexeconditionele

logica

Page 24: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.24

Vuistregel

Vermijd code duplicatie

& complexe logica

Refactor:• code duplicatie: gelijkaardige code in de superklasse;

verschillen in subklassen• complexe logica: normaal geval in de superklasse; speciale

gevallen in de subklassen

Page 25: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.25

Splits Klassen (TTT16)

TicTacToeOutput

startPage()endPage()startBoard()endBoard()startRow(row: CHAR)endRow()boardLocation(row, column, marker: CHAR)

TicTacToeOutput

TicTacToe

writeOn()writeHTMLOn()

TicTacToe

TicTacToeHTMLOutput

TicTacToeTest

testOutputGame()

TicTacToeTest

Evaluatie Criteriaprintobjecten/iterators

Page 26: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.26

PROCEDURE (aTest: TicTacToeTest) testOutputGame* (…writeHTML: BOOLEAN): BOOLEAN;

…Texts.OpenWriter(w);output.init ();output.startPage(w);WHILE aTest.aGame.notDone() DO

aTest.aGame.doMove();aTest.aGame.writeOn(w, output)

END;output.endPage(w);

complexecondities

=>polymorfisme

Page 27: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.27

PROCEDURE (aTicTacToe: TicTacToe) writeOn* (VAR w: Texts.Writer;output: TicTacToeOutput.TicTacToeOutput);

BEGINoutput.startSentences(w);Texts.WriteString(w, "TicTacToe game after move ");Texts.WriteInt(w, aTicTacToe.nrOfMoves, 0);output.endSentences(w);output.startBoard(w);FOR i := 0 TO 2 DO

output.startRow(w, CHR(ORD("1") + i));FOR j := 0 TO 2 DO

output.boardLocation(…);END;output.endRow(w);

END;output.endBoard(w);

extra parametercontroleert verschil

verschillen ingedupliceerde code

=>polymorfisme

Page 28: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.28

“Undo”

play

player

Use Case 4: play with undo option• Extension of use case 1

Steps

use case 1 + additional steps

afer 2.1

2.1.1 current player “undo” move

2.1.2 goto 2 (restart while loop)

play with undo option

<<extends>>

Page 29: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.29

“Undo” Algoritme ?

• Hou een lijst bij met verloop spelstatusTicTacToeData* = RECORD (OOLists.NodeDesc)

nrOfMoves: INTEGER;

board: ARRAY 3, 3 OF CHAR;

players: ARRAY 2 OF Player;

lastCol, lastRow, lastMark : CHAR;

theWinner: Player;

END;

Herbruik bestaande code

Maar …“Klassen die vaak herbruikt worden hebben preciese contracten”

Page 30: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.30

Contracten voor “OOLists” ?PROCEDURE (l : List) Init ();

PROCEDURE (l : List) LocateFirst ();

PROCEDURE (l : List) LocateLast ();

PROCEDURE (l : List) LocateNode (n: Node);

PROCEDURE (l : List) LocatePrev ();

PROCEDURE (l : List) LocateNext ();

PROCEDURE (l : List) InsertBefore (new: Node);

PROCEDURE (l : List) InsertAfter (new: Node);

PROCEDURE (l : List) Delete ();

PROCEDURE (l : List) GetNode (): Node;

PROCEDURE (l : List) Enumerate (P: NodeProc);

PROCEDURE (n : Node) NodeInfo ();

Contracten ? Moeilijk want interface zonder predicaten

Page 31: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.31

“Lijst” met predicaten PROCEDURE (l : List) Init ();

(* postcondition (120): l^.IsInitialized() *)

PROCEDURE (l : List) Includes (n: Node): BOOLEAN;

(* precondition (100): l^.IsInitialized() *)

PROCEDURE (l : List) Insert (new: Node);

(* precondition (100): l^.IsInitialized() *)

(* postcondition (120): l^.Includes(new) *)

PROCEDURE (l : List) Delete (old: Node);

(* precondition (100): l^.IsInitialized() *)

(* postcondition (120): ~ l^.Includes(new) *)

Contracten ? Makkelijker want interface met veel predicaten

Evaluatie CriteriaReuse (lijsten)

Page 32: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.32

Vuistregel

Prefereer een interface met predicaten

Waarom ?• Betere betrouwbaarheid door eenvoudige contracten

Hoe ?• Specifieer predicaten voor hoofdfunctionaliteit component • Roep predicaten op in pre- en post-condities

Page 33: Hoe snel loopt iemand de 100 meter ?

Inleiding Software EngineeringInleiding Software Engineering

PlanningUniversiteit Antwerpen

4.33

VuistregelsTesten• Schrijf testcode als subklasse(n) van “UnitTest”

Ontwerpen• Vermijd code duplicatie & complexe logica• “Hollywood Principle” – wij roepen jouw op als we je nodig hebben• Klassen die vaak herbruikt worden hebben preciese contracten• Prefereer een interface met predicaten

Plannen• Empirische schatten is de basis voor een realistische planning