5 Graphical User Interface
Blastcomes with a rudimentary whose chief purpose is to make it easier to view
counterexample traces. In this section we discuss the GUI.
The GUI is started by the command blastgui.opt.
Source and predicate files are loaded in using File in the main toolbar,
or by entering the filenames in the appropriate text boxes and clicking the load button.
There are four sub-panes showing respectively a
log of events, the source file, the predicate file
and counterexample traces.
To run Blast, the user must first select the source file and then optionally
a predicate file and then type in the options in the text pane labelled options,
and click the Run button. If the system is free of errors, Blastwill (hopefully)
pop up a window saying so, if not, it will (hopefully) switch to the counterexample trace
pane showing a counterexample that violates the specification. We say hopefully as it is
possible as we saw before that Blastwill be be stuck at some point unable to find the right
predicates to continue. In this case also, the GUI moves to the counterexample trace pane
which now shows a trace on which Blastis stuck -- the user can then stare at the trace and
guess some predicates which can then be fed to Blast.
The Counterexample Trace Pane
The counterexample trace pane is broken into 3 subpanes -- the leftmost is the program source,
the middle pane is the sequence of operations that is the counterexample and the rightmost pane
contains the state of the system given by values for the various predicates in the top half
and the function call stack in the lower pane
at the corresponding points in the counterexample. One can see the state of the system at
different points of the trace by clicking on the corresponding operation in the middle pane.
When one chooses an operation in the middle pane, the corresponding program text is highlighted
in the left pane and the predicate values and control stack are shown in the right pane.
Alternatively, one can go back and forth along the trace using the arrows along the bottom.
-
FW/BK
The first pair move to the next and previous operation,
- Undo/Redo The second pair are like
web-browser buttons in that they move to the previous or next operation among the various
operations that have been hitherto selected,
- FF/REW The third pair move to the next or previous point in the trace where the values
of the predicates are different from the present values -- thus they skip over irrelevant
operations and proceed directly to the nearest operation that changes the values of the
predicates.
- Pred Change The fourth pair are used after first selecting some predicate
in the rightmost pane -- after selecting the predicate if one clicks the right (left) button
one is taken to the first operation in the future (past) where the value of that predicate is
about to (has just) change(d). This pair is used to see which operations cause a predicate to
get its value at some point in the trace.