Comparative language fuzz testing: Programming languages vs. fat fingers. In PLATEAU 2012: 4th Annual International Workshop on Evaluation and Usability of Programming Languages and Tools--Systems, Programming, Languages and Applications: Software for Humanity (SPLASH 2012)
TeX C++ C# C Java Fortran Other

README.md

Fuzz Testing: Programming Languages vs. Fat Fingers

License

Copyright [2012] [Diomidis Spinellis dds@aueb.gr, Vassilios Karakoidas bkarak@aueb.gr]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Publication

  • Diomidis Spinellis, Vassilios Karakoidas, Panos Louridas, Comparative Language Fuzz Testing: Programming Languages vs. Fat Fingers, in Proceedings of the Workshop on Evaluation and Usability of Programming Languages and Tools (PLATEAU) at the ACM Onward! and SPLASH Conferences, 2012.

Repository Structure

  • pub/ : PLATAEU 2012, Publication (LaTeX format)
  • src/
    • fuzz/ : Fuzzer implementation (Perl) and main execution script (run.sh)
    • lang/ : Scripts for compilation and execution of programs in the selected languages
    • run/ : Temporary directory, used when the benchmark is running.
    • stats/ : Data analysis scripts (Python)
    • tasks/ : Rosseta Code task implementations

Execution

To execute the fuzzer scripts on some or all tasks, you need to execute the run.sh script, located in src/fuzz directory of the repository.

Usage: $0 [-l lang] [-t task] [-v]
-f fuzzfunc Execute only the specified fuzz function
-l lang   Run only specified language
-t task   Run only specified task
-v    Verify tasks, to not fuzz

If no parameter is specified, the shell script will execute all the tasks available in the src/tasks/ directory for all the languages that are specified in the src/lang directory.

Selected languages (based on popularity/IEEE Article)

  • Java (OpenJDK 1.6.0_18)
  • C (gcc 4.4.5)
  • C++ (g++ 4.4.5)
  • PHP (PHP 5.3.3-7)
  • C# (mono 2.6.7, CLI v2.0)
  • Python (python 2.6.6)
  • Perl (perl 5.10.1)
  • Javascript (spidermonkey smjs 1.8.0)
  • Haskell (ghc 6.12.1)
  • Ruby (ruby 1.8.7)
  • Fortran (gfortran 4.4)
  • Not Included

To add support for a new programming language, you can follow this guide

Selected Tasks

We want each task to be available in all the languages, to be non-trivial and easy to test via its standard input and standard output.