Reverse engineering and design recovery are two important concepts for the
evolutionary design of systems software. In particular, the reverse enginee
ring of distributed software, such as communications software, is a very ch
allenging practical problem. Most communications software is written withou
t the use of formal methods and is often poorly documented. Consequently, t
o maintain or modify such software, relevant details of the original design
need to be recovered from the executable software itself. This design reco
very process involves either static analysis of the code or dynamic analysi
s of the software behaviour based on selected execution traces. In this pap
er, we use the dynamic trace analysis approach. Specifically, based on exec
ution traces as represented at selected points of observation, we generate
a higher level design representation consisting of communicating finite sta
te machines (CFSMs) corresponding to the protocol design and service constr
aints. Further, the temporal and concurrent aspects of the protocol behavio
ur are also captured in the traces and are reflected in the recovered desig
n. (C) 1999 Elsevier Science B.V. All rights reserved.