Hostname: page-component-8448b6f56d-cfpbc Total loading time: 0 Render date: 2024-04-23T17:41:07.601Z Has data issue: false hasContentIssue false

Engineering Software Correctness

Published online by Cambridge University Press:  01 November 2007

REX PAGE*
Affiliation:
School of Computer Science, University of Oklahoma, Norman, OK 73019, USA email: page@ou.edu
Rights & Permissions [Opens in a new window]

Abstract

Core share and HTML view are not available for this content. However, as you have access to this content, a full PDF is available via the ‘Save PDF’ action button.

Design and quality are fundamental themes in engineering education. Functional programming builds software from small components, a central element of good design, and facilitates reasoning about correctness, an important aspect of quality. Software engineering courses that employ functional programming provide a platform for educating students in the design of quality software. This pearl describes experiments in the use of ACL2, a purely functional subset of Common Lisp with an embedded mechanical logic, to focus on design and correctness in software engineering courses. Students find the courses challenging and interesting. A few acquire enough skill to use an automated theorem prover on the job without additional training. Many students, but not quite a majority, find enough success to suggest that additional experience would make them effective users of mechanized logic in commercial software development. Nearly all gain a new perspective on what it means for software to be correct and acquire a good understanding of functional programming.

Type
Educational Pearl
Copyright
Copyright © Cambridge University Press 2007

References

Bjorner, D. (2006) Software Engineering 1: Abstraction and Modelling. Springer.Google Scholar
Boyer, R. S. & Moore, J. S. (1998) A Computational Logic Handbook, 2nd ed. Academic Press.Google Scholar
Claessen, K. & Hughes, J. (2000) QuickCheck: A lightweight tool for random testing of Haskell programs. Pages 268–279 of. Proc. 5th ACM SIGPLAN International Conference on Functional Programming. Pittsburgh: ACM Press.Google Scholar
De Millo, R. A., Lipton, R. J. & Perlis, A. J. (1979) Social processes and proofs of theorems and programs. Commun. ACM, 22 (5), 271280.CrossRefGoogle Scholar
Dillinger, P. C.Manolios, P., Moore, J. S. & Vroon, D. (2006) ACL2s: the ACL2 Sedan. User Interfaces for Theorem Provers Workshop, August 2006, Seattle, WA. To appear in: Electronic Notes in Theoretical Computer Science. Available at: http://www.cc.gatech.edu/~manolios/research/uitp-acl2s.htmlGoogle Scholar
Findler, R. B.Clements, J.Flanagan, C.Flatt, M.Krishnamurthi, S.Steckler, P. & Felleisen, M. (2002) DrScheme: A programming environment for Scheme. J. Funct. Program. 12 (2), 159182.CrossRefGoogle Scholar
Findler, R. B. & Felleisen, M. (2002) Contracts for higher-order functions. Pages of 48–59 of. Proc. 7th ACM SIGPLAN International Conference on Functional Programming. Pittsburgh: ACM Press.Google Scholar
Humphrey, W. S. (1995) A Discipline for Software Engineering. Addison Wesley.Google Scholar
IEEE Computer Society/ACM Joint Task Force on Computing Curricula. (2004) Software Engineering 2004: Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering. Available at: http://sites.computer.org/ccse/SE2004Volume.pdfGoogle Scholar
Jackson, D. (2006) Software Abstractions: Logic, Language and Analysis. MIT Press.Google Scholar
Kaufmann, M., Manolios, P. & Moore, J. S. (2000a) Computer Aided Reasoning: An Approach. Kluwer Academic Publishers.Google Scholar
Kaufmann, M., Manolios, P. & Moore, J. S. (2000b) Computer Aided Reasoning: ACL2 Case Sudies. Kluwer Academic Publishers.Google Scholar
Michaelsen, L. K. (2002) Getting started with team based learning. Pages 27–29 of. Michaelsen, L. K.Knight, A. B. & Fink, L. D. (eds), Team-Based Learning: A Transformative Use of Small Groups, Westport, CT: Praeger.CrossRefGoogle Scholar
Page, R. L. (2005) Engineering software correctness. Pages 39–46 of. Findler, R.Hanus, M. & Thompson, S. (eds), Proc. 2005 Workshop on Functional and Declarative Programming in Education, 25 September 2005, Tallinn, Estonia. Pittsburgh: ACM Press.Google Scholar
Pressman, R. (2005) Software Engineering: A Practitioner's Approach, 6th ed.McGraw-Hill.Google Scholar
Sommerville, I. (2004) Software Engineering, 7th ed. Pearson.Google Scholar
Vaillancourt, D., Page, R. & Felleisen, M. (2006) ACL2 in DrScheme. Pages 107–116 of. Manolios, P. & Wilding, M. (eds), Proc. 6th International Workshop on the ACL2 Theorem Prover and Its Applications, 15–16 August 2006, Seattle, Washington. Ruben Gamboa.Google Scholar
Submit a response

Discussions

No Discussions have been published for this article.