Chapter 3: Guiding Principles
This chapter describes the foundational ideas and beliefs that guided the development of the
SE2004 materials: the guiding principles for the entire SE2004 effort, and the desired student
outcomes for an undergraduate curriculum in software engineering.
The following list of principles was strongly influenced by the principles set down in the CCCS
volume; in some cases they represent minor rewording of those principles. In other cases, we
have tried to capture the special nature of software engineering that differentiates it from other
 Computing is a broad field that extends well beyond the boundaries of any one computing
discipline. SE2004 concentrates on the knowledge and pedagogy associated with a software
engineering curriculum. Where appropriate, it will share or overlap with material contained
in other Computing Curriculum reports and it will offer guidance on its incorporation into
 Software Engineering draws its foundations from a wide variety of disciplines.
Undergraduate study of software engineering relies on many areas in computer science for
its theoretical and conceptual foundations, but it also requires students to utilize concepts
from a variety of other fields, such as mathematics, engineering, and project management,
and one or more application domains. All software engineering students must learn to
integrate theory and practice, to recognize the importance of abstraction and modeling, to be
able to acquire special domain knowledge beyond the computing discipline for the purposes
of supporting software development in specific domains of application, and to appreciate the
value of good design.
 The rapid evolution and the professional nature of software engineering require an ongoing
review of the corresponding curriculum. The professional associations in this discipline
must establish an ongoing review process that allows individual components of the
curriculum recommendations to be updated on a recurring basis. Also, because of the special
professional responsibilities of software engineers to the public, it is important that the
curriculum guidance support and promote effective external assessment and accreditation of
software engineering programs.
 Development of a software engineering curriculum must be sensitive to changes in
technologies, practices, and applications, new developments in pedagogy, and the
importance of lifelong learning. In a field that evolves as rapidly as software engineering,
educational institutions must adopt explicit strategies for responding to change. Institutions,
for example, must recognize the importance of remaining abreast of well-established
progress in both technology and pedagogy, subject to the constraints of available resources.
Software engineering education, moreover, must seek to prepare students for lifelong
learning that will enable them to move beyond today's technology to meet the challenges of
 SE2004 must go beyond knowledge elements to offer significant guidance in terms of
individual curriculum components. The SE2004 curriculum models should assemble the
SE2004 Volume 8/23/2004
knowledge elements into reasonable, easily implemented learning units. Articulating a set of
well-defined curriculum models will make it easier for institutions to share pedagogical
strategies and tools. It will also provide a framework for publishers who provide the
textbooks and other materials.
 SE2004 must support the identification of the fundamental skills and knowledge that all
software engineering graduates must possess. Where appropriate, SE2004 must help define
the common themes of the software engineering discipline and ensure that all undergraduate
program recommendations include this material.
 Guidance on software engineering curricula must be based on an appropriate definition of
software engineering knowledge. The description of this knowledge should be concise,
appropriate for undergraduate education, and it should use the work of previous studies on
the software engineering body of knowledge. A core set of required topics, from this
description, must be specified for all undergraduate software engineering degrees. The core
should have broad acceptance by the software engineering education community. Coverage
of the core will start with the introductory courses, extend throughout the curriculum, and be
supplemented by additional courses that may vary by institution, degree program, or
 SE2004 must strive to be international in scope. Despite the fact that curricular requirements
differ from country to country, SE2004 must be useful to computing educators throughout
the world. Where appropriate, every effort should be made to ensure that the curriculum
recommendations are sensitive to national and cultural differences so that they will be
widely applicable throughout the world. The involvement by national computing societies
and volunteers from all countries should be actively sought and welcomed.
 The development of SE2004 must be broadly based. To be successful, the process of creating
software engineering education recommendations must include participation from the many
perspectives represented by software engineering educators and by industry, commerce, and
 SE2004 must include exposure to aspects of professional practice as an integral component
