1. A method comprising: determining sequence-execution constraints that constrain execution orders of a plurality of events of an event-driven software application; determining sequence-position constraints that constrain positions of the plurality of events in one or more possible event sequences of the plurality of events; determining event-relation constraints that each indicates a relationship between an event input and an event output of each of the plurality of events, each of the event-relation constraints being defined with respect to a respective symbolic input variable “a1” of its respective event input that is in code of the event-driven software application, a respective symbolic output variable “a1′” of its respective event output that is in the code of the event-driven software application, and a respective software function “f1” of the code of the event-driven software application that is associated with the respective event and that includes the respective symbolic input variable and the respective symbolic output variable, the event-relation constraints being defined based on a respective expression “a1→f1→a1′” that indicates that a value of the respective symbolic output variable “a1′” is generated by performing function “f1” with respect to a value of the respective symbolic input variable “a1”; forming a constraint set that enumerates the one or more possible event sequences and that includes the sequence-execution constraints, the sequence-position constraints, and the event-relation constraints; encoding control flow information of the one or more possible event sequences into the constraint set; solving the constraint set to determine one or more event sequences that satisfy the constraint set; and performing test generation operations on the one or more event sequences that satisfy the constraint set.