CSE503: Software Engineering
David Notkin
University of Washington
Department of Computer Science & Engineering
Winter 2002

What is software engineering?
In groups of two or three people, take three minutes to write down a definition

Key points for definitions
Full-lifecycle: “womb-to-tomb”
Multiple people are necessary
Many people
And people with different skill sets and job descriptions
Multiple versions of software will be developed
Economics plays a key role: resources are constrained (cost, time-to-market, etc.)

Highest level goal of 503
Develop a deep understanding of the fact that software engineering is not a mere matter of programming

What is software engineering research?
Finding ways to identify and better understand problems that are faced in effectively engineering software
Finding ways to solve these problems
Neither the problems nor the solutions are cut-and-dried in software engineering research
Both are much more contextual than in many other areas of computer science research

People play a key role
Many aspects of software engineering focus on how to make the humans involved in engineering software more effective (as opposed to the computer itself)
People use the software systems (even if indirectly) and this places pressures on the software itself

Assessment is complicated
The contextual and human-oriented nature of software engineering makes it hard to assess proposed improvements
Some graduate students view this characteristic of software engineering research as sufficiently disturbing to cause them to work in other areas

My view is different
The problems of software engineering are real: really, really real!
The “softness” of the problems and the solutions make it more interesting, challenging and exciting
In understanding the problems, in determining potential solutions, and in assessing their value
This does cause the answer to many (perhaps most or even all) questions to include the phrase, “Well, it depends…”

CSE503: Technical focus
Much work in software engineering touches on managerial issues: this is essential, since coordinating groups of people over time clearly relates to management
In this course, we’ll focus on technical aspects of software engineering
That said, it’s impossible to draw this line firmly and clearly
Near the end of the course, I may cover a few of the more managerial aspects of software engineering

CSE503: Two primary objectives
Provide an overview of some of the most important techniques and approaches that can help in producing better software at more predictable costs
Understanding state-of-the-art, which may help you in your own system building
To lay a foundation for performing research in software engineering
Even though not all of you actually will!
This means that we will often discuss the intention and effectiveness of techniques and approaches, as well as the techniques and approaches themselves

What is your background?
What’s the largest software system you have ever worked on?
Original developer or maintainer?
Any products with significant user bases?
What were the most difficult software engineering problems you faced?

What do you want from CSE503?
Other than “it’s a quals course”

“Not a mere matter of programming”:
an example
Proving programs correct has a 30+ year history
Given a specification (in a formal logic) and
an implementation (in a programming language),
prove that the implementation satisfies the specification
This has often been considered to be the key problem in software engineering
{ true }
x: int;
read(x);
if (mod(x,2) = 1) then
x := x + 1;
fi
{ even(x) }

But it leaves open key software engineering problems
Requirements engineering
Where did the specification come from?  Does it satisfy the needs of the customer?
Design
How does it interact with other parts of the program?
Evolution
What happens if the specification is changed?
Economics
What is the cost of proving correctness?
Testing
Should we rely entirely on the proof?

Proving programs correct: redux
None of these issues eliminate the value of proving programs correct, but they show some of the limitations with respect to engineering large software systems
Barry Boehm
Verification: “Did you build the system right?”
Validation: “Did you build the right system?”

CSE503: basics
Reading
I’ll make papers available in advance
give a quick quiz of some sort in class on the contents of the readings
Discussions on the cse503 email list
Sign up using majordomo
Address both topics in the course and other software engineering topics that interest you
You drive!
Lectures
Specifications, design and architecture, analysis and tools, testing and quality assurance, etc.
Tentative schedule on the web

CSE503: assigned work
Two homework assignments [40% total]
May be done in pairs
(1 and 2) or 3 [60% total]
A 10-15 page term paper on one of the subjects found on the web page (or by negotiation with me) [30%]
Done alone
A tool evaluation [30%]
May be done in pairs
An extensive project
Requires my permission and agreement upon a topic
Only recommended for those with significant background
Done alone

No midterm or final exam
I’ve never been able to write a good exam on software engineering

Wednesday (1/9):
a Michael Jackson video
I’m sure you’ll all be exhausted from the beginning of the quarter, so I’ve decided to give you a break and show you a video on Wednesday
Indeed, a Michael Jackson video
No, not that Michael Jackson!
The intent of this video is to drive home a set of ideas, in particular that software engineering is more than a mere matter of programming

Friday (1/11) and Monday (1/14):
program correctness
Basic material on proving programs correct
Program specifications
Semantics of programming language constructs
Pre- and post-conditions
Hoare triples and Dijkstra weakest preconditions
Loop invariants
Proving correctness of data structures
Intent
Valuable material on its own
Basis for understanding software specification work
“Not a mere matter of programming”

Then: software specifications
Model-based specifications (e.g., Z)
Algebraic specifications