Facts and Fallacies

TODO - notes facts and fallacies book glass

Facts

People

  • The most important factor in software work is the quality of the programmers.

  • The best programmers are up to 28 times better than the worst programmers.

  • Adding people to a late project makes it later.

  • The working environment has a profound impact on productivity and quality.

Tools and Techniques

  • Hype (about tools and technology) is a plague on the house of software.

  • New tools and techniques cause an initial loss of productivity / quality.

  • Software developers talk a lot about tools, but seldom use them.

Estimation

  • One of the two most common causes of runaway projects is poor estimation.

  • Software estimation usually occurs at the wrong time.

  • Software estimation is usually done by the wrong people.

  • Software estimates are rarely corrected as the project proceeds.

  • It is not surprising that software estimates are bad. But we live and die by them anyway!

  • There is a disconnect between software management and their programmers.

  • The answer to a feasability study is almost always "yes".

Reuse

  • Reuse-in-the-small is a solved problem.

  • Reuse-in-the-large remains a mostly unsolved problem.

  • Reuse-in-the-large works best in families of related systems.

  • Reuseable components are three times as hard to build and should be tried out in three different settings.

  • Modification of reused code is particularly error-prone.

  • Design pattern reuse is one solution to the problems of code reuse.

Requirements

  • One of the two most common causes of runaway projects is unstable requirements.

  • Requirements errors are the most expensive to fix during production.

  • Missing requirements are the hardest requirements errors to correct.

Design

  • Explicit requirements 'explode' as implicit requirements for a solution evolve.

  • There is seldom one best design solution to a software problem.

  • Design is a complex, iterative process. Initial design solutions are usually wrong and certainly not optimal.

Coding

  • Designer 'primitives' rarely match programmer 'primitives'.

  • COBOL is a very bad language, but all the others are so much worse.

Error removal

  • Error removal is the most time-consuming phase of the lifecycle.

Testing

  • Software is usually tested at best to the 55 to 60 percent coverage level.

  • 100 percent test coverage is still far from enough.

  • Test tools are essential, but rarely used.

  • Test automation rarely is. Most testing activities cannot be automated.

  • Programmer-created, built-in debug code is an important supplement to testing tools.

Reviews and Inspections

  • Rigorous inspections can remove up to 90 percent of errors before the first test case is run.

  • Rigorous inspections should not replace testing.

  • Post-delivery reviews, postmortems, and retrospectives are important and seldom performed.

  • Reviews are both technical and sociological, and both factors must be accommodated.

Maintenance

  • Maintenance typically consumes 40 to 80 percent of software costs. It is probably the most important software lifecycle phase.

  • Enhancements represent roughly 60 percent of maintenance costs.

  • Maintenance is a solution-- not a problem.

  • Understanding the existing product is the most difficult maintenance task.

  • Better methods lead to more maintenance, not less.

Quality

  • Quality is a collection of attributes.

  • Quality is not user satisfaction, meeting requirements, achieving cost and schedule, or reliability.

Reliability

  • There are errors that most programmers tend to make.

  • Errors tend to cluster.

  • There is no single best approach to software error removal.

  • Residual errors will always persist. The goal should be to minimize or eliminate severe errors.

Efficiency

  • Efficiency stems more from good design than good coding.

  • High-order language code can be about 90 percent as efficient as comparable assembler code.

  • There are tradeoffs between optimizing for time and optimizing for space.

Research

  • Many researchers advocate rather than investigate.

ten fallacies

  • You can't manage what you can't measure.

  • You can manage quality into a software product.

  • Programming can and should be egoless.

  • Tools and techniques: one size fits all.

  • Software needs more methodologies.

  • To estimate cost and schedule, first estimate lines of code.

  • Random test input is a good way to optimize testing.

  • "Given enough eyeballs, all bugs are shallow".

  • The way to preduct future maintenance costs and to make product replacement decisions is to look at past cost data.

  • You teach people how to program by showing them how to write programs.

Last updated

Was this helpful?