Package caseine.tags

Annotation Interface CodeQualityToCheck


@Retention(RUNTIME) @Target({METHOD,CONSTRUCTOR,TYPE}) @Repeatable(caseine.tags.hidden.CodeQualityToCheckRepetable.class) public @interface CodeQualityToCheck
Pour faciliter la vérification de la qualité de code de l'élément annoté.
Author:
Yvan Maillot <yvan.maillot@uha.fr>

L'annotation @caseine.tags.CodeQualityToCheck

Le principe consiste à soumettre l'arbre syntaxe (AST) de la version étudiante de l'élément annotée au contrôle de l'enseignant par l'intermédiaire d'une méthode qu'il doit écrire.

L'AST et son contrôle est réalisé grâce à JavaParser

Cible

@CodeQualityToCheck s'applique à

  • un type
    • une classe
    • une interface
    • un type d'annotation
    • un type énuméré
  • une méthode
  • un constructeur

Formes d'emploi

@CodeQualityToCheck s'emploie uniquement commentune annotation multivaluée : (e.g.

 @CodeQualityToCheck(
              grade = 1,
              priority = 2,
              codeAnalyserMethodsName = "edu.uha.miage.AnUnitTestClass.aMethod"
 )
 

Utilisation de la propriété codeAnalyserMethodsName

Cette propriété est une chaîne de caractères (String) qui représente

  • le nom pleinement qualifié d'une méthode
  • qui retourne une chaîne de caractères
  • et reçoit en paramètre un objet de type
    • com.github.javaparser.ast.body.MethodDeclaration si l'élément annoté est une méthode.
    • com.github.javaparser.ast.body.ConstructorDeclaration si l'élément annoté est une méthode.
    • com.github.javaparser.ast.body.TypeDeclaration si l'élément annoté est une méthode.

Chacun de ces paramètres contient l'AST (résultat du parsing) de l'élément annoté.

Par exemple,

codeAnalyserMethodsName = "edu.uha.miage.AClassTest.aMethodAnalyser"

représente l'une des méthodes de la classe AClassTest suivantes:

  • public static String aMethodAnalyser(com.github.javaparser.ast.body.MethodDeclaration)
  • public static String aMethodAnalyser(com.github.javaparser.ast.body.ConstructorDeclaration)
  • public static String aMethodAnalyser(com.github.javaparser.ast.body.TypeDeclaration)

selon que l'élément annoté soit une méthode, un constructeur ou une classe.

L'enseignant a tout le loisir d'utiliser l'API de JavaParser ou quelques utilitaires fournis dans ParserUtils pour analyser le code de l'étudiant.

Conventions d'écriture de la méthode de test

Il doit écrire codeAnalyserMethodsName de sorte qu'elle retourne

  • "OK" si l'analyse est satisfaisante, ou
  • autre chose dans le cas contraire.
    Cette autre chose est un message destiné à l'étudiant dont le contenu est laissé à l'appréciation de l'enseignant.

Pour le reste voir la documentation des propriétés

See Also:
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    Un tableau des noms pleinement qualifiés de méthodes qui prennent en paramètre l'AST de l'élément annoté.
    double
    définit le nombre de points attribués à la réussite de ce test ou une valeur relative si le tag RelativeEvaluation est employé.
    int
    définit l'ordre de priorité croissante du test généré dans sa classe de tests unitaires
    définit un tableau de chaînes de caractères qui représentent des tests unitaires.
    Définit la consigne destinée à l'étudiant quand le test échoue.
    Quand la valeur par défaut est choisie, un message standard est généré.
  • Element Details

    • value

      String value
      Définit la consigne destinée à l'étudiant quand le test échoue.
      Quand la valeur par défaut est choisie, un message standard est généré.
      Returns:
      la consigne destinée à l'étudiant.
      Default:
      ""
    • priority

      int priority
      définit l'ordre de priorité croissante du test généré dans sa classe de tests unitaires
      Returns:
      l'ordre de priorité.
      Default:
      0
    • grade

      double grade
      définit le nombre de points attribués à la réussite de ce test ou une valeur relative si le tag RelativeEvaluation est employé.

      Un grade négatif ou nul est ignoré.

      Returns:
      le grade.
      See Also:
      Default:
      4.9E-324
    • requiersUnitTestsBefore

      String[] requiersUnitTestsBefore
      définit un tableau de chaînes de caractères qui représentent des tests unitaires.

      Chaque chaîne de ce tableau peut être

      • Soit convertible en entier, dans ce cas, elle représente tous des tests unitaires de cette priorité.
      • Soit le nom pleinement qualifié d'une méthode de test unitaire.

      Pour que le test unitaire annoté réussisse, il faut que tous les tests unitaires représentés dans ce tableau réussissent.

      Attention aux dépendances cycliques

      Returns:
      le tableau des tests unitaires
      Default:
      {}
    • codeAnalyserMethodsName

      String[] codeAnalyserMethodsName
      Un tableau des noms pleinement qualifiés de méthodes qui prennent en paramètre l'AST de l'élément annoté.
      Returns:
      Un tableau des noms pleinement qualifiés de méthodes qui prennent en paramètre l'AST de l'élément annoté.
      Default:
      {}