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