Java Modeling LanguageLe Java Modeling Language (JML) est un langage de spécification pour Java. Il est basé sur le paradigme de la programmation par contrat. Il utilise la logique de Hoare, les pré et postconditions ainsi que les invariants. Les spécifications sont ajoutées dans des commentaires spéciaux du code Java. Il existe divers outils de vérification pour JML, tels que la vérification d'assertions à l'exécution (RAC) et la vérification statique (ESC/Java, OpenJML). PrésentationJML est un langage de spécification pour les programmes Java. Il fournit une sémantique pour décrire formellement le comportement des programmes Java. Son but est d'enlever les potentielles ambiguïtés du programme par rapport aux intentions du concepteur. JML est inspiré par la programmation par contrat de Eiffel et de la famille Larch. Son but est de fournir une sémantique de vérification formelle rigoureuse restant accessible à tout programmeur Java. Les spécifications peuvent être écrites directement dans les commentaires du code Java, ou enregistrées dans un fichier de spécification séparé. Divers outils peuvent tirer parti de ces informations supplémentaires fournies par les spécifications JML. De plus, comme les annotations JML prennent la forme de commentaires, les programmes comportant de telles spécifications peuvent être compilés directement par n'importe quel compilateur Java. SyntaxeLes spécifications JML sont ajoutées au code Java sous forme d'annotations dans les commentaires. Ces commentaires Java sont interprétés comme annotations JML lorsqu'ils commencent par un @. Exemple de commentaires JML : //@ <Spécifications JML> ou /*@ <Spécification JML> @*/ La syntaxe de base de JML est basée sur les mots-clés suivants :
Le JML fournit aussi de base les expressions suivantes :
ainsi que les éléments logiques standards et, ou, et non de la syntaxe Java. Les annotations JML ont aussi accès aux objets Java, aux méthodes et opérateurs accessibles par la méthode annotée. Tous ces éléments sont combinés pour fournir une spécification formelle des propriétés des classes, attributs et méthodes. Par exemple, le code suivant correspond est un exemple simple d'une classe de compte bancaire annotée de spécifications JML : public class CompteBancaireExemple {
public static final int MAX_SOLDE = 1000;
private int solde;
private boolean isLocked = false;
//@ invariant solde >= 0 && solde ⇐ MAX_SOLDE;
//@ assignable solde;
//@ ensures solde == 0;
public CompteBancaireExemple() { ... }
//@ requires montant > 0;
//@ ensures solde == \old(solde) + montant;
//@ assignable solde;
public void crediter(int montant) { ... }
//@ requires montant > 0;
//@ ensures solde == \old(solde) - montant;
//@ assignable solde
public void debiter(int montant) { ... }
//@ ensures isLocked == true;
public void lockCompte() { ... }
//@ signals (CompteBancaireException e) isLocked;
public /*@ pure @*/ int getSolde() throws CompteBancaireException { ... }
}
OutilsIl existe des outils variés offrant des fonctionnalités basée sur les annotations JML.
Références
Liens externes |