Tom Hilburn Position Statement

Professor of Computer Science,

Embry-Riddle Aeronautical University, Daytona Beach, Florida, USA

<hilburn@db.erau.edu>

 

1. Context

The last twenty years have witnessed significant advancements in the education of computing professionals (in fields such as computer science, software engineering, computer engineering and information systems). The Association for Computing Machinery (ACM), the IEEE Computer Society (IEEE-CS), and the Computer Sciences Accreditation Board (CSAB) have given encouragement, support, and guidance in developing curricula that are viable and relevant. We have moved from language and coding centered curricula to programs that emphasize theory, abstraction, and design. However, most academic programs in computing still devote little time to areas such as requirements modeling, design methods, architecture, reuse, software processes, quality issues, team skills, and other areas of software engineering essential to effective commercial software development. The use of formal methods in the development of software artifacts has received even less attention.

In recent year there has been a lot of interest and a number of activities associated with advancing the state of the software engineering profession. Since 1993, the IEEE-CS and ACM have been actively promoting software engineering as a profession. Special task forces have been directed at establishing a software engineering code of ethics and professional practice, determining accreditation criteria for software engineering programs supporting curriculum development, and preparing a guide to the software engineering body of knowledge. In 1998 the IEEE-CS and the ACM formed the Software Engineering Coordinating Committee (SWEEC) to foster the evolution of software engineering as a professional computing discipline and to coordinate the various software engineering "maturing" activities [SWECC]. A major part of the effort is the definition of a software engineering body of knowledge (SWEBOK) [Dupuis 00]. Another SWECC project is the Software Engineering Education Project (SWEEP). It was established to develop curriculum recommendations for software engineering programs [Barnes 98]. The SWEEP activities are part of a larger effort to update and improve computing curricula guidance that is embodied by the Computing Curriculum 2001 effort [CC2001].

There is still much confusion and misunderstanding about the various related computing disciplines (software engineering (SE), computer science (CS) and computer engineering (CE)). In the whole scheme of things, this is rather natural since the computing discipline is still new (compared say to mathematics and civil engineering) and as dynamic as any other field of research and practice. Unfortunately, the lack of common agreement about the nature of the discipline can and does cause problems in communicating about its critical issues. With this in mind and for the purpose of our discussions, I suggest the following definitions (from [Modesitt 00]):

 

Field

Definition

Examples

Computer Science & Information Science

A science with a primary focus of discovering new knowledge, with strong foundations in theory and selected application domains. This field is the basis for software engineering, just as chemistry forms the basis for chemical engineering or as physics forms the basis for electrical engineering.

theory of data structures, algorithms, programming languages and domains such as networks, operating systems, compilers, databases, architecture, information systems.

Engineering

Building useful products for real people. The development of solutions to practical technical problems within economic, social and technical constraints under conditions of uncertainty.

bridges, highways, skyscrapers, automobiles, dams, nuclear reactors, power grids, airplanes, space shuttles, lunar bases, computers

Software Engineering

The engineering of computer software systems: requirements, design, construction, management and evolution of software for use by others in industry, office and home. It applies the scientific background acquired in the foundations of Computer and Information Science to the development, operation, and maintenance of reliable, efficient, large-scale systems.

Windows 2000, space shuttle launch, flight, and landing software systems, microcontrollers for automobile engines, ATM software systems, C++, Internet and World Wide Web, scanning systems in retail outlets, ordering systems for on-line companies.

Computer Engineering

The engineering of computer hardware systems, with special emphasis on the design. It applies the scientific background obtained in physics and engineering background of electrical engineering.

Intel Pentium III processor, CRAY T3-E, Motorola 68000 chip, TCP/IP chips, customized hardware controllers.

 

2. Current State of Software Development

Software plays an increasingly important and central role in almost all aspects of daily life. The number, size, complexity, and application domains of programs being developed is growing dramatically. Unfortunately, there are serious problems in the cost, timeliness, and quality of development of many software products. The code in consumer products is doubling every two years; it is almost the norm for software projects to overrun their planned cost and schedule. Too many large-scale development projects are never completed, and many of those completed do not meet the user requirements and are of poor quality. Most software projects spend more than half their development time in testing and many deliver products with defect densities above 10 defects/KLOC. For the software discipline, this is not just a commercial issue, but a professional and ethical problem that would not be tolerated in other fields of engineering and science.

The central issue seems to be one of immaturity. Although, the term software engineer is becoming a popular title for software developers, there is little evidence to show that the practice of software engineering compares with rigor and discipline that is required for practice in other engineering fields. The quality problems arise from incomplete and imprecise requirements specifications, shoddy designs with poor documentation, and the almost sole reliance on testing for software quality assurance. The concepts of mathematical modeling and rigorous verification (the staple of other engineering fields) is rarely used in commercial software development.

From my own experience and research, industry is making little use of formal methods in the development of software, and mathematical techniques are not part of the normal practice of software engineering. This is highlighted in survey of software engineers ([Lethbridge 00] - a comprehensive study of the knowledge used by software engineers in their work), where the engineers ranked the importance of 75 knowledge areas. "Formal Specification Methods" was ranked 37th and "Predicate Logic" was ranked 39th. (Things like "specific programming languages", "data structures", "software architectures" and "requirements elicitation" was ranked at the top and things like "differential equations" and "VLSI" were ranked at the bottom.)

3. Current State of Computing Curricula

There are currently over a thousand undergraduate computing degree programs in the U.S. The vast majority of the graduates of these programs go into the software industry. Unfortunately, most are ill-prepared to use disciplined engineering practices to develop high-quality software. Currently most computing curricula (at least in the U.S.) require only a few courses that have substantial mathematical content. Typically a CS or CE program would have required courses in calculus, discrete mathematics, and a course in algorithms with a theoretical orientation. Beyond this, many would have required courses such as programming languages and operating systems, which would have some mathematical content. However, very few would have courses (or significant parts of courses) devoted to formal methods (methods used to develop and verify software artifacts such as requirements and design specifications). There are a number of emerging SE undergraduate programs (ten or so), most of which will have a required course in formal methods. The recent efforts of SWEEP and CC2001 are beginning to address these problems. It appears that both these activities have some promise of improving the use of mathematical techniques in computing curricula.

4. Some Ideas

First, the ideas that I am advocating are meant for the masses; that is, the discussion is in the spirit of "what should every graduate of a computing program know about formal methods".

In the design of any curriculum, the starting point should be the program objectives. Although objectives will differ across institutions, I believe the following objectives should be relevant to most programs and could be effectively combined with other curriculum objectives.

Objectives: Students that complete this program will be able to

It seems that the objectives could best be accomplished by distributing formal methods content and activities throughout the curriculum. The first two years should include a course in discrete mathematics that covers basic set theory, predicate logic, proof techniques, and the introduction of a formal language (e.g. Z or VDM). The beginning computer science sequence (CS!, CS2, CS3) should introduce formalisms into design of small programs or modules (abstract data types, loop invariants, pre-conditions and post-conditions, symbolic execution, algorithm analysis). In other existing courses in the curriculum (such organization of programming languages, computer architecture and operating systems) the formal methods aspects of the subject matter should be pointed and where appropriate emphasized. In the last two years a course dedicated to formal methods seems appropriate. The course would give a breath view of methods, techniques, tools and literature; and it would involve a significant case study and a formal methods project. Final course work on software design and a life-cycle team project would involve the use of formal methods in concert with informal-traditional techniques. To help in this area, I believe that to ensure effective application of a method (formal or informal), there needs to be a defined process for using the method. The development and use of software processes is an active area in efforts to improve software engineering. In [Hilburn 96], I discuss a process for applying Z to a team requirements specification project.

These ideas are still somewhat imprecise, but hopefully with additional work and interaction with the working group they can become more clearly formulated.

 

References

The following references cover a variety of material related to computing curricula, formal methods, and software engineering.

[ABET]

Engineering Criteria 2000: Criteria for Accrediting Engineering Programs, http://www.abet.org/

 

 

[Bagert 99]

Bagert, et. al. Guidelines for Software Engineering Education, Version 1.0, Technical Report CMU/SEI-99-TR-032, Software Engineering Institute, Carnegie Mellon University, (November 1999)

 

 

[Barnes 98]

Barnes, et, al. Draft Software Engineering Accreditation Criteria, Computer, (May 1998) 31, 4, 73-75.

 

 

[BCS 89]

British Computer Society and The Institution of Electrical Engineers,

A Report on Undergraduate Curricula for Software Engineering, Institution of Electrical Engineers, June 1989.

 

 

[Bjorner 99]

Bjorner, D., and Cueller, J., Software engineering Education: Roles for Formal Specification and Design Calculi, Annals of Software Engineering , April 1999.

 

 

[CC2001]

Computing Curriculum 2001 (Draft Report), ACM/IEEE-CS, March 2000, http://www.computer.org/edcuation/cc2001/

 

 

[Ciancarini 99]

Ciancarini, P. and Mascolo, C., Using Formal Methods for Teaching Software Engineering: A Tool-Based Approach, Annals of Software Engineering , April 1999.

 

 

[CSAB]

CSAC/CSAB Criteria 2000: Criteria for Accrediting Programs in Computer Science in the United States, Version 0.8, http://www.csab.org/.

 

 

[Davis 97]

Davis, G. B., et. al. IS’97: Model Curriculum for Undergraduate Degree Programs in Information Systems, 1997: http://www.acm.org/education/curricula.html.

 

 

[Denning 92]

Denning, P.J. Educating a New Engineer, Communications of the ACM. (December 1992) 35, 12, 83-97.

 

 

[Dupuis 00]

Dupuis, R., et. al. A Guide to the Software Engineering Body of Knowledge, Version 0.7, http://www.swebok.org.

 

 

[Ford 96]

Ford, G. and Gibbs, N.E. Mature Profession of Software Engineering, CMU/SEI-96-TR-004. Software Engineering Institute, Carnegie Mellon University, 1996.

 

 

[Ford 90]

Ford, G A., 1990 SEI Report on Undergraduate Software Engineering Education, Technical Report CMU/SEI-90-TR-3, Software Engineering Institute, Carnegie Mellon University, Pittsburgh PA, March 1990.

 

 

[Garlan 97]

Garlan, D., Gluch, D. P., Tomayko, J. E., Agents of Change: Educating Software Engineering Leaders, IEEE Computer (November 1997) 30, 11, 59-65.

 

 

[Gerhart 94]

Gerhart, S., Craigen, D., and Ralston, T., Experience with Formal Methods in Critical Systems, IEEE Software, January 1994, pp. 21-28.

 

 

[Gibbs 94]

Gibbs, W.W. Software’s Chronic Crisis. Scientific American (September 1994) 86-95.

 

 

[Gorgone 99]

Gorgone, John, Draft Criteria for Accrediting Programs in Information Systems, February 24, 1999, http://cis.bentley.edu/ISA/pages/accreditation.html.

 

 

[Hall 96]

Hall, A., Using Formal Methods to Develop an ATC Information System, IEEE Computer, March 1996.

 

 

[Hilburn 99]

Hilburn, T.B., et. al., A Software Engineering Body of Knowledge, Version 1.0, Technical Report CMU/SEI-99-TR-004, Software Engineering Institute, Carnegie Mellon University, April 1999.

 

 

[Hilburn 97]

Hilburn, T.B., SE Education: A Modest Proposal. IEEE Software. (November 1997) 14, 6, 44-48.

 

 

[Hilburn 96]

Hilburn, T.B., Inspections of Formal Specifications, SIGCSE Bulletin, Vol. 27, No. 1 February 1996.

 

 

[Hinchey 95]

Hinchey, M.G. and Bowen, J.P., Applications of Formal Methods, Prentice-Hall, 1995.

 

 

[IEEE-CS 98]

IEEE-CS/ACM Joint Task Force on Software Engineering Ethics and Professional Practices. Software Engineering Code of Ethics. http://www.computer.org/tab/seprof/code.htm.

 

 

[Lethbridge 00]

Lethbridge, T.C. What Knowledge is Important to a Software Engineer IEEE Computer, May 2000.

[Modesitt 00]

Modesitt, K. (editor) "Engineering, Software Engineering, Computer And Information Science, Computer Engineering: A Comparison And Contrast", March 28, 2000, http://faculty.db.erau.edu/hilburn/se-educ

 

 

[Siddiqi 99]

Siddiqi, J., et. al., Understanding and Exploring Formal Specifications, Annals of Software Engineering , April 1999.

 

 

[SWECC]

Software Engineering Coordinating Committee, ACM/IEE-CS, http://www.acm.org/serving/se/

 

 

[Wing 00]

Wing, J., Weaving Formal Methods into the Undergraduate Computer Science Curriculum, Proceedings of the 8th International Conference on Algebraic Methodology and Software Technology (AMAST) 2000, Education Day, Iowa City, Iowa, US, May 20-27, 2000.

 

 

[Woodcock 88]

Woodcock, J. and Loomes, M., Software Engineering Mathematics, Addison-Wesley, 1988.