Problemi di progettazione in applicazioni mobili: uno studio empirico

29
Problemi di progettazione in applicazioni mobili: uno studio empirico Relatore Chiar.mo Prof. Andrea De Lucia Candidato Carlo Branca Università degli Studi di Salerno Dipartimento di Scienze Aziendali Management & Innovation Systems Laurea Magistrale in Tecnologie Informatiche e Management Anno Accademico 2015-2016

Transcript of Problemi di progettazione in applicazioni mobili: uno studio empirico

Page 1: 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

Page 2: Problemi di progettazione in applicazioni mobili: uno studio empirico

2

INIZIO

BACKGROUND

RISULTATISTUDIO EMPIRICO

CONCLUSIONI

SVILUPPI FUTURI

FINE

Struttura della presentazione

Page 3: Problemi di progettazione in applicazioni mobili: uno studio empirico

BACKGROUND

Page 4: Problemi di progettazione in applicazioni mobili: uno studio empirico

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.

Page 5: Problemi di progettazione in applicazioni mobili: uno studio empirico

5

Bad Code Smells are symptoms of poor

design or implementation choices.

- Martin Fowler

Code smell

Page 6: Problemi di progettazione in applicazioni mobili: uno studio empirico

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?

Page 7: Problemi di progettazione in applicazioni mobili: uno studio empirico

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:

Page 8: Problemi di progettazione in applicazioni mobili: uno studio empirico

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

Page 9: Problemi di progettazione in applicazioni mobili: uno studio empirico

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.

Page 10: Problemi di progettazione in applicazioni mobili: uno studio empirico

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).

Page 11: Problemi di progettazione in applicazioni mobili: uno studio empirico

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

Page 12: Problemi di progettazione in applicazioni mobili: uno studio empirico

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

Page 13: Problemi di progettazione in applicazioni mobili: uno studio empirico

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

Page 14: Problemi di progettazione in applicazioni mobili: uno studio empirico

STUDIO EMPIRICO

Page 15: Problemi di progettazione in applicazioni mobili: uno 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?

Page 16: Problemi di progettazione in applicazioni mobili: uno studio empirico

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.

Page 17: Problemi di progettazione in applicazioni mobili: uno studio empirico

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 𝑡𝑖.

Page 18: Problemi di progettazione in applicazioni mobili: uno studio empirico

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 𝑟𝑖.

Page 19: Problemi di progettazione in applicazioni mobili: uno studio empirico

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 )

Page 20: Problemi di progettazione in applicazioni mobili: uno studio empirico

RISULTATI

Page 21: Problemi di progettazione in applicazioni mobili: uno studio empirico

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

Page 22: Problemi di progettazione in applicazioni mobili: uno studio empirico

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.

Page 23: Problemi di progettazione in applicazioni mobili: uno studio empirico

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.

Page 24: Problemi di progettazione in applicazioni mobili: uno studio empirico

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?

Page 25: Problemi di progettazione in applicazioni mobili: uno studio empirico

CONCLUSIONI

Page 26: Problemi di progettazione in applicazioni mobili: uno studio empirico

26

Conclusioni

Page 27: Problemi di progettazione in applicazioni mobili: uno studio empirico

SVILUPPI FUTURI

Page 28: Problemi di progettazione in applicazioni mobili: uno studio empirico

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

Page 29: Problemi di progettazione in applicazioni mobili: uno studio empirico

Grazie per l‘attenzione

20 Luglio 2016 Carlo Branca