= Sviluppo software in gruppi di lavoro complessi = == Gli obiettivi del corso == Il corso (6CFU) presenta gli aspetti più organizzativi dello sviluppo software, ma mira a formare figure professionali che contribuiscono allo sviluppo, più che alla pura gestione dei progetti. Verranno trattati i seguenti argomenti: 1. Cenni ai modelli organizzativi di sviluppo (cattedrale, bazaar, kibbutz, gruppi di lavoro "agili") 1. Il supporto fornito dai tool di configuration management e versioning 1. Continuous integration & delivery 1. !DevOps 1. Documentazione e specifica mirata al lavoro collaborativo (Design By Contract) === Modalità d'esame === L'esame consiste in una prova in laboratorio e una prova orale. [[PageOutline]] == A.A. 2016/17 == * [https://calendar.google.com/calendar/embed?src=im3m7e84t10gqkl7dmqcjbole4%40group.calendar.google.com&ctz=Europe/Rome Calendario lezioni ed esami] * [http://easystaff.divsi.unimi.it/EasyCourse//Orario/Dipartimento_di_Informatica_-_Milano/2016-2017/98/Docenti/MongaMattia_16197.html Orario ufficiale] Le registrazioni sono fornite '''a uso esclusivo degli studenti del corso''' e possono essere utilizzate solo per lo studio personale. Per accedere occorre usare la username ''studente'', la password è il titolo del primo capitolo di "The Mythical Man-Month". === 1. 28 settembre 2016 (Beta) === ==== Introduzione * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo00.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo00-handout.pdf Slide (versione per la stampa)] * [https://mmonga.typeform.com/to/jEE7zo Questionario] * [https://www.computer.org/web/swebok/v3 Riferimento per la terminologia dell'ingegneria del software] * [https://archive.org/details/mythicalmanmonth00fred F. Brooks, The Mythical Man-Month] ('''lettura obbligatoria''') === 2. 29 settembre 2016 (Sigma) === ==== Cattedrali, bazaar, kibbutz * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo01.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo01-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo01.ogg Registrazione (124MB, OGG/Vorbis)] * [http://www.jus.uio.no/sisu/the_cathedral_and_the_bazaar.eric_s_raymond/portrait.a5.pdf E. Raymond, The Cathedral and the Bazaar] ('''lettura obbligatoria''') * [https://homes.di.unimi.it/monga/lib/oss-icse04.pdf M. Monga, From bazaar to kibbutz: how freedom deals with coherence in the Debian project] === 3. 5 ottobre 2016 (Beta) === ==== Metodi agili: introduzione * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo02.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo02-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo02.ogg Registrazione (109MB, OGG/Vorbis)] === 4. 6 ottobre 2016 (Alfa) === ==== Metodi agili: Scrum, XP * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo03.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo03-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo03.ogg Registrazione (118MB, OGG/Vorbis)] === 5. 12 ottobre 2016 (Beta) === ==== Software Configuration Management * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo04.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo04-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo04.ogg Registrazione (110MB, OGG/Vorbis)] === 6. 13 ottobre 2016 (Alfa) === ==== Git (introduzione) prof. Bellettini ==== * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo05.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo05-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo05.mp4 Registrazione (148MB, MP4 v2)] * [https://git-scm.com/docs/gittutorial Il tutorial nella documentazione ufficiale di git] ('''lettura obbligatoria''') === 7. 19 ottobre 2016 (Beta) === ==== Git (Riassunto) ==== * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo06.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo06-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo06.ogg Registrazione (103MB, OGG/Vorbis)] === 8. 20 ottobre 2016 (Alfa) === ==== Git (branch) prof. Bellettini ==== * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo07.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo07-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo07.mp4 Registrazione (130MB, MP4 v2)] === 9. 26 ottobre 2016 (Beta) === ==== Git (history rewriting) prof. Bellettini ==== * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo08.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo08-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo08.mp4 Registrazione (116MB, MP4 v2)] === 10. 27 ottobre 2016 (Alfa) === ==== Git (workflow) prof. Bellettini ==== * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo09.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo09-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo09.mp4 Registrazione (113MB, MP4 v2)] * [https://www.atlassian.com/git/tutorials/making-a-pull-request Making a Pull Request (tutorial atlassian)] * [https://review.openstack.org/Documentation/index.html Gerrit] ('''lettura obbligatoria''') === 11. 2 novembre 2016 (Aula 307) === ==== Laboratorio Git internals ==== * [https://gitlab.com/svigroup/lab01 Esercitazione in laboratorio] === 12. 3 novembre 2016 (Aula Alfa) === ==== Dependency hell * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo10.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo10-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo10.ogg Registrazione (118MB, OGG/Vorbis)] === 13. 9 novembre 2016 (Aula 307) === ==== Laboratorio Git ==== [wiki:Lab02] === 14. 10 novembre 2016 (Aula Alfa) === ==== Build automation * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo11.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo11-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo11.ogg Registrazione (113MB, OGG/Vorbis)] === 15. 16 novembre 2016 (Aula Beta) === ==== Continuous Integration * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo12.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo12-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo12.ogg Registrazione (109MB, OGG/Vorbis)] === 16. 17 novembre 2016 (Aula Alfa) === ==== Docker prof. Santini * [http://broad-foot.surge.sh/#1 Slide] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo13.mp4 Registrazione (110MB, MP4 v2)] * [https://github.com/mapio/docker-tutorial Docker Tutorial] === 17. 23 novembre 2016 (Aula Beta) === ==== Asserzioni * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo14.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo14-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo14.ogg Registrazione (119MB, OGG/Vorbis)] * [https://doi.org/10.1145/143062.143098 D. Rosenblum, Towards a method of programming with assertions] ('''lettura obbligatoria''') Per accedere alla ''digital library ACM'' da fuori unimi, attivare il [http://www.sba.unimi.it/BibliotecaDigitale/2484.html#c2495 proxy] === 18. 24 novembre 2016 (Aula Alfa) === ==== Design by Contract * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo15.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo15-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo15.ogg Registrazione (134MB, OGG/Vorbis)] * [https://www.eiffel.org/downloads Eiffel Studio (Versione GPL)] === 19. 30 novembre 2016 (Aula 307) === ==== Laboratorio Gradle ==== * [https://gitlab.com/svigroup/lab03 Esercitazione in laboratorio] === 20. 1 dicembre 2016 (Aula Alfa) === ==== Eiffel * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo16.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo16-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo16.ogg Registrazione (99MB, OGG/Vorbis)] === 21. 14 dicembre 2016 (Aula 307) === ==== Laboratorio Gradle - Eiffel ==== * [https://gitlab.com/svigroup/lab04 Esercitazione in laboratorio] === 22. 15 dicembre 2016 (Aula Alfa) === ==== Linguaggi per la ''separation of concern'' * [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo17.pdf Slide] -- [http://homes.di.unimi.it/~sisop/lucidi1617/svigruppo17-handout.pdf Slide (versione per la stampa)] * [http://homes.di.unimi.it/~sisop/lucidi1617/video/svigruppo17.ogg Registrazione (105MB, OGG/Vorbis)] === 23. 21 dicembre 2016 (Aula 307) === ==== Laboratorio Eiffel ==== * [https://gitlab.com/svigroup/lab05 Esercitazione in laboratorio] === 24. 11 gennaio 2017 (Aula 307) === ==== Laboratorio: esercitazione pre-esame ==== * [https://gitlab.com/svigroup/lab06 Esempi di problemi d'esame] == Materiali anni precedenti == * [https://www.reddit.com/r/unimi_svigruppo/wiki/index Gruppo Reddit (Resp. prof. Carlo Bellettini, occorre iscrizione al gruppo subreddit)]