
COMPUTING SCIENCE 220
Software Engineering and Human-Computer Interfaces
Computing Science and Software Engineering: Definitions
The discipline of computing is the systematic study of
algorithmic processes that describe and transform information:
their theory, analysis, design, efficiency, implementation, and
application. The fundamental question underlying all of computing
is, "What can be (efficiently) automated?" [1]
Computing and Engineering
The Task Force on the Core of Computer Science (whose definition
of the discipline of computing is quoted above) identified three
major paradigms or cultural styles by which computing
practitioners approach their work:
- Theory is rooted in mathematics; four steps are followed
in developing a theory:
- characterize objects of study (definition)
- hypothesize possible relationships among them (theorem)
- determine whether the relationships are true (proof)
- interpret results
Theory is the bedrock of the mathematical sciences:
applied mathematicians share the notion that science advances only
on a foundation of sound mathematics.
- Abstraction (modelling, experimentation) is rooted in
the experimental scientific method; four steps are followed in the
investigation of a phenomenon:
- form a hypothesis
- construct a model and make a prediction
- design an experiment and collect data
- analyze results
Abstraction (modeling) is the bedrock of the natural
sciences: scientists share the notion that scientific progress is
achieved primarily by formulating hypotheses and systematically
following the modeling process to verify and validate
them.
- Design is rooted in engineering; four steps are followed
in the construction of a system or device to solve a given problem:
- state requirements
- state specifications
- design and implement the system
- test the system
Design is the bedrock of engineering: engineers share
the notion that progress is achieved by posing problems and
systematically following the design process to construct systems
that solve them.
The Task Force concluded:
Computing sits at the crossroads among the central
processes of applied mathematics, science, and engineering. The
three processes are of equal — and fundamental — importance in
the discipline, which is a unique blend of interaction among
theory, abstraction, and design. The binding forces are a common
interest in experimentation and design as information transformers,
a common interest in computational support of the stages of those
processes, and a common interest in efficiency. [2]
Software Engineering: A Definition
Software engineering is: [3]
- a modelling activity — software engineers deal with
complexity through modelling, by focusing at any one time on only
the relevant details and ignoring everything else.
- model — an abstraction of reality
- analysis — constructing a model of the problem
domain
- design — constructing a model of the solution
domain
- In OO methods, the solution domain model
is an extension of the problem domain model, so that the structure
of the software reflects that of the problem. [4]
- a problem-solving activity — models are used to search
for an acceptable solution
- driven by experimentation
- reuses pattern solutions
- incremental evolution of the system toward one acceptable to
the client
- revised in response to change
- a knowledge acquisition activity — in modelling the
application and solution domain, software engineers collect data,
organize it into information, and formalize it into knowledge.
- nonlinear — new information may invalidate previous knowledge
- risk-based development — identify high-risk components to
avoid late surprises
- issue-based development — execute development activities in
parallel, organizing according to issues which still need
resolution
- iterative development — design and implement the high-risk
(difficult) parts first
- a rationale-driven activity — software engineers need
to capture the context in which decisions were made and the
rationale behind these decisions in order to understand the
implications of a proposed change when revisiting a decision.
- assists in dealing with changing systems
- useful in the maintenance phase
Wasserman [5]
identifies eight fundamental notions that form the basis for an
effective discipline of software engineering:
- Abstraction — a description of the problem at some
level of generalization that allows us to concentrate on the key
aspects of the problem without getting mired in the details
- Analysis and Design Methods and Notations — when you
work as a team, you must communicate with many other participants
in the development process, and therefore need a common notation
for communication and documentation
- Prototyping — building a small version of a system,
usually with limited functionality, helps the user to identify the
key requirements of a system and demonstrates the feasibility of a
design or approach; commonly used to design a good user
interface
- Software Architecture — the description of a system in
terms of a set of architectural units, and a map of how the units
relate to one another
- Software Process — the organization and discipline in
the activities of the process of developing software (as
well as to the products that result) contribute to the quality of
the software and the speed with which it is developed
- Reuse — taking advantage of the commonalities across
applications by reusing items from previous development
- Measurement — quantitative descriptions of improvements
to processes, resources, and methods permit us to compare progress
across disparate projects and support analysis and
decision-making
- Tools and Integrated Environment — computer-aided
software engineering (CASE) tools are designed to enhance software
development, but rarely address the entire software development
life cycle
Engineering: A New Definition
What is needed for the engineer
of the future is a new definition — one that includes the art and
skill of problem-solving in broader socio-technologic issues and,
as a need that will be with us forever, the art and skill of change
management. In this context, no other career — with the possible
exception of medicine — offers so much potential for personal
reward, self esteem and enduring value to [humankind]. [6]
References
[1] Task Force on the Core of Computer Science,
Computing as a Discipline, CACM 32/1 (Jan. 1989), p.
12.
[2] Computing as a Discipline, p.
11.
[3]
Bruegge and Dutoit, Object-Oriented Software Engineering
(Prentice Hall, 2000), p. 5.
[4]
Martin Fowler, Analysis Patterns (Addison Wesley, 1997), p.
1.
[5] Anthony I. Wasserman, "Toward a discipline of
software engineering", IEEE Software 13/6:23-31,
cited in Shari Lawrence Pfleeger, Software Engineering: Theory
and Practice (Prentice Hall, 1998), pp. 29-35.
[6] Irwin Mendelson
Copyright © 2005 Jonathan Mohr