Literature Review

profileBibekG
No_Silve_Bullet_Notes.pdf

9/1/2014

1

NoSilverBullet

1

• Introduce thesis of Fred Brook’s "No Silver Bullet"

• Classic essay by Fred Brooks discussing “Why is SE so hard?”

No Silver Bullet

2

• “There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.”— Fred Brooks, 1986

• i.e. There is no magical cure for the “software crisis”

Why? Essence and Accidents

3

• Brooks divides the problems facing software engineering into two categories

• essence: difficulties inherent, or intrinsic, in the nature of software

• accidents: difficulties related to the production of software

• Brooks argues that most techniques attack the accidents of software engineering

An Order of Magnitude

4

• In order to improve software development by a factor of 10

• first, the accidents of software engineering would have to account for 90% of the overall effort

• second, tools would have to reduce accidental problems to zero

• Brooks doesn't believe that the former is true…

• and the latter is nigh impossible because each new tool or technique solves some problems while introducing others

9/1/2014

2

The Essence

5

• Brooks divides the essence into four subcategories

• complexity

• conformity

• changeability

• invisibility

• Lets consider each in turn

Complexity (I)

6

• Software entities are amazingly complex

• No two parts (above statements) are alike

• Contrast with materials in other domains

• Large software systems have a huge number of states

• Brooks claims they have an order of magnitude more states than computers (i.e. hardware) do

• As the size of a system increases, both the number and types of parts increase exponentially

• the latter increase is the most significant

Complexity (II)

7

• You can't abstract away the complexity of the application domain. Consider:

• air traffic control, international banking, avionics software

• These domains are intrinsically complex and this complexity will appear in the software system as designers attempt to model the domain

• Complexity also comes from the numerous and tight relationships between heterogeneous software artifacts such as specs, docs, code, test cases, etc.

Complexity (III)

8

• Problems resulting from complexity

• difficult team communication

• product flaws; cost overruns; schedule delays

• personnel turnover (loss of knowledge)

• unenumerated states (lots of them)

• lack of extensibility (complexity of structure)

• unanticipated states (security loopholes)

• project overview is difficult

9/1/2014

3

Conformity (I)

9

• A lot of complexity facing software engineers is arbitrary

• Consider designing a software system to support an existing business process when

• a new VP arrives at the company

• The VP decides to “make a mark” on the company and changes the business process

• Our system must now conform to the (from our perspective) arbitrary changes imposed by the VP

Conformity (II)

10

• Other instances of conformity

• Having to integrate with a non-standard module interface

• Adapting to a pre-existing environment

• and if the environment changes (for whatever reason), you can bet that software will be asked to change in response

• Main Point: It is almost impossible to plan for arbitrary change;

• instead, you just have to wait for it to occur and deal with it when it happens

Changeability (I)

11

• Software is constantly asked to change

• Other things are too, however, manufactured things are rarely changed after they have been created

• instead, changes appear in later models; for example, automobiles are recalled only infrequently, and buildings are expensive to remodel

Changeability (II)

12

• With software, the pressure to change is greater

• in a project, it is functionality that is often asked to change and software EQUALS functionality (plus its malleable)

• clients of a software project often don't understand enough about software to understand when a change request requires significant rework of an existing system

• Contrast with more tangible domains, just imagine asking for a new layout of a house after the foundation has been poured

9/1/2014

4

Invisibility (I)

13

• Software is by its nature invisible; and it is difficult to design graphical displays of software that convey meaning to developers

• Contrast to blueprints: here geometry can be used to identify problems and help optimize the use of space

• But with software, its difficult to reduce it to diagrams

• UML contains 13 different diagram types to model class structure, object relationships, activities, event handling, software architecture, deployment, packages, etc.

Invisibility (II)

14

• Hard to get both a “big picture” view as well as details

• Hard to convey just one issue on a single diagram

• instead multiple concerns crowd and/or clutter the diagram hindering understanding

• This lack of visualization deprives the engineer from using the brain's powerful visual skills

Promising Attacks on the Essence

15

• Buy vs. Build

• Don't develop software when you can avoid it

• Rapid Prototyping

• Use to clarify requirements

• Incremental Development

• don't build software, grow it

• Great designers

• Be on the look out for them, when you find them, don't let go!

Quiz Yourself

16

• Essence or Accident?

• A bug in a financial system is discovered that came from a conflict in state/ federal regulations on one type of transaction

• A program developed in two weeks using a whiz bang new application framework is unable to handle multiple threads since the framework is not thread safe

• A new version of a compiler generates code that crashes on 32-bit architectures; the previous version did not

• A fickle customer submits 10 change requests per week after receiving the first usable version of a software system

9/1/2014

5

Software Engineering: More than just Programming

17

• It should now be clear that software engineering is more than just

• programming, data structures, algorithms, etc.

• It takes advantage of these very useful computer science techniques but adds

• quality concerns

• testing, code reviews, validation and verification of requirements

• process concerns

• Are we using the right software life cycle? Are we monitoring our ability to execute the process? Are we consistent? Are we getting better?

• reliance on tools, people, and support processes

• debugging, profiling, configuration management, deployment, issue tracking