The Logic of Correctness in Software Engineering

  • Mark PriestleyEmail author
Part of the History of Computing book series (HC)


This chapter describes the approach taken by those working in the Algol research programme to the problem of how to improve the quality of software development and in particular to ensure that software systems met their users’ expectations and were completed economically and on schedule. These concerns came to prominence in the mid-1960s in response to a perceived software crisis, and were extensively discussed at the well-known NATO conference in 1968 which brought the term ’software engineering’ to prominence. Two major results emerged from this work. Firstly, a novel notion of ’correctness’ was defined for software, namely the existence of a particular type of consistency between a program and its specification. Secondly, practical programming techniques were put forward which, it was hoped, would increase the likelihood of correct programs being developed.


Software Development Software Engineering Inference Rule Structure Programming Program Correctness 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. Aiken, H.H., Hopper, G.M.: The Automatic Sequence Controlled Calculator. Electr. Eng. 65, 384–391, 449–454, 522–528 (1946) MathSciNetCrossRefGoogle Scholar
  2. Baker, F.T.: Chief programmer team management of production programming. IBM Syst. J. 11(1), 56–73 (1972a) CrossRefGoogle Scholar
  3. Baker, F.T.: System quality through structured programming. In: AFIPS Proceedings of the 1972 Fall Joint Computer Conference. AFIPS Conference Proceedings, vol. 41, pp. 339–344. AFIPS Press, Montvale (1972b) Google Scholar
  4. Basili, V.: The role of experimentation in software engineering: past, present and future. In: ISCE’96: Proceedings of the 18th International Conference on Software Engineering, pp. 442–449. IEEE Comput. Soc., Los Alamitos (1996) CrossRefGoogle Scholar
  5. Bauer, F.L., Wössner, H.: The “Plankalkül” of Konrad Zuse: A forerunner of today’s programming languages. Commun. ACM 15(1), 678–685 (1972) zbMATHCrossRefGoogle Scholar
  6. Bemer, R.W.: Computing prior to FORTRAN. Ann. Hist. Comput. 6(1), 16–18 (1984) Google Scholar
  7. Benington, H.D.: Production of large computer programs. In: Proceeding of the Symposium on Advanced Programming Methods for Digital Computers, pp. 15–28. Office of Naval Research, Arlington (1956) Google Scholar
  8. Bloch, R.M.: Programming Mark I (1999). In: Cohen, I.B., Welch, G.W. (eds.) Makin’ Numbers: Howard Aiken and the Computer. MIT Press, Cambridge (1999) Google Scholar
  9. Boehm, B.W.: Software engineering. IEEE Trans. Comput. C-25(12), 1226–1241 (1976) CrossRefGoogle Scholar
  10. Boehm, B.W.: Verifying and validating software requirements and design specifications. IEEE Softw. 1(1), 75–88 (1984) CrossRefGoogle Scholar
  11. Brooker, R.A., Gill, S., Wheeler, D.J.: The adventures of a blunder. Math. Tables Other Aids Comput. 6(38), 112–113 (1952) CrossRefGoogle Scholar
  12. Callon, M.: Society in the making: the study of technology as a tool for sociological analysis. In: Bijker, W.E., Hughes, T.P., Pinch, T.J. (eds.) The Sociological Construction of Technological Systems, pp. 83–103. MIT Press, Cambridge (1987) Google Scholar
  13. Dasgupta, S.: Design Theory and Computer Science. Cambridge University Press, Cambridge (1991) CrossRefGoogle Scholar
  14. Diehm, I.C.: Computer aids to code checking (1952). In: Forrester, J.W., Hamming, R.W. (eds.) Proceedings of the 1952 ACM National Meeting, Toronto, pp. 19–21 (1952) Google Scholar
  15. Dijkstra, E.W.: Some meditations on advanced programming (1962b). In: Popplewell, C.M. (ed.) Information Processing 1962: Proceedings of IFIP Congress, vol. 62, pp. 535–538. North-Holland, Amsterdam (1963) Google Scholar
  16. Dijkstra, E.W.: A constructive approach to the problem of program correctness. BIT Numer. Math. 8, 174–186 (1968a) zbMATHCrossRefGoogle Scholar
  17. Dijkstra, E.W.: The structure of the “THE”-multiprogramming system. Commun. ACM 11(5), 341–346 (1968c) zbMATHCrossRefGoogle Scholar
  18. Dijkstra, E.W.: EWD249: notes on structured programming (1969a). Unpublished manuscript, available at (accessed 4 May 2008). Circulated as Dijkstra (1970), and published with additional material as Dijkstra (1972)
  19. Dijkstra, E.W.: Structured programming. In: Buxton, J.N., Randell, B. (eds.) Software Engineering Techniques: Report on a Conference Sponsored by the NATO Science Committee, Rome, Italy, 27th to 31st October 1969, pp. 84–88. NATO (1969b) Google Scholar
  20. Dijkstra, E.W.: Notes on structured programming (1972). In: Dahl, O.-J. et al. (eds.) Structured Programming, pp. 1–82. Academic Press, San Diego (1972) Google Scholar
  21. Donaldson, J.R.: Structured programming. Datamation 19(12), 52–54 (1973) Google Scholar
  22. Fetzer, J.H.: Program verification: the very idea. Commun. ACM 31(9), 1048–1063 (1988) CrossRefGoogle Scholar
  23. Floyd, R.W.: Assigning meanings to programs. In: Schwartz, J.T. (ed.) Mathematical Aspects of Computer Science. Proceedings of Symposia in Applied Mathematics, vol. XIX, pp. 19–32. American Mathematical Society, Providence (1967) CrossRefGoogle Scholar
  24. Floyd, R.W.: Toward interactive design of correct programs (1971). In: Freiman, C.V. (ed.) Information Processing 71: Proceedings of the IFIP Congress, vol. 71, pp. 7–10. North-Holland, Amsterdam (1972) Google Scholar
  25. Gerhart, S.L., Yelowitz, L.: Observations of fallibility in applications of modern programming methodologies. IEEE Trans. Softw. Eng. SE-2(3), 195–207 (1976) MathSciNetCrossRefGoogle Scholar
  26. Gill, S.: The diagnosis of mistakes in programmes on the EDSAC. Proc. R. Soc. Lond. Ser. A, Math. Phys. Sci. 206, 538–554 (1951) zbMATHCrossRefGoogle Scholar
  27. Gill, S.: Getting programmes right. In: Automatic Digital Computation, pp. 289–292. National Physical Laboratory, HMSO, London (1953). Reprinted in Williams and Campbell-Kelly, pp. 209–498 (1989) Google Scholar
  28. Gill, S.: Current theory and practice of automatic programming. Comput. J. 2(3) (1959) Google Scholar
  29. Goldstine, H.H., von Neumann, J.: Planning and coding problems for an electronic computing instrument, Part II, vol. 1. Technical Report, Institute of Advanced Study (1947). Reprinted in Aspray and Burks, pp. 151–222 (1987) Google Scholar
  30. Goodenough, J.B., Gerhart, S.L.: Toward a theory of test data selection. IEEE Trans. Softw. Eng. SE-1(2), 156–173 (1975) MathSciNetCrossRefGoogle Scholar
  31. Henderson, P., Snowdon, R.: An experiment in structured programming. BIT Numer. Math. 12, 38–53 (1972) zbMATHCrossRefGoogle Scholar
  32. Hoare, C.A.R.: An axiomatic basis for computer programming. Commun. ACM 12(10), 576–580 (1969) zbMATHCrossRefGoogle Scholar
  33. Hoare, C.A.R.: Proof of a program: FIND. Commun. ACM 14(1), 39–45 (1971) zbMATHCrossRefGoogle Scholar
  34. Hoare, C.A.R.: How did software get so reliable without proof? In: Gaudel, M.-C., Woodcock, J. (eds.) FME’96: Industrial Benefit and Advances in Formal Methods. Proceedings of the Third International Symposium of Formal Methods Europe. Lecture Notes in Computer Science, vol. 1051, pp. 1–17. Springer, Berlin (1996) CrossRefGoogle Scholar
  35. Katz, C.: Systems of debugging automatic coding. In: Automatic Coding: Proceedings of the Symposium, 24–25 January 1957. Franklin Institute, Philadelphia (1957). J. Franklin Inst., Monograph No. 3, pp. 17–27 Google Scholar
  36. Knuth, D.E.: Structured programming with go to statements. ACM Comput. Surv. 6(4), 260–301 (1974) MathSciNetCrossRefGoogle Scholar
  37. Lakatos, I. (ed.): Problems in the Philosophy of Mathematics. North-Holland, Amsterdam (1967) zbMATHGoogle Scholar
  38. Larman, C., Basili, V.R.: Iterative and incremental development: a brief history. Computer 36(6), 47–56 (2003) CrossRefGoogle Scholar
  39. Ledgard, H.F.: The case for structured programming. BIT Numer. Math. 14, 45–57 (1974) zbMATHCrossRefGoogle Scholar
  40. Liskov, B.: Report of session on structured programming. ACM SIGPLAN Not. 8(9), 5–10 (1973) CrossRefGoogle Scholar
  41. Liskov, B.H., Zilles, S.N.: Specification techniques for data abstractions. IEEE Trans. Softw. Eng. SE-1(1), 7–19 (1975) CrossRefGoogle Scholar
  42. Manna, Z., Waldinger, R.J.: Toward automatic program synthesis. Commun. ACM 14(3), 151–165 (1971) zbMATHCrossRefGoogle Scholar
  43. Manna, Z., Waldinger, R.J.: The logic of computer programming. IEEE Trans. Softw. Eng. SE-4(3), 199–229 (1978) MathSciNetCrossRefGoogle Scholar
  44. McCarthy, J.: A basis for a mathematical theory of computation, preliminary report. In: Proceedings of the Western Joint Computer Conference, pp. 225–238 (1961) Google Scholar
  45. McCarthy, J.: Towards a mathematical science of computation (1962). In: Popplewell, C.M. (ed.) Information Processing 1962: Proceedings of IFIP Congress, vol. 62, pp. 21–28. North-Holland, Amsterdam (1963) Google Scholar
  46. McCracken, D.: Revolution in programming: an overview. Datamation 19(12), 50–52 (1973). Reprinted in Yourdon (1979) Google Scholar
  47. McCracken, D.D., Jackson, M.A.: Life cycle concept considered harmful. Softw. Eng. Notes 7(2), 29–32 (1982) CrossRefGoogle Scholar
  48. Miller, J.C.P.: Remarks on checking (1949). In: Report of a Conference on High Speed Automatic Calculating Machines, 22–25 June 1949, pp. 123–124. University Mathematical Laboratory, Cambridge (1950) Google Scholar
  49. Mills, H.D.: Software development. IEEE Trans. Softw. Eng. SE-2(4), 265–273 (1976) CrossRefGoogle Scholar
  50. Mills, H.D.: Structured programming: retrospect and prospect. IEEE Softw. 3(6), 58–66 (1986) CrossRefGoogle Scholar
  51. Naur, P.: Proof of algorithms by general snapshots. BIT Numer. Math. 6, 310–316 (1966) CrossRefGoogle Scholar
  52. Naur, P.: Programming by action clusters. BIT Numer. Math. 9, 250–258 (1969) zbMATHCrossRefGoogle Scholar
  53. Naur, P., Randell, B. (eds.): Software Engineering: Report on a Conference Sponsored by the NATO Science Committee, Garmisch, Germany, 7th to 11th October 1968. Scientific Affairs Division, NATO, Brussels (1969) Google Scholar
  54. Pickering, A.: The Mangle of Practice: Time, Agency and Science. University of Chicago Press, Chicago (1995) zbMATHCrossRefGoogle Scholar
  55. Randell, B.: Facing up to faults. Comput. J. 43(2), 95–106 (2000) CrossRefGoogle Scholar
  56. Robinson, H., Hall, P., Hovenden, F., Rachel, J.: Postmodern software development. Comput. J. 41(6), 363–375 (1998) zbMATHCrossRefGoogle Scholar
  57. Ross, D.T.: Design and production in software engineering: discussion contribution (1968). In: Naur, P., Randell, B. (eds.) Software Engineering: Report on a Conference Sponsored by the NATO Science Committee, Garmisch, Germany, 7th to 11th October 1968, p. 32. Scientific Affairs Division, NATO, Brussels (1969) Google Scholar
  58. Schick, G.J., Wolverton, R.W.: An analysis of competing software reliability models. IEEE Trans. Softw. Eng. SE-4(2), 104–120 (1978) CrossRefGoogle Scholar
  59. Shapiro, S.: Splitting the difference: the historical necessity of synthesis in software engineering. IEEE Ann. Hist. Comput. 19(1), 20–54 (1997) CrossRefGoogle Scholar
  60. Stevens, W., Myers, G., Constantine, L.: Structured design. IBM Syst. J. 13(2), 115–139 (1974) CrossRefGoogle Scholar
  61. Turing, A.M.: Checking a large routine (1949). In: Report of a Conference on High Speed Automatic Calculating Machines, 22–25 June 1949, pp. 70–72. University Mathematical Laboratory, Cambridge (1950) Google Scholar
  62. Wilkes, M.V., Wheeler, D.J., Gill, S.: The Preparation of Programs for an Electronic Digital Computer. Addison-Wesley, Reading (1951) zbMATHGoogle Scholar
  63. Wirth, N.: Program development by stepwise refinement. Commun. ACM 14(4), 221–227 (1971a) zbMATHCrossRefGoogle Scholar
  64. Wirth, N.: On the composition of well-structured programs. ACM Comput. Surv. 6(4), 247–259 (1974) zbMATHCrossRefGoogle Scholar

Copyright information

© Springer-Verlag London Limited 2011

Authors and Affiliations

  1. 1.LondonUK

Personalised recommendations