28 Kasım 2013 Perşembe

Will there be a silver bullet in software development? If yes, what will it be? If not, how can we defend against the Software Project Werewolf?

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.
2.      Timesharing - preserves immediacy, and hence enables us to maintain an overview of 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  developin the  great  conceptua designers of the rising generation.

Hiç yorum yok:

Yorum Gönder