On communication software testing (abstract only)

The past few years have seen a lot of activity in defining the functions provided by communication protocols and representing them in the form of layered architectures. (1, 2) The layered protocols have provided a means of separation of function in terms of layers in the communication software. Due to this separation of function the testing can be modularized to test each of the layer in entirety as a separate software package and then combining different layers and testing these as whole.Many communication protocols can be represented in a formal form. (3, 4) Most of these formal representations have been in the form of finite state machines, while some have been in the form of the grammars and some both. (5) Techniques have been suggested for the generation of test cases by using the formal representation of protocol. Specifically, by using some well known properties of finite state machines. Not all protocol functions are fully described by these representations therefore techniques for the generation of other test cases to test the whole layer of a protocol are suggested.Due to increasing complexity of protocols, it is recommended to split the layer of a protocol into various functional units, e.g. the link layer of the X.25, HDLC can be split into the following units i) Bit stuffing ii) Checksumming iii) Acknowledgements iv) Polling, etc. Each of these functional units begins with an initial state or set of states. For each state model the following technique can be used for generation of test cases: We assume that the given fsm for the function has the following characteristics 1) completely specified 2) minimal 3) starts with a fixed initial state and 4) every state is reachable.The test cases consist of set 'I' which covers all possible state transitions in the machine. One of the ways to construct the set 'I' is to build a “testing tree” of the fsm 'S'. All partial paths (a sequence of arcs) in 'S' constitute the set 'I'.A partial path starts at the root of the tree and ends either at a terminal or a non terminal node. Each branch in the tree is labeled with an input command/message. This 'I' is a set of input commands/messages from the lower layer of the protocol. Given an fsm 'S' of a functional unit of a protocol a testing tree 'T' can be constructed as follows: a) label the root of the tree 'T' with the initial state of 'S'. b) given level '1' of the tree to construct level '1+1' examine the nodes from left to right. A node is terminated if its label is the same as a non terminal at some level j where j=1. This avoids infinite loops, etc. If node is not terminated label it as i. If on input Ii the machine goes from state Si to Sj we attach a branch Ii and a lower level node Sj to Si in T. This process always terminates as there are only a finite number of states.Having generated the test cases for the function specified in the form of fsms we still have to generate test cases for the rest of the protocol layer which is represented in the form of abstract programs. It is recommended that path execution technique be applied at the abstract program part of the protocol also as that will generate paths only at the protocol functional level rather than at the program control level, therefore providing a more efficient technique for error detection.