Скачать презентацию Quality Douglas Crockford The Software Crisis The Скачать презентацию Quality Douglas Crockford The Software Crisis The

4ad0bb5f90da94f1b91ee6127ae3dffe.ppt

  • Количество слайдов: 65

Quality Douglas Crockford Quality Douglas Crockford

The Software Crisis The topic dominated the computer industry trade press for about a The Software Crisis The topic dominated the computer industry trade press for about a decade.

The Software Crisis • Over budget • Over time • Unreliable • Requirements not The Software Crisis • Over budget • Over time • Unreliable • Requirements not fully met • Unmaintainable • Failure • Insecure (New!)

Software Crisis • Year 44 • It is old news, so no one talks Software Crisis • Year 44 • It is old news, so no one talks about it • In other news, the Sun will exhaust its supply of Hydrogen

Craft v Engineering Craft v Engineering

Computer Science has not taught us how to manage software projects Computer Science has not taught us how to manage software projects

Software Construction • In some ways like any other sort of construction. • In Software Construction • In some ways like any other sort of construction. • In some ways radically different.

The Nature of Software • Software is powerful and malleable • That is its The Nature of Software • Software is powerful and malleable • That is its blessing • That is its curse

Programming is Difficult Software is the most complicated stuff that humans make Programming is Difficult Software is the most complicated stuff that humans make

Lack of metrics Measure of quality or completeness Lack of metrics Measure of quality or completeness

Lines of Code • Not an indicator of quality • Not an effective measure Lines of Code • Not an indicator of quality • Not an effective measure of completeness • Estimation is difficult

Programmers are optimists They wouldn't be able to do this work if they were Programmers are optimists They wouldn't be able to do this work if they were not

Programmers do not understand how they spend their time • They think they mostly Programmers do not understand how they spend their time • They think they mostly are typing programs • Mostly they are in meetings or technical conversations • Or staring at the screen saying "My God. What have I done? "

Programmers do not understand how they spend their time • Programmers tend to be Programmers do not understand how they spend their time • Programmers tend to be skeptical of process improvements that might require more keystrokes. • First Rule of Optimization: Optimize the process that is taking the most time.

Programming is a social activity Solo projects are the exception Programming is a social activity Solo projects are the exception

Cost of Innovation • Doing what has been done before v • Doing what Cost of Innovation • Doing what has been done before v • Doing what has not been done before

Legacy • In other industries, the wealth of practice and tradition • In software, Legacy • In other industries, the wealth of practice and tradition • In software, past accomplishments are considered a liability • The age at which programs become legacy is getting younger and younger • Some programs become legacy before they are finished

Leaps • Software is not governed by Moore's Law • Software is governed by Leaps • Software is not governed by Moore's Law • Software is governed by Murphy's Law • Software leaps tend to come at 20 year intervals, not 2 year intervals • Cycle of software generation closely related to cycle of human generation.

Leaps • Leaps make it possible to implement projects of greater complexity. • Adoption Leaps • Leaps make it possible to implement projects of greater complexity. • Adoption of leaping software technologies tends to be very slow. • Controversy. • Reluctance.

Leaps • Plugboards Leaps • Plugboards

Leaps • Plugboards • Machine Code Leaps • Plugboards • Machine Code

Leaps • Plugboards • Machine Code • High Level Languages Leaps • Plugboards • Machine Code • High Level Languages

Leaps • Plugboards • Machine Code • High Level Languages • Structured Programming Leaps • Plugboards • Machine Code • High Level Languages • Structured Programming

Leaps • Plugboards • Machine Code • High Level Languages • Structured Programming • Leaps • Plugboards • Machine Code • High Level Languages • Structured Programming • Object Oriented Programming

Object Oriented Programming • 1967 Simula • 1971 Kay begins Smalltalk • 1980 Smalltalk Object Oriented Programming • 1967 Simula • 1971 Kay begins Smalltalk • 1980 Smalltalk released • 1985 C++ Programming Language • 1995 The Java Programming Language

Leaps • Plugboards • Machine Code • High Level Languages • Structured Programming • Leaps • Plugboards • Machine Code • High Level Languages • Structured Programming • Object Oriented Programming • Distributed Programming

Failed Leaps • Artificial Intelligence • Fifth Generation Languages • Computer Aided Software Engineering Failed Leaps • Artificial Intelligence • Fifth Generation Languages • Computer Aided Software Engineering • Subjective-oriented, etc.

Software does not have enough self awareness to be afraid of bugs. That's why Software does not have enough self awareness to be afraid of bugs. That's why it works as well as it does.

Bugs • Mr Edison, I was informed, had been up the two previous nights Bugs • Mr Edison, I was informed, had been up the two previous nights discovering a bug in his phonograph. Pall Mall Gazette, 1889 -03 -11

Grace Hopper's Bug Grace Hopper's Bug

Snake Oil Silver Bullets Snake Oil Silver Bullets

Mythical Man Month (1975) • Fredrick Brooks • Mythical Man Month (1975) • Fredrick Brooks • "Adding manpower to a late software project makes it later. " • Second System Effect • Prototyping (software is like waffles) • "A project becomes a year late one day at a time. "

Literate Programming • Donald Knuth • Programs are designed to be read. • The Literate Programming • Donald Knuth • Programs are designed to be read. • The program is the specification and documentation.

Incrementalism Incrementalism

Beta Perpetually unfinished Beta Perpetually unfinished

Winchester House Winchester House

Winchester House Winchester House

Winchester House Winchester House

Application Quality Triad • Skill Training and experience • Technology Work with technology providers Application Quality Triad • Skill Training and experience • Technology Work with technology providers and standards bodies • Requirements Better understanding of the impact of requirements determination

Mr Blandings Builds His Dream House (1948) Mr Blandings Builds His Dream House (1948)

Mr Blandings Builds His Dream House (1948) • Best movie ever about project management Mr Blandings Builds His Dream House (1948) • Best movie ever about project management • Blandings's problems: Lack of knowledge of technology Poor control over requirements

Feature Cost • Development Time • Deployment Cost • Maintenance Cost (bloat, cruft) • Feature Cost • Development Time • Deployment Cost • Maintenance Cost (bloat, cruft) • Download Time • User Confusion/Training • Bug Delivery

Code Value • A significant fraction of our valuation is the state of our Code Value • A significant fraction of our valuation is the state of our codebase. • A low quality codebase is a liability.

Code Quality • Microview: Coding Conventions • Macroview: Program Architecture Code Quality • Microview: Coding Conventions • Macroview: Program Architecture

The simplest thing we can do to enhance the value of our codebase is The simplest thing we can do to enhance the value of our codebase is to make our programs readable.

Programs are a medium of intentional communication • Communicating detailed instructions with the machine Programs are a medium of intentional communication • Communicating detailed instructions with the machine • Communicating with your development community • Communicating with yourself

Good architecture is necessary to give programs enough structure to be able to grow Good architecture is necessary to give programs enough structure to be able to grow large without collapsing into a puddle of confusion

Changing a correct program into another correct program. Changing a correct program into another correct program.

Don’t Repeat Yourself! DRY Don’t Repeat Yourself! DRY

Cruft Software Scar Tissue Cruft Software Scar Tissue

Causes of Cruft • Premature optimization • Inexperience • Misread source • Feature enhancement Causes of Cruft • Premature optimization • Inexperience • Misread source • Feature enhancement • Workarounds • Fixing the wrong thing • Mindless obedience • Death March

Bloat Software Obesity Bloat Software Obesity

Insecurity Marginal security Insecurity Marginal security

Good secure programming is good programming. Good secure programming is good programming.

It is not unusual for the purpose or use or scope of software to It is not unusual for the purpose or use or scope of software to change over its life. Rarely are the security properties of software systems reexamined in the context of new or evolving missions. This leads to insecure systems.

As cruft accumulates, complexity grows, progess slows. Inevitably, the codebase itself becomes a huge As cruft accumulates, complexity grows, progess slows. Inevitably, the codebase itself becomes a huge source of friction

Refactoring • The process of code refinement. • Correction of formatting. • Insertion of Refactoring • The process of code refinement. • Correction of formatting. • Insertion of documentation. • Removal of cruft and bloat. • Restructuring.

Plant and harvest your crops for six years, but let the land rest and Plant and harvest your crops for six years, but let the land rest and lie fallow during the seventh year Exodus 23: 10 -11

Sometimes the best course is to start over Sometimes the best course is to start over

The Pain of the Crash Loss of a week's work, a day's work, an The Pain of the Crash Loss of a week's work, a day's work, an hour's work, is unbearable.

The illusion of completion The illusion of completion "It's in the can. "

An experienced team can cross that ground again very quickly. Focus must be on An experienced team can cross that ground again very quickly. Focus must be on simplicity to avoid the second system effect.

Have regular code readings. • Don’t wait until release to do code reviews. • Have regular code readings. • Don’t wait until release to do code reviews. • Do team code reading regularly during development. • Problems can be discovered early. • Good techniques can be shared early. • Experienced developers can lead by example. • Novice developers learn from the group.

Have regular code readings. • Frequent. • Helpful. • Respectful. Have regular code readings. • Frequent. • Helpful. • Respectful.

Conclusion • Quality First. Quality Last. • Readable Code Reading. • Invest in the Conclusion • Quality First. Quality Last. • Readable Code Reading. • Invest in the quality of your code base. • Invest in your programmers and managers. • Quality is the most important feature.