USC Center for Software & Systems Engineering 24 Oct, ‘06

advertisement
USC Center for Software & Systems Engineering
24 Oct, ‘06
“They” say that where you stand depends on where you
sit – well, I have been sitting at the National Academies
for over 10 years. So let me explain the perspective that
gives me:
1. Basics of the U.S. Academies:
a. Private 501-c(3), but chartered by
congress -- honorific and advisory.
1863 and all that.
b. Structure today: NAS, NAE, IOM,
NRC
2. Scale of the operation
a. Process: ensures authoritative,
unbiased, independent advice
b. Committees: the best there is, no
COI, balanced biases, serve probono
c. Peer reviewed
d. 1 report/business-day
e. ~700 studies in process,
>5,000 comm mbrs
3. We kick the government in the shins all
the time! They keep coming back!
Draft 6/27/2016
USC CSSE Workshop
p. 1
4. “Topics” span the spectrum – but
generally about the state of technology
needed to inform some public policy
issue.
Recent examples:
Hydrogen Economy
RAGS
Engr of 2020
Speed vs Stealth (note all on Intrnet)
OK, bottom line, after ten years at the nexus of
engineering and public policy
 I am totally technically incompetent
 I tend to look at things through a public policy filter
 So, the following remarks should be viewed with an
appropriate amount of skepticism.
That said, I want to applaud the merger of these two
centers … but also issue you a challenge!
To explain the both the applause and the challenge,
however, I need to pull several threads together first.
Thread 1: About engineering – as many of you know, I
am fond of a quote from Theodore von Karmen
contrasting science and engineering. He said:
Science is about understanding nature –
understanding what is.
Engineering is about designing what has never
been.
Understanding what is vs. creating what has never been.
Draft 6/27/2016
USC CSSE Workshop
p. 2
My favorite operational definition of what engineers do
is
design under constraint
Engineering is creating, designing, what has never
been, but we are constrained by concerns of
Functionality (of course),
Size, cost, weight, power consumption, heat
dissipation,
safety, reliability, environmental impact,
ergonomics,
manufacturability, maintainability -- a long list of
such “ilities”.
I could go on … the point is that there are a LOT of
constraints.
Thread 2: Scientists talk a lot about the “scientific
method” – that idealized notion of hypotheses tested by
repeatable experiments that have the possibility of
falsifying the hypotheses.
The reality is that standards and methods of proof are
quite different in different scientific fields,
Although loosely based on this idealized model, the
standards of proof are quite different in, for example, the
physical sciences, the life sciences and the social
sciences.
<? Tell the Newton’s Laws vs “animal model” story?>
Draft 6/27/2016
USC CSSE Workshop
p. 3
We engineers don’t talk as much about the “engineering
method”, but
1. I think we should
2. It will be the essence of my challenge to you
3. It will be, in part, about design b/c of thread 1.
To be sure, there has been some thinking and writing
about “design” – the classic texts by Eb Rechtin on
“Systems Architecting” come to mind for example.
But I am not sure that is all of the “engineering method”.
Nor am I sure that it will manifest itself identically in all
engineering fields.
Thread 3: For years we software engineers skulked
around under the scorn of “real engineers” because of
the “bugs” (errors) in the systems we build.
“Real engineers”, we were told, knew how to build
correct, safe, and reliable systems – and we lesser
software beings ought to adopt their methods.
Well, I think we now understand why software is more
bug prone – principal among the reasons are:
1. Software is much more complex than traditional
engineered physical systems.
2. There are fewer constraints – sw has no mass,
dissipates no heat, etc. The net effect is that there
are many more design options.
3. The mathematics describing them lacks continuity.
Draft 6/27/2016
USC CSSE Workshop
p. 4
I want to elevate complexity to its own “thread”, so let
me skip it for now and talk about the other two.
First, constraints -- note that the laws of nature are the
designer’s friend in more than one way – one of those
ways is that they eliminate some design options, and
make others obviously undesirable.
Thus nature reduces the size of the “design space” of
options that the traditional engineer must consider.
Not so for software. While in principle the size and
speed of a program might preclude some design
options, in practice neither is a practical limitation.
Thus the “design space” is enormous.
Second, continuity -- the fact that physical systems are
described by continuous mathematics is what enables
thorough testing.
It is possible to test a physical system for one input
value and know that its behavior for small changes in
the input will be very similar.
Thus, if one tests a range of input values that are “close
enough”, you have exhaustively tested the system.
Not so for software.
If one of the 1010 bits of my laptop’s memory is changed,
a large, discontinuous change in behavior may occur.
Draft 6/27/2016
USC CSSE Workshop
p. 5
That, in turn means that an “exhaustive” test of a piece
of software must consider all possible “states” of
memory.
Just to get a feel for what that means, each bit in
memory can be in one of two states – so there are
2**1010 (roughly 10** 108) of them. That’s 10 raised to a
power that has a one followed by eight zeros.
Just for comparison, I believe there are about 10100,
atoms in the universe. Ten raised to a power of 1
followed by two zeros.
Thus the number of atoms in the universe is an
infinitesimal fraction of the number of states in my
laptop’s memory.
Bottom line, except for trivial programs, exhaustive
testing of software is impossible. The lack of
mathematical continuity is the culprit.
Thread 4: For a variety of reasons that I’ll outline
below, I believe that “traditional engineering” is
becoming more like software engineering.
The artifacts that traditional engineers produce are
becoming more like software.
Some of the reasons for that are:
1. First, and most obviously, because computers are
so flexible and cheap, they are being embedded in
everything.
Once one component of a system is software, the
Draft 6/27/2016
USC CSSE Workshop
p. 6
whole system acquires the problems of complexity,
reduced constraints, and lack of continuity.
2. The size of the design space is growing
independent of the use of sw – the use of “designer
materials”, for example.
3. New constraints – my father was a mechanical
engineer, and he did not worry about ergonomic
factors, or environmental impact, for example.
4. Finally, there is the intrinsic complexity of the
systems we have the nerve to engineer – I am
thinking of the Corps of Engineers “remediation” of
the Everglades, for example.
The Everglades are an incredibly complex, subtly
interdependent eco-system.
Alternatively, I have been trying to teach myself
some modern biology for the last couple of years
and have been struck by the immense complexity
of even simple procariotic cells – ie, bacteria.
The notion that traditional engineering practice will
anticipate all of the interactions in either of these
systems, and that there will be no unintended
adverse consequences of changing them, boggles
the mind.
So, for all these reasons, as I said before, I see
traditional engineering moving in the direction of
software engineering.
Draft 6/27/2016
USC CSSE Workshop
p. 7
That suggests that traditional engineers might look to
our experience producing software to see some of the
problems they will face looking ahead to ever more
complex, less constrained, and discontinuous systems.
Thread 5: Equally, software engineers might look ahead
to future systems to ponder the future of their own
discipline as well as that of “traditional engineering”.
In this regard I commend a recent report from the
Software Engineering Institute at Carnegie-Mellon
entitled Ultra Large Scale Systems.
What struck me about this report was not the “large
scale” aspect per se – we’ve been building systems just
a bit larger than we intellectual control of for a long time.
Rather, what struck me was the notion that these
systems would be crafted from components with many
“owners” -- and that those owners would not know who
used and depended on the component they were
responsible for.
We have talked about “systems of systems” for a long
time, but I, at least, had not contemplated the
implications of evolution of the component systems
ignorant of the dependencies their “users” have on
them.
And, what about “transitive properties” – properties that
my system has only because of a property that another
system that I use, but do not have control over, has.
Every design methodology I know of starts with an
analysis of the “requirements”.
Draft 6/27/2016
USC CSSE Workshop
p. 8
The SEI report suggests we may not be able to know
them in these ultra large scale systems.
Thus I may make an “improvement” or “correct an
error” in the system I control and yet “mess up” a
system that uses mine because it depends on a property
that I did not consider important – or perhaps that I was
not even aware of.
Or maybe you “fix” your system, which I use, and from
my perspective mine continues to work “correctly” – but
unbeknownst to me, one of my users depends on a
property that my system inherited from yours, and it
now fails.
One response to this situation, the “traditional” CS
response, is that
1. Every system should publish the properties that it
guaranties to provide, and
2. A user of that system should depend only on those
published properties
Unfortunately there is a healthy lack of realism in this
view.
Thread 6: I said earlier that I wanted to raise
“complexity” to its own thread – and that’s what I want
to do now.
An observation and a question:
Draft 6/27/2016
USC CSSE Workshop
p. 9
1. As we know, any sufficiently complex system will
have “emergent properties” – that is, behaviors that
were not predict baseded on the behaviors of its
components and their interconnection.
One can indefinitely debate whether more careful
analysis might have predicted these emergent
properties – but it is a fruitless debate. Emergent
properties happen!
In real systems they can be first order effects.
With a perfect knowledge of quantum mechanics,
and as much analysis time as you like, you won’t
predict the personality of Bill Wulf – it’s an
emergent property.
2. The usual mechanisms we have used for
controlling intellectual complexity are abstraction
and modularization.
But what happens when the modules are
themselves “ultra large” and their abstraction
ignores their very real emergent properties?
Indeed, what if those emergent properties are
among the first order behaviors of the modules?
Is it possible that modularization and abstraction as
we have used them are tools for “moderately large”
systems, but not ultra large ones?
The Challenge to CSSE: Maybe it is time to take a
serious look at the “engineering method” and rethink it
Draft 6/27/2016
USC CSSE Workshop
p. 10
in the context of what the SEI called Ultra Large Scale
Systems.
Maybe the answer will be the traditional one.
But maybe not.
Don’t be mislead by the “in principle” ability to control
dependencies in software.
Think again about the Corp of Engineers “remediation”
of the Everglades.
It seems to me unassailable to me that some repair of
our previous damage to the Everglades’ environment is
needed.
But equally, it seems unlikely to me that we can
completely understand all of the dependencies of every
part of that eco-system on every other part.
What “engineering method” would let us proceed,
knowing that:
 Any action we take might have unintended
consequences.
 But not acting also has consequences.
It strikes me that the merger of software and systems
engineering centers creates just the right place to take
on the critical question of the “engineering method” for
the next generation of even more complex systems.
Thank you.
Draft 6/27/2016
USC CSSE Workshop
p. 11
Download