TMCnet Feature
November 30, 2020

A First Look into Static Code Analysis



In today’s world where developers need to deliver software quickly, static code analysis serves as one of the most fundamental practices for improving product quality and ensuring fast, secure, and compliant software development. It allows developers to understand their code better and eliminate defects in the early stages of software development.



But before diving into more details on how static code analysis improves the development process, let’s understand what this concept is all about.

What is static code analysis?

Static code analysis is a software verification process through which developers analyze a program’s source code to identify problems without having to execute it. This is usually done by checking the source code against a predefined set of rules and standards to ensure it meets the expected quality, reliability, and security levels.

The aim of any static analysis approach is to understand the structure of your code and identify defects or security vulnerabilities that might compromise your application.

Why perform static code analysis?

Static code analysis helps development teams address weaknesses in their code before shipping applications to the production environment. More specifically, it allows you to find a number of issues that could affect the overall quality of an application. These include:

  • Syntax violations
  • Undefined values
  • Dead or unused code
  • Programming errors
  • Potential security vulnerabilities
  • Coding standard violations
  • Performance issues

Automated static code analysis tools can uncover more than just the above issues. For this reason, both development and Quality Assurance teams should integrate static analysis into their processes to enhance the quality and robustness of their code.

How is static code analysis done?

Static code analysis is normally done in the earlier phases of code development, and before unit components are integrated and tested. Once developers write the code, a static analysis tool, also referred to as SAST, scans through the code to determine whether it complies with the specified coding rules.

So, the first step you should take as a developer is to assess your code analysis requirements and pick an automated analysis solution that best fits your needs. Some static analysis tools you can use include Checkmarx, Klocwork, CodeScan, Parasoft (News - Alert), VeraCode, Quality Clouds, and Visual Experts.

In this article, let’s use Klocwork for demonstration purposes. Klocwork is one of the most accurate and trusted automated static code analysis solutions for C, C++, C#, and Java. It has excellent analysis capabilities and integrates seamlessly with projects of any size.

When you run Klocwork, it checks your codebase against a set of predefined coding rules and provides a summary report showing the health status of your project. The report serves as your project dashboard, where you can check issues that require remediation alongside their diagnostic information.

The issue summary view, for instance, provides a detailed category report showing the categories and taxonomies of all issues detected. The example below shows detected buffer overflow issues in a codebase.

The above is a snapshot of a high-level analysis report. Clicking on it will provide deeper and more precise insights into the problem. Below is a detailed snapshot showing the exact line where there’s an array index out of bounds. Notice how the traceback on the left provides a detailed summary of issues in the code.

Something worth mentioning is that sometimes static analyzers may flag false positives, which makes it imperative for the team to go through the analysis results and dismiss any that are not applicable. After eliminating the false positives, you can now start fixing apparent issues in your code, starting with the most critical ones.

Techniques for performing static code analysis

There are several methods for analyzing source code, checking its correctness, and determining whether the software functions properly. Some commonly used methods include:

  • Control analysis: This technique focuses on the flow or sequence used in a calling structure, which in this case could be a method, function, process, or subroutine.
  • Fault-failure analysis: This involves analyzing the failures (incorrect behavior of a software component) or faults (incorrect component) in an application’s model. It relies on input-output transformation to identify failures and conditions that lead to a failure.
  • Interface analysis - In this method, simulations are used to examine and verify that the interface allows smooth user interaction. This allows developers to take precautionary steps on erroneous code that might affect user-experience.
  • Data analysis – This method ensures that the right operations are applied to data objects including linked lists and other data structures. It also verifies that every defined piece of data is properly used.

Criteria for selecting a static code analyzer

There are several factors that you should keep in mind when choosing a static code analysis solution. These include:

1. What programming languages does the tool support?

This goes without saying, that you should choose a tool that supports the languages your team uses. Most static code analysis tools will concentrate on a few enterprise languages rather than offering limited support for all languages. For instance, Klocwork supports C, C++, C#, and Java. Other tools that offer multi-language support include SonarQube, Veracode, Kiuwan, Micro Focus, and Parasoft.

2. Does the tool offer reliable and actionable analysis results?

As mentioned above, there are different techniques and technologies for performing static code analysis. These methods have varying degrees of precision and soundness, which is reflected in the nature of analysis results. For instance, a tool that uses abstract interpretation for static analysis would be considered more reliable because it does not produce false-negatives.

The ability to define additional analysis rules also makes a tool more reliable since developers can enforce specific coding policies.

3. Does the tool provide guidance and insights for quicker bug-fixing?

A robust static code analysis solution has great bug-finding ability. However, detecting bugs is not enough. Developers need more precise information to navigate through their code and identify the root cause of a problem. A tool that provides helpful information such as variable values, call hierarchy, and suggests possible remediation will make it easier for development teams to resolve complex issues.

4. Does the code analyzer support collaborative review?

A good static code analysis tool should provide a centralized reporting component or other collaboration features that allow development teams to share code quality metrics and analysis results. Such capabilities allow all team members to perform collaborative reviews, access findings, and resolve defects.

5. Does the tool integrate with your existing development processes?

When picking a static analysis solution, you need a tool that developers can incorporate into their everyday routines in the long-term. For this reason, you should go for a tool that integrates seamlessly with different development processes. Ideally, it should have the ability to integrate with a wide range of development tools and platforms including IDEs, CI-CD tools, and bug tracking tools.

6. Does the tool work on cloud-infrastructure?

The vast majority of development teams rely on cloud-based platforms such as Microsoft (News - Alert) Azure and Amazon AWS to run their software development processes. For this reason, you should consider a tool that can be deployed and integrated with both private and public cloud infrastructure.

Conclusion

By addressing code vulnerabilities and ensuring adherence to universally accepted coding standards, static code analysis plays a critical role in improving the overall quality of software products. It reduces the risk of releasing buggy software by ensuring applications function as expected. Additionally, it allows development teams to accelerate product delivery while adhering to their internal development standards.

As you can see, the benefits of static code analysis are far-reaching. And the good thing about it is that developers can effectively integrate it into their software testing and development workflow provided they choose a reliable tool.



» More TMCnet Feature Articles
SHARE THIS ARTICLE

LATEST TMCNET ARTICLES

» More TMCnet Feature Articles