System Testing And Debugging
Debugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware, thus
making it behave as expected. Debugging tends to be harder when various
subsystems are tightly coupled, as changes in one may cause bugs to
emerge in another.
Numerous books have been
written about debugging (see below: Further reading), as it involves
numerous aspects, including interactive debugging, control flow, integration
testing, log files, monitoring (application, system), memory
dumps, profiling, Statistical Process Control, and special
design tactics to improve detection while simplifying changes
Normally the first step in
debugging is to attempt to reproduce the problem. This can be a non-trivial
task, for example as with parallel processes or some unusual software
bugs. Also, specific user environment and usage history can make it
difficult to reproduce the problem.
After the bug is reproduced,
the input of the program may need to be simplified to make it easier to debug.
For example, a bug in a compiler can make it crash when parsing some
large source file. However, after simplification of the test case, only few
lines from the original source file can be sufficient to reproduce the same
crash. Such simplification can be made manually, using a divide-and-conquer
approach. The programmer will try to remove some parts of original test case
and check if the problem still exists. When debugging the problem in a GUI,
the programmer can try to skip some user interaction from the original problem
description and check if remaining actions are sufficient for bugs to appear.
After the test case is
sufficiently simplified, a programmer can use a debugger tool to examine
program states (values of variables, plus the call stack) and track down
the origin of the problem(s). Alternatively, tracing can be used. In
simple cases, tracing is just a few print statements, which output the values
of variables at certain points of program execution
TECHNIQUES
·
Print debugging (or tracing) is the act of
watching (live or recorded) trace statements, or print statements, that indicate the flow of execution of a process. This
is sometimes called printf debugging, due to the use of the printf function in C. This kind of debugging was turned on by the command TRON in the original versions
of the novice-oriented BASIC programming language. TRON stood for,
"Trace On." TRON caused the line numbers of each BASIC command line
to print as the program ran.
·
Remote debugging is the process of debugging a
program running on a system different from the debugger. To start remote debugging, a debugger connects to a
remote system over a network. The debugger can then control the execution of
the program on the remote system and retrieve information about its state.
Post-mortem debugging is debugging of the program after it has
already crashed. Related techniques often include various
tracing techniques (for example,) and/or analysis of memory dump
(or core dump) of the crashed process. The dump of the process could be
obtained automatically by the system (for example, when process has
terminated due to an unhandled exception), or by a programmer-inserted
instruction, or manually by the interactive user.
·
"Wolf fence"
algorithm: Edward Gauss described this simple but very useful and now famous algorithm in a 1982 article for
communications of the ACM as follows: "There's one wolf in Alaska; how do
you find it? First build a fence down the middle of the state, wait for the
wolf to howl, determine which side of the fence it is on. Repeat process on
that side only, until you get to the point where you can see the wolf. This is
implemented e.g. in the Git version control system as the command git bisect, which uses the above
algorithm to determine which commit introduced a particular bug.
·
Delta Debugging – a technique of automating
test case simplification.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.