Software Inspection Using CodeSurfer

Software Inspection is a technique for detecting flaws in software before deployment. It was introduced by Fagan in 1976 [12], and since then its use has spread widely. Despite the widespread adoption and success of software inspection, many software products continue to be released with large numbers of flaws. This can partly be attributed to the inherent complexity of software systems. The complexity of the software thwarts manual attempts to comprehend it. Furthermore, the ideal situation for conducting software inspections in the field may often not be feasible. Time, geographical, or other constraints may mean that the original author of the code is not available to explain the structure of the code or describe its intended properties. Documentation may be misleading or even missing. General-purpose program understanding tools are crucial if code is to be inspected efficiently. However such tools until now have mostly operated on the surface-level syntactic features of the code. Yet another difficulty is raised by the fact that safety or secuiry requirements of software may be extremely difficult to show using manual techniques. For example, regulatory authorities that specify standards for safety-critical programs such as the Federal Aviation Authority (FAA) or the Nuclear Regulatory Commision (NRC) sometimes require that programs involved in the control of components have specific properties such as “part A must be independent of part B”. It is a difficult and error-prone process for a human to determine whether these properties hold for a program. We believe that tools that allow reasoning about the deep structure of the code at a high level of detail will be extremely useful for doing software inspections. In this paper we describe how our own system—CodeSurfer—provides access to and queries on the system-dependence graph representation of a program for the purposes of helping with software inspections. The remainder of the paper is structured as follows. Section II presents some basic material on dependence graphs. Section III describes CodeSurfer—our system for program understanding. Section IV describes how queries on the system dependence dependence graph can be used for software inspection. Section V describes using model checking

[1]  Laurence Brothers,et al.  ICICLE: Intelligent code inspection in a C language environment , 1990, Proceedings., Fourteenth Annual International Computer Software and Applications Conference.

[2]  Michael Fagan Design and Code Inspections to Reduce Errors in Program Development , 1976, IBM Syst. J..

[3]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1987, TOPL.

[4]  Fraser Macdonald,et al.  Computer Supported Software Inspection , 1999 .

[5]  Thomas W. Reps,et al.  Speeding up slicing , 1994, SIGSOFT '94.

[6]  Thomas W. Reps,et al.  Program analysis via graph reachability , 1997, Inf. Softw. Technol..

[7]  Andreas Winter,et al.  A short introduction to the GXL software exchange format , 2000, Proceedings Seventh Working Conference on Reverse Engineering.

[8]  Barbara G. Ryder,et al.  A schema for interprocedural modification side-effect analysis with pointer aliasing , 2001, TOPL.

[9]  Thomas W. Reps,et al.  Precise interprocedural chopping , 1995, SIGSOFT FSE.

[10]  Wei-Tek Tsai,et al.  A distributed Collaborative Software Inspection tool - Design, prototype, and early trial , 1992 .

[11]  Manuvir Das,et al.  Unification-based pointer analysis with directional assignments , 2000, PLDI '00.

[12]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1990, TOPL.

[13]  Michael E. Fagan Design and Code Inspections to Reduce Errors in Program Development , 1976, IBM Syst. J..

[14]  Gregg Rothermel,et al.  System-dependence-graph-based slicing of programs with arbitrary interprocedural control flow , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[15]  Dexter Kozen,et al.  RESULTS ON THE PROPOSITIONAL’p-CALCULUS , 2001 .

[16]  Lynette I. Millett,et al.  Slicing Promela and its Applications to Model Checking, Simulation, and Protocol Understanding , 2002 .

[17]  Alastair Dunsmore,et al.  Comprehension and Visualisation of Object-Oriented Code for Inspections , 1998 .

[18]  Bernhard Steffen,et al.  Model Checking for Context-Free Processes , 1992, CONCUR.

[19]  Ira S. Moskowitz,et al.  A Network Pump , 1996, IEEE Trans. Software Eng..

[20]  Hausi A. Müller,et al.  The Software Bookshelf , 1997, IBM Syst. J..

[21]  Susan Horwitz,et al.  Incremental program testing using program dependence graphs , 1993, POPL '93.

[22]  Bjarne Steensgaard,et al.  Points-to analysis in almost linear time , 1996, POPL '96.

[23]  James R. Cordy,et al.  The TXL Programming Language , 1995 .

[24]  Stephan Merz,et al.  Model Checking , 2000 .

[25]  F. MacDonald,et al.  A review of tool support for software inspection , 1995, Proceedings Seventh International Workshop on Computer-Aided Software Engineering.

[26]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[27]  Thomas W. Reps,et al.  The use of program dependence graphs in software engineering , 1992, International Conference on Software Engineering.

[28]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1984, TOPL.