Skip to content

Mini projects list update #4119

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

NlightNFotis
Copy link
Contributor

@NlightNFotis NlightNFotis commented Feb 7, 2019

This fixes #4111. Port of a list of starter projects from the old CPROVER wiki
into the in-repo file tracking them.

  • Each commit message has a non-empty body, explaining why the change was made.
  • Methods or procedures I have added are documented, following the guidelines provided in CODING_STANDARD.md.
  • The feature or user visible behaviour I have added or modified has been documented in the User Guide in doc/cprover-manual/
  • Regression or unit tests are included, or existing tests cover the modified code (in this case I have detailed which ones those are in the commit message).
  • My commit message includes data points confirming performance improvements (if claimed).
  • My PR is restricted to a single feature or bugfix.
  • White-space or formatting changes outside the feature-related changed lines are in commits of their own.

@NlightNFotis
Copy link
Contributor Author

Note to reviewers: While porting this list, I found a reference to a lot of names, or WIP notes that I couldn't judge the validity of. These are marked as (?) in the file, and I would appreciate if someone could tell me if they are valid or not any more.

Also while porting the list, I removed references to a couple of projects like the DALVIK one, judging that it's no longer relevant. If someone thinks otherwise, I'm happy to add it back.

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✔️
Passed Diffblue compatibility checks (cbmc commit: df9625a).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/100110943

@NlightNFotis
Copy link
Contributor Author

@tautschnig Could I please get a review on this and get it merged if it looks good?

Copy link
Collaborator

@tautschnig tautschnig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should get a thorough review from @chrisr-diffblue @peterschrammel and whoever else has a good overview of what the status of various bits of work is.

MINI-PROJECTS.md Outdated

`goto-instrument` features an instrumentation to track cases of use-before-define, i.e.
reading of uninitialised variables. At present, the analysis does not take into account
aliasing information. As such, the following code will yield a spurious counterexample:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually think that instrumentation could do with some initial work just to make sure it works at all :-)

MINI-PROJECTS.md Outdated
CBMC allows to choose among a selection of SMT solvers to use as solving back end. As these
tools evolve, CBMC's code for running them may need a fresh look from time to time. After
a first round of manual experiments, these tests should become part of the routine build
process on `dkr-build`. (Michael Tautschnig knows how to do this.)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Today we've got proper CI, no need to resort do dkr-build.

support for dynamic analysis, calls to external functions and possibly even mixed concrete
and symbolic execution. It would also be good to be able to interpret traces found by BMC
to catch mismatches / bugs between the logical model and the bit blasting models. This
would also be useful for more advanced CEGAR like techniques (also see below).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have no idea what the actual state of the interpreter is today.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd propose a project to implement an interpreter using goto-symex.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using the abstract interpreter would also be possible.

MINI-PROJECTS.md Outdated
* Use path exploration as the witness generation part of an ACDL process.
* Perform precondition inference, possibly using ACDL.

See the work Björn and Alex have done with path-symex. (?)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do now have a single-path symex mode, but the ideas above might still be relevant.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unclear what the points above mean, but there is certainly work to be done around the single-path symex, including robustness, efficiency and search strategies.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the original suggestion (I have a feeling I wrote a number of these) was using ACDL-like reasoning to "learn" invariants from failed symex runs (using UNSAT cores and the like) and add these in to the process, giving something like IMPACT but without the covering relations.


## Interact with GDB

GDB implements a client-server protocol with a GDB instance acting as a server and the
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is an open PR on that one (#3983).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that covers all the points below.


### Error Explanation

Re-implement the algorithm described in [this paper](http://www.kroening.com/papers/STTT-error-explanation-2005.pdf)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is partly implemented in the fault localizer.

support for dynamic analysis, calls to external functions and possibly even mixed concrete
and symbolic execution. It would also be good to be able to interpret traces found by BMC
to catch mismatches / bugs between the logical model and the bit blasting models. This
would also be useful for more advanced CEGAR like techniques (also see below).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd propose a project to implement an interpreter using goto-symex.

MINI-PROJECTS.md Outdated
of the Java programming language semantics, such as the Java Memory Model. This will include
adding models for a subset of the Java concurrency packages in the Java Runtime Library.

Jade Alglave may have some additional input on this. (?)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cesar and Kurt have done work on that.

MINI-PROJECTS.md Outdated

Also look at Google's Native Client, and talk to Matt, who has tried Valgrind.

Furthermore, talk to Michael, who has got a student who made some progress on this.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tautschnig, yes?

@TGWDB
Copy link
Contributor

TGWDB commented May 19, 2021

@NlightNFotis Is this still going to be worked on and maybe merged?

Copy link
Collaborator

@martin-cs martin-cs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be great to see this patch merged but it does need a few updates.

support for dynamic analysis, calls to external functions and possibly even mixed concrete
and symbolic execution. It would also be good to be able to interpret traces found by BMC
to catch mismatches / bugs between the logical model and the bit blasting models. This
would also be useful for more advanced CEGAR like techniques (also see below).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using the abstract interpreter would also be possible.

MINI-PROJECTS.md Outdated
* Use path exploration as the witness generation part of an ACDL process.
* Perform precondition inference, possibly using ACDL.

See the work Björn and Alex have done with path-symex. (?)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the original suggestion (I have a feeling I wrote a number of these) was using ACDL-like reasoning to "learn" invariants from failed symex runs (using UNSAT cores and the like) and add these in to the process, giving something like IMPACT but without the covering relations.

MINI-PROJECTS.md Outdated
GCC has a set of 'torture tests' which are intended to stress test and find bugs in their C parser
and front-end. It would be good to run these through goto-cc / add them to the nightly testing and
fix any bugs that arise. (Possible overlap with “Front-End Testing” above.). The same is probably
also true for CSmith and other compiler fuzzing tools.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tautschnig has implemented the CSmith part.

@NlightNFotis
Copy link
Contributor Author

@TGWDB Yes, I intend to chase it up and clean this up soon (as soon as I get some time).

@martin-cs Thanks for the suggestions and the comments, will incorporate them when I find some time 👍🏻

@NlightNFotis NlightNFotis force-pushed the mini_projects_list_update branch 2 times, most recently from b2c947d to 7c16e7e Compare May 24, 2021 19:59
@NlightNFotis
Copy link
Contributor Author

Hi @peterschrammel and @tautschnig, could you take a look at this at your latest convenience?

I've implemented most of the comments, and changed the file a bit to conform to markdown listing standards.

Other than this, it looks good to go to me, what do you think?

@codecov
Copy link

codecov bot commented May 24, 2021

Codecov Report

Merging #4119 (c07c76f) into develop (538070c) will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@           Coverage Diff            @@
##           develop    #4119   +/-   ##
========================================
  Coverage    74.95%   74.95%           
========================================
  Files         1450     1450           
  Lines       158274   158274           
========================================
  Hits        118632   118632           
  Misses       39642    39642           

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d7df1a2...c07c76f. Read the comment docs.

@NlightNFotis NlightNFotis force-pushed the mini_projects_list_update branch from 7c16e7e to c07c76f Compare June 1, 2021 14:53
@NlightNFotis NlightNFotis merged commit f5f965a into diffblue:develop Jun 1, 2021
@NlightNFotis NlightNFotis deleted the mini_projects_list_update branch June 1, 2021 18:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add starter projects from wiki to mini-projects list
6 participants