As a result, the model program
usually describes a large number of runs. When we analyze, and especially when
we test, we usually do not want to consider all of these runs. We would like to limit
our consideration to a particular scenario: a collection of runs (perhaps just one)
that are pertinent to some issue.
Here is an example that shows why we need scenario control. Figure 7.1 shows the
true FSM we obtained by exploring the client/server model program we developed in
Chapter 5, Section 5.6. There are many paths through this FSM; each path describes
a different run. But is it useful to consider every run? In other words, does every
run have a different effect? Let??™s look more closely. Figure 7.2 shows the first few
transitions of all the runs, where the client and server each perform the initial actions
of the protocol shown in Chapter 2, Figure 2.2: the server executes Socket, Bind,
115
116 Structuring Model Programs with Features and Composition
0
1
ClientSocket()
2
ServerSocket()
27
3
9
ClientSocket()
11
29
28
ServerClose()
4
ServerSocket()
ServerClose()
5
ServerBind() ClientSocket()
ServerClose() 7
ClientSocket()
6
ServerListen()
ServerClose()
ServerBind()
ServerClose() 8
ServerListen()
ServerClose()
10
ClientConnect()
ServerClose()
12
ServerAccept()
16
ServerSend(double("99.9"))
13
ServerCloseConnection()
14
ClientClose()
15
ClientSend()
17
ServerSend(double("100"))
18
ServerCloseConnection()
19
ClientReceive_Start()
ClientSend()
26
ServerClose()
20
ClientClose()
ServerCloseConnection() ServerCloseConnection()
ServerReceive()
22
ClientReceive_Start()
21
ServerCloseConnection()
ClientReceive_Finish(double("100"))
23
ServerClose()
24
ClientReceive_Start()
25
ClientReceive_Start() ClientReceive_Finish(double("100"))
ClientReceive_Finish(double("100"))
ClientClose() ClientSend() ServerClose()
30
ServerClose()
31
ClientReceive_Start()
ClientReceive_Finish(double("99.
Pages:
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176