The relationship between source code, computers, and people is
complex. Though most code exists to be run on a computer, its
purpose is not limited to that. It is also intended to be read and
understood. The complexity of modern software development stands in
opposition to the effort to understand code: Software that cannot be
understood cannot be easily maintained or improved, and many
empirical studies indicate a correlation between a given codebase's
complexity and its rate of defects. It's difficult to understand a
codebase of any significant size, and programmers therefore need and
deserve every useful tool and technique to help them understand
complex codebases.
One such category of tool, static program analysis, consists of
programs or algorithms designed to extract facts from another
program's source code, without executing the program in question and
usually as a distinct stage in the day-to-day software development
process. Software developers who use tools for static program
analysis (usually referred to simply as static analysis) then have
an opportunity to use the facts yielded by the analysis to further
understand, evaluate, and modify the associated codebase.