Whitepaper: The Value of Using a Unified C/C++ Testing Tool

Optimize multiple automated testing technologies like code coverage, unit testing, static analysis and runtime analysis. Use a unified testing environment.

Learn how to leverage a comprehensive testing tool to maximize testing ROI.

requirement_traceability_report

Download the whitepaper to learn how a unified testing tool provides seamless integration into the developer’s IDE, plus the ability to unify metrics and results from all aspects
of testing.

Here’s what you’ll learn about:

  • Different categories of software errors
  • What it means when a requirement hasn’t been coded correctly
  • The value of a unified testing tool
  • How to detect as many defects as possible
  • How to detect functional problems and regressions
  • Requirements for testing traceability
  • Gauging code complexity, portability and maintainability
  • Educating developers with instant feedback
  • Combining results from different techniques for advanced analytics
  • Avoiding problems with unified testing tools
  • Parasoft C/C++test (with a centralized reporting and analytics hub)
  • The implementation of the requirement does not satisfy the functional criteria stated in the requirement.
  • The output computed by the implementation is perfectly correct in terms of values, but the result is invalid because the response was not provided within the required time frame.
    • The implemented algorithm incorrectly computes the number of samples in a buffer by reading random values from outside the buffer.
    • The initial state of variables is not correctly set, which results in transient errors.
    • The logic in the branching point is coded incorrectly, resulting in dead code, which will never be executed.
There are different categories of errors, and the current state of the art doesn’t effectively eradicate all of them with a single technology. Projects that are related to functional safety will most likely select all available technologies to ensure uncompromised quality, as well as compliance with software safety standards. Other teams may decide to choose only static analysis and unit testing. Regardless, teams that design quality assurance processes must understand the consequences of selecting a subset of available testing technologies.

Unwillingness to implement a wide range of testing technologies often stems from a concern that using multiple techniques imposes significant overhead on the pace of development and impact the budget. This is more likely if teams decide to select unintegrated tools. As a result, developers avoid using tools and automation because it’s distracting and decreases their productivity.
  • Multiple learning curves and usability issues
  • Distractions from writing code
  • Exchange of information between different toolchain elements
  • Support multiple testing technologies
  • Be easy to use
  • Detect functional problems and regressions
  • Provide traceability from requirements to test cases
  • Measure the complexity, portability, and maintainability of code
  • Inform developers by providing instant feedback as they are writing the code
  • Provide information about development progress
  • Combine results from different techniques for advanced analytics

When combined, the data results from various testing techniques within a project have great potential for inferring second level metrics and advanced analytics. A unified testing tool allows teams to investigate code from a new perspective. A failed unit test case has a different meaning to a developer, depending on whether it occurs in code rated high or low risk. If this information is further combined with statistics from source control and correlated to requirements, teams can make better decisions about when and how code should be corrected.

Another kind of analytics offered by a unified testing tool is changed-based testing, which can improve team productivity. The change-based testing capability of a unified testing tool tries to understand the relation between source code, test cases and code coverage results to compute the optimal set of test cases for verification and validation of specific code delta. Teams can limit their testing sessions by running only a small subset of tests instead of full regression suites. The focus on testing only what is absolutely required translates to significant savings for any kind of middle or large size projects.

There’s no simple, universally applicable way to reduce tool costs, but following these three guidelines helps.

  1. First, integrate testing technologies with the existing development process as closely as possible. Most developers don’t enjoy using more than one testing tool when writing their code. Testing tools need to be integrated with either the IDE or the build system (sometimes this is equivalent).
  2. In addition, it’s important to unify user interfaces. Even if two different testing technologies are integrated with the same IDE as plugins, if their usage model and user interfaces are completely different, developers may get distracted resist using the testing tools.
  3. Finally, the tools should have the ability to exchange information between different elements of the toolchain. If teams decide to use unintegrated tools, it’s difficult or impossible to work out a unified representation of the results that would make them suitable for further analytics.

About Parasoft

Parasoft’s software testing solutions support the entire software development process, from when the developer writes the first line of code all the way through unit and functional testing, to performance and security testing, leveraging simulated test environments along the way. Parasoft's unique analytics platform aggregates data from across all testing practices, providing insights up and down the testing pyramid to enable organizations to succeed in today's most strategic development initiatives, including Agile/DevOps, Continuous Testing, and the complexities of IoT. Parasoft’s automated software testing innovations fuel software development organizations, helping teams reduce the time, cost, and effort of delivering high-quality software to the market.