Code Monkey home page Code Monkey logo

mutcl's Introduction

PLEASE NOTE: This tool is currently under active development and not ready for use. Please check back again later or watch for updates.

mutcl

A mutation testing tool written in Clojure for Clojure (Leiningen) projects.

motivation

Mutation testing provides a litmus for the quality of a project's tests. That is, mutation testing tests tests for sensitivity to bugs. Assuming a project passes its test suite, mutcl introduces random bugs to the source, runs the test suite, and looks for test failures. A test suite of adequate coverage should fail as bugs are added.

Mutcl introduces random bugs to Clojure programs by exploiting the homoiconeity that defines Lisp syntaxes. The program is traversed as a set of trees, represented as recursively defined nested lists. This stocastic algorithm applies a substitution to a random element of the program (i.e., changes the expression (+ 2 2) to (- 2 2)).

The design of the substituion function presented a significant challenge in the context of a dynamically typed language like Clojure. An ideal substitution function avoids costly semantically or syntactically invalid changes that producetrivial runtime errors by substituting symbols based on type signiture. However, type behavior in a dynamically typed language, by definition, is only known at runtime. Thus, the current, tentative solution to this problem involves hardcoding a map of valid substitutions as categories of similiar type behavior. This approach, while reliable, biases the introduced substituions to a small subset of Clojure's core, ultimately offering only partial insight into the test's coverage of the codebase. For instance, user defined function references will not mutated.

current state

mutcl is in a state of active development, but not yet ready for use. Presently, the project is undergoing a refactoring to address failure to reach target behavior. In this effort, unit tests are being prepared to promote a more systematic development process.

mutcl's People

Contributors

ds2643 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.