1300 187 187
 

Facts and Fallacies of Software Engineering

Paperback

Published: 28th October 2002
Ships: 7 to 10 business days
RRP $67.99
$61.95

The practice of building software is a “new kid on the block” technology. Though it may not seem this way for those who have been in the field for most of their careers, in the overall scheme of professions, software builders are relative “newbies.”

In the short history of the software field, a lot of facts have been identified, and a lot of fallacies promulgated. Those facts and fallacies are what this book is about.

There’s a problem with those facts–and, as you might imagine, those fallacies. Many of these fundamentally important facts are learned by a software engineer, but over the short lifespan of the software field, all too many of them have been forgotten. While reading Facts and Fallacies of Software Engineering, you may experience moments of “Oh, yes, I had forgotten that,” alongside some “Is that really true?” thoughts.

The author of this book doesn’t shy away from controversy. In fact, each of the facts and fallacies is accompanied by a discussion of whatever controversy envelops it. You may find yourself agreeing with a lot of the facts and fallacies, yet emotionally disturbed by a few of them! Whether you agree or disagree, you will learn why the author has been called “the premier curmudgeon of software practice.”

These facts and fallacies are fundamental to the software building field–forget or neglect them at your peril!

Acknowledgmentsp. xiii
Forewordp. xv
55 Factsp. 1
Introductionp. 3
About Managementp. 9
Peoplep. 11
The most important factor in software work is the quality of the programmersp. 11
The best programmers are up to 28 times better than the worst programmersp. 14
Adding people to a late project makes it laterp. 16
The working environment has a profound impact on productivity and qualityp. 17
Tools and Techniquesp. 19
Hype (about tools and techniques) is the plague on the house of softwarep. 19
New tools and techniques cause an initial loss of productivity/qualityp. 23
Software developers talk a lot about tools, but seldom use themp. 25
Estimationp. 27
One of the two most common causes of runaway projects is poor estimationp. 27
Software estimation usually occurs at the wrong timep. 31
Software estimation is usually done by the wrong peoplep. 33
Software estimates are rarely corrected as the project proceedsp. 35
It is not surprising that software estimates are bad. But we live and die by them anyway!p. 36
There is a disconnect between software management and their programmersp. 39
The answer to a feasibility study is almost always "yes."p. 42
Reusep. 43
Reuse-in-the-small is a well-solved problemp. 43
Reuse-in-the-large remains a mostly unsolved problemp. 45
Reuse-in-the-large works best in families of related systemsp. 48
Reusable components are three times as hard to build and should be tried out in three settingsp. 49
Modification of reused code is particularly error-pronep. 51
Design pattern reuse is one solution to the problems of code reusep. 55
Complexityp. 58
For every 25 percent increase in problem complexity, there is a 100 percent increase in solution complexityp. 58
Eighty percent of software work is intellectual. A fair amount of it is creative. Little of it is clericalp. 60
About the Life Cyclep. 65
Requirementsp. 67
One of the two most common causes of runaway projects is unstable requirementsp. 67
Requirements errors are the most expensive to fix during productionp. 71
Missing requirements are the hardest requirements errors to correctp. 73
Designp. 76
Explicit requirements "explode" as implicit (design) requirements for a solution evolvep. 76
There is seldom one best design solution to a software problemp. 79
Design is a complex, iterative process. Initial design solutions are usually wrong and certainly not optimalp. 81
Codingp. 84
Designer "primitives" (solutions programmers can readily code) rarely match programmer "primitives."p. 84
COBOL is a very bad language, but all the others (for business applications) are so much worsep. 87
Error Removalp. 90
Error removal is the most time-consuming phase of the life cyclep. 90
Testingp. 91
Software is usually tested at best at the 55 to 60 percent (branch) coverage levelp. 91
One hundred percent coverage is still far from enoughp. 95
Test tools are essential, but many are rarely usedp. 97
Test automation rarely is. Most testing activities cannot be automatedp. 101
Programmer-created, built-in debug code is an important supplement to testing toolsp. 103
Reviews and Inspectionsp. 104
Rigorous inspections can remove up to 90 percent of errors before the first test case is runp. 104
Rigorous inspections should not replace testingp. 108
Postdelivery reviews (some call them "retrospectives") are important and seldom performedp. 110
Reviews are both technical and sociological, and both factors must be accommodatedp. 113
Maintenancep. 115
Maintenance typically consumes 40 to 80 percent of software costs. It is probably the most important life cycle phase of softwarep. 115
Enhancements represent roughly 60 percent of maintenance costsp. 117
Maintenance is a solution, not a problemp. 119
Understanding the existing product is the most difficult task of maintenancep. 120
Better methods lead to more maintenance, not lessp. 124
About Qualityp. 127
Qualityp. 129
Quality is a collection of attributesp. 129
Quality is not user satisfaction, meeting requirements, achieving cost and schedule, or reliabilityp. 132
Reliabilityp. 134
There are errors that most programmers tend to makep. 134
Errors tend to clusterp. 135
There is no single best approach to software error removalp. 137
Residual errors will always persist. The goal should be to minimize or eliminate severe errorsp. 137
Efficiencyp. 139
Efficiency stems more from good design than good codingp. 139
High-order language code can be about 90 percent as efficient as comparable assembler codep. 141
There are tradeoffs between size and time optimizationp. 143
About Researchp. 147
Many researchers advocate rather than investigatep. 148
5+5 Fallaciesp. 151
Introductionp. 153
About Managementp. 155
You can't manage what you can't measurep. 155
You can manage quality into a software productp. 158
Peoplep. 160
Programming can and should be egolessp. 160
Tools and Techniquesp. 161
Tools and techniques: one size fits allp. 161
Software needs more methodologiesp. 164
Estimationp. 167
To estimate cost and schedule, first estimate lines of codep. 167
About the Life Cyclep. 171
Testingp. 171
Random test input is a good way to optimize testingp. 171
Reviewsp. 174
"Given enough eyeballs, all bugs are shallow"p. 174
Maintenancep. 177
The way to predict future maintenance costs and to make product replacement decisions is to look at past cost datap. 177
About Educationp. 181
You teach people how to program by showing them how to write programsp. 181
Conclusionsp. 185
About the Authorp. 189
Indexp. 191
Table of Contents provided by Syndetics. All Rights Reserved.

ISBN: 9780321117427
ISBN-10: 0321117425
Series: Agile Software Development
Audience: General
Format: Paperback
Language: English
Number Of Pages: 224
Published: 28th October 2002
Dimensions (cm): 23.5 x 18.7  x 1.2
Weight (kg): 0.342