<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Dynamic_program_analysis</id>
	<title>Dynamic program analysis - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Dynamic_program_analysis"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Dynamic_program_analysis&amp;action=history"/>
	<updated>2026-04-30T17:01:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Dynamic_program_analysis&amp;diff=2965084&amp;oldid=prev</id>
		<title>imported&gt;OAbot: Open access bot: url-access updated in citation with #oabot.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Dynamic_program_analysis&amp;diff=2965084&amp;oldid=prev"/>
		<updated>2025-05-23T21:08:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/OABOT&quot; class=&quot;extiw&quot; title=&quot;wikipedia:OABOT&quot;&gt;Open access bot&lt;/a&gt;: url-access updated in citation with #oabot.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Analysis of software performed when running a program}}&lt;br /&gt;
{{More citations needed|date=February 2009}}&lt;br /&gt;
{{Program execution}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dynamic program analysis&amp;#039;&amp;#039;&amp;#039; is the act of [[Program analysis (computer science)|analyzing software]] that involves executing a [[computer program|program]] {{endash}} as opposed to [[static program analysis]], which does not execute it.&lt;br /&gt;
&lt;br /&gt;
Analysis can focus on different aspects of the software including but not limited to: [[behavior]], [[test coverage]], [[software performance|performance]] and [[security]].&lt;br /&gt;
&lt;br /&gt;
To be effective, the target program must be executed with sufficient test inputs&amp;lt;ref&amp;gt;{{Cite journal|last1=Khatiwada|first1=Saket|last2=Tushev|first2=Miroslav|last3=Mahmoud|first3=Anas|date=2018-01-01|title=Just enough semantics: An information theoretic approach for IR-based software bug localization|url=https://linkinghub.elsevier.com/retrieve/pii/S0950584916302269|journal=[[Information and Software Technology]]|language=en|volume=93|pages=45–57|doi=10.1016/j.infsof.2017.08.012|url-access=subscription}}&amp;lt;/ref&amp;gt; to address the ranges of possible inputs and outputs. [[Software testing]] measures, such as [[code coverage]], and tools such as [[mutation testing]], are used to identify where testing is inadequate.&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
&lt;br /&gt;
=== Functional testing ===&lt;br /&gt;
{{main|Software testing}}&lt;br /&gt;
&lt;br /&gt;
Functional testing includes relatively common [[computer programming|programming]] techniques such as [[unit testing]], [[integration testing]] and [[system testing]].&amp;lt;ref&amp;gt;{{cite book |last1=Myers, G. J. |title=The Art of Software Testing |date=1979 |publisher=John Wiley and Sons.|author1-link=Glenford Myers }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code coverage ===&lt;br /&gt;
&lt;br /&gt;
Computing the [[code coverage]] of a test identifies code that is not tested; not covered by a test.&lt;br /&gt;
&lt;br /&gt;
Although this analysis identifies code that is not tested it does not determine whether tested coded is &amp;#039;&amp;#039;adequately&amp;#039;&amp;#039; tested. Code can be executed even if the tests do not actually verify correct behavior.&lt;br /&gt;
&lt;br /&gt;
* [[Gcov]] is the [[GNU]] source code coverage program.&lt;br /&gt;
* [[VB Watch]] injects dynamic analysis code into Visual Basic programs to monitor [[code coverage]], call stack, execution trace, instantiated objects and variables.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic testing ===&lt;br /&gt;
{{main|Dynamic testing}}&lt;br /&gt;
&lt;br /&gt;
Dynamic testing involves executing a program on a set of test cases.&lt;br /&gt;
&lt;br /&gt;
=== Memory error detection ===&lt;br /&gt;
&lt;br /&gt;
* [[AddressSanitizer]]: Memory error detection for Linux, [[macOS]], Windows, and more. Part of [[LLVM]].&lt;br /&gt;
* [[BoundsChecker]]: Memory error detection for Windows based applications.  Part of [[Micro Focus]] [[DevPartner]].&lt;br /&gt;
* [[Dmalloc]]: Library for checking memory allocation and leaks. Software must be recompiled, and all files must include the special C header file dmalloc.h.&lt;br /&gt;
* [[Intel Inspector]]: Dynamic memory error debugger for C, C++, and Fortran applications that run on [[Windows]] and [[Linux]].&lt;br /&gt;
* [[IBM Rational Purify|Purify]]: Mainly [[storage violation|memory corruption]] detection and memory leak detection.&lt;br /&gt;
* [[Valgrind]]: Runs programs on a virtual processor and can detect memory errors (e.g., misuse of [[malloc]] and [[Free (programming)|free]]) and [[race conditions]] in [[Multithreading (software)|multithread]] programs.&lt;br /&gt;
&lt;br /&gt;
=== Fuzzing ===&lt;br /&gt;
{{main|Fuzzing}}&lt;br /&gt;
Fuzzing is a testing technique that involves executing a program on a wide variety of inputs; often these inputs are randomly generated (at least in part). [[Fuzzing#Types|Gray-box fuzzers]] use code coverage to guide input generation.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic symbolic execution ===&lt;br /&gt;
{{main|Concolic testing}}&lt;br /&gt;
&lt;br /&gt;
Dynamic symbolic execution (also known as &amp;#039;&amp;#039;DSE&amp;#039;&amp;#039; or concolic execution) involves executing a test program on a concrete input, collecting the path constraints associated with the execution, and using a [[constraint solver]] (generally, an [[SMT solver]]) to generate new inputs that would cause the program to take a different control-flow path, thus increasing code coverage of the test suite.&amp;lt;ref&amp;gt;{{Cite journal |last1=Chen |first1=Ting |last2=Zhang |first2=Xiao-song |last3=Guo |first3=Shi-ze |last4=Li |first4=Hong-yuan |last5=Wu |first5=Yue |date=2013-09-01 |title=State of the art: Dynamic symbolic execution for automated test generation |url=https://www.sciencedirect.com/science/article/pii/S0167739X12000398 |journal=Future Generation Computer Systems |series=Including Special sections: Cyber-enabled Distributed Computing for Ubiquitous Cloud and Network Services &amp;amp; Cloud Computing and Scientific Applications — Big Data, Scalable Analytics, and Beyond |language=en |volume=29 |issue=7 |pages=1758–1773 |doi=10.1016/j.future.2012.02.006 |issn=0167-739X|url-access=subscription }}&amp;lt;/ref&amp;gt; DSE can be considered a type of [[#Fuzzing|fuzzing]] (&amp;quot;white-box&amp;quot; fuzzing).&lt;br /&gt;
&lt;br /&gt;
=== Dynamic data-flow analysis ===&lt;br /&gt;
&lt;br /&gt;
Dynamic data-flow analysis tracks the flow of information from &amp;#039;&amp;#039;sources&amp;#039;&amp;#039; to &amp;#039;&amp;#039;sinks&amp;#039;&amp;#039;. Forms of dynamic data-flow analysis include dynamic taint analysis and even [[#Dynamic symbolic execution|dynamic symbolic execution]].&amp;lt;ref&amp;gt;{{Cite book |last1=Chen |first1=Ju |last2=Han |first2=Wookhyun |last3=Yin |first3=Mingjun |last4=Zeng |first4=Haochen |last5=Song |first5=Chengyu |last6=Lee |first6=Byoungyoung |last7=Yin |first7=Heng |last8=Shin |first8=Insik |date=2022 |title={SYMSAN}: Time and Space Efficient Concolic Execution via Dynamic Data-flow Analysis |url=https://www.usenix.org/conference/usenixsecurity22/presentation/chen-ju |language=en |pages=2531–2548 |isbn=978-1-939133-31-1}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite book |last1=Chang |first1=Walter |last2=Streiff |first2=Brandon |last3=Lin |first3=Calvin |title=Proceedings of the 15th ACM conference on Computer and communications security |chapter=Efficient and extensible security enforcement using dynamic data flow analysis |date=2008-10-27 |chapter-url=https://doi.org/10.1145/1455770.1455778 |series=CCS &amp;#039;08 |location=New York, NY, USA |publisher=Association for Computing Machinery |pages=39–50 |doi=10.1145/1455770.1455778 |isbn=978-1-59593-810-7|s2cid=6888893 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Invariant inference ===&lt;br /&gt;
[[Daikon (system)|Daikon]] is an implementation of dynamic invariant detection. Daikon runs a program, observes the values that&lt;br /&gt;
the program computes, and then reports properties that were true over the observed executions, and thus likely true over all executions.&lt;br /&gt;
&lt;br /&gt;
=== Security analysis ===&lt;br /&gt;
Dynamic analysis can be used to detect security problems.&lt;br /&gt;
* [[IBM Rational AppScan]] is a suite of application security solutions targeted for different stages of the development lifecycle. The suite includes two main dynamic analysis products: IBM Rational AppScan Standard Edition, and IBM Rational AppScan Enterprise Edition. In addition, the suite includes IBM Rational AppScan Source Edition—a static analysis tool.&lt;br /&gt;
&lt;br /&gt;
=== Concurrency errors ===&lt;br /&gt;
* [[Parasoft]] [[Jtest]] uses runtime error detection to expose defects such as [[race conditions]], exceptions, resource and memory leaks, and security attack vulnerabilities.&lt;br /&gt;
* [[Intel Inspector]] performs run-time threading and memory error analysis in Windows.&lt;br /&gt;
* [[Parasoft]] [[Insure++]] is a runtime memory analysis and error detection tool. Its Inuse component provides a graphical view of memory allocations over time, with specific visibility of overall heap usage, block allocations, possible outstanding leaks, etc.&lt;br /&gt;
* [[Google&amp;#039;s]] Thread Sanitizer is a data race detection tool. It instruments [[LLVM]] IR to capture racy memory accesses.&lt;br /&gt;
&lt;br /&gt;
=== Program slicing ===&lt;br /&gt;
{{main|Program slicing}}&lt;br /&gt;
For a given subset of a program’s behavior, program slicing consists of reducing the program to the minimum form that still produces the selected behavior. The reduced program is called a “slice” and is a faithful representation of the original program within the domain of the specified behavior subset.&lt;br /&gt;
Generally, finding a slice is an unsolvable problem, but by specifying the target behavior subset by the values of a set of variables, it is possible to obtain approximate slices using a data-flow algorithm. These slices are usually used by developers during debugging to locate the source of errors.&lt;br /&gt;
&lt;br /&gt;
=== Performance analysis ===&lt;br /&gt;
&lt;br /&gt;
Most [[list of performance analysis tools|performance analysis tools]] use dynamic program analysis techniques.{{Citation needed|date=January 2008}}&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
Most dynamic analysis involves [[Instrumentation (computer programming)|instrumentation]] or transformation.&lt;br /&gt;
&lt;br /&gt;
Since instrumentation can affect runtime performance, interpretation of test results must account for this to avoid misidentifying a performance problem.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
DynInst is a runtime code-patching library that is useful in developing dynamic program analysis probes and applying them to compiled executables. Dyninst does not require [[source code]] or recompilation in general, however, non-stripped executables and executables with debugging symbols are easier to instrument.&lt;br /&gt;
&lt;br /&gt;
[https://maierfelix.github.io/Iroh/ Iroh.js] is a runtime code analysis library for [[JavaScript]]. It keeps track of the code execution path, provides runtime listeners to listen for specific executed code patterns and allows the interception and manipulation of the program&amp;#039;s execution behavior.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Abstract interpretation]]&lt;br /&gt;
* [[Daikon (system)|Daikon]]&lt;br /&gt;
* [[Dynamic load testing]]&lt;br /&gt;
* [[Profiling (computer programming)]]&lt;br /&gt;
* [[Runtime verification]]&lt;br /&gt;
* [[Program analysis (computer science)]]&lt;br /&gt;
* [[Static code analysis]]&lt;br /&gt;
* [[Time Partition Testing]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
{{Software testing}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Dynamic program analysis| ]]&lt;br /&gt;
[[Category:Program analysis]]&lt;br /&gt;
[[Category:Software testing]]&lt;/div&gt;</summary>
		<author><name>imported&gt;OAbot</name></author>
	</entry>
</feed>