Methods and systems of testing software and modeling user actions are described.
In some embodiments, multiple different algorithms are provided for operating on
a software model. The software model describes behavior associated with software
that is to be tested. Different sets of algorithms can be selected for operating
on the software model to produce a sequence of test actions that are to be used
to test the software. The algorithms can be mixed and matched to achieve a desired
testing result. In some embodiments, the different algorithms comprise deterministic
algorithms, random algorithms, and various types of algorithms therebetween. In
one embodiment, the software model comprises a state graph having nodes that represent
state, and links between the nodes that represent actions. The different algorithms
that are available for selection can have different graph traversal characteristics
such that the state graph can be traversed in different manners. For example, algorithms
that are more local in their traversals can be teamed with algorithms that are
more global in their traversals, thus covering a wider area of the state space
with good local coverage in some areas.