Although many CASE tools have become commercially available, few software developers are actually using CASE tools. Finally, both hardware and protocols are usually designed so that the state space involved is relatively small or there is enough regularity that the state space can be reduced for purposes of analysis without hiding or introducing errors. Software is not designed with this type of discipline and often implements functions where it is impractical to work with small or highly regular state spaces. Such notations must provide a precise way for software developers, including specifiers, designers, implementors, and testers, to communicate. Moreover, only formally defined notations can be the basis for mechanical analysis which, in many cases, can automatically expose flaws in a program specification or a software design.
Tabular expressions offer a rigorous, relatively compact notation for specifying software behavior.
Many software developers find tabular expressions easier to prepare and easier to understand than notations, such as Z and Petri nets, and languages, such as temporal logic. For many years, software developers have been using tabular expressions to describe and specify programs. As early as the 1950s, decision tables were used to specify software requirements. In recent years, many techniques, some of them automated, have been developed to support software documentation and analysis using tabular expressions. Moreover, tabular expressions have been used to document the requirements of numerous practical systems, including avionics systems, systems controlling nuclear plants, and military systems.