There doesn’t seem a silver bullet
in the software engineering yet.
According to F. Brooks, there are
accidental and essential difficulties in software engineering. Developments so
far have solved the accidental difficulties and made some contributions to the
development of software but these contributions are not “order-of-magnitude”
contributions.
The essential difficulties in
software:
1.
Complexity:
Why software systems are complex:
a.
No
two parts are alike.
b.
There
are massive number of states in software.
c.
A
scaling up of a software entity results in nonlinear increase in complexity.
i.
It’s
not merely a repetition of the same elements in larger sizes. It is necessarily
an increase in the number of different elements. In most cases, the elements
interacts with each other in some nonlinear fashion, and the complexity of the
whole increases much more than linearly.
d.
Complexity
of
i.
Software
structure and behavior
ii.
Communication
among team members
2.
Conformity:
a.
Software
is produced by and run within an organization. It is always important to conform
organizational policies.
i.
introduces
additional complexity to software.
ii.
“Arbitrary
complexity” without solid policies, principles and reasons by human
institutions and systems.
iii.
Organizational
policies often change.
iv.
Changes
in law, management, etc.
3.
Changeability:
a.
Unlike
software, manufactured things are not often changed after they are built.
i.
They
will be replaced with other things, not changed often.
ii.
Involves
high cost for changes
b.
Successful
software will often get changed.
i.
Users
who like the software will want to use it in another similar domains.
ii.
Successful
software survives beyond the longevity of a platform for which it was build.
iii.
Changes
in organizational structures, laws, policies, etc.
4. Invisibility:
a.
Software
is invisible and un-visualizable.
i.
Visualization
for software structure and behavior
ii.
Visualization
of big picture
1.
Communication
overhead among engineers, customers and mangers.
b.
The
fact it is hard to build a solid model of software systems gives customers the
illusion that the systems should be flexible and easy to change.
Brook says that past
breakthroughs solved accidental
difficulties that are not inherent in software itself.
1.
High
level languages –free a program from much of
its
accidental complexity.
3.
Unified programming environments - They
attack the accidental difficulties of
using programs together,
by providing integrated libraries, unified file formats, and pipes and filters.
Other developments in the
software engineering didn’t prove to be silver bullets too. All these made
contributions to software, but they didn’t solve the essential difficulties of
software.
1.
ADA
– another high level language, greatest contribution will
be that
switching to it occasioned training
programmers in modern
software design
techniques.
2.
Object
Oriented Programming - removes a higher-order sort of accidental difficulty and allow a higher-order expression of design.
3.
Artificial
intelligence
4.
Expert
systems
5.
Automatic
programming
6.
Graphical
programming
7.
Program
verification
8.
Environments
and tools
So what should be done to defend
against the software werewolf?
·
Exploiting
the mass market to avoid constructing
what can be bought.
·
Using rapid prototyping
as part of a planned iteration in establishing software requirements.
·
Growing
software organically,
adding more and more function to systems
as they are run, used, and tested.
·
Identifying
and developing the
great conceptual designers of the rising generation.