of the undergraduate curriculum. The professional practice of software engineering
encompasses a wide range of issues and activities, including problem solving, management,
ethical and legal concerns, written and oral communication, working as part of a team, and
remaining current in a rapidly changing discipline.
 SE2004 must include discussions of strategies and tactics for implementation, along with
high-level recommendations. Although it is important for SE2004 to articulate a broad
vision of software engineering education, the success of any curriculum depends heavily on
implementation details. SE2004 must provide institutions with advice on the practical
concerns of setting up a curriculum.
As a first step in providing curriculum guidance, the following set of outcomes for an
undergraduate curriculum was developed. This is intended as a generic list that could be adapted
to a variety of software engineering program implementations.
SE2004 Volume 8/23/2004
Graduates of an undergraduate SE program must be able to
 Show mastery of the software engineering knowledge and skills, and professional issues
necessary to begin practice as a software engineer.
Students, through regular reinforcement and practice, need to gain confidence in their
abilities as they progress through a software engineering program of study. In most
instances, knowledge, as well as skills, is acquired through a staged approach with different
levels being achieved as each academic term progresses. In addition, graduates need to gain
an understanding and appreciation of professional issues related to ethics and professional
conduct, economics, and the societal needs.
 Work as an individual and as part of a team to develop and deliver quality software
Students need to complete tasks that involve work as an individual, but also many other
tasks that entail working with a group of individuals. For group work, students ought to be
informed of the nature of groups and of group activities/roles as explicitly as possible. This
must include an emphasis on the importance of such matters as a disciplined approach, the
need to adhere to deadlines, communication, and individual as well as team performance
 Reconcile conflicting project objectives, finding acceptable compromises within limitations
of cost, time, knowledge, existing systems, and organizations.
Students should engage in exercises that expose them to conflicting, and even changing,
requirements. There should be a strong element of the real world present in such cases to
ensure that the experience is realistic. Curriculum units should address these issues, with the
aim of ensuring high quality requirements and a feasible software design.
 Design appropriate solutions in one or more application domains using software
engineering approaches that integrate ethical, social, legal, and economic concerns.
Throughout their study, students need to be exposed to a variety of appropriate approaches
to engineering design in the general sense, and to specific problem solving in various kinds
of applications domains for software. They need to be able to understand the strengths and
the weaknesses of the various options available and the implications of the selection of
appropriate approaches for a given situation. Their proposed design solutions must be made
within the context of ethical, social, legal, security, and economic concerns.
 Demonstrate an understanding of and apply current theories, models, and techniques that
provide a basis for problem identification and analysis, software design, development,
implementation, verification, and documentation.
The presence of the Capstone project, an important final activity at the end of a software
engineering program of study, is of considerable importance in this regard. It offers students
the opportunity to tackle a major project and demonstrate their ability to bring together
topics from a variety of courses and apply them effectively. This mechanism allows students
to demonstrate their appreciation of the broad range of software engineering topics and their
ability to apply their skills to genuine effect. This should also include the ability to offer
reflections on their achievements.
 Demonstrate an understanding and appreciation for the importance of negotiation, effective
work habits, leadership, and good communication with stakeholders in a typical software
SE2004 Volume 8/23/2004
It is important to have within a program of study at least one major activity that involves
having to produce a solution for a client. Software engineers must take the view that they
have to produce software that is of genuine utility. Where possible, we should integrate
within the program a period of industrial experience, as well as invited lectures from
practicing software engineers, and even involvement in such matters as external software
competitions. All this provides a richer experience and helps to create an environment that is
supportive of the production of high quality software engineering graduates.
 Learn new models, techniques, and technologies as they emerge and appreciate the
necessity of such continuing professional development.
By the time they come to the end of their program of study, students should be showing
evidence of being a self-motivated life-long learner. Such a situation is achieved through a
series of stages inserted at various places of a program of study. In later academic years,
such as at the capstone stage, students should be ready and willing to learn new ideas. But
again, students need to be exposed to best practice in this regard at earlier stages.
SE2004 Volume 8/23/2004
Table of Contents: