1. A method of test generation for testing computer software, comprising the steps of: modeling a software application as a finite state machine to define a behavioral model; associating said behavioral model with a focus, said focus having a reference to said behavioral model, and having at least one directive; and generating a test program according to state transitions of said behavioral model and said directive of said focus.