Superfluous code and values may occur in the form of dead code, code that has no effect, and unused values in program logic.
Code that is never executed is known as dead code. Typically, the presence of dead code indicates that a logic error has occurred as a result of changes to a program or to the program's environment. Dead code is often optimized out of a program during compilation. However, to improve readability and ensure that logic errors are resolved, dead code should be identified, understood, and removed.
Code that is executed but does not perform any action, or that has an unintended effect, most likely results from a coding error and can result in cause unexpected behavior. Statements or expressions that have no effect should be identified and removed from code. Most modern compilers can warn about code that has no effect.
...
This noncompliant code example demonstrates how dead code can be introduced into a program [Fortify 06]. :
Code Block | ||
---|---|---|
| ||
public int func(boolean condition) { int x = 0; if (condition) { x = foo(); /* Process x */ return x; } /* ... */ if (x != 0) { /* This code is never executed */ } return x; } |
The condition in the second if statement, (x != 0)
, will never evaluate to true
because the only path where x
can be assigned a non-zero nonzero value ends with a return
statement.
Compliant Solution
Remediation of dead code requires the programmer to determine not only why the code is never executed but also whether the code should have been executed, and then to resolve that situation appropriately. This compliant solution assumes that the dead code should have executed and consequently , removes the return
from the body of the first conditional statement.
...
In this example, the length()
function is used to limit the number of times the function string_loop()
will iterate iterates. The condition of the if
statement inside the loop evaluates to true
when the current index is the length of str
. However, because i
is always strictly less than str.length()
, that will never happen.
...
Code Block | ||
---|---|---|
| ||
public int string_loop(String str) { for (int i=0; i < str.length(); i++) { /* ... */ if (i==str.length()-1) { /* This code is now executed */ } } return 0; } |
Noncompliant Code Example (Code with
...
No Effect)
In this noncompliant code example, the comparison of s
to t
has no effect.:
Code Block | ||
---|---|---|
| ||
String s; String t; // ... s.equals(t); |
...
In this compliant solution, the result of the comparison is printed out.:
Code Block | ||
---|---|---|
| ||
String s; String t; // ... if (s.equals(t)) { System.out.println("Strings equal"); } else { System.out.println("Strings unequal"); } |
...
In this example, p2
is assigned the value returned by bar()
, but that value is never used.:
Code Block | ||
---|---|---|
| ||
int p1 = foo(); int p2 = bar(); if (baz()) { return p1; } else { p2 = p1; } return p2; |
...
In exceptional situations, dead code may make software resilient to future changes. An example of this is the presence of a default case in a switch
statement even though all possible switch labels are specified (see MSC60-JG. Strive for logical completeness for an illustration of this example).
...
Code and values that have no effect can be detected by suitable static analysis.
Related Guidelines
ISO/IEC PDTR TR 24772 | "BRS Leveraging human experience," "BVQ Unspecified Functionality," and "XYQ Dead and Deactivated Code" | :2013 | Obscure Language Features [BRS] Unspecified Functionality [BVQ] Likely incorrect expressions [KOA] Dead and Deactivated Code [XYQ] | MITRE 07 | CWE ID 561, "Dead Code" |
[MISRA 04] | Rule 2.4 | ||||
ISO/IEC PDTR 24772 | "BRS Leveraging human experience," "BVQ Unspecified Functionality," "KOA Likely incorrect expressions," and "XYQ Dead and Deactivated Code" | ||||
MITRE 07 | CWE ID 561, Dead code | ISO/IEC PDTR 24772 | "BRS Leveraging Human Experience," "KOA Likely Incorrect Expressions," "XYQ Dead and Deactivated Code," and "XYR Unused Variable"
Bibliography
[Fortify 06] | Code Quality, "Dead Code" |
[Coverity 07] |
...