This is the final project for Columbia University CSEE E6863 Formal Verification HW/SW System. It aims at performing bounded model checking on Fridge, a multi-threaded key-value store that supports nonblocking and blocking GET operation, to help locating bugs that are hard to find via normal testing method.
This project utilizes CBMC to perform model checking.
As CBMC requires adding code that cannot be normally compiled, the master branch of the repository is for running CBMC.
To run unit tests and e2e tests, you need to switch to the test tag using:
git checkout testTo run fridge, use the following make command to compile:
make appand run the executable:
./appAll the unit tests are located in test/unit_test.c.
To run the unit tests, use the following make command to compile:
make unit_testand run the executable:
./unit_testAll the end-to-end tests are located in test/e2e_test.c.
To run the unit tests, use the following make command to compile:
make e2e_testand run the executable:
./e2e_testWe implemented function-level model checking for kkv_init, kkv_destroy, kkv_get and kkv_put.
To run CBMC on each function, you need to comment out the other three functions and then run the corresponding command in the Makefile.
TBD