Direi che quei termini non sono definiti in pietra e quindi tendono a variare a seconda di chi chiedi. L'unica versione valida è la versione utilizzata dall'organizzazione per cui lavori. Dal momento che sei uno studente che vorrebbe dire usare solo quello che il tuo insegnante ti dice è la definizione, se mai dovessi pensarci in un corso.
Nella mia organizzazione questi termini non sono molto usati e noi (internamente) usiamo una variazione del test usato dal libro "Growing Object Oriented Software" (lettura molto raccomandata).
Abbiamo
- Test unitario: una singola parte del tuo codice tagliata da tutte le dipendenze
- Test di integrazione: uguale al test unitario ma per il codice che deve interagire con un componente / libreria esterno
- Test funzionale end-to-end: l'intera applicazione testata tramite gli input / output
Semplicemente non usiamo affatto i termini test delle applicazioni e test di sistema.
Quindi, per tornare alla tua domanda: non sottolineare troppo la definizione di questi termini. Per parafrasare ciò che un venditore di software una volta disse "Significa qualunque cosa il cliente pensi che significhi". Se lavori per un'organizzazione che usa questi termini, usa la loro definizione.