1. A method for performing functional decomposition of a software design to generate a computer-executable finite state machine, the method comprising: decomposing functions in the software design into data transformations and control transformations repetitively until each of the decomposed data transformations consists of a respective linear code block; wherein the data transformations accept and generate data, and the control transformations evaluate conditions and send and receive control indications to and from associated instances of the data transformations; converting the software design to a graphical diagram including a plurality of graphical symbols interconnected to hierarchically represent the data transformations and the control transformations in the software design, wherein: a first type of the graphical symbols comprise bubble symbols indicating functional decomposition elements within the software design, and a second type of the graphical symbols comprise control flow indicators between the functions, which indicators have transformation-selection conditions associated therewith; and the bubble symbols include control bubbles and process bubbles, wherein the control bubbles indicate the control transformations, and the process bubbles indicate the data transformations; translating the data transformations and the control transformations into states in the finite state machine, wherein, at a given decomposition level, the first state is one of the control transformations and subsequent states each comprise a decomposed said linear code block with no control structure; and translating the transformation-selection conditions associated with the control transformations into state transitions in the finite state machine; wherein the translating steps are performed by a computer system.