. We
refer to the occurrence of a pattern in an abstract test as an
abstract test action, i.e., an abstract test is a sequence of
abstract test actions. The introduction of named constants Ci
leads to the object mapping in the MIM specification as
shown in Table IV. As such, the pattern miner results in a set
of abstract tests and a MIM specification.
IV. MINING EXECUTABLE SPECIFICATIONS
A. PrT Nets
PrT nets in this paper are a simplified version of those in
ISTA [1] (e.g., inhibitor arcs and reset arcs are not used). A
PrT net N is a tuple , where (a) P is a set
of places (i.e., predicates), T is a set of transitions, and F is a
set of arcs (b) L is a labeling function on arcs F. L(f) is a
label for arc f. Each label is a tuple of constants and
variables, (c) ϕ is a guard function on T. ϕ(t) is a guard
condition for transition t, (d) M0 is an initial marking.
Initial marking M0= ∪
p P
M p
∈
0( ) is a set of tokens
residing in place p. A token in p is a tuple of constants, denoted as p(X1, …, Xn). The zero-argument tuple
is denoted as <¢>.For token <¢> in p, we simply denote it
as p. We also associate a transition with a list of variables as
formal parameters, if any. Let p and t be a place and
transition, respectively. p is called an input (or output) place
of t if there is a normal arc from p to t (or from t to p). Let
x/V be a variable binding, meaning that variable x is bound to
value V. A variable substitution is a set of variable bindings.
Let θ be a variable substitution and l be an arc label. l/θ
denotes the tuple (or token) obtained by substituting each
variable in l for its bound value in θ. Transition t in a given
PrT net is said to be enabled by substitution θ under a
marking if (a) each input place p of t has a token that
matches l/θ, where l is the label of the normal arc from p to t;
(b) the guard condition of t evaluates true according to θ.
Enabled transitions can be fired. Firing an enabled
transition t with substitution θ under M0 removes the
matching token from each normal input place and adds new
token l/θ to each output place, where l is the label of the arc
from t to the output place. This leads to new marking M1. We
denote a firing sequence as M0 [t1θ1>M1…[tnθn>Mn, where ti
(1≤i≤n) is a transition, θi (1≤i≤n) is the substitution for firing
ti, and Mi (1≤i≤n) is the marking after ti fires, respectively. A
marking M is said to be reachable from M0 if there is such a
firing sequence that transforms M0 to M.
In Figure 2, T1-T5 are transitions (rectangles), whereas
Pbegin, P1, P2, pt1, pt2, and pt3 are places (circles). The arc
from pt1 to T1 is labeled by a tuple of variables .
If an arc is not labeled, the default label is the zero-argument
tuple <¢>. T1 is enabled by θ ={?x1/C1, ?x2/Mypswd1}
because token in pt1 matches /θ, and token in Pbegin matches <¢>.
B. Mining PrT Nets from Abstract Tests
Our approach to mining a PrT net from a set of abstract
tests consists of two steps. First, we synthesize a
place/transition net (traditional Petri net) from the abstract
tests without considering the actual parameters. Second, we
update the place/transition net into a PrT net according to the
actual parameters of the abstract tests. As the first step is not
the focus of this paper, we use an existing process miner in
the ProM tool [8] (http://promtools.org/prom5/), i.e., the
Parikh language-based region miner [9]. This miner was
successful in producing sound place/transition nets from the
abstract tests without the actual parameters in our empirical
studies (we found that the place/transition nets of the running
example produced by the well-known α algorithm [10] and
its extensions were incorrect). A place/transition net created
by the above miner consists of places, transitions, arcs, and
an initial marking. Each transition is corresponding to an
abstract test action (i.e., test pattern). The place/transition net
can reproduce all abstract tests without actual parameters in
that each abstract test is a firing sequence in the Petri net. To
deal with the actual parameters in the abstract tests, we
upgrade this net as follows. For each abstract test action with
actual parameters Ti(X1,…Y1,…), where X1,…Y1…, are actual
parameters of ?x1,…?y1,…, if place pti has not been created
before, we create place pti, add an arc from place pti to
268transition Ti, label the arc with < ?x1,…?y1…>, and associate
(?x1,…?y1…) with Ti as its formal parameters. In addition, we
add token to place pti in the initial marking. For
the running example, we obtain the net in Figure 2.
Theorem 1. The MID specification (PrT net and MIM)
mined from the given Selenium tests can reproduce all
Selenium tests if the place/transition net mined from the
abstract tests without actual parameters is reproducible.
Proof. For the given Selenium tests, the MID
specification is produced by the following steps:
(1) Transforming Selenium tests into normalized tests
(Section III.A)
(2) Transforming normalized tests into abstract tests and
MIM (Section III.B)
(3) Transforming abstract tests and MIM into Petri net
and MIM (MID) (this Section)
The theorem can be proved by demonstrating that each of
the above steps is reversible. In step (1), each Selenium test
< e1, e2,…, en> is transformed into a normalized test with actual parameters for each ei’(1≤i≤n).
They have the same semantics because ei is equivalent to the
definition of ei’ after variables ?x and ?y (if they exist) are
substituted for their actual parameters. In step (2), each
normalized test is converted into an
abstract test with actual parameters of Ti, where
Ti is specified by a sequence of normalized test actions in the
“methods” section of the MIM specification and the actual
parameters may use constants in the “objects” section of the
MIM specification. For each abstract test , we
can replace the actual parameters of Ti with the
corresponding constants, replace Ti with the corresponding
sequence of test actions, and replace the variables with the
corresponding actual parameters. This will exactly result in
the corresponding normalized test . In step
(3), we can prove that each abstract test with
actual parameters of Ti is a firing sequence in the resultant
PrT net. According to the assumption that the
place/transition net mined from the abstract tests without
actual parameters is reproducible, is a firing
sequence in the place/transition net. For any i (1≤i≤k), in the
place/transition net, each input place of Ti has at least one
token before Ti is fired under marking Mi. If Ti has no actual
parameter, it has the same input places in the PrT net as in
the place/transition net. Thus, Ti is firable in the PrT net. If Ti
has actual parameters X1,…,Y1….. In the PrT net, Ti has an
additional input place pti with arc label .
The initial marking, however, has a token < X1,…,Y1….> in
pti. This token remains in pti after Tj (j≤i) are fired because
firing of Tj does not remove this token. Therefore, Ti is
firable with respect to substitution {?x1/X1,…,?y1/Y1….}. In
summary, each abstract test is a firing sequence
in the PrT net. This abstract test can be transformed into a
normalized test ,which is corresponding to
the original Selenium test.
The PrT net mined from a given Selenium test suite is an
executable model of the abstract behaviors of the tests. ISTA
provides a stepwise simulator that can replicate all abstract
tests in the net. In Figure 2, for example, T1 is highlighted (in
red) because it is firable under the initial marking. If we fire
T1, the marking will be updated and the transitions enabled
under the new marking will be highlighted.
Mining behavior models from test cases is the reverse
process of model-based testing. Model-based testing consists
of generation of abstract tests from a model (e.g., PrT net or
finite state machine) and transformation of abstract tests into
concrete tests (e.g., Selenium tests). Tests generated from a
model are abstract because the model is an abstract
description of the system under test. Transformation of
abstract tests into concrete tests maps each test action into an
executable form, such as Selenium test actions. Mining a
behavior model from abstract tests is the opposite of test
generation from a model, whereas pattern mining (grouping
concrete test actions into abstract test actions) is the opposite
of transforming abstract test actions into concrete test
actions. It is worth pointing out that test cases used to mine a
behavior model are not necessarily generated from models.
However, the process of creating system tests often includes
test generation from test requirements or implicit mental
models and transformation of these tests into an executable
form. In this sense, mining an abstract model from concrete
tests depends on the reversibility of both test generation and
test transformation.
C. Applications
While model mining techniques have been used for
various purposes (e.g., program understanding, debugging,
and conformance verification), our approach allows for
additional applications due to the ability to mine executable
specifications that can completely reproduce the original
tests. In the following, we briefly discuss several
applications.
Incremental modeling: Modeling is useful for
understanding the behavior of a system and verifying
conformance to the system requirements. Our approach can
facilitate interactive and incremental modeling. When trying
to understand an existing system, a user can perform some
exploratory tests, synthesize a model from the tests, edit the
model or the MIM specification, perform more tests,
synthesize a new model, and so on. This is particularly
beneficial for reverse engineering and incremental
development.
Test updating: System testing often requires a large
number of test cases. Maintenance of system tests is a nontrivial task. One problem is that many tests may need to be
updated with respect to a particular function due to the
changes of requirements, design or implementation. Due to
system changes, for example, we may not be able to replay
the tests recorded by a record-replay tool like Selenium IDE.
Our approach can alleviate this problem. A pattern of test
actions often represent a high-level function. We can easily
modify the sequence of test actions in a pattern so as to
update the original tests. In this case, the abstract tests and
the model may remain unchanged.
Automated test selection and prioritization: In software
development process, regression testing is conducted from
time to time because of frequent requirements changes. As
test execution can be very time-consuming, test selection and
test prioritization have been two regression testing problems.
269Test selection is to select a subset of the existing tests. Test
prioritization is to sort a set of tests so that test failures, if
they exist, can be reported as early as possible. Our work
provides an automated model-based approach to addressing
these problems. The model mined from the given test cases
can be used to automatically select and prioritize the original
tests according to test coverage criterion (e.g., transition
coverage) of the model. Consider transition coverage of the
model in Figure 2, the first two tests can be selected.
Generation of new executable tests: Our approach can
be used to generate new executable tests from the mined
MID specification (PrT net and MIM description). The
generation and execution of these tests needs no human
intervention. We can use the test generators for coverage
criteria of PrT nets (e.g., transition coverage, state coverage,
and round-trip) or the random generator to produce new
tests. Before test generation, we can also provide new test
parameters in the PrT net and new test oracles in the concrete
test actions in the MIM description. Our approach is
particularly useful for permutation of existing test data. For
example, the Selenium tests in the running example include
such test data as user accounts, quantities, and products.
ISTA can automatically generate new executable tests that
cover all combinations of these user accounts, quantities, and
products. It is worth pointing out that, while the net mined
from a test suite can reproduce all original tests, it also
includes behaviors beyond the given tests. A new test
derived from the net may not be valid. Consider a test suite
that involves a normal customer and a system administrator.
A new test resulting from the permutation of test data may
test system administration functions through a normal
customer account. This is invalid although it can be modified
to produce a useful negative test. To produce effective
behavior models, we may classify tests into different pools
before mining.
V. EMPIRICAL STUDIES
The main aspects of our approach consist of the pattern
mining and model mining techniques. Theorem 1 in Section
IV demonstrates that our model mining technique is sound.
Therefore, our empirical studies focus on the following
questions that aim at evaluating our pattern miner.
(1) Do the discovered patterns of test action reflect
high-level functions and do the mined models
represent meaningful system behaviors?
(2) To what extent does the pattern mining reduce the
complexity of behavior model?
(3) To what extent does the pattern mining reduce the
transition coverage tests?
Table VII is the list of Selenium test suites used in our
empirical studies. They were created for two systems:
Magento [11] and Amazon (amazon.com). Tests were
created with different levels of automation:
• Full automation (test suites 1 and 2): Selenium tests
are generated completely from given MID
specifications by ISTA. These tests came from our
previous work on model-based generation of
security tests from threat models [11].
• Partial automation (test suites 3-6): Abstract tests are
generated from MID specifications (using PrT nets,
not MIM descriptions) by ISTA. Concrete tests are
derived and performed manually.
• No-automation (test suites 7-8): Abstract tests are
created without a formal test model and concrete
tests are derived and performed manually.
Test suite 5 is a subset of test suite 6 for comparing
model mining with and without the pattern mining technique.
ProM that is used to mine a place/transition net from a test
suite could not handle the entire set of tests in test suite 6 if
the pattern miner was not applied. The size of test suite 5
(35) is the maximum number of raw Selenium tests in test
suite 6 that ProM could process. This is similar for test suite
7, a subset of test suite 8. The size of test suite 7 (31) is the
maximum number of raw Selenium tests in test suite 8 that
ProM could process.
TABLE VII. SELENIUM TEST SUITES IN THE EMPICIAL STUDIES
No Description #
Tests
# Selenium
Actions
#Average
Actions
1 Magento XSS tests 8 78 9.75
2 Magento SQL injection
tests
12 135 11.25
3 Magento function tests 15 222 14.8
4 Magento function tests 25 334 13.36
5 Magento function tests 35 877 25
6 Magento function tests 121 3,778 27.91
7 Amazon function tests 31 525 17
8 Amazon function tests 74 1,477 19.95
A. Quality of Patterns and Models
For all the test suites, the discovered patterns of Selenium
test actions represent meaningful functions, like those in the
running example (such as “add item”). The models all
capture the interactions of these functions in the given tests.
They only reflect partial behaviors of the underlying system,
though. For test suites 1-6, we also compared the mined
models with the pre-existing models from which the tests
were generated. A main difference is that a sequence of
transitions (abstract test actions) in a pre-existing net is
corresponding to one transition in the mined net. This is due
to the “greedy” nature of the pattern miner, which always
tries to find the longest subsequence. Consider again the
running example. Suppose the third test ST3 is not used. T1
(“login”) and T3 (“add item”) would be merged into one
larger pattern, which means “log in and add item”. This has
two implications. First, the pattern miner depends on
coverage of functions by the test suite as well as the size of
the test suite. Second, the pattern miner may not be the best
solution to automatic abstraction, if best abstraction can be
defined at all. One potential improvement is to introduce
additional pattern parameters (e.g., maximum size).
Table VIII shows the number of patterns and the number
of abstract test actions for each test suite. “Reduction of test
actions” = (number of Selenium test actions - number of
abstract test actions)/number of Selenium test actions. The
reduction of test actions by the pattern miner ranges from
45% to 78%. An interesting finding is that the discovered
patterns in test suites 5 and 6 are the same (test suite 5 is a
270subset but covers the same functions) and the discovered
patterns in test suites 7 and 8 are the same (test suite 7 is a
subset but covers the same functions). This indicates that,
although mining a meaningful behavior model may require a
certain number of tests, the increase in test suite size does not
always improve accuracy.
TABLE VIII. PATTERNS AND ABSTRACT TESTS
No #Patterns #Average
Pattern Size
#Abstract
Test Actions
Reduction of
Test Actions
1 11 1.54 31 58%
2 8 4.25 42 69%
3 8 2 78 65%
4 8 1.75 154 54%
5 6 4.66 240 73%
6 6 4.66 841 78%
7 12 1.5 277 47%
8 12 1.5 80 45%
B. Pattern Mining vs. Model Complexity
Given a test suite, we may synthesize a PrT model
without using the pattern miner although this can be too
complex to manage. Due to the pattern miner, however, our
approach can reduce the complexity of the resultant model.
Table IX shows how the pattern miner has reduced the
complexity of the resultant models for the given test suites,
where T and P stand for transitions and places, respectively.
The reduction in number of transitions ranges from 35% to
85%, and the reduction in number of places ranges from 26%
to 86%. The reduction rate is not applicable to test suite 6 or
test suite 8 because ProM could not process the Selenium
tests when the pattern miner was not used.
TABLE IX. PATTERN MINING AND REDUCTION OF COMPLEXITY
No Without Mining With Mining Complexity Reduction
#T #P #T #P %T %P
1 17 11 11 5 35% 55%
2 46 36 8 5 78% 86%
3 29 32 6 14 79% 56%
4 18 22 8 12 56% 45%
5 41 31 6 14 85% 55%
6 N/A N/A 6 14 N/A N/A
7 43 27 12 20 72% 26%
8 N/A N/A 12 20 N/A N/A
C. Pattern Mining and Transition Coverage Tests
In a mined PrT net, each transition represents one or
more Selenium test actions. One strategy for regression test
selection is to cover these test actions at least once. Table X
shows the impacts of the pattern miner on the number of
tests for transition coverage of the mined models. For large
test suites 6 and 8, only a few (yet lengthy) tests are needed
to cover all transitions after the pattern miner is applied. This
is because the resultant models are strongly connected. For
test suites 2-5 and 7, the reduction of transition coverage
tests ranges from 33% to 85%. An exceptional case is test
suite 1, where the pattern miner does not reduce the
transition coverage tests. The reason is that the tests in test
suite 1 were derived from a test tree generated by ITSA. The
mined model is also a tree structure - the transition coverage
tests need to exercise all leaves of the tree.
TABLE X. PATTERN MINING AND TRANSITION COVERAGE TESTS
In summary, the empirical studies based on real-world
applications have demonstrated that our approach can
produce useful specifications from Selenium tests. The main
threats to validity are due to the small number of applications
and test suites, the size of the test suites (the largest test suite
has only 121 tests), and the average length of the tests (the
longest is 27.9 Selenium test actions).
VI. RELATED WORK
This paper is related to two areas of research: testing
mining and process mining.
A. Test Mining
Existing test mining research falls into two categories: (a)
detecting invariants over data values or event sequences, and
(b) generating state transition models from execution traces.
This paper is related to the latter. Most existing approaches
are based on the kTail algorithm [12] or its variants. kTail
merges states based on the similarity of the next k
invocations in the trace. GK-tail [13] generates Extended
Finite State Machines (EFSMs) from positive invocation
sequences and uses Daikon to infer from values the
constraints on state transitions. Walkinshaw and Bogdanov
[14] and Lo et al. [15] augment the inference of FSMs with a
steering mechanism based on temporal properties. Schmerl
et al. [16] proposed techniques for discovering software
architectures from execution traces. While this paper bears
similarity to the above work on mining state models, there
are several differences. First, our approach produces a PrT
net, rather than FSM or EFSM. PrT nets are more expressive
in that they can model and simulate both control flows and
data flows. Second, our approach produces a model from
GUI-based Selenium tests. As discussed in Section II.B,
these tests are different from program tests that are
composed of method invocations. The existing techniques do
not mine patterns of test actions. Third, in our approach, all
tests are completely reproducible from the resultant
specification. Jääskeläinen et al. [17] presented a domainspecific approach for synthesizing test models from GUI
tests of smartphone applications. It is domain-specific in that
the set of keywords and the corresponding weight values
must be decided based on the domain knowledge. To achieve
useful models, this approach relies on human interaction to
merge test cases. The synthesized model tends to be complex
due to the lack of pattern discovery from GUI tests. Synoptic
[5] produces a model of system logs that satisfies temporal
invariants. It uses regular expressions for clustering contextinsensitive events in the logs. It is not concerned with pattern
mining or reproducibility.
No Without Mining With Mining Reduction %
1 8 8 0%
2 12 5 58%
3 6 1 83%
4 3 2 33%
5 7 2 71%
6 N/A 2 N/A
7 21 5 76%
8 N/A 5 N/A
271B. Process Mining
Creating an accurate workflow model is a complicated
time-consuming and error-prone process. Execution logs are
often the only means for gaining insight into the ongoing
processes [10]. Process mining aims to extract workflow
models from the process execution logs, also called event
logs, audit trails, or transaction logs [18]. Process mining has
been used for the discovery, conformance analysis, and
extension of workflow models. The focus of most research is
on mining heuristics based on ordering relations of events in
the process log. Although we use a process miner for
producing a place/transition net from abstract tests, our work
is different from process mining. First, process mining
assumes that the set of events is given. Our approach needs
to discover such a set of events (i.e., patterns). The pattern
miner is different from the pre-processing of process mining,
e.g., for removing noise in the log or using event timestamps
to extract causality information. Second, workflow nets
focus on the control-flow aspect of workflows [19]. Mining
is based on the temporal ordering of event occurrences in the
logs. Places in the resultant workflow net are created to
represent the control dependency, not data dependency.
Rozinat et al. [20] considered data dependency by using
colored Petri nets as process models. They analyzed data
dependency at single decision points to determine guard
condition of individual transitions after the net structure is
mined by the α algorithm [10]. This approach is unable to
reproduce the sequences or the actual parameters.
VII. CONCLUSIONS
We have presented the approach to mining an executable
specification from a given Selenium IDE test suite. The
resultant specification provides an abstract behavior model
that captures the interactions of the tests. This is very useful
for understanding the system under test. The specification
can also be used to select tests for regression testing and
generate new executable tests. Our work also demonstrates
that the two opposite processes of model mining and modelbased test generation can be integrated into one framework.
This round-trip paradigm can provide an effective means for
interactive model synthesis, simulation, and test generation.
For example, a major barrier to applying model-based testing
is the building of high quality test models. The model
synthesized from some exploratory tests can serve as a
starting point for building a comprehensive test model.
In this paper, our approach was evaluated by a number of
test suites for real-world systems. However, the evaluation
was limited in the size of test suites and the length of
individual tests. Our future work will further evaluate the
scalability of our approach and its impact on model-based
selection and prioritization of regression tests by using much
larger test suites. In addition, Selenium IDE tests are
essentially GUI-based system tests. We plan to investigate
how our approach can be adapted to mining specifications
from test suites produced by other record and replay tools.
ACKNOWLEDGMENT
This work was supported in part by the open projects
program of the State Key Laboratory of Novel Software
Technology, Nanjing University, China.
REFERENCES
[1] D. Xu, “A tool for automated test code generation from high-level
Petri nets,” Proc. of Petri Nets’2011, LNCS 6709, pp.308-317.
[2] H.J. Genrich, “Predicate/transition nets,” Petri Nets: Central Models
and Their Properties, 207–247, 1987.
[3] D. Xu, and K.E. Nygard, “Threat-driven modeling and verification of
secure software using aspect-oriented Petri nets,” IEEE Trans. on
Software Engineering. Vol. 32, No. 4, April 2006, pp. 265-278.
[4] D. Xu, J. Yin, Y. Deng, J. Ding, “A formal architectural model for
logical agent mobility,” IEEE Trans. on Software Engineering, vol.
29, no.1, January 2003, pp. 31-45.
[5] I. Beschastnikh, Y. Brun, S. Schneider, M. Sloan, and M.D. Ernst,
“Leveraging existing instrumentation to automatically infer invariantconstrained models,” Proc. of ESEC/FSE’11, Sept. 2011, Hungary.
[6] V.D. Blondel, A. Gajardo, M. Heymans, M. Senellart, and P. V.
Dooren, “A measure of similarity between grahph vertices:
applications to synonym extraction and web searching,” SIAM
review. 46(4), 647-666, 2004.
[7] D. Gusfield, Algorithms on Strings, Trees and Sequences: Computer
Science and Computational Biology. 1999. USA: Cambridge
University Press.
[8] B. van Dongen, A. de Medeiros, H. Verbeek, A. Weijters, W. van der
Aalst, “The ProM framework: A new era in process mining tool
support,” Petri Nets’05. LNCS Vol. 3536, pp.444-454,.
[9] J.M. Werf, B.F. Dongen, C.A. Hurkens, A. Serebrenik, “Process
discovery using integer linear programming,” Petri Nets’08, pp. 368-
387, 2008, Springer-Verlag.
[10] W.M.P. van der Aalst, A.J.M.M. Weijters, and L. Maruster,
“Workflow mining: discovering process models from event logs,”
IEEE TKDE, 16(9):1128-1142, 2004.
[11] L. Thomas, W. Xu, D. Xu, “Mutation analysis of Magento for
evaluating threat model-based security testing,” Proc. of the 3rd IEEE
International Workshop on Software Test Automation (STA’11), in
conjunction with COMPSAC 2011, Munich, Germany, July 2011.
[12] A. Biermann, and J. Feldman, “On the synthesis of finite state
machines from samples of their behavior,” IEEE Transactions on
Computers, 21:592–597, 1972.
[13] D. Lorenzoli, L. Mariani, M. Pezzè, “Automatic generation of
software behavioral models,” Proc. of ICSE’08, pp. 501-510, Leipzig.
[14] N. Walkinshaw, and K. Bogdanov, “Inferring finite-state models with
temporal constraints,” Proc. of ASE’08, pp. 248-257.
[15] D. Lo, L. Mariani, and M. Pezzè, “Automatic steering of behavioral
model inference,” Proc. of ESEC/FSE'09, pp. 345-354, Amsterdam.
[16] B. Schmerl, J. Aldrich, D. Garlan, R. Kazman, and H. Yan,
“Discovering architectures from running systems,” IEEE Trans. on
Software Engineering, Vol. 32, No. 7, pp.454-466, 2006.
[17] A. Jääskeläinen, A. Kervinen, M. Katara, A. Valmari, and H.
Virtanen, “Synthesizing test models from test cases,” Proc. of the 4th
International Haifa Verification Conf. on Hardware and Software:
Verification and Testing, pp. 179-193, 2009.
[18] R. Agrawal, D. Gunopulos, and F. Leymann, “Mining process models
from workflow logs,” Proc. of the Sixth International Conf. on
Extending Database Technology, pp. 469-483, 1998.
[19] W.M.P. van der Aalst, “The application of Petri nets to workflow
management,” The Journal of Circuits, Systems and Computers,
8(1):21–66, 1998.
[20] A. Rozinat, R.S. Mans, M. Song, W.M.P. van der Aalst, “Discovering
colored Petri nets from event logs,” International Journal on Software
Tools for Technology Transfer (STTT) 10(1): 57-74, 2008.
272