Tag Archives: Debugging

How to Quickly and Reliably Fix a Bug

Problem:

You need to fix a bug. However it takes you a lot of effort to fix. The fix may also not be reliable. How can you avoid this situation?

Solution:
  1. Try to understand the scenario or use case. Ensure that you and the tester are talking about the same thing and agree about the missing or incorrect elements by comparing the final user interface with the original approved use case or user story or specification.
  2. Try to reliably reproduce the bug. It is okay if this attempt may not be successful.
  3. Try isolating the bug in the same or similar environment by using specific, smaller data and fewer settings. It is okay if this attempt may not be done due to your inherent complex software.
  4. Search for an existing solution using error message generated by the system. Include any library or framework name and version, and operating system name and version in search key words. If there is already an existing solution then this attempt can save us a lot of effort.
  5. Try to understand all the concepts in error message.
  6. Debug and log messages to identify the exact location in the source code that causes the issue. In order to to this we need to do the followings.
    • Identifying the flow of the data, i.e. the use case, the entry point and the exit point in the code related to the issue.
    • Trying to understand programming language syntax in the code. Do not guess anything.
    • Trying to understand purpose, inputs and outputs of library functions related to the use case. Again, do not guess anything.
    • Trying to understand data structure and a part of the database schema related to the use case.
    • Trying to review some concrete values inside the database if possible.
    • Trying to understand concepts, algorithms and architecture related to the use case. Again, do not guess anything.
    • These steps may be done in parallel and iteratively.
  7. Guess a cause of the problem based on the information that you can get in the sixth step.
  8. Try to isolate the issue, i.e. try to reproduce the issue using specific code and unit tests, if possible.
  9. Search for or propose a solution for the cause, i.e. propose a fix.
  10. Implement and test the fix.
  11. Repeat from step 5 to step 10 if necessary.