profcfuhrmanets / log210-enonce-lab0

Laboratoire d'introduction aux technologies utilisées en LOG210
MIT License
0 stars 4 forks source link

Faciliter l'auto-correction avec GitHub Classroom #78

Open FrenchToastStudio opened 1 week ago

FrenchToastStudio commented 1 week ago

Auto Correction

En tant que chargé de laboratoire, j'ai besoin que GitHub Classroom puisse corriger les laboratoire automatiquement afin que je puisse noter ceux-ci justement.

Github Action

Pour ce faire je propose d'utiliser la fonction de "Grading and Feedback" de GH Classroom afin de séparer les différent point d'évaluation (exemple ne pas avoir le test pour vérifier le test de parasites-mollassons et les test pour vérifier le classement ne devrait pas être dans le même test)

Jest

Afin d'arriver à notre but avec le gradins et Feedback il va donc falloir séparer les test fait dans le template des test que l'étudiant va rajouter

Exemples:

  • Test
    • AutoGrading
    • classement.gh.test.ts
    • nouveau-bouton.gh.test.ts
    • parasite-mollassons.gh.test.ts
    • Core
    • Controller

Ceci permettrais d'avoir un calcul plus détaillé de la note d'un élève directement dans GH classroom. Afin de s'assurer que l'élève ne modifie pas les test de autograding il suffit de protéger tout les fichier dans le dossier AutoGrading

fuhrmanator commented 1 week ago

Un problème avec l'auto-correction actuelle de Classrooms (https://github.com/education/autograding/issues/111) avec une Action est que c'est 0 ou 100%, sauf si on crée un classrooms.yaml personnalisé (ce qui va à l'encontre de la structure du framework Jest avec les suites, it, expect, etc.). Bref, si une action de "npm test" (ou n'importe quel test) se termine avec 0 == 100%, sinon une action se termine avec 1 (au moins un test qui échoue) == 0%.

Un autre défi est que GitHub a archivé le projet education/autograding en mai, alors ce n'est pas sûr si le projet va continuer de même.

Une solution éventuelle pourrait être de générer un .json à partir de Jest et de l'analyser pour calculer des points. https://github.com/im-open/process-jest-test-results est un projet intéressant à ce propos.

Quelque soit la solution, il faudrait qu'elle s'adapte à des changements dans Jest. C'est à dire qu'on peut facilement rajouter ou supprimer des tests/expect dans Jest et le calcul de la note pour la partie test s'adapte en conséquence. C'est très pénible (même avec Copilot ou ChatGPT) de faire un classroom.yaml à la main à partir des tests Jest.

fuhrmanator commented 1 week ago

Voici ce que propose GitHub classrooms pour un "Custom YAML" pour les tests du lab0:

name: Autograding Tests
'on':
- push
- repository_dispatch
permissions:
  checks: write
  actions: read
  contents: read
jobs:
  run-autograding-tests:
    runs-on: ubuntu-latest
    if: github.actor != 'github-classroom[bot]'
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Lab 0 tests
      id: lab-0-tests
      uses: classroom-resources/autograding-command-grader@v1
      with:
        test-name: Lab 0 tests
        setup-command: npm ci
        command: npm test
        timeout: 10
        max-score: 100
    - name: Autograding Reporter
      uses: classroom-resources/autograding-grading-reporter@v1
      env:
        LAB-0-TESTS_RESULTS: "${{steps.lab-0-tests.outputs.result}}"
      with:
        runners: lab-0-tests

Je note que les actions utilisées actuellement n'ont pas été archivées:

J'ai également créé un issue pour montrer un cas concret avec de multiples tests qui ne fonctionne pas comme on voudrait dans node. Il y a un script que CoPilot m'a généré qui peut créer un Custom YAML à partir de tous les fichiers jest dans un projet. Même avec ça, ce n'est pas parfait, car un fichier test peut faire plusieurs it() ou describe() et le tout est agrégé dans un seul test (pass/fail). C'est mieux que npm test par contre.