|
|||||
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.
3.1
SE2004
Principles
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
disciplines.
[1]
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
other
disciplines.
[2]
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.
[3]
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.
[4]
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
the
future.
[5]
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
13
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.
[6]
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.
[7]
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
individual
student.
[8]
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.
[9]
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
government
professionals.
[10]
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.
[11]
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.
3.2
Student
Outcomes
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
14
Graduates of an
undergraduate SE program must be able
to
[1]
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.
[2]
Work
as an individual and as part of a team to
develop and deliver quality
software
artifacts.
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
evaluations.
[3]
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.
[4]
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.
[5]
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.
[6]
Demonstrate
an understanding and appreciation for the
importance of negotiation,
effective
work
habits, leadership, and good communication
with stakeholders in a typical
software
development
environment.
SE2004
Volume 8/23/2004
15
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.
[7]
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
16
Table of Contents:
|
|||||