Continuous Regression Testing for Safer and Faster Refactoring in C++ - Pejman Ghorbanzade - CppCon

Discover how to ensure safer and faster refactoring in C++ through continuous regression testing, leveraging mechanisms like Tucca and snapshot testing, and integrating tests with CI plugins and actual hardware.

Key takeaways
  • Continuous regression testing is essential for safe and fast refactoring in C++ to reduce the risk of breaking changes.
  • Mechanisms such as Tucca and snapshot testing can help identify regression errors, but snapshot testing has limitations, including storing output in a single file and difficulty in dealing with non-deterministic behavior.
  • Infrastructure like Tucca provides a way to capture data points, serialize them, and submit them to a server for comparison.
  • Continuous improvement requires long-term commitment and care from software teams.
  • Regulatory compliance requires a safety case framework that defines the safety culture.
  • Embedded software testing is challenging due to its complexity and difficulty in satisfying requirements.
  • Simulation testing is important for verifying software behavior before deploying it to real-world environments.
  • Continuous integration and testing can help reduce risks in software development.
  • Partial template specialization and custom test frameworks can provide extension points for testing complex software systems.
  • Test frameworks can be integrated with CI plugins and can be used to run tests on actual hardware, not just simulation.
  • The cost of running tests can be noticeable, but modern cloud compute resources reduce the cost of running higher-level tests.
  • Continuous testing and integration can help improve developer productivity and software quality.
  • The real world is messy and complex, and software systems must be designed to be flexible and adaptable to changing constraints.
  • Testing is cultural, and an organization’s testing habits reflect its team culture.
  • Regressions are changes in software behavior that are not expected, and regression testing is important for identifying and preventing regressions.
  • Hardware-in-the-loop testing is a way to test software on actual hardware, which can be more effective than simulation testing.
  • The broken windows theory suggests that if we ignore minor issues, they can lead to more significant problems.
  • Continuous testing and integration require mechanisms like Tucca to help identify regression errors and provide feedback on code changes.
  • Embedded software development often requires custom code and specialized testing frameworks.