-  Diagnosis: Find the cause from the symptoms
-  Debugging: Diagnosis of a engineered system, usually a computer.
  
  -  Use of “bug” for malfunction predates the computer.
	Edison
	used it, and has 
	earlier
 	origins.
  
-  Moth found in the Mark II.
  
 
-  Relevant properties of a computer.
  
  -  Precision, e.g., letter O and digit 0.
  
-  Literal operation.
    
    -  A computer cannot know what you meant.
    
-  No “common sense”.
    
 
-  Consistent: Do the same thing every time.
    
    -  Usually.  Exceptions mean the behavior depends one something
	you don't know about.
    
-  Looks like a random failure.
    
 
 
-  Sources of trouble.
  
  -  Bad input data.
  
-  Bad instruction: An error in the program.
  
 
-  Debugging steps.
  
  -  Reproduce the error: Try to be sure what causes the behavior.
  
-  Be precise about what is wrong.
  
-  Eliminate obvious errors: “Is is plugged in?”
  
-  Divide into parts, and test separately.
  
-  Predict the results of your tests, and see if actual behavior agrees.
  
-  If you reach a dead end, start over.  Try more and better.
  
 
-  Testing a Program.
  
  -  Test plan.
    
    -  Consider each required behavior.
    
-  Plan actions to demonstrate that behavior under all relevant 
	circumstances.
    
-  Note the expected correct response.
    
 
-  Black box testing: Choose tests based on specification.
  
-  White box testing: Choose tests based on program code.