Exploring the Adoption of Fuzz Testing in Open-Source Software: A Case Study of the Go Community

Authors - Olivier Nourry, Masanari Kondo, Mahmoud Alfadel, Shane McIntosh, Yasutaka Kamei
Venue - International Conference on Software Maintenance and Evolution, pp. To appear, 2024

Related Tags - ICSME 2024 software quality

Abstract - Fuzz testing (or fuzzing) is a software testing technique aimed at identifying software vulnerabilities. Recently, the Go community added native support for fuzz testing into their standard library. Using that feature, developers can write unit tests to perform deterministic and fuzz testing of their software systems against unexpected inputs. Although the availability of support makes fuzz testing more accessible for the Go community at large, little is known about the degree to which Go developers adopt fuzz testing during software development. Therefore, in this paper, we set out to study the evolution of fuzz testing practices in open-source Go projects. More specifically, we strive to understand whether the introduction of support for fuzz testing in the Go standard library has led to the adoption of fuzz testing as part of the standard testing processes of Go projects. To achieve our goal, we study 1) to what extent fuzz tests are used in open-source Go projects, 2) who writes and maintains fuzz tests in Go projects, and finally, 3) how tightly coupled are fuzz tests with source code (as compared to non-fuzz tests). We find that fuzz testing only represents 3.15% of testing functions in open-source projects. Our results also suggest that fuzz testing development is not being conducted as part of standard testing activities. For developers contributing to fuzzing, we find that a median of only 12.50% of their testing-related commits contain fuzz tests. Finally, we perform a qualitative analysis and find that fuzz testing is mostly used by critical software systems, such as blockchain technologies or network infrastructure projects, to test the most critical features of their systems (e.g., data processing functions, database endpoints). Our results lead us to conclude that fuzz testing is best used in combination with deterministic testing (e.g., unit testing) where fuzzing is used to thoroughly test important features, and deterministic testing is used to test other features.

Preprint - PDF

Bibtex

@inproceedings{nourry2024icsme,
  Author = {Olivier Nourry and Masanari Kondo and Mahmoud Alfadel and Shane McIntosh and Yasutaka Kamei},
  Title = {{Exploring the Adoption of Fuzz Testing in Open-Source Software: A Case Study of the Go Community}},
  Year = {2024},
  Booktitle = {Proc. of the International Conference on Software Maintenance and Evolution (ICSME)},
  Pages = {To appear}
}