Home arrow Virus Trojans Worms arrow Fundamentals of Systems Engineering

Language Translator

Hacking Zone

Hacking Tools
Attacking

Configure Windows

Windows Configuration

Mix Tutorials

Asterisk
Website Building

Novels

Mix Novels

Human Personality

Body Language
Fundamentals of Systems Engineering Print E-mail
Article Index
Fundamentals of Systems Engineering
Page 2
Page 3
Page 4

Fundamentals of Systems Engineering



In this chapter we attempt to provide a technical overview of some topics from the field of software

engineering, stressing those that would be most useful to the working developer. The contents are an arbitrary

selection of the topics that would be most useful to the working analyst, designer, or programmer, operating

in the context of a smaller software project. We have avoided speculative discussions on the respective merits

of the various software engineering paradigms. The purpose of this chapter is to serve as an informational

background and to set the mood for the more practical discussions that follow. The discussion excludes object

orientation since Part II is devoted exclusively to this topic.

Characteristics of a New Discipline

Software engineering was first introduced in the 1960s in an effort to treat more rigorously the often frustrating task of designing and developing computer programs. It was around this time that the computer community became increasingly worried about the fact that software projects were typically over budget and behind schedule. The term software crisis came to signify that software development was the bottleneck in the advancement of computer technology.

During these initial years it became evident that we had introduced some grave fallacies by extending to software development some rules that were true for other fields of human endeavor, or that appeared to be common sense. The first such fallacy states that if a certain task takes a single programmer one year of coding, then four programmers would be able to accomplish it in approximately three months. The second fallacy is that if a single programmer was capable of producing a software product with a quality value of 25, then four programmers could create a product with a quality value considerably higher than 25, perhaps even approaching 100. A third fallacy states that if we have been capable of developing organizational tools, theories, and techniques for building bridges and airplanes, we should also be capable of straightforwardly developing a scientific methodology for engineering software.

The programmer productivity fallacy relates to the fact that computer programming, unlike ditch digging or apple harvesting, is not a task that is easily partitioned into isolated functions that can be performed independently. The different parts of a computer program interact, often in complicated and hard-to-predict ways. Considerable planning and forethought must precede the partitioning of a program into individually executable tasks. Furthermore, the individual programmers in a development team must frequently communicate to ensure that the separately developed elements will couple as expected and that the effects of

individual adjustments and modifications are taken into account by all members of the group. All of which leads to the conclusion that team programming implies planning and structuring operations as well as interaction between the elements of the team.

The cumulative quality fallacy is related to some of the same interactions that limit programmer productivity. Suppose the extreme case of an operating system program that was developed by ten programmers. Nine of these programmers have performed excellently and implemented all the functions assigned to them in a flawless manner, while one programmer is incompetent and has written code that systematically crashes the system and damages the stored files. In this case it is likely that the good features of this hypothetical operating system will probably go unnoticed to a user who experiences a destructive crash. Notice that this situation is different from what typically happens with other engineered products. We can imagine a dishwasher that fails to dry correctly, but that its other functionalities continue to be useful. Or a car that does not corner well, but that otherwise performs as expected. Computer programs, on the other hand, often fail catastrophically. When this happens it is difficult for the user to appreciate any residual usefulness in the software product.

This leads to the conclusion that rather than a cumulative quality effect, software production is subject to a minimal quality rule, which determines that a relatively small defect in a software product can impair its usability, or, at best, reduce its appraised quality. The statement that “the ungrateful look at the sun and see its spots” justifiably applies to software users. Also notice that the minimal quality rule applies not only to defects that generate catastrophic failures, but even to those that do not affect program integrity. For example, a word processor performs perfectly except that it hyphenates words incorrectly. This program may execute much more difficult tasks extremely well; it may have excellent on-screen formatting, a high-quality spelling

checker, an extensive dictionary of synonyms and antonyms, and many other important features. However, very few users will consider adopting this product since incorrectly hyphenated text is usually intolerable.

Finally, there is the unlikely assumption that we can engineer software programs in much the same way that we engineer bridges, buildings, and automobiles. The engineering methods fallacy is a consequence of the fact that software does not deal with tangible elements, subject to the laws of physics, but with purely intellectual creations. A program is more a thought than a thing. Things can be measured, tested, stretched, tempered, tuned, and transformed. A construction engineer can take a sample of concrete and measure its strength and resistance. A mechanical engineer can determine if a certain motor will be sufficiently powerful to operate a given machine. Regarding software components these determinations are not unequivocal. At the present stage-of-the-art a software engineer cannot look up a certain algorithm or data structure in a reference manual and determine rigorously if it is suitable for the problem at hand.

The Programmer as an Artist

Donald Knuth established in the title of his now classic work that programming is an art. He starts the preface

by saying:

“The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it can be an aesthetic experience much like composing poetry or music.”

Therefore, it is reasonable to deduce that any effort to reduce the art of programming to the following of a strict and scientifically defined rule set is likely to fail. What results is like comparing the canvas by a talented artist with one produced by using a paint-by-the-numbers toy. Without talent the programmer’s productions will consist of the dull rehashing of the same algorithms and routines that are printed in all the common textbooks. With genius and art the code comes alive with imaginative and resourceful creations that make the program a beautiful conception.

The fact that computer programming is an art and that talented programmers are more artists than technicians does not preclude the use of engineering and scientific principles in pursuing this art. Software engineering is not an attempt to reduce programming to a mechanical process, but a study of those elements of programming that can be approached technically and of the mechanisms that can be used to make programming less difficult. However, we must always keep in mind that technique, no matter how refined, can never make an artist out of an artisan.

Software Characteristics

From an engineering viewpoint a software system is a product that serves a function. However, one unique attribute makes a computer program much different from a bridge or an airplane: a program can be changed. This malleability of software is both an advantage and a danger. An advantage because it is often possible to correct an error in a program much easier than it would be to fix a defect in an airplane or automobile. A danger because a modification in a program can introduce unanticipated side effects that may impair the functionality of those components that were executing correctly before the change. Another notable characteristic of programs relates to the type of resources necessary for their creation. A software product is basically an intellectual commodity. The principal resource necessary for producing it is human intelligence. The actual manufacturing of programs is simple and inexpensive compared to its design, coding, testing, and documenting. This contrasts with many other engineered products in which the resources used in producing it are a substantial part of the product’s final cost. For example, a considerable portion of the price of a new automobile represents the cost of manufacturing it, wile a less significant part goes to pay for the engineering costs of design and development. In the case of a typical computer program the proportions are reversed. The most important element of the product cost is the human effort in design and development while the cost of manufacturing is proportionally insignificant.


 
Next >
Your Ad Here

RSS socialnet

Add to MyYahoo!
Subscribe in NewsGator Online
Add to Newsburst
Add to Google
Add to My AOL
Add to Pluck
Subscribe in FeedLounge
Add to Windows Live
Add to NetVibes
Subscribe in Rojo
Subscribe in Bloglines
Add to MyMSN
Add to Plusmo for your cellphone
Add to PageFlakes
Add to Technorati
Add to BlinkBits
Instant approval for the online credit card application submited today!
buy cheap Cheap FFXI Gil now!