UniTO/anno3/progmobile/relazione_ferra.txt

233 lines
13 KiB
Text
Raw Normal View History

2020-04-18 21:07:22 +02:00
Programmazione Dispositivi Mobili
Università degli Studi di Torino
Dipartimento di Informatica
Relazione NewsVoF
Anno Accademico 2017/2018
Studenti:
Matteo Marsala
Francesco Ferraris
1
Introduzione:
Da svariati anni, il web è afflitto da un fenomeno spaventoso: le Fake News.
Gli studi sperimentali nellambito delle bufale online sono numerosi, ma
sono presentati agli utenti con eventi organizzati, dentro laboratori in cui le
persone forniscono i propri dati al fine di uno studio campionato. Da qui
nasce lidea: creare unapplicazione apposita che permetta di acquisire dati
da studiare e allo stesso tempo far sı̀ che lutente si diverta e sia invogliato
a usare lapplicazione, nonchè ad informarsi sulle notizie che popolano il web.
I dati che si riceveranno potranno poi essere usati per costruire vari esperimenti, su argomenti noti come la Social Influence e di come sia capace di
generare un pensiero su un fatto di cui non si abbia una conoscenza completa,
oppure argomenti come il Backfire Effect, che non ci permette di cambiare le
nostre convizioni, anche se errate.
Tali esperimenti potranno poi essere utilizzati in futuro per un obbiettivo
sociale più ampio, come la rimozione delle bufale dal web.
Ovviamente, oltre al fine principale dellapplicazione e a quello di rispettare
le specifiche accademiche, si vuole costruire qualcosa che abbia come scopo
finale quello di presentare unapp interessante, utile, divertente e che non
occupi spazio inutile sulla memoria del proprio device.
2
Specifiche generali dellapplicazione:
Lapplicazione avrà come funzionalità principale quella di permettere agli
utenti di valutare le notizie da noi manipolate tramite i lettori RSS. Per
far questo, bisognerà effettuare il log-in.
Nel caso in cui non si voglia creare il proprio account, si potranno comunque leggere le notizie ma, in ogni caso, non si potranno valutare.
Saranno presenti anche altre funzionalità, non completamente utili per il
nostro scopo, ma formative dal punto di vista della Programmazione Mobile. Sarà quindi possibile cambiare i propri dati del profilo, accedere alla
classifica globale, contattare con una mail i creatori dellapplicazione, leggere
1
una guida introduttiva e impostare le opzioni preferenziali dellapplicazione.
Gli amministratori potranno anche accedere ad una pagina privata che riassume i dati degli utenti che hanno votato una determinata notizia, ricercare
utenti o notizie a seconda di una parola chiave o di una caratteristica, e cosı̀
via.
2.1
Situazione del PlayStore:
Attualmente sul Play Store non esiste nulla di simile, in quanto NewsVoF
è unapplicazione di nicchia usata per gli studi sperimentali in ambito accademico, non commerciale.
Tuttavia, è presente unapplicazione (chiamata Fighting Fake News)
che mostra liste di bufale dando la possibilità agli utenti di affermare di aver
letto tale notizia. Oltre a ciò, esiste anche Hoaxy, un motore di ricerca per
le fake news.
Inoltre, esisteva un sito creato per lo stesso fine, ma non collegato ad
applicazioni Android. Per questo motivo abbiamo deciso di ampliare i canali
con cui raggiungere lutente, in modo da aver una maggior mole di dati su
cui lavorare.
2.2
Benefici dellapplicazione:
Lesistenza di unapplicazione scaricabile da Play Store è già un vantaggio
in sè, in quanto non esistono piattaforme accademiche mobile simili. Questo
rende possibile la reperibilità di più dati, in quanto le persone potranno effettuare le proprie scelte da dispositivo mobile e non solamente da PC.
Inoltre, tale applicazione andrà a colmare alcune lacune presenti nel sito:
grazie al login utente, sarà possibile catalogare i voti anche secondo le caratteristiche degli utenti, quali età, sesso, stato di residenza, ecc. Si potranno
inserire sempre più caratteristiche a seconda del tipo di dati che si vogliono
studiare.
Gli utenti saranno invogliati a usare lapplicazione grazie alla classifica
delle risposte: chi avrà giudicato le notizie nel modo corretto, avrà degli effetti grafici sul suo nome, visibile nella classifica pubblica e la gloria della
vittoria.
2
In futuro, sarà possibile poi implementare un processo di gamification più
ampio, in modo da invogliare sempre di più gli utenti a usare lapplicazione.
3
Implementazione e funzionalità:
3.1
Schema di navigazione di base:
Lactivity principale (MainActivity) fornirà da subito lelenco delle notizie
da leggere. Come spiegato dalla guida iniziale (visibile solo al primo accesso
allapplicazione), i titoli delle notizie saranno rossi o verdi, per indicare se la
maggior parte degli utenti pensa che la notizia sia vera o falsa. Questo ci
servirà, in futuro, per analizzare i dati relativi alla social influence.
Nel caso in cui lutente decida di effettuare il login, le notizie mostreranno
lora in cui sono state caricate e potranno essere votate, in modo che il voto
sia salvato nei database. LActionbar presenta i pulsati per tornare alla
home, per effettuare il login o per accedere al menu di navigazione. Da qui si
potranno raggiungere altri Fragment, con contenuto diverso e appropriato:
• Profilo: Questa pagina sarà disponibile solo per gli utenti loggati,
che avranno quindi fornito i propri dati. Tutti avranno la possibilità
di essere modificati tramite un semplice click. Sarà inoltre possibile
cambiare la foto personale, salvata tramite SharedPreferences e non su
database;
• Classifica: Questa activity mostra una tabella con i giocatori che si
sono posizionati in classifica votando almeno una notizia. Vi sarà anche mostrata la propria percentuale, in modo da incentivare gli utenti
a valutare più news per farla salire. Il numero di voti generali totali
sarà presente su ogni record.
Inoltre, questo Fragment dispone di uno spinner, utile per cercare i
votanti tramite una loro caratteristica specifica (in questa release sono
disponibili ricerca per città e lavoro);
• Contatti: Questo Fragment è stato creato per implementare linvio di
mail tramite applicazione esterna.
3
• Login/Logout: Fragment necessario per effettuare il log-in. Una volta
effettuata questazione, verrano sbloccate alcune funzionalità, come la
pagina profilo o la possibilità di valutare le notizie. Una volta loggati
sarà possibile effettuare il Logout.
Inoltre, dalla pagina di login sarà possibile accedere alla pagina di
creazione del proprio account. Saranno richieste una Email, un Username, e una Password.
Sarà anche presente un checkbox, per il consenso alla condivisione dei
dati personali e per le norme di utilizzo.
• Guida: Questo fragment non è altro che un riassunto di ciò che lutente
ha letto al suo primo login. Ciò è stato pensato poichè solitamente le
applicazioni rimangono inusate per parecchio tempo, e in questo caso
le funzionalità principali vengono dimenticate.
• Amministrazione: lidea di questa pagina è puramente tecnica: solo
lamministratore la vedrà e potrà accedervi, usufruendo di alcune funzionalità, come la possibilità di vedere gli utenti iscritti, quella di promuoverli ad amministratore o visualizzare gli utenti che sono già di
massimo grado e quindi che potranno vedere quella pagina.
Vi è inoltre una Search Bar, con cui sarà possibile ricercare istantaneamente le notizie per parole chiave, gli utenti per caratteristica
oppure selezionare una delle azioni disponibili nello spinner.
Questa pagina potrebbe servire per un infinità di cose che però non
sono state implementate, ma sicuramente per unapplicazione richiesta
da un cliente potrebbero essere aggiunte: da questo pensiero è nata
lidea di questactivity.
3.2
Motivazione delle scelte:
La scelta di utilizzare un Drawable Layout per costruire il menu è stata
fatta per permettere allutente di non dover faticare per fare lazione desiderata, prevedendo in anticipo quale sarà il risultato di ogni sua mossa. Tutto
4
questo è stato ottimizzato dai Fragment, che migliorano luser experience e
diminuiscono la complessità temporale e spaziale dellapplicazione. Inoltre,
anche la parte grafica sarà semplice ed elegante, per non disorientare lutente
con aspetti inutili e non necessari.
Passando allo storage, Il nostro Database è formato da 3 tabelle finali:
Users, News e Vote. La tabella users ha come attributi lusername, la password, il ruolo (Amministratore o utente, alla creazione sempre utente), la
percentuale e il nome. La tabella news ha come attributi il titolo e il valore
di verità. La tabella vote ha come attributi il voto, lusername e il titolo.
Username e titolo sono le chiavi private delle precedenti tabelle, formando
cosı̀ una relazione ternaria. La chiave primaria della tabella vote è quindi
formata dalla chiave primaria della tabella degli utenti, più la chiave primaria
della tabella delle notizie.
Questo database non è costruito con il classico modello Java ma è Online, in modo da avere i dati condivisi tra tutti gli utenti su ogni device. Le
richieste HTTP al db vengono fatte con Volley, libreria che rende le connessioni con Android facili e soprattutto veloci.
Infine, è necessario specificare quali pattern sono stati utilizzati allinterno
dellapplicazione, al fine di capire meglio larchitettura usata:
• Singleton: Serve a garantire che venga creata una e una sola istanza,
fornendo un punto di accesso globale ad essa. In questo caso, listanza
identifica un gestore delle richieste al web server che accede al database
nel quale sono salvati i dati;
• Observer-Observable: Viene usato per segnalare la ricezione dei
messaggi dal database. Infatti, gli Observers, verranno avvertiti quando
ci sarà un cambiamento, in modo che possano gestire la propria interfaccia (es. classifica, amministrazione, ecc);
4
Autovalutazione e testing dellapplicazione:
La valutazione dellapplicazione è stata fatta con un introspezione: sono stati
scelti svariati utenti, tra cui amici, familiari e colleghi per vedere cosa non
capivano, cosa mancava o se ci fosse qualcosa di poco chiaro. Le tipologie di
5
utente sono state scelte appositamente: lintero gruppo di testing era infatti
composto da persone esperte nellarte della programmazione mobile e da altri
che erano in difficoltà a mettere il proprio cellulare in modalità silenziosa.
In molti casi, questo tipo di analisi è stato utile e ha dato alcune idee per
lapplicazione (alcune implementate, altre no).
Inoltre, oltre ad un numero cospicuo di funzioni e ad unefficacia perfetta, unapplicazione deve poter garantire una buona resistenza ai malfunzionamenti sotto ogni condizione di utilizzo. Per poter garantire questa affidabilità, è stato necessario pianificare unattenta strategia di testing, mirata
allautomatizzazione.
Per i motivi sopra elencati, sono stati effettuati anche test tecnici con le
quali sono state controllate la maggior parte delle funzionalità principali.
Dato che la fase di testing deve poter trovare la propria collocazione nel
processo che conduce dallidea iniziale alla distribuzione al pubblico, è stato
deciso di effettuarlo in modo parallelo allo sviluppo, utilizzando la filosofia di
programmazione detta Test Driven Development, in modo da permettere
al testing di guidare lo sviluppo, cosı̀ che lobbiettivo primario del codice sia
quello di superare i test.
Tutto questo ha portato a dei grossi vantaggi, poichè il codice è sempre
stato verificato su più valori (minimizzando quindi la possibilità di errore) e
i test sono ripetibili via via che la progettazione avanza.
Passando alla praticità di quanto detto, i test sviluppati sono di due tipi:
• I Test Unitari, che si occupano di testare una singola funzionalità o
classe, valutandone il lavoro isolatamente e sviluppati grazie alla libreria JUnit4.
• Gli Integration Test, che verificano lazione congiunta di più elementi, sviluppati grazie ad Espresso. Questo framework creato da
Google, è stato ideato per testare le interfacce grafiche, ed essendo
molto elastico ha preso piede tra gli sviluppatori android, motivo per
cui è diventato parte dellAndroid Testing Support Library.
6
Inoltre, dopo un breve studio, Espresso offre delle potenzialità altissime:
è possibile infatti simulare linterazione con una view o oggetto, chiamando il metodo onView(), o utilizzare gli elementi integrati in un
AdapterView, con il metodo OnData().
Tuttavia, è necessario utilizzare il metodo perform() per effettuare l
azione vera e propria.
7
In conclusione, questo progetto ha portato ad imparare a lavorare con
i dispositivi mobili, lavorando inoltre su unapplicazione che sarà utile
per la nostra tesi di laurea e, con un po di fortuna, anche dopo. Proprio
per questo motivo, tutto il codice è strutturato in maniera modulare, in
modo che in futuro si possa rispondere con facilità allimplementazione
di funzionalità aggiuntive. Inoltre, i metodi più importanti presentano una documentazione scritta secondo gli standard dei JavaDoc,
in modo da minimizzare il tempo perso a rileggere il codice per capirlo
nella sulla interezza.
8