Pipeline di valutazione

Completato

In questa unità viene illustrato come creare una pipeline di valutazione per valutare gli invii con PyBryt.

Formati di output

A seconda delle pipeline di valutazione e di feedback, i risultati di PyBryt possono essere trasformati in varie forme di output. La prima, la più ovvia, è l'oggetto pybryt.ReferenceResult restituito da PyBryt ogni volta che viene verificata un'implementazione degli studenti rispetto a un riferimento. Questi oggetti possono essere selezionati in file per un'ulteriore elaborazione e possono essere usati anche per generare report di feedback con pybryt.generate_report. Infine, questi risultati di riferimento possono essere convertiti in un formato dizionario compatibile con JSON usando il metodo to_dict se si vuole usare uno script di post-elaborazione per personalizzare i report.

Esecuzione in locale

Il primo approccio, il più semplice, consiste nell'eseguire PyBryt in ogni invio in locale. In questa pipeline l'insegnante raccoglie gli invii e li scarica nel computer. Usa quindi PyBryt per generare un'implementazione degli studenti da ogni invio ed eseguirle confrontandole ai riferimenti. Lo script seguente illustra questo approccio:

import glob
import pathlib
import pybryt

student_impls = []
submissions = glob.glob("submissions/*.ipynb")
for subm in submissions:
    student_impls.append(pybryt.StudentImplementation(subm))

refs = []
ref_paths = glob.glob("refs/*.pkl")
for ref_path in ref_paths:
    refs.append(pybryt.ReferenceImplementation.load(ref_path))

for student_impl, subm in zip(student_impls, submissions):
    results = student_impl.run(refs)
    for res in results:
        res_path = f"results/{pathlib.Path(subm).stem}_{res.reference.name}.pkl"
        res.dump(res_path)

Lo script precedente genera ogni implementazione degli studenti da un notebook di invio nella directory submissions. Carica quindi le implementazioni di riferimento selezionate dalla directory refs ed esegue ogni implementazione degli studenti confrontandola con ciascun riferimento archiviando i risultati nella directory results per un'ulteriore elaborazione.

Per più esecuzioni, è possibile selezionare gli oggetti di implementazione degli studenti, poiché la generazione può richiedere tempo:

for student_impl, subm in zip(student_impls, submissions):
    impl_path = f"student-implementations/{pathlib.Path(subm).stem}.pkl"
    student_impl.dump(impl_path)

Nel primo script è quindi necessario solo il caricamento delle implementazioni degli studenti selezionate anziché la generazione dai notebook.

È possibile trovare altri esempi di questo stile di pipeline di valutazione nella cartella demo del repository GitHub di PyBryt.

Esecuzione tramite automazione

PyBryt può anche essere eseguito tramite automazione sui repository degli studenti come l'integrazione continua. Questo metodo ha il vantaggio di fornire agli studenti un feedback quasi immediato ogni volta che eseguono il push nel repository e consente anche agli insegnanti di raccogliere le implementazioni degli studenti o i risultati dall'esecuzione più recente senza dover ripetere ogni invio.

È possibile eseguire PyBryt in qualsiasi piattaforma CI, anche se PyBryt ha un'azione che è possibile usare con GitHub Actions. Indipendentemente dal modo in cui si esegue PyBryt, il passaggio di importazione raccoglie i risultati e li inserisce in un luogo a cui l'insegnante può accedere. In molti contesti questo passaggio può essere portato a termine eseguendo il commit di tali file nel repository. Quindi, per generare i voti finali, è possibile scaricare il feedback da ogni repository ed eseguirlo tramite lo script di valutazione. In alternativa, è possibile scaricare le implementazioni degli studenti ed eseguirle confrontandole a un altro set di riferimenti.