ContractorJ

Validando el comportamiento de clases de Java

Patricio Palladino
Director: Diego Garbervetsky

Programa

  • Verificación y validación de software
  • Enabledness Preserving Abstractions (EPAs)
  • Objetivos de la tesis
  • Generación de EPAs en Java
  • ContractorJ
  • Permissive Enabledness Preserving Abstractions (PEPAs)
  • Annotator
  • Trabajo futuro
  • Conclusiones

 

Verificación

Proceso para determinar

si un artefacto se corresponde con una descripción o especificación del mismo.

Validación

Proceso para aumentar la confianza en que un artefacto se corresponde con la realidad.

¿El software es correcto?

¿El software es el correcto?

Verificación

Minería de modelos

Enabledeness
Preserving
Abstractions

public class Stack {

  public Stack() {
    /* ... */
  }

  public Stack(int capacity) {
    /* ... */
  }

  public void Pop() {
    /* ... */
  }

  public void Push(Object o) {
    /* ... */
  }

}

Objetivos de la tesis

  • Generación de EPAs en Java
     
  • Extender el modelo de EPAs
     
  • Integración con proyectos de terceros

Generación de EPAs en Java

Estados de una EPA

Exploración de posibles estados

Reachability Queries

EPA

Boogie

Blast

Code  
contracts

BCT

Corral

Boogie 2

Intermediate Verification
Language

JBCT

Traductor de Java
a Boogie

JBCT

  • Traductor sencillo
     
  • Fail-fast
     
  • Single threaded
     
  • Similar a BCT para  .Net
     
  • Sin soporte de tipos ni subtipado

ContractorJ

Resultados

Permissive

Enabledeness
Preserving
Abstractions

Debilidades de las EPAs

Intended
Preconditions

Resultados

  public void Push(Object o) {

    if (o == null) {
      // No incluido en la pre
      throw new NullPointerException();
    }

    /* ... */
  }
  public void Push(Object o) {

    /* ... */

    if (o == null) {
      // No incluido en la pre
      throw new NullPointerException();
    }
  }
public boolean Push_pre() {
  return size <= capacity;
}
  public void Push(Object o) {

    if (o == null) {
      // No incluido en la pre
      size = capacity + 1;
      throw new NullPointerException();
    }

    /* ... */
  }

Annotator

(P)EPA de clase
sin anotar

Daikon

Randoop

Resultados

Conclusiones

Trabajo futuro

Preguntas

Made with Slides.com