Modernising the FERS Software Package

View Project on GitHub

Overview

This project focused on updating the Flexible, Extensible Radar Simulator (FERS) to meet modern C++ standards (C++20/23). Originally developed in C++98/03, FERS is a vital tool in radar simulation for the Radar and Remote Sensing Group (RRSG) at UCT. The modernisation enhanced FERS's performance, readability, maintainability, and future extensibility, making it compatible with modern development environments while retaining core functionality.

Objectives

  • Upgrade the FERS codebase to incorporate C++20/23 features, improving readability, maintainability, and efficiency.
  • Implement performance optimisations, including multithreading and improved memory management, for faster, more efficient radar simulations.
  • Ensure backward compatibility to maintain the integrity and accuracy of simulation results.
  • Develop and conduct thorough testing to validate the modernised software’s functionality and performance improvements.

Technologies Used

  • C++20/23 (for core modernisation and new features)
  • Valgrind (for memory leak detection and performance profiling)
  • GitHub Actions (for continuous integration and automated testing)
  • CLion (IDE used for code refactoring, inspection, and debugging)
  • HighFive (for modern C++14-compliant HDF5 file handling)
  • libxml2 (for XML parsing and configuration file handling)
  • Understand by SciTools (for code analysis and metrics)
  • Git (for version control)

Details

The modernisation process was approached incrementally, starting with an analysis of the FERS codebase to identify areas for improvement. Key upgrades included replacing manual memory management with smart pointers, implementing lambda expressions and C++-style casts, and applying advanced C++20/23 features like concepts, ranges, and modules. The project also involved optimising performance through multithreading and algorithmic improvements. Tools like Valgrind and perf were used for profiling and validation, while Doxygen was employed to generate inline documentation for maintainability.

Challenges

The primary challenges included ensuring backward compatibility, managing the complexities introduced by modern C++ features, and mitigating the risk of introducing errors during extensive refactoring. Through a careful, incremental approach and the use of robust testing tools, these challenges were systematically addressed. Regression testing, CI with GitHub Actions, and performance profiling were key in overcoming these obstacles.

Results

The modernized FERS software demonstrated improved performance, with speedups ranging from 1.46x to 3.55x across different test cases. All memory leaks were eliminated, and memory management was optimised with smart pointers. Regression testing achieved 90.5% line coverage, and function coverage reached 95.8%, ensuring high reliability. The FERS codebase was modularised, technical debt reduced, and the maintainability of the software improved significantly.

Performance Metrics

The following graphs show a comparison of CPU usage and speedup achieved for computationally intensive operations:

CPU Usage Comparison
Figure 1: CPU usage for different test cases (lower is better).
Speedup Achieved
Figure 2: Average speedup achieved for computationally intensive operations (higher is better).

View the Full Report

You can view the full project report here: Modernising the FERS Software Package .