Abstract
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.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 1.
Naur and Randell (1969).
- 2.
Aiken and Hopper (1946), p. 525.
- 3.
Aiken and Hopper (1946), p. 525.
- 4.
Miller (1949).
- 5.
- 6.
Bloch (1999), p. 97.
- 7.
Wilkes et al. (1951), p. 41.
- 8.
Miller (1949), emphasis in original.
- 9.
Gill (1951).
- 10.
Diehm (1952).
- 11.
Benington (1956).
- 12.
- 13.
Bemer (1984).
- 14.
Katz (1957), p. 21.
- 15.
Gill (1959).
- 16.
McCarthy (1962), p. 22.
- 17.
Dijkstra (1962b), p. 537.
- 18.
Dijkstra (1969b), p. 85.
- 19.
Naur (1966), pp. 310–311.
- 20.
Naur (1966), p. 312.
- 21.
Floyd (1967), p. 19.
- 22.
Bloch (1999), p. 94.
- 23.
Goldstine and von Neumann (1947), p. 92.
- 24.
Turing (1949).
- 25.
Naur (1966), p. 324.
- 26.
Floyd (1967), p. 19.
- 27.
Hoare (1969), p. 576.
- 28.
McCarthy (1961), p. 225.
- 29.
Dijkstra (1968a).
- 30.
Naur (1969).
- 31.
Hoare (1971).
- 32.
Hoare (1971), p. 41.
- 33.
- 34.
Floyd (1971).
- 35.
Programs had always been expected to do what their specifications stated, or course. The point is that theoretical accounts of correctness were increasingly phrased in terns of a program “meeting its specification” rather than “being correct”.
- 36.
Manna and Waldinger (1971), p. 152.
- 37.
Liskov and Zilles (1975), pp. 7–8.
- 38.
Manna and Waldinger (1978), p. 201.
- 39.
- 40.
Dijkstra (1968c).
- 41.
Dijkstra (1969b), p. 255.
- 42.
Dijkstra (1972), p. 19.
- 43.
Henderson and Snowdon (1972), pp. 38, 51.
- 44.
Ledgard (1974), p. 49.
- 45.
Liskov (1973), p. 5.
- 46.
Liskov (1973), p. 6.
- 47.
- 48.
McCracken (1973).
- 49.
Wirth (1974), p. 252.
- 50.
Donaldson (1973).
- 51.
Stevens et al. (1974).
- 52.
McCracken (1973).
- 53.
Hoare (1969), p. 579.
- 54.
Hoare (1971), p. 39.
- 55.
Hoare (1996).
- 56.
Lakatos (1967).
- 57.
Dijkstra (1968a), p. 185.
- 58.
Mills (1976), p. 269.
- 59.
Shapiro (1997).
- 60.
Gerhart and Yelowitz (1976), p. 206.
- 61.
Hoare (1996).
- 62.
Fetzer (1988).
- 63.
Dijkstra (1968c), p. 344.
- 64.
Goodenough and Gerhart (1975), p. 157.
- 65.
Fetzer (1988), p. 1062.
- 66.
Dasgupta (1991), p. 353.
- 67.
Bauer and Wössner (1972).
- 68.
Schick and Wolverton (1978), p. 105.
- 69.
Randell (2000).
- 70.
In the 1990s, a particular approach to software engineering characterized itself as ‘empirical’, based on the belief that “the most important thing to understand is the relationship between various process characteristics and product characteristics”; See Basili (1996), for example. In the Lakatosian framework, this approach would seem to fall squarely in the Euclidean tradition, but emphasizing the external, managerial aspects of the development process rather than the internal properties of software-related artefacts. What is being proposed appears to be an empirical study of a Euclidean process, not an empirical approach to development itself.
- 71.
Ross (1968).
- 72.
McCracken and Jackson (1982), p. 31.
- 73.
Boehm (1984).
- 74.
Larman and Basili (2003).
- 75.
- 76.
See Robinson et al. (1998), for example.
- 77.
Mills (1986).
- 78.
Boehm (1976).
- 79.
References
Aiken, H.H., Hopper, G.M.: The Automatic Sequence Controlled Calculator. Electr. Eng. 65, 384–391, 449–454, 522–528 (1946)
Baker, F.T.: Chief programmer team management of production programming. IBM Syst. J. 11(1), 56–73 (1972a)
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)
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)
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)
Bemer, R.W.: Computing prior to FORTRAN. Ann. Hist. Comput. 6(1), 16–18 (1984)
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)
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)
Boehm, B.W.: Software engineering. IEEE Trans. Comput. C-25(12), 1226–1241 (1976)
Boehm, B.W.: Verifying and validating software requirements and design specifications. IEEE Softw. 1(1), 75–88 (1984)
Brooker, R.A., Gill, S., Wheeler, D.J.: The adventures of a blunder. Math. Tables Other Aids Comput. 6(38), 112–113 (1952)
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)
Dasgupta, S.: Design Theory and Computer Science. Cambridge University Press, Cambridge (1991)
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)
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)
Dijkstra, E.W.: A constructive approach to the problem of program correctness. BIT Numer. Math. 8, 174–186 (1968a)
Dijkstra, E.W.: The structure of the “THE”-multiprogramming system. Commun. ACM 11(5), 341–346 (1968c)
Dijkstra, E.W.: EWD249: notes on structured programming (1969a). Unpublished manuscript, available at http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD249.PDF (accessed 4 May 2008). Circulated as Dijkstra (1970), and published with additional material as Dijkstra (1972)
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)
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)
Donaldson, J.R.: Structured programming. Datamation 19(12), 52–54 (1973)
Fetzer, J.H.: Program verification: the very idea. Commun. ACM 31(9), 1048–1063 (1988)
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)
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)
Gerhart, S.L., Yelowitz, L.: Observations of fallibility in applications of modern programming methodologies. IEEE Trans. Softw. Eng. SE-2(3), 195–207 (1976)
Gill, S.: The diagnosis of mistakes in programmes on the EDSAC. Proc. R. Soc. Lond. Ser. A, Math. Phys. Sci. 206, 538–554 (1951)
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)
Gill, S.: Current theory and practice of automatic programming. Comput. J. 2(3) (1959)
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)
Goodenough, J.B., Gerhart, S.L.: Toward a theory of test data selection. IEEE Trans. Softw. Eng. SE-1(2), 156–173 (1975)
Henderson, P., Snowdon, R.: An experiment in structured programming. BIT Numer. Math. 12, 38–53 (1972)
Hoare, C.A.R.: An axiomatic basis for computer programming. Commun. ACM 12(10), 576–580 (1969)
Hoare, C.A.R.: Proof of a program: FIND. Commun. ACM 14(1), 39–45 (1971)
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)
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
Knuth, D.E.: Structured programming with go to statements. ACM Comput. Surv. 6(4), 260–301 (1974)
Lakatos, I. (ed.): Problems in the Philosophy of Mathematics. North-Holland, Amsterdam (1967)
Larman, C., Basili, V.R.: Iterative and incremental development: a brief history. Computer 36(6), 47–56 (2003)
Ledgard, H.F.: The case for structured programming. BIT Numer. Math. 14, 45–57 (1974)
Liskov, B.: Report of session on structured programming. ACM SIGPLAN Not. 8(9), 5–10 (1973)
Liskov, B.H., Zilles, S.N.: Specification techniques for data abstractions. IEEE Trans. Softw. Eng. SE-1(1), 7–19 (1975)
Manna, Z., Waldinger, R.J.: Toward automatic program synthesis. Commun. ACM 14(3), 151–165 (1971)
Manna, Z., Waldinger, R.J.: The logic of computer programming. IEEE Trans. Softw. Eng. SE-4(3), 199–229 (1978)
McCarthy, J.: A basis for a mathematical theory of computation, preliminary report. In: Proceedings of the Western Joint Computer Conference, pp. 225–238 (1961)
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)
McCracken, D.: Revolution in programming: an overview. Datamation 19(12), 50–52 (1973). Reprinted in Yourdon (1979)
McCracken, D.D., Jackson, M.A.: Life cycle concept considered harmful. Softw. Eng. Notes 7(2), 29–32 (1982)
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)
Mills, H.D.: Software development. IEEE Trans. Softw. Eng. SE-2(4), 265–273 (1976)
Mills, H.D.: Structured programming: retrospect and prospect. IEEE Softw. 3(6), 58–66 (1986)
Naur, P.: Proof of algorithms by general snapshots. BIT Numer. Math. 6, 310–316 (1966)
Naur, P.: Programming by action clusters. BIT Numer. Math. 9, 250–258 (1969)
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)
Pickering, A.: The Mangle of Practice: Time, Agency and Science. University of Chicago Press, Chicago (1995)
Randell, B.: Facing up to faults. Comput. J. 43(2), 95–106 (2000)
Robinson, H., Hall, P., Hovenden, F., Rachel, J.: Postmodern software development. Comput. J. 41(6), 363–375 (1998)
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)
Schick, G.J., Wolverton, R.W.: An analysis of competing software reliability models. IEEE Trans. Softw. Eng. SE-4(2), 104–120 (1978)
Shapiro, S.: Splitting the difference: the historical necessity of synthesis in software engineering. IEEE Ann. Hist. Comput. 19(1), 20–54 (1997)
Stevens, W., Myers, G., Constantine, L.: Structured design. IBM Syst. J. 13(2), 115–139 (1974)
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)
Wilkes, M.V., Wheeler, D.J., Gill, S.: The Preparation of Programs for an Electronic Digital Computer. Addison-Wesley, Reading (1951)
Wirth, N.: Program development by stepwise refinement. Commun. ACM 14(4), 221–227 (1971a)
Wirth, N.: On the composition of well-structured programs. ACM Comput. Surv. 6(4), 247–259 (1974)
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
Copyright information
© 2011 Springer-Verlag London Limited
About this chapter
Cite this chapter
Priestley, M. (2011). The Logic of Correctness in Software Engineering. In: A Science of Operations. History of Computing. Springer, London. https://doi.org/10.1007/978-1-84882-555-0_10
Download citation
DOI: https://doi.org/10.1007/978-1-84882-555-0_10
Publisher Name: Springer, London
Print ISBN: 978-1-84882-554-3
Online ISBN: 978-1-84882-555-0
eBook Packages: Computer ScienceComputer Science (R0)