Skip to main content
Log in

Programming faults and errors: Towards a theory of software incorrectness

  • Published:
Annals of Software Engineering

Abstract

Programming faults are defined in the framework of the program verification schema (proof outline). Component S in program P is faulty if P cannot be proved correct with the current implementation of S but it can be proved using the implementation specification for S. A programming error is a state that violates that specification. Conditions for error propagation and masking are expressed in terms of the relationships between the implementation and design specification of S, which defines the role of S in the overall design of P. Errors propagate due to the dependencies between program entities. It is shown that “classical” static dependencies, developed for the purpose of code optimization, are inadequate for the analysis of error propagation since they do not capture events that occur on individual paths through the program. A novel path analysis method is proposed to identify variables potentially corrupted on a same path due the existence of the fault. The method is based upon error propagation axioms. The axioms are used to define path relations for structured programming constructs. The relations provide a conservative structural approximation to the semantical theory of error creation and propagation and are shown useful in testing, debugging and static analysis.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Similar content being viewed by others

References

  • Backhouse, R.C. (1986), Program Construction and Verification, Prentice Hall, Englewood Cliffs, NJ.

    Google Scholar 

  • Bergerreti, J.F. and B.A. Carre (1985), “Information-Flow and Data-Flow Analysis of while-Programs,” ACM Transactions on Programming Languages and Systems 7,1, 37–61.

    Article  Google Scholar 

  • Budd, T.A., R.A. DeMillo, R.J. Lipton, and F.G. Sayward (1978), “The Design of a Prototype Mutation System for Program Testing,” In Proceedings of AFIPS National Computer Conference, pp. 623–627.

  • DeMillo, R.A. and A.J. Offutt (1991), “Constraint-Based Automatic Test Data Generation,” IEEE Transactions on Software Engineering 17,9, 900–910.

    Article  Google Scholar 

  • Ferrante, J., K.J. Ottenstein and J.D. Warrem (1987), “The Program Dependence Graph and Its Use in Optimization,” ACM Transactions Programming Language and Systems 9,3, 319–349.

    Article  MATH  Google Scholar 

  • Gries, D. (1981), The Science of Programming, Springer, New York.

    MATH  Google Scholar 

  • Harman, M. and S. Danicic (1995), “Using Program Slicing to Simplify Testing,” Journal for Software Testing, Verification and Reliability 5,3, 143–162.

    Article  Google Scholar 

  • Hamlet, R. (1987), “Probable Correctness Theory,” Information Processing Letters 25,1, 17–25.

    Article  MathSciNet  Google Scholar 

  • Haralick, R.B. (1974), “The Diclique Representation and Decomposition of Binary Relations,” Journal of ACM 21,3, 356–366.

    Article  MATH  MathSciNet  Google Scholar 

  • Hecht, M.S. (1977), Flow Analysis of Computer Programs, North-Holland, Amsterdam.

    MATH  Google Scholar 

  • Herman, P.M. (1976), “A Data Flow Analysis Approach to Program Testing,” The Australian Computer Journal 8,3, 347–354.

    Google Scholar 

  • Jones, C.B. (1990), Systematic Software Development using VDM, Prentice Hall, New York.

    MATH  Google Scholar 

  • Korel, B. and J. Laski (1988), “Dynamic Program Slicing,” Information Processing Letters 29,3, 155–163.

    Article  MATH  Google Scholar 

  • Korel, B. and J. Laski (1990), “Dynamic Slicing of Computer Programs,” Journal for Systems and Software 13,3, 187–195.

    Article  Google Scholar 

  • Laski, J. (1986), “An Algorithm for the Derivation of Codefinitions in Computer Programs,” Information Processing Letters 23, 85–90.

    Article  Google Scholar 

  • Laski, J. (1990), “Data Flow Testing in STAD,” The Journal of Systems Software 12,1, 3–14.

    Article  Google Scholar 

  • Laski, L. and P. Luczycki (1992), “System for Testing and Debugging STAD 1.0: User Perspective,” Technical Report CSE-92-03-1, Department of Computer Science and Engineering, Oakland University, Rochester, MI.

    Google Scholar 

  • Laski, J. and W. Szermer (1992), “Identification of Program Modifications and its Applications in Software Maintenance,” In Proceedings of the IEEE Conference on Software Maintenance, IEEE Computer Society Press, Los Alamitos, CA, pp. 282–290.

    Chapter  Google Scholar 

  • Laski, J., W. Szermer and P. Luczycki (1995), “Error Masking in Computer Programs,” Journal for Software Testing, Verification and Reliability 5,2, 81–105.

    Article  Google Scholar 

  • Lyle, J.R. and M. Weiser (1987), “Automatic Program Bug Location by Program Slicing,” In Proceedings of the Second International Conference on Computer Applications, IEEE Computer Society Press, Los Alamitos, CA, pp. 877–882.

    Google Scholar 

  • Miller, K.W., L.J. Morrell, R.R. Noonan, S.K. Park, D.M. Nicol, B.W. Murrill and J.M. Vaas (1992), “Estimating the Probability of Failure When Testing Reveals No Failures,” IEEE Transactions on Software Engineering 18,1, 33–43.

    Article  Google Scholar 

  • Morell, L.J. (1990), “A Theory of Fault-Based Testing,” IEEE Transactions on Software Engineering 16,8, 844–857.

    Article  Google Scholar 

  • Moriconi, M. and T.C. Winkler (1990), “Approximate Reasoning About the Semantic Effects of Program Changes,” IEEE Transactions on Software Engineering 16,9, 980–992.

    Article  Google Scholar 

  • Ntafos, S.C. (1984), “On Required Element Testing,” IEEE Transactions on Software Engineering SE-10,6, 795–803.

    Article  Google Scholar 

  • Ottenstein, K.L. and L.M. Ottenstein (1984), “The Program Dependence Graph in a Software Development Environment,” Proceedings of the ACM SIGPLAN/SIGSOFT Symposium on Practical Programming Environments, Also appears in ACM SIGPLAN Notices 19, 5, 177–184.

  • Podgurski, A. and L.A. Clarke (1990), “A Formal Model of Program Dependencies and Its Implications for Software Testing, Debugging, and Maintenance,” IEEE Transactions on Software Engineering 16,9, 965–979.

    Article  Google Scholar 

  • Rapps, S. and E. Weuyker (1985), “Selecting Software Test Data Using Data Flow Information,” IEEE Transactions on Software Engineering SE-11,4, 367–375.

    Article  Google Scholar 

  • Reiter, R. (1987), “Nonmonotonic Reasoning,” Annual Review of Computer Science 2, 147–186.

    Article  MathSciNet  Google Scholar 

  • Richardson, D.J. and M.C. Thompson (1988), “The RELAY Model of Error Detection and its Application,” In Proceedings of the 2nd Workshop on Software Testing, Verification and Analysis, IEEE Computer Society Press, Los Alamitos, CA, pp. 223–230.

    Chapter  Google Scholar 

  • Shoham, Y. (1990), “Nonmonotonic Reasoning and Causation,” Cognitive Science 14,2, 213–252.

    Article  Google Scholar 

  • Voas, J. (1992), “PIE: A Dynamic Failure-Based Technique,” IEEE Transactions on Software Engineering 18,8, 717–727.

    Article  Google Scholar 

  • Weiser, M. (1984), “Program Slicing,” IEEE Transactions on Software Engineering SE-10,4, 352–357.

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Rights and permissions

Reprints and permissions

About this article

Cite this article

Laski, J. Programming faults and errors: Towards a theory of software incorrectness. Annals of Software Engineering 4, 79–114 (1997). https://doi.org/10.1023/A:1018966827888

Download citation

  • Issue Date:

  • DOI: https://doi.org/10.1023/A:1018966827888

Keywords

Navigation