What is Defect or Bugs or Faults in software testing ? Defect is a variance between expected results and actual results of execution of test case on system.
Categories of Defects 1. Functional 2. Non Functional
3. Functional Defects 
Wrong : The software does something that the product specifications says it shouldn’t do.
Missing : The software doesn’t do something that the product specification says it should do.
Extra : The software does something that the product specification doesn’t mention.
Non Functional Defects The defects which is difficult to understand, hard to use, slow etc.
Causes of Defects
User gives wrong or incomplete requirements.
Analyst interprets requirements incorrectly.
Requirements are not recorded correctly.
Incorrect design.
Error in coding.
Data entry error.
Mistake in error correction.
For more details : What is Defect