Applicazioni mobili: strumenti, costi soluzioni e peformance
Problemi di progettazione in applicazioni mobili: uno studio empirico
-
Upload
carlo-branca -
Category
Software
-
view
70 -
download
0
Transcript of Problemi di progettazione in applicazioni mobili: uno studio empirico
Problemi di progettazione in applicazioni mobili: uno studio empirico
RelatoreChiar.mo Prof. Andrea De Lucia
CandidatoCarlo Branca
Università degli Studi di SalernoDipartimento di Scienze Aziendali
Management & Innovation Systems
Laurea Magistrale in Tecnologie Informatiche e Management
Anno Accademico 2015-2016
2
INIZIO
BACKGROUND
RISULTATISTUDIO EMPIRICO
CONCLUSIONI
SVILUPPI FUTURI
FINE
Struttura della presentazione
BACKGROUND
44
Introduzione
Il ciclo di vita di un sistema software non termina alla consegna del prodotto. Bensì, continua finché il software rimane in uso.
All’applicazione da parte degli sviluppatori di scelte errate alla risoluzione di problemi è stato dato il nome di code smell.
Per mantenere la sua utilità, un sistema software deve essere sottoposto a continui cambiamenti.
Continui cambiamenti portano profonde modifiche al design originario. Di conseguenza, la qualità del codice rischia di peggiorare.
5
Bad Code Smells are symptoms of poor
design or implementation choices.
- Martin Fowler
Code smell
66 Code smell
I code smell non sono e non rivelano bug, né producono errori in compilazione.
Sono debolezze nel codice sorgente che riducono la qualità del codice.
Indicano la presenza di cattive scelte di design o di implementazione.
Cosa sono nello specifico?
7Code smell
BlobBassa coesione tra attributi e metodi
Extract Class Refactoring
SOLUZIONE
CONSEGUENZE
SINTOMI
Gran numero di attributi e metodi
Classe che monopolizza i processi
Difficile da comprendere e modificare
Troppo complessa da testare e riusare
Perdita dei vantaggi dell’object-orientation
Un esempio:
8
Studi empirici condotti in letteratura hanno dimostrato
che la presenza di smell porta a diversi problemi:
Ciò porta inevitabilmente ad un aumento dei
costi. Si stima che che i costi di manutenzione
vanno da 2 a 100 volte i costi di sviluppo!
Pertanto, il problema è rilevante e va affrontato.
Code smell
99 Metodi di identificazionedi code smell
INFORMAZIONI STRUTTURALI
RULE_CARD: Long_Method {RULE: Metric LOC_METHOD(VERY_HIGH, 100)
}
DECOR
Rule card per l’identificazione di Long Method
In letteratura sono stati presentati strumenti per l’identificazione di smell. Questi si basano per lo più sull’analisi di informazioni strutturali.
1010
INFORMAZIONI STORICHE
HIST
Algoritmo di detection per il Blob
Una classe è affetta da Blob se è coinvolta in più dell’8% del totale dei commit eseguiti dagli sviluppatori.
Metodi di identificazionedi code smell
INFORMAZIONI STRUTTURALI
Molti code smell sono intrinsecamente caratterizzati da come gli elementi cambiano nel tempo piuttosto che da proprietà strutturali.
Negli ultimi anni è stato proposto l’utilizzo di informazioni storiche (le quali si basano, ad esempio, sull’analisi della frequenza dei cambiamenti di una classe).
1111 Metodi di identificazionedi code smell
INFORMAZIONI TESTUALI
public void insert(User pUser) {
connect = DBConnection.getConnection();
String sql = "INSERT INTO USER"+ "(login, first_name, last_name, password"+ ",email, cell, id_parent) " + "VALUES ("+ pUser.getLogin() + ","+ pUser.getFirstName() + ","+ pUser.getLastName() + ","+ pUser.getPassword() + ","+ pUser.getEMail() + ","+ pUser.getCell() + ","+ pUser.getIdParent() + ")";
String sql = "DELETE FROM USER"+ "WHERE id_user = "+ pUser.getId();
}
TACO
Identificazione di un Long Method
Il terzo ed ultimo metodo si basa sull’analisi della “semantica” del codice sorgente.
INFORMAZIONI STORICHE
INFORMAZIONI STRUTTURALI
12
Android quality smell
Un quality smell indica la presenza di una cattiva scelta di programmazione
che influisce negativamente su specifici requisiti di qualità, e può essere
corretta attraverso delle operazioni di refactoring.
La natura delle applicazioni mobili ha portato all’introduzione
di un nuovo catalogo di code smell specifico per la piattaforma
Android.
Code smell
13
Hanno a disposizione una quantità di risorse limitate
Memoria RAM, spazio di archiviazione e carica di
batteria sono risorse preziose.
Sono soggette a frequenti aggiornamenti
I numerosi aggiornamenti possono minare la
comprensibilità e la manutenibilità del codice.
Sono più piccole rispetto ai sistemisoftware tradizionali
Nella maggior parte dei casi, le applicazioni mobili
sono composte da un numero ridotto di classi ed
implementano poche funzionalità.
Applicazioni mobili
STUDIO EMPIRICO
15
Valutare l’impatto dei code smell sulla
propensione a contenere difetti da parte
delle classi affette da problemi di
progettazione.
Analizzare la diffusione di 20 code smell
(8 tradizionali e 12 Android-specific),
all’interno di 10 applicazioni mobili open-
source.
Design dello studio empirico
RQ1: in che misura i code smell sono diffusi nelle applicazioni mobili?
RQ2: come varia la propensione delle classi affette da problemi di progettazione rispetto alla propensione a contenere difetti?
RQ3: i detector finora sviluppati in letteratura sono capaci di identificare correttamente code smell in ambito mobile?
16
Dataset
ApplicazioniNumero di
packageNumero di
classiNumero di
metodiLinee di codice
Linee di codice effettive
AcDisplay 66 244 2.100 42.813 24.053 (56%)
AdAway 6 53 342 9.235 5.218 (57%)
FBReader 81 638 4.775 76.504 48.053 (63%)
FrostWire 20 160 1.872 26.660 17.099 (64%)
K-9 Mail 27 266 3.513 66.898 46.198 (69%)
Open GPS Tracker 14 66 948 22.730 14.376 (63%)
Replica Island 1 141 1.197 30.927 20.416 (66%)
Sipdroid 7 75 826 16.830 10.553 (63%)
SMS Backup+ 16 79 587 8.888 5.457 (61%)
WordPress 43 411 5.587 89.242 61.443 (69%)
Totale 281 2.133 21.747 390.727 252.866 (65%)
Per lo studio sono state prese in considerazione 10 applicazioni Android open-source tratte dal catalogo F-Droid.
1717
1 Identificazione delle componenti potenzialmente affette da smell
Validazione manuale delle componenti identificate
Analisi della distribuzione e delle co-occorrenze tra code smell
2
3
𝐶𝑜 − 𝑜𝑐𝑐𝑜𝑟𝑟𝑒𝑛𝑧𝑒𝑡𝑖,𝑡𝑗 =| 𝑡𝑖 ∧ 𝑡𝑗 |
| 𝑡𝑖 |
RQ1: in che misura i code smell sono diffusi nelle applicazioni mobili?
Metodologia
Dove | 𝑡𝑖 ∧ 𝑡𝑗 | è il numero di volte in cui lo smell 𝑡𝑖
compare con 𝑡𝑗, e | 𝑡𝑗 | è il numero di occorrenze di 𝑡𝑖.
18
Estrazione delle informazioni relative a bug risolti sul sistema di versioning
Matching tra bug-fixing issue e classi dei sistemi in esame
Calcolo della propensione a contenere difetti delle classi affette (e non) da code smell
𝐹𝑎𝑢𝑙𝑡 − 𝑃𝑟𝑜𝑛𝑒𝑛𝑒𝑠𝑠(𝐶𝑖 , 𝑟𝑖) = σ𝑏𝑓(𝐶𝑖)
Metodologia
RQ2: come varia la propensione delle classi affette da problemi di progettazione rispetto alla propensione a contenere difetti?
1
2
3
La predisposizione ai difetti di una classe 𝐶𝑖 in una
determinata release 𝑟𝑖 è uguale alla somma delle attività
di bug-fixing alla quale 𝐶𝑖 è stata sottoposta nel periodo
compreso tra le release 𝑟𝑖−1 e 𝑟𝑖.
1919
Esecuzione dei detector sul dataset in esame
Confronto tra risultati e oracoli prodotti nel contesto della RQ1
Calcolo delle prestazioni in termini di precisione recall
Metodologia
RQ3: i detector finora sviluppati in letteratura sono capaci di identificare correttamente code smell in ambito mobile?
1
2
3
Dove Correct rappresenta l’insieme di true positive definiti manualmente e Detected è l’insieme di truepositive rilevati dai detector.
𝑟𝑒𝑐𝑎𝑙𝑙 =| 𝐶𝑜𝑟𝑟𝑒𝑐𝑡 ∩ 𝐷𝑒𝑡𝑒𝑐𝑡𝑒𝑑 |
𝐶𝑜𝑟𝑟𝑒𝑐𝑡%( 1 )
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 =| 𝐶𝑜𝑟𝑟𝑒𝑐𝑡 ∩ 𝐷𝑒𝑡𝑒𝑐𝑡𝑒𝑑 |
𝐷𝑒𝑡𝑒𝑐𝑡𝑒𝑑%( 2 )
𝐹 −𝑚𝑒𝑎𝑠𝑢𝑟𝑒 = 2 ∗𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 ∗ 𝑟𝑒𝑐𝑎𝑙𝑙
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 + 𝑟𝑒𝑐𝑎𝑙𝑙%( 3 )
RISULTATI
21
Risultati
RQ1: in che misura i code smell sonodiffusi nelle applicazioni mobili?
Tradizionali92
Android-specific
1851
Code smell rilevatiIl numero di istanze di code
smell tradizionali rappresenta soltanto il 5% delle istanze
Android-specific.
Tradizionali Numero di istanze
Long Method 37 (0.17% dei metodi)
Blob 14 (0.65% delle classi)
Class Data Should Be Private 12 (0.56% delle classi)
Android-specific Numero di istanze
Member-Ignoring Method 239 (1.1% dei metodi)
Leaked Inner Class 101 (4.7% delle classi)
No low Memory Resolver 95 (42% delle classi core)
I tre code smell Android-specific più
diffusi sono legati alla cattiva gestione
della memoria.
Long Method, Blob e CDSP sono smell
legati alla size delle componenti.
CODE SMELL PIÙ DIFFUSI
22
Risultati
CO-OCCORRENZE TRA SMELL
Tradizionali %
Blob – Spaghetti Code 71
Complex Class – Promiscuous Package 50
Blob – Feature Envy 33
È interessante notare che i code smell
che co-occorrono più frequentemente
hanno caratteristiche in comune.
Android-specific %
Member-Ignoring Method – Durable WakeLock 95
Member-Ignoring Method – Leaked Inner Class 83
Member-Ignoring Method – Internal Getter/Setter 81
RQ1: in che misura i code smell sonodiffusi nelle applicazioni mobili?
Nel caso dei code smell Android-specific, si
evince che la gestione della memoria è un
aspetto a cui gli sviluppatori ancora non
danno la giusta importanza.
23
Risultati
RQ2: come varia la propensione delle classi affette da problemi di progettazione rispetto alla
propensione a contenere difetti?
Code smellNumero medio di bug
nelle classi smellyNumero medio di bug nelle classi non smelly
Tradizionali 34 58
Android-specific 498 238
Tradizionali Media Android-specific Media
Affette da 1 smell 16.50 Affette da 1 smell 219.80
Affette da 2 smell 8.60 Affette da 2 smell 159.40
Non affette da smell 4.60 Affette da 3 smell 58.0
La presenza di smell Android-specific
influenza notevolmente la propensione
a contenere difetti. Risultato opposto
con i code smell tradizionali.
La presenza di più code smell nella
stessa classe non influenza la
propensione a contenere difetti.
24
Code SmellDECOR
F-Measure (Precision – Recall)TACO
F-Measure (Precision – Recall)
Blob 38.10% (28.57% - 57.14%) 35% (21.21% - 100%)
Feature Envy 0.27% (0.13% - 100%) 0.22% (0.11% - 100%)
Long Method 56.06% (38.95% - 100%) 36.84% (24.35% - 75.68%)
Promiscuous Package 22.95% (12.96% - 100%) 29.79% (17.50% - 100%)
Risultati
RQ3: i detector finora sviluppati in letteratura sono capaci di identificare correttamente codesmell in ambito mobile?
CONCLUSIONI
26
Conclusioni
SVILUPPI FUTURI
28
Sviluppi futuri
Analizzare un maggior numero di applicazioni mobili
Replicare lo studio con un numero maggiore di code smell
Utilizzare altri smell detector proposti in letteratura
Migliorare le performance dei detector utilizzati
Definizione di un detector in grado di identificare i code smell Android-specific
Grazie per l‘attenzione
20 Luglio 2016 Carlo Branca