1. A method for transforming user actions within a program into a testing automation finite state machine, the method comprising the steps of: automatically recording user actions taken as a user interacts with the program through user interface hardware; automatically capturing program status information before and after the user actions; outputting in human-readable form a listing of the recorded user actions; receiving an action grouping which specifies user action groups, each user action group including at least one of the recorded user actions; and automatically constructing a finite state machine based on the captured program status information and on the specified user action groups.