Giter VIP home page Giter VIP logo

gradual's Introduction

Gradual Typing

Research Question: Does gradual typing help developers test their code?

  • Alternative RQ: Do different type enforcement strategies reduce the effort needed to unit test a program?
  • Definitions
    • Gradual Typing: Combination of static type system, dynamic type enforcement, and untyped programming language (syntax and semantics)
      • Typed Racket type system (very close to TypeScript)
        • Fix types
      • Racket
        • Fix benchmarks
      • Natural vs. Transient vs. Erasure
    • Test: Unit testing
      • All modules and all units (functions, classes, etc.)
        • Except fake modules
      • Integration testing?
      • System-wide testing?
      • Uniform tests because it's otherwise difficult to compare number of tests and size of tests (in terms of which criterion is better)
      • Unit testing should kill all mutants
    • Help: Reduce effort
    • Code: TR/R (Typed Racket / Racket) programs (GTP)
  • If statement coverage is used for test minimization, the different mutation score graphs (along the lattice) illustrate whether statement coverage can be used with a specific semantic
  • Test minimization options
    • Remove tests until the mutation score drops
    • Remove tests until criterion-based threshold

To-Do List

Top-Down Implementation

  • Map from Configurations to Mutation Score
    • Adding to Struct in mutant-factory-data.rkt
  • How to Remove Tests
  • How to Add Types
    • Separate File?
    • Configurable for program instrumentation
      • program-instrumentation/instrument-modules-and-insert-interface-adapter-module.rkt
    • Mutant Factory
  • When to Enqueue Additional Tests
    • Mutant Factory

Blame Following Parameterization

  • Add Additional Parameters to Blame Following Function
    • Configurable for blame following
    • blame-following-common.rkt
  • Note: Abstract Info Produced by Mutants (List/Struct of Arguments?)

Experiment Design

Test Minimization

  • Mutation Testing
    • Computationally expensive
    • Potentially use population subset
  • Statement Coverage
    • Makes mutation testing redundant
    • Makes semantics indistinguishable
    • Need strategy for removing tests

Lattice Traversal

  • Preferred Strategies
    • Greedy
      • Calculate test minimization for every possible next step
      • Choose smallest test suite
      • Computationally expensive
    • Combination
      • Use alternate strategy to pick top two/three
      • Use greedy algorithm to pick best
  • Alternate Strategies
    • Performance (Profiling)
    • Random
    • Complexity (Size of Modules/Tests)
      • Smaller Modules for Ease
      • Bigger Modules for Coverage
      • Methods (Counting)
        • Lines
        • Symbolic Expressions
        • Top-Level Definitions
        • References to Other Modules
        • External References

Literature Review

Background

General Test Minimization

Mutation-Based Test Minimization

gradual's People

Contributors

akashdeonu avatar bangyen avatar bennn avatar chrdimo avatar llazarek avatar mfelleisen 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.