Issue No. 06 - November/December (2006 vol. 23)
DOI Bookmark: http://doi.ieeecomputersociety.org/10.1109/MS.2006.164
Donald Bagert , Rose-Hulman Institute of Technology
Michael J. Lutz , Rochester Institute of Technology
As most IEEE Software readers know, the term "software engineering" was first used in conjunction with two NATO-sponsored conferences in the late 1960s. 1,2 At that time, the phrase was much more an aspiration than a fact, but numerous researchers and practitioners have since laid the foundations for software development as an engineering discipline. Today, given software systems' pervasiveness in everyday life, the need for professionals who can build on these foundations is critical. Meeting this need requires a focus on software engineering education at both the graduate and undergraduate levels.
A short history
The first software engineering programs were at the graduate level, primarily as terminal master's degrees for those already developing commercial and industrial software. Most students enrolling in these programs had degrees in computer science, engineering, or similar technical disciplines, but their educations had not prepared them to deal with the process and product issues accompanying large-scale software system development. In the 1980s, the Software Engineering Institute at Carnegie Mellon University created an education division, which sponsored annual software engineering education conferences and underwrote a series of curriculum modules. These SEI efforts helped spur the growth of master's programs, especially in North America. They also created a consensus on general curricular structure and facilitated the exchange of best practices among software engineering faculty.
By the early 1990s, when graduate programs were common in North America, Europe, and Australia, educators began to consider software engineering's role at the undergraduate level. Some colleges and universities already offered a general software engineering course or concentration within their computer science or engineering programs, but those curricula didn't meet the increasing need for students who, upon graduation, could contribute effectively to software development projects. A computer science degree, whatever the technical and intellectual skills it imparted, didn't address important engineering issues: architecture and design, model synthesis and analysis, requirements and specification, and overall planning, estimating, and tracking. Conversely, engineering students who were versed in such topics had minimal software expertise.
As a result, baccalaureate software engineering programs emerged, first in Europe and Australia and later in North America. In contrast to most master's programs, which focus on the knowledge and skills that practicing developers needed, these new programs aimed to educate software engineers from the outset. That is, software engineering was not an add-on to an existing foundation but was itself the foundation. To reinforce the focus on software development as an engineering discipline, most programs actively sought professional accreditation in line with that of other engineering programs. In the US, for instance, the Accreditation Board for Engineering and Technology recognizes software engineering, and ABET's Engineering Accreditation Commission (EAC) accredits software engineering programs. 3
This special issue's articles reflect the common foundations of both baccalaureate and master's programs as well as the diverse approaches to teaching software engineering. The first article, "SE2004: Recommendations for Undergraduate Software Engineering Curricula," by Timothy C. Lethbridge, Richard J. LeBlanc Jr., Ann E. Kelley Sobel, Thomas B. Hilburn, and Jorge L. Díaz-Herrera, frames the discussion by presenting the result of an international effort, sponsored by the ACM and the IEEE Computer Society, to define the core content of undergraduate software engineering programs. Hundreds of software engineering educators from around the world participated in refining the final report, which represents a general consensus on the topics to be covered (and the minimum depth of coverage) by any program claiming to teach software engineering. The result can serve as a guide to colleges and universities developing such programs, as well as to external evaluators such as accreditation teams.
The second article, "Creating an Accreditable Software Engineering Bachelor's Program," by Stephen T. Frezza, Mei-Huei Tang, and Barry J. Brinkman, gives a concrete example of building a software engineering program using the curricular guidelines in the context of accreditation requirements. While every institution has unique constraints and opportunities, the Gannon experience illustrates one successful approach to the curriculum development process.
The third article, "Learning Software Engineering at a Distance" by Brendan Quinn, Leonor Barroca, Bashar Nuseibeh, Juan Fernández-Ramil, Lucia Rapanotti, Pete Thomas, and Michel Wermelinger, also discusses the development and evolution of a curriculum, this time at the master's level in the UK's Open University. The challenge here is to ensure consistency and quality for a program delivered entirely online and at a distance. The authors focus on the unique challenges that distance education poses for software engineering education and how their program addresses them.
The final two articles describe innovative approaches to teaching software engineering. "Experiences with Open Source Software Engineering Tools," by Kal Toth, discusses the use of open source tools in software engineering, both to support courses and as the focus of capstone projects. Among other benefits, students have the satisfaction of contributing to systems that real customers use. "A Model Curriculum for Aspect-Oriented Software Development," by Johan Brichau, Ruzanna Chitchyan, Siobhán Clarke, Ellie D'Hondt, Alessandro Garcia, Michael Haupt, Wouter Joosen, Shmuel Katz, Jacques Noyé, Awais Rashid, and Mario Südholt, describes an ambitious effort to use AOSD as the basis for master's curricula at nine European universities. The program shows how to illuminate the field's fundamental principles with state-of-the-art technology.
It's impossible to illustrate all the innovative approaches to software engineering education within the page constraints of one issue. We hope that these five articles, covering a representative sample of the education community's activities, will help more universities start software engineering programs. In addition, we hope to inspire the practitioner community's participation in evolving curricula to educate tomorrow's software engineers.
Michael J. Lutz is a professor of software engineering at the Rochester Institute of Technology. His research interests include software architecture and design, mathematical modeling of software, and software engineering education. He received his MS in computer science from the State University of New York at Buffalo. He's a member of the IEEE Computer Society's Educational Activities Board and the editorial board of Computer, as well as program chair for the American Society for Engineering Education's Software Engineering Constituent Committee. Contact him at the Dept. of Software Eng., Rochester Inst. of Technology, 134 Lomb Memorial Dr., Rochester, NY 14623-5608; email@example.com.
Donald Bagert is director of software engineering and professor of computer science and software engineering at the Rose-Hulman Institute of Technology. His primary research interests are software process improvement, software development methodologies, and software engineering education and curricula. He received his PhD in computer science from Texas A&M University. Contact him at Rose-Hulman Inst. of Technology, 5500 Wabash Ave., CM 97, Terre Haute, IN 47803-3999; firstname.lastname@example.org.