Project 2017-2018

Elezioni comunali online
Versione: 1.0

Progettare e realizzare un sistema di voto online che permetta ai cittadini di:

  • Registrarsi al sistema
  • Indire una elezione (solo per i “Funzionari Comunali”)
  • Presentare una lista elettorale per una elezione
  • Votare una lista e un candidato
  • Consultare i risultati di una elezione

Eccetto la registrazione e la visione dei risultati di una elezione tutte le funzionalità di questo sistema richiedono l’autenticazione dei cittadini.

Registrazione al sito

Durante la registrazione al sito i cittadini dovranno inserire obbligatoriamente le seguenti informazioni personali:

  • Nome utente (username);
  • Nome e Cognome;
  • Numero di telefono;
  • Password;
  • Indirizzo email;
  • Codice Fiscale;
  • Indirizzo di domicilio;
  • Documento di identità (di cui interessa il tipo (che può essere carta di identità o passaporto), il numero, da chi viene rilasciato, data di rilascio e data di scadenza))

Una volta registrato l’utente non potrà più modificare i propri dati.
Non è previsto un meccanismo di verifica dell’indirizzo mail, né di recupero password.

Creare una nuova elezione

Gli utenti denominati “Funzionari Comunali” possono bandire delle nuove elezioni stabilendo la data e ora di inizio e fine delle elezioni. L’amministratore di sistema può nominare dei funzionari comunali tra gli utenti registrati sul sito. All’avvio c’è solo un funzionario comunale che è l’utente amministratore.

Presentare una lista elettorale

Una volta bandita una elezione, gli utenti possono presentare una lista elettorale (per una certa elezione) indicando il nome del candidato Sindaco, i componenti della lista, il nome della lista e il simbolo (non interessa il file di immagine ma solo una descrizione del simbolo).

Una volta presentata la lista i funzionari comunali potranno ammettere la lista alle elezioni.

Una lista elettorale può contenere solo persone registrate nel sistema. Ogni persona per una certa elezione può candidarsi solo con una lista.

Nella propria pagina di profilo gli utenti troveranno un riepilogo di tutte le richieste di presentazione delle liste. Una richiesta di presentazione di una lista può essere in uno dei seguenti stati: Pendente, nel caso in cui sia stata inviata la richiesta ma ancora il funzionario non ha ammesso la lista; Approvata, nel caso in cui la lista sia stata ammessa alle elezioni; Rigettata nel caso in cui la lista non sia stata ammessa.

Una volta inviata la richiesta non si possono più effettuare modifiche alla lista.

Votare una lista e un candidato

Durante l’intervallo di tempo previsto per l’elezione i cittadini registrati possono autenticarsi nel sito e troveranno la lista di elezioni in corso di svolgimento. Scegliendo l’elezione a cui vogliono partecipare si aprirà una nuova pagina relativa all’elezione dove verranno elencate tutte le liste che partecipano a quella elezione. Una volta scelta la lista a cui dare il voto il sistema chiederà a quale candidato dare la preferenza (si può dare la preferenza ad ogni candidato della lista ad eccezione del sindaco). La preferenza è opzionale (il cittadino può decidere anche di non dare preferenze votando così solo la lista). Per ogni elezione un cittadino può votare solo una volta. Una volta inviato il voto non può essere modificato.

Consultare i risultati di una elezione

La pagina principale del sito visibile anche dagli utenti visitatori mostra l’elenco delle elezioni concluse. I visitatori, cliccando su una elezione conclusa, verranno indirizzati sulla pagina di spoglio della elezione dove per ogni lista vengono riportati i voti totali ricevuti da quella lista e i voti ricevuti dai singoli candidati.

Modalità di realizzazione

  • Il modello di processo suggerito è un ibrido strutturato-agile composto da due fasi: inception e construction.
  • In inception vengono prodotti come artefatti una modellazione dei casi d’uso e un modello di dominio (più eventualmente un glossario e altri artefatti accessori).
  • In costruction si seguono le pratiche di gestione di processo di Scrum, due componenti del gruppo giocano il doppio ruolo di membri del team e di scrum master e product owner (i ruoli si ridistribuiscono al termine di ogni sprint). Sono rispettati gli eventi standard (Sprint planning, Daily scrum, Sprint review e Sprint retrospective) e vengono prodotti e gestiti gli artefatti standard (Product backlog, Sprint backlog, Burn down chart).
  • I casi d’uso identificati in inception vengono posti inizialmente nel backlog e raffinati in user stories (tipicamente una per scenario).

Prodotti da realizzare

Ogni gruppo dovrà realizzare:

  • Artefatti obbligatori della fase di inception
    • Modello dei casi d’uso
    • Modello di dominio
    • Glossario
  • Diario del progetto: questo documento deve riportare in modo sintetico e schematico lo stato di avanzamento del progetto e le attività del gruppo. In particolare all’inizio di ogni sprint devono essere specificati lo stato dei backlog e i criteri seguiti per la popolazione dello sprint backlog attraverso l’assegnazione delle priorità e dell’effort agli elementi del product backlog. Deve inoltre essere presente un dettaglio delle attività del gruppo dove vengono riportate in modo sintetico e schematico: tutte le attività svolte dal gruppo giorno per giorno, versioni intermedie o primordiali degli artefatti, link ai commit delle release di codice ed eventualmente screenshot delle board per il tracking del progetto. Al seguente link è possibile trovare un esempio di diario.
  • Descrizione del metodo adottato, questa deve riportare: numero di iterazioni, milestone,  issue, criteri per l’assegnazione di priorità ai task e user stories.
  • Relazione su scelte progettuali e di interfaccia.
  • Manuale utente

Indicazioni di carattere generale da seguire obbligatoriamente

 

  • Il progetto dovrà essere realizzato in gruppo, ogni gruppo dovrà essere composto da 3 persone.
  • Effettuare unit testing (utilizzando JUnit).
  • Utilizzare il linguaggio Java e GWT.
  • Il codice dovrà essere opportunamente commentato e indentato.
  • Utilizzare in maniera appropriata gli strumenti di versionamento del codice (Git), bug tracking e code review (creazione di branch, pull request ed attuazione dei merge);
  • Si dovrà utilizzare BitBucket per gli strumenti a supporto del progetto (gestione delle revisioni, issue/project tracking), La documentazione dovrà essere prodotta sotto forma di pagine wiki all’interno del progetto in BitBucket.
  • Per la gestione dei backlog utilizzare un issue/project tracking (si consiglia l’utilizzo di Trello o Jira perchè è già integrati in BitBucket). Si consiglia in particolare l’utilizzo di Trello sia per la sua semplicità che per l’ampia disponibilità di plugin che facilitano la gestione di un progetto che applica le metodologie Agile.
  • Tutte le informazioni gestite dal sito dovranno essere accessibili anche dopo il riavvio del server. Per gestire la persistenza è obbligatorio utilizzare MapDB (MapDB). Non si accetterà la consegna di progetti che usano altri meccanismi di gestione della persistenza.
  • L’utente amministratore dovrà avere come username “admin” e password “admin”. La sua registrazione non potrà avvenire attraverso interfaccia web.

Consigli

  • Si consiglia di utilizzare Eclipse come IDE.
  • E’ apprezzato l’uso di Google Doc per la stesura del diario e delle relazioni. Per i diagrammi si consiglia l’utilizzo di yed

Modalità e tempi di consegna

La consegna avverrà inviando una mail a luigi(punto)asprino(chiocciola)unibo(punto)it e invitando al repository di Bitbucket l’utente “luigi-asprino”. Successivamente ogni gruppo verrà convocato per discutere il progetto nelle date che verranno rese note di volta in volta nel sito del corso. Ci sarà orientativamente una data di discussione al mese e nel caso di necessità particolari potranno essere concordate date aggiuntive.

Valutazione

La valutazione del progetto avverrà tenendo conto dei seguenti punti:

  • La realizzazione delle specifiche funzionali;
  • L’organizzazione e la leggibilità del codice;
  • L’adozione di una metodologia e l’utilizzo appropriato degli strumenti di testing, versioning, bug tracking, code reviewing e project tracking;
  • L’adeguatezza della documentazione allegata al progetto e in particolare della descrizione del processo di sviluppo adottato;
  • La discussione del progetto.

Per qualsiasi dubbio o chiarimento riguardanti le specifiche del progetto non esitate a contattarmi all’indirizzo email luigi(punto)asprino(chiocciola)unibo(punto)it o utilizzate il forum dell’insegnamento.

Risorse per il progetto

Esempio di progetto GWT che utilizza MapDB (il classpath incluso andrà adattato).

Date di consegna progetto a.a. 17/18

Fare riferimento alla sezione dedicata nella homepage del sito.