27.07.2013 Views

2 Why We Need Model-Based Testing

2 Why We Need Model-Based Testing

2 Why We Need Model-Based Testing

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

108 Exploring and Analyzing Finite <strong>Model</strong> Programs<br />

TimeoutMsgLate()<br />

Message("99.9")<br />

CheckMessage()<br />

Message("99.9")<br />

TimeoutMsgLost()<br />

TimeoutMsgLate()<br />

TimeoutMsgLost()<br />

43<br />

ReportLostMessage() Poll()<br />

46<br />

Command()<br />

47<br />

Calibrate() Command()<br />

49<br />

TimeoutMsgLate()<br />

Message("999.9")<br />

48<br />

0<br />

Command()<br />

1<br />

Timeout() NoHandler() Command()<br />

22<br />

Timeout()<br />

2<br />

Reset()<br />

3<br />

Command()<br />

4<br />

Message("999.9") NoHandler() Command() TimeoutMsgLost() TimeoutMsgLate() Message("99.9")<br />

52<br />

Message("999.9")TimeoutMsgLost() TimeoutMsgLate() Message("99.9")<br />

6<br />

8<br />

5<br />

7<br />

NoHandler()<br />

NoHandler()<br />

19<br />

14<br />

Command()<br />

Command()<br />

20<br />

15<br />

CheckMessage()<br />

NoHandler() Command()<br />

Message("999.9") NoHandler() Command() Message("99.9")<br />

CheckMessage()<br />

21<br />

18<br />

Message("999.9") Message("99.9")<br />

16<br />

17<br />

CheckMessage()<br />

CheckMessage()<br />

9<br />

10<br />

Command()<br />

Command()<br />

11<br />

71<br />

Timeout() Command() Calibrate()<br />

Timeout() Command() Calibrate()<br />

13<br />

113<br />

Timeout()<br />

Timeout()<br />

12<br />

72<br />

Poll()<br />

Poll()<br />

23<br />

73<br />

Command()<br />

Command()<br />

Command()<br />

Command()<br />

24<br />

74<br />

TimeoutMsgLost()<br />

TimeoutMsgLate() NoHandler() Command() TimeoutMsgLost()<br />

Timeout()<br />

TimeoutMsgLost()<br />

TimeoutMsgLate()<br />

NoHandler() Command()<br />

TimeoutMsgLost() Timeout()<br />

31<br />

120<br />

TimeoutMsgLost()<br />

TimeoutMsgLate() TimeoutMsgLost()<br />

TimeoutMsgLost()<br />

TimeoutMsgLate() TimeoutMsgLost()<br />

25<br />

28<br />

75<br />

78<br />

Poll()<br />

ReportLostMessage()<br />

ReportLostMessage()<br />

Poll()<br />

ReportLostMessage()<br />

ReportLostMessage()<br />

30<br />

51<br />

83<br />

98<br />

Command()<br />

Command()<br />

32<br />

99<br />

Message("99.9") TimeoutMsgLate() Calibrate() Command()<br />

TimeoutMsgLate() Calibrate() Command() Message("999.9")<br />

CheckMessage()<br />

36<br />

103<br />

Message("999.9")<br />

Message("99.9") TimeoutMsgLate()<br />

Message("99.9")<br />

NoHandler()<br />

TimeoutMsgLate() Message("999.9")<br />

35<br />

33<br />

100<br />

101<br />

NoHandler()<br />

Message("999.9") Message("99.9")<br />

NoHandler()<br />

NoHandler()<br />

Message("99.9")<br />

Message("999.9")<br />

37<br />

104<br />

Timeout()<br />

CheckMessage()<br />

Command()<br />

Message("99.9") Message("999.9")<br />

39<br />

105<br />

Poll()<br />

Command() Calibrate() Timeout()<br />

CheckMessage()<br />

40<br />

107<br />

Command()<br />

Message("999.9")<br />

CheckMessage()<br />

Timeout()<br />

42<br />

106<br />

Message("999.9")<br />

NoHandler() Command()<br />

TimeoutMsgLost() Timeout() Message("99.9") Command() Message("999.9")<br />

Message("99.9")<br />

Message("999.9")<br />

Poll()<br />

CheckMessage()<br />

50<br />

108<br />

TimeoutMsgLate() Message("999.9") Timeout() TimeoutMsgLost()<br />

Message("99.9")<br />

Message("99.9") Message("999.9") Command()<br />

Command()<br />

26<br />

44<br />

27<br />

109<br />

ReportLostMessage()<br />

CheckMessage()<br />

Timeout() TimeoutMsgLost()<br />

TimeoutMsgLost() TimeoutMsgLate() Command() NoHandler()<br />

Message("99.9")<br />

Message("999.9")<br />

45<br />

29<br />

112<br />

Command()<br />

Command()<br />

TimeoutMsgLost() TimeoutMsgLate() TimeoutMsgLost()<br />

Message("99.9")<br />

Message("999.9")<br />

38<br />

53<br />

111<br />

110<br />

77<br />

76<br />

Message("999.9")<br />

Calibrate() Command()<br />

Command() NoHandler() Timeout()<br />

ReportLostMessage() ReportLostMessage()<br />

Poll()<br />

CheckMessage()<br />

41<br />

55<br />

115<br />

116<br />

79<br />

Timeout()<br />

Command()<br />

Command()<br />

34<br />

54<br />

117<br />

80<br />

Reset()<br />

CheckMessage()<br />

Message("99.9")<br />

Command() Calibrate()<br />

TimeoutMsgLate()<br />

Command() NoHandler() Timeout()<br />

56<br />

119<br />

114<br />

Command()<br />

Message("99.9")<br />

TimeoutMsgLate()<br />

Timeout()<br />

57<br />

102<br />

118<br />

81<br />

CheckMessage()<br />

TimeoutMsgLost() TimeoutMsgLate() Command() NoHandler() Message("99.9") Message("999.9")<br />

CheckMessage()<br />

Reset()<br />

63<br />

82<br />

TimeoutMsgLost() TimeoutMsgLate() Message("99.9")<br />

Message("999.9")<br />

Command()<br />

61<br />

58<br />

60<br />

59<br />

84<br />

NoHandler()<br />

NoHandler()<br />

CheckMessage()<br />

Message("999.9") Command() NoHandler() TimeoutMsgLate() Message("99.9") TimeoutMsgLost()<br />

64<br />

62<br />

90<br />

Command()<br />

Command()<br />

Message("999.9") TimeoutMsgLate() Message("99.9") TimeoutMsgLost()<br />

65<br />

67<br />

86<br />

85<br />

87<br />

88<br />

NoHandler() Command()<br />

Message("99.9") Message("999.9") NoHandler() Command()<br />

NoHandler()<br />

NoHandler()<br />

66<br />

70<br />

93<br />

89<br />

Message("99.9") Message("999.9")<br />

Command()<br />

Command()<br />

69<br />

68<br />

94<br />

91<br />

Message("999.9") Message("99.9") NoHandler() Command()<br />

NoHandler() Command()<br />

97<br />

92<br />

Message("999.9") Message("99.9")<br />

95<br />

96<br />

Figure 6.9. Reactive system: true FSM showing unsafe states.<br />

This example confirms that model-based analysis reveals one of the design errors<br />

we originally discovered by executing the implementation.<br />

6.3.2 Liveness<br />

Liveness analysis checks whether something good will happen. It searches for dead<br />

states from which goals cannot be reached. <strong>We</strong> express liveness requirements by<br />

identifying accepting states, where goals have been reached. <strong>We</strong> define accepting<br />

states by writing an accepting state condition, a Boolean expression that is supposed<br />

to be true in every accepting state. A dead state is a state from which an accepting<br />

state cannot be reached. For the tools, an accepting state condition is a Boolean<br />

field, property, or method labeled with the [AcceptingStateCondition] attribute.<br />

more free ebooks download links at:<br />

http://www.ebook-x.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!