The most important reason is that communication gap between the clients, developers and software test engineers.
Frequently changes in the requirements - when clients change the requirements then expected that defect pops up
Many errors in programs - When programmer makes many coding errors at that some defect are faced in the software.
Major reason is Lack of technical skills - When any software engineer has lack of technical knowledge.
If you want see how to write effective bug report then please visit below link
Click here