Debugging is a process which involves the finding and fixing of defects that prevent a computer or system from working properly.
Although the term was first attributed to Admiral Grace Hopper who used it while working on the Mark II Computer at Harvard in the 1940s, Hopper denied that she coined the phrase and that the term had been in use in aeronautics before computing.
Debugging can range from fixing simple errors to time-consuming analysis, data collection and scheduling updates. The complexity of the debugging process can depend on the skill of the programmer, the complexity of the system, available tools and the programming language.
Programming languages like Java make debugging easier because of features like exception handling, while languages like C may require a memory debugger to rectify silent problems which are hard to identify.
The debugging process usually starts with an attempt to reproduce the problem, then the reproduced bug may need to be simplified in order to successfully debug the issue. After simplification, a programmer can use a debugger tool to look at program states and identify the origin of the problem.