Lo svolgimento della tesi o tirocinio

Questa sezione è rivolta agli studenti che intendono svolgere una tesi il cui oggetto principale è la programmazione; se la tesi che avete scelto ha diversa natura, discuteremo a seconda del caso le modalità del suo svolgimento.

I prerequisiti

Chi intende svolgere una tesi legata alla programmazione deve essere già in grado di scrivere codice di medie, o grandi, dimensioni in modo rapido ed efficace e deve conoscere gli strumenti descritti nel seguito ad un livello tale che il loro utilizzo non costituisca un ostacolo durante lo svolgimento del lavoro di tesi.

Il superamento degli esami di programmazione non è in generale bastante a garantire tali requisiti. In particolare è preferibile che lo studente abbia scritto nella sua vita altro codice oltre a quello necessario al superamento degli esami (spesso di dimensioni molto ridotte) e che abbia approfondito (per interesse perosnale, o professionale) gli strumenti di sviluppo indicati in questo documento.

Si osservi che nessuna di queste richieste è al di fuori della portata di uno studente di un corso di laurea di ambito informatico e che tali requisiti sono un (piccolo) sottoinsieme di quanto richiesto a chi si voglia occupare di programmazione in ambito professionale.

Chi desiderasse svolgere una tesi in programmazione e mancasse dei requisiti qui descritti può tranquillamente dedicare un po” del suo tempo di studente per mettersi al pari prima di iniziare la sua attività di tesi.

A tale scopo, alcuni ottimi riferimenti bibliografici in merito (la cui lettura è raccomandata a tutti) sono il monumentale:

Code Complete, 2nd Edition.
di Steve McConnell, edito da Microsoft Press
ISBN 0735619670

(di cui abbiamo la prima edizione nella nostra biblioteca, segnatura: sftw_129), l’arguto e succinto:

The Practice of Programming
di Brian W. Kernighan, Rob Pike, edito da Addison-Wesley Professional
ISBN 020161586X

che è un libro che non può mancare sullo scaffale di un programmatore e:

Programming Pearls, 2nd Edition
di Jon Bentley, edito da Addison-Wesley Professional
ISBN 0201657880

piacevolissma raccolta dell’omonima serie di saggi apparsi sulle «Communications of the Association for Computing Machinery». In fine, un’ottima guida per il debugging è:

Why Programs Fail
di Andreas Zeller, edito da Morgan Kaufmann
ISBN 1558608664

Altri testi sono elencati sullo scaffale del programmatore.

Il processo

Generalmente una tesi di programmazione si sviluppa in quattro fasi che ricalcano l’usuale processo di sviluppo del software:

Analisi / Specificazione

Questa fase è quella che si svolge a stretto contatto con il docente, durante la prima fase della tesi. Generalmente il lavoro di tesi prende spunto da un problema descritto in un articolo scientifico che lo studente dovrà studiare, unitamente ai riferimenti bibliografici rilevanti. Dopo una fase iniziale di studio ed indagine da parte dello studente, verranno dettagliate assieme al docente le specifiche del codice da sviluppare.

Stesura del codice e della documentazione

La stesura del codice è compito esclusivo dello studente. In questa fase, sulla scorta delle specifiche decise col docente ed utilizzando gli strumenti concordati con il docente, lo studente sviluppa il codice e lo documenta in modo accurato.

Testing / Debugging

Lo sviluppo del codice è accompaganto dalla realizzazione, sempre a carico esclusivo dello studente, di test (sia unitari che di regressione, se è il caso). I test devono garantire una ampia copertura del codice e devono eseguire tutti con successo prima che il codice sia sottosposto al docente. In questa fase saranno pertanto corretti gli errori presenti nel codice.

Valutazione

Una volta che il codice è stato steso, documentato e testato con successo da parte dello studente, esso è sottoposto alla revisione da parte del docente che formula quindi il suo giudizio sul lavoro svolto. Solo se tale giudizio è positivo lo studente potrà procedere alla stesura della tesi, in caso contrario, dovrà ricominciare il processo al fine di perfezionare il suo lavoro secondo le indicazioni del docente.

Gli strumenti

Revisioni del codice

Se nella fase di analisi si determina che il codice avrà dimensioni che superano una soglia critica, è necessario che lo studente utilizzi un sistema di gestione delle revisioni del codice, sia a proprio vantaggio che come strumento per consentire al docente l’ispezione del codice durante il suo svilippo.

Gli strumenti da utilizzare sono git o Mercurial. Istruzioni in merito a come utilizzare la particolare installazione di tale software ad uso degli studenti saranno fornite dal docente.

Ambienti di sviluppo integrati

Lo sviluppo di codice non banale è molto favorito dall’utilizzo di ambienti di sviluppo integrati.

Lo strumento suggerito è Visual Studio Code, disponibile per tutti i sistemi operativi maggiormente diffusi.

Documentazione

Un aspetto di fondamentale importanza è che il codice venga documentato durante lo sviluppo. A seconda del linguaggio di programmazione scelta, gli strumenti da utilizzare sono:

Strumenti adatti ad altri linguaggi di programmazione saranno decisi a seconda dei casi.

Testing / Debugging

La stesura del codice deve essere accompagnata dalla stesura di test che consentano di verificarne il corretto funzionamento (sia da parte dello studente stesso, allo scopo di correggere eventuali errori, sia da parte del docente, nell’ambito della valutazione finale del lavoro). Nel caso di Java, uno strumento utile è:

  • Junit per i test unitari.

Strumenti adatti ad altri linguaggi di programmazione saranno decisi a seconda dei casi.