Fast Fortran Transformation Toolkit (FFTT)
ASTG is developing FFTT which enables model developers to create test "harnesses" for
legacy software written in Fortran. Such harnesses are invaluable
tools when maintaining and extending software because the
automatically detect and isolate model errors (bugs) as soon
as they are introduced. This extra security therefore enables
developers to make more substantial changes at lower risk and alters
the entire dynamics of software development.
FFTT grew from our experience in using our own pFUnit, which enables
test driven development in Fortran. Unfortunately, for legacy software
typically does not have any unit tests and only rarely is it straightforward
to construct suitable tests. Our approach is instead to assume that the
current application is working as expected and to capture that empirical
behavior within data files. FFTT provides tools that greatly simplify
the capturing of this empirical test data and then provides the means
to "replay" the same interface to see if the behavior of a
procedure has changed because of further developments. The package will
identify which routines have changed and which variables are incorrect.
The basic capabilities of FFTT are now nearly complete. We now expect
to add extensions that will be useful in the context of message passing
for parallelism. The same empirical data can drive both a serial and
a parallel implementation of a given algorithm, and in this manner a
developer can check a parallel implementation against a large number
of different scenarios rapidly and precisely. Previously developers would
typically test using an entire application which would provide very little
useful feedback when an error had been introduced. Further, the expense
of testing the entire application meant that only a handful of different
processor counts would be tested.
FFTT can also be useful when porting an application to a new architecture,
new compiler, or even altering compilation flags. FFTT can systematically
report on which interfaces are affected by the change and to what degree.
At the level of a full system, harmless roundoff can lead to large deviations
that may mask real errors. We expect that for most procedures, though,
the lower-level FFTT-based tests should distinguish between unavoidable
roundoff issues and differences that require further investigation.