Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Imprecise abstraction of observed terminal states #381

Open
GoogleCodeExporter opened this issue May 4, 2015 · 0 comments
Open

Imprecise abstraction of observed terminal states #381

GoogleCodeExporter opened this issue May 4, 2015 · 0 comments

Comments

@GoogleCodeExporter
Copy link

The consistent observed FSM states strategy (i.e., where two states in 
different traces with identical event histories are considered equivalent) runs 
into issues when one of the states is non-terminal and another state is 
terminal. The current strategy is to accumulate the terminal flag, that is we 
assume that a process can terminate at a state if this state was ever observed 
to be a terminal in any of the input traces.

Unfortunately, this strategy is insufficient to handle even simple cases that 
we haven't seen until now. Here is an example input log that cannot be parsed 
because the cross-product-based system state that is generated is considered 
terminal (due to the accumulation described above), while the channel contents 
associated with the state are non-empty. This is a problem because all terminal 
traces (observed, or synthetic) must terminate with empty channels.

Log:
1,0 M!a
1,1 M?a
--
1,0 M!a
1,1 M?a
2,0 M!a
2,2 M?a

Base args (omitting -o and --mcPath):
-r ^(?<VTIME>)(?<TYPE>)$
-s ^--$
-q M:0->1

Another way of seeing the problem is that consistent observed FSM states 
allowed us to perform efficient trace stitching. However, in the log above this 
leads to stitching the trace at process 2 in trace 1 (i.e., M?a) with the trace 
at process 1 in trace 2 (i.e., M!a, M!a). This leads to an abstract terminal 
(cross-product) state that contains an "a" in the channel.

There are two solutions to this issue, both requiring significant code change.

1. Treat terminal and non-terminal states with identical histories as different 
states, thus avoiding accumulating the terminal flag -- the root of the problem.

2. Create an exemption post-processing state that makes states as non-terminal 
if the associated channels are non-empty (the exemption is necessary to not 
outright remove these branches).

3. Ignore the generated inconsistent states altogether.


Re 1: Insufficient to solve the problem during the cross-product phase. Even 
for the log above, we'll get branches that need to be removed in a 
post-processing stage.

Re 2: The exemption step is non-trivial -- it's not clear when to apply it and 
when to not apply it (and delete the entire branch). This partly depends on 
whether or not the branch contains a unique trace (with proper termination).

Re 3: Easiest solution, but limits generalization. For the trace above this 
would result in eliminating partial orders of the second trace that are 
legitimate. This may cripple CFSM construction.

Original issue reported on code.google.com by bestchai on 7 Aug 2014 at 3:23

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant