Complexity measures for systems design

Noah Hall · 1983

A considerable amount of work has taken place in the area of software complexity measures during the past several years. Most of this work has addressed complexity measurement for source code or design language. For large (> 100,000 source lines of code), complex systems, additional techniques are needed to measure complexity during the software architecture phase of the lifecycle, prior to the time that major design decisions have been made. These measurement techniques should be intuitive, easy to apply, and should produce an internally consistent set of results. The principal result of this thesis is development of methods for measuring the software complexity associated with networks of communicating modules. These measures can be applied to systems that are at rest (static measures) and in execution (dynamic measures). The methods described herein are easy to apply, produce internally consistent results, and point out techniques which can be used to reduce complexity. These methods therefore address an area which previously has had little attention in terms of software complexity measures, namely the software architecture and software design phases of a software development project, when software modules and interfaces are defined. Methods developed include: (1) An application of the graph-theoretic measure developed by McCabe to software architectures, as represented by networks of communicating modules. The nodes in the network are modules, and the edges represent transfer of control and data between modules. (2) A general measure which allows the complexity associated with allocation of resources, such as CPU, tape, disk, etc., to be measured. (3) A method that combines module complexity and network complexity, so that design tradeoff studies can be done in order to determine whether it is advantageous to have distinct modules for service functions, such as mathematical subroutines, data management routines, etc. (4) Dynamic measures which allow measurement of network complexity during execution, including complexity which results from creation and deletion of modules, module interruption, etc.

Read the paper · More papers on PaperTik