Développement des systèmes informatiques


Assertions


Voir aussi :


Introduction

Une assertion b est une expression booléenne supposée vraie. S'il s'avère que b est fausse, l'assertion est dite violée. Les assertions :

Les assertions en Java

Hiérarchie des classes en Java

Classification des erreurs

Les erreurs peuvent être fatales ou corrigibles. En général,

Exemples

Exemples de la forme assert expression1; de l'instruction d'assertion :

public int foo() {
  for(...) {
    ... return ...;
  }
  // on ne devrait jamais passer ici, Java
  // se plaint si pas de return
  assert false;
  return 0;
}
public int foo(int i) {
  assert i % 2 == 0;
  ...
}

Exemple de la forme assert expression1 : expression2; de l'instruction d'assertion pour définir un invariant interne. Cette forme permet de détailler le message d'erreur.

switch(x) {
  case ... : ... break;
  ...
  case ... : ... break;
  default : assert false: "x: " + x;
}

Même exemple que précédemment, sauf que l'erreur est ici levée par throw. De cette façon, l'erreur est lancée même si les assertions sont désactivées.

switch(x) {
  case ... : ... break;
  ...
  case ... : ... break;
  default : throw new AssertionError(x);
}

Exemple d'utilisation de l'assertion pour définir la pré-condition et la post-condition de méthode :

public static double racineCarree(double value){
  assert(value >= 0);  // pré-condition
  double res = ...;
  assert(abs(res * res - value) < eps);  // post-condition
  return resultat;
}

Exemple d'utilisation de l'assertion pour définir un invariant de boucle (ainsi que pour définir une pré et une post-condition de méthode) :

public class Assertions {
  public static int pgcd(int a, int b) {
    // pré-condition
    assert a >= 0 && b >= 0 : "Error a=" + a + " b=" + b;
    int u = a, v = b, r;

    do {
      // invariant de boucle
      assert v != 0;
      r = u % v;
      u = v;
      v = r;
    } while (r != 0);
    // post-condition
    assert a % u == 0 && b % u == 0 ;
    return u;
  }

  public static void main(String[] args) {
    System.out.println(pgcd(24, 20));
    System.out.println(pgcd(4, 8));
    System.out.println(pgcd(1, 4));
    System.out.println(pgcd(4, 1));
  }

}