Progetto EQS

Page 1

FRANCESCOCOSIMOMAZZITELLI-399000532

PIOANTONIOPERUGINI-399000545

ERMANNONICOLETTI-399000540

DONATOGUERRERA-399000533

ACHILLEMELILLO-399000541

ABSTRACT

Ilseguentearticolo,prodottoperilcorsodiLaureaMagistrale "EvoluzioneeQualitàdelsoftware"inIngegneriaInformatica dell’UniversitàdegliStudidelSannio,siponecomeobiettivo quellodianalizzaredellemetrichedimanutenibilitàequalità divarisistemisoftware,utilizzandotoolopensource.L’utilità principaleditalelavoroèquelladiforniresupportoadun futuroteamdimanutenzione,agevolandoinquestomodole operazionipreliminaridicomprensionedeisistemi,tramite unapanoramicailpiùdettagliatapossibile.L’analisiviene realizzatasiadalpuntodivistaquantitativo,attraversouna primafasediestrazionedellemetriche,siadalpuntodivista qualitativo,andandoafaredelleconsiderazionisuirisultati ottenutietraendonedelleconclusionisuisistemi.

1 INTRODUZIONE

Colpassaredegliannisiècapitocomeunprodottosoftware, implementatoexnovodaun’azienda,potesseentrareafar partedelproprioassetstrategicoecometalecuratoegestito nellamigliormanierapossibile.Questohaportatoaduna nuovaesigenza,nonpiùsviluppareprodottinuoviall’occorrenza,maevolvereemanutenerequelliesistenti.Ilpuntodi svoltaèrappresentatodall’adozionedisistemiinformativi chepermettanolaraccolta,lamemorizzazioneeladistribuzionedidatieinformazioniasupportodelleattivitàaziendali, tracuiquelledecisionali,dicoordinamentoedicontrollo. L’evoluzionedelsoftwarecorrispondeallosviluppocontinuo diunsistemadopoilsuorilascioiniziale.Questemodifiche nonvengonoeffettuatesoloperrisolvereproblemirelativi alcorrettofunzionamento,maanchepersoddisfareleesigenzedeicommittenti,chespazianodall’introduzionediun nuovorequisitofunzionaleacambiamentirelativiall’esteticadell’applicazione.Altremotivazioniperlaqualevengono effettuaticambiamentisono:

- l’esigenzadiseguirel’evoluzionedelmercato;

- l’esigenzadiagevolareillavorodeimanutentori;

- l’esigenzadiadeguarsiallevariazionidinaturalegislativaenormativa.

L’evoluzionedelsoftwareedilsuosviluppoinitinereèdivenutoquindiunprocessofondamentalepergarantiregli

elevatilivellidiqualitàrichiestidalleaziendeedagliutenti finali.Garantirecheilprodottofinalesiadiqualitànonè banaleacausadi:

- codesmells; - mancanzadiunadocumentazionepuntuale; - pratichediprogrammazionepocoortodosse; - mancatoadeguamentoaglistandardinvigoreedai designpatterns.

Ilconcettodimanutenzioneèstrettamentecorrelatoaquello dievoluzioneinquantoèdefinibilecomeunaseriediinterventieffettuatidurantelosviluppoedopoilrilasciodel software.Esistonoquattrotipologiedimanutenzione,una perognipossibilecategoriadicambiamento:

• Manutenzione preventiva:modifichedelsoftwarerealizzateprimachesiverifichiunproblema,conilfine diridurrel’entropiadelsistemaerenderepiùagevoli futurilavoridimanutenzione;

• Manutenzione correttiva:modificadelsoftwareper risolvernedifettinelfunzionamento;

• Manutenzione adattiva:modificadelsoftwarepermantenereilsistemautilizzabilenell’ambienteincuièimmerso,conlaconsapevolezzachequest’ultimoèin continuaevoluzione;

• Manutenzione perfettiva:modificadelsoftwareper introdurrenuovefunzionalitàsurichiestadelcommittente.

Inuncontestoaziendale,leattivitàdimanutenzionesonole piùcostoseinterminididenaroedirisorseinquanto,solitamente,ilteamdimanutenzioneècaratterizzatodapersonale chedeveabbandonaretemporaneamentelepropriemansioni consuccessivorallentamentodiquesteultime.Aseguitodi questapremessaèintuibilecomelamanutenzionesiaun’attivitàcriticainquantodipendentedalgradodiconoscenza delsistemadapartedelmanutentore.Alfinediagevolarela conversionedi conoscenzaimplicita,mantenutadalsingoloin conoscenzaesplicita,condivisacontutti,vengono utilizzatideitoolsingradodisintetizzareleinformazioni salientidiuninterosistemainmetriche,ognunacalcolata secondospecificicriteri.

ProgettoEvoluzioneequalitàdelsoftware

Loscopodiquestoprogettoè,perl’appunto,quellodiimparareadutilizzareiprincipalitoolopensourcecheconsentonodianalizzare,tramitel’utilizzodimetriche,lastoriadi unprogettopubblicatosuunrepositoryGITeditracciarne l’evoluzione.

2 TOOLSUTILIZZATI

Inquestoprogettosonostatiutilizzatitretoolsopensource differenti:

• CK

• Nicad6

• SonarQube

Iltool CK èunostrumentoingradodiestrarredellemetriche daunprogettofacendoneun’analisistaticaperagevolare ilteamdimanutenzionedurantelafasediProgramComprehension.Quest’ultimaèimportanteperchèpermettedi verificarelostatodimanutenibilitàdelsistemaediiniziare aformulareunaprimastimadeicostiedellerisorseumane necessarieall’attuazionedellemodifiche.Andandopiùnello specifico,lemetricheestrattedalsoftwaresono:

• WMC (WeightedMethodperClass):complessitàciclomaticadiMcCabe:rappresentailnumerototaledi istruzionibranchinunaclasselungotuttiimetodi.

N=Numerodimetodiimplementatinellaclasse C=Complessitàciclomatica SogliaWMC<=14

• DIT (DepthInheritanceTree):distanzamassimadiun nodo(oclasse)dallaradicedell’alberorappresentante lastrutturaereditaria.

N=Numeromassimodilivellidell’alberogerarchico delleClassi

L=LivellitralaClasseoggettodimisurazioneeil livelloprecedente Soglia1<=DIT<=7

Piùèaltoilsuovalorepiùsignificachesistasfruttandol’ereditarietàequindisirischiadiaumentarela complessitàdiletturadelcodice.

• NOC (Numberofchildren):numerodisottoclassiimmediatamentesubordinateadunadeterminataclasse appartenenteall’alberodiereditarietà.

SogliaNOC<=3

• CBO (CouplingBetweenObjectclass):misural’accoppiamentotraunaclasseelealtrepresentinellastruttura internadell’applicazione. �� ∑︁ �� =1 ���� (3)

N=Numerodelleclassinonappartenentiallagerarchiadiereditarietà C=Classecorrelata SogliaCBO<=2

• CBO_MODIFIED (Couplingbetweenobjects):conta ilnumerodidipendenzediunaclasseedèmoltosimile alCBOoriginalediCKTool.Tuttavia,questametrica consideraunadipendenzadaunaclassecomesiairiferimentidiuntipoversoglialtri,siairiferimentiche ricevedaaltritipi.

• RFC (ResponseforaClass):numerodielementiche possonoessererichiamatiinrispostaadunmessaggio ricevutodaundeterminatooggettoomandatodaun metododellaclassestessa.

�� + �� (4)

M=Numerodeimetodidellaclasse

R=Numerodeimetodichiamatiattraversol’intero alberodellechiamate SogliaRFC<=(WMC*DIT)+1

• LCOM (LackofCohesioninMethods):gradodicoesionetraimetodidiunaclassetramiteleproprietà strutturaliutilizzatedaglistessi.

• LCOM* (LackofCohesioninMethods):questametricaèunaversionemodificatadell’attualeversionedi LCOMimplementatainCKTool.LCOM*èunametrica normalizzatachecalcolalamancanzadicoesionedella classeinunintervalloda0a1.

• NOSI (Numberofstaticinvocations):numerodiinvocazionideimetodistatici.

• TCC (TightClassCohesion):misuralacoesionetrale classiinunrangedivaloritra0e1.Lacoesioneviene misurataattraversoleconnessionidirettetraimetodi visibili.

�� ∑︁ �� =1 ���� (1)
�� ∑︁ �� =1 ���� (2)
2

• LCC (LooseClassCohesion):simileaTCCmainclude ancheilnumerodiconnessioniindirettetraleclassi visibiliperilcalcolodellacoesione.Questosignifica cheèsempreveral’espressioneLCC>=TCC.

• LOC (Linesofcode):numerodellerighedicodicepresentinelprogetto

modificheapportate.IfileprodottiinoutputsonodegliXML chevengonopoirielaboratiperpoterestrarreleseguenti metriche:

• Classid:ordinamentotopologicodelleclassianalizzate;

• Nclones:numerodiclonipresentiall’internodella classe;

• Nlines:numerodilineedicodicepresentinellaclasse;

• Similarity:gradodisimilaritàdeglielementianalizzati;

• Code_ref:riferimentoaglielementianalizzati.

• FAN-IN:numerodelledipendenzeininputdiunaclasse.Adesempio,dataunaclasseX,ilfan-indiXrappresentailnumerodiclassichechiamanoXfacendo riferimentoadessocomeunattributo,accedendoadalcunideisuoiattributi,invocandoalcunideisuoimetodi, ecc.

• FAN-OUT:contailnumerodidipendenzedioutput diunaclasse,ovveroilnumerodialtreclassiacuifa riferimentounaparticolareclasse.

Unavoltasceltoilsistemadaanalizzareedestrattelemetriche,èpossibileutilizzareidatiraccoltinellamanierache siritienepiùopportuna.InFig.1èmostratounapossibile analisidellemetricheCKandandoneavederel’andamento neltempo.

Tramitel’analisideiclonièpossibileindividuaredelcodice replicatochepotrebbeinqualchemodoostacolareleattivitàdimanutenzione.Noncisonoinformazionisufficientiin letteraturaperdecretareselapresenzadeiclonièdannosao menoinquanto,sedaunlatovelocizzaleattivitàdisviluppo,consentendoilriutilizzodicodicegiàscritto,dall’altro rallentaleattivitàdimanutenzioneperché,quandovièla necessitàdieffettuareunamodificasudelcodiceclonato,la stessadeveesserepropagataatuttiicloni.

Esistonotretipologiedicloni:

• TYPE-1clones:frammentidicodiceidenticiadeccezionedivariazionideglispazibianchiedeicommenti;

• TYPE-2clones:frammentidicodicestrutturalmente esintatticamenteidenticiadeccezionediidentificatori, literals,tipi,layoutecommenti;

• TYPE-3clones:frammentidicodicecopiaticondelle variazionisemantichecomel’aggiuntaolarimozione divariabiliodiinteristatements.

Letipologiesopraelencaterientranonellacategoriadeicloni cosiddetti sintattici,inquantopresentanounastrutturain comunebenidentificabile.Aquestisiaggiungeunaquarta tipologia,iclonicosiddetti semantici odi TYPE-4 iqualinon hannoevidentesomiglianzadaunpuntodivistasintatticoma espletanolemedesimefunzionalitàsebbenescrittiinmaniera differente.

Iltool SonarQube èunostrumentoingradodiestrarremetricherelativeatuttoilprogettodicuiperòcisiconcentrerà solosulTechnicalDebteilnumerodiCodeSmells.

Fig.1.Esempiodell’andamentodimetrichecalcolateconiltoolcksul sistemaopensourceLog4j2inrelazioneaicommit.

Iltool nicad6 èunostrumentoingradodiestrarreinformazionirelativeallapresenzaomenodicloniinunprogramma inmododaconsentirealteamdimanutenzionedicapire rapidamenteversoqualiclassiometodipropagarelestesse

Il TechnicalDebt odebitotecnicoindividuaunasoluzione temporaneaepocofrequente,introdottanelcodicesorgente perrisolvererapidamenteunproblemacheostacolailrilascio delsoftwareadiscapitodellaqualità.Ilteamdimanutenzione devequindiindividuarerapidamenteipezzidicodicecon elevatoTechnicalDebterisolverequantolasciatoinsospeso. SonarQubeèingradodiquantificareiltemponecessarioper apportareunamodificaadunaporzionedisorgenteaffettada TechnicalDebtingiornatelavorative,inmododafornirenon

∑︁ �� =1 ���� (5) L=Numerodirighedicodice
3

soloun’indicazionediquantosiacomplicatalarisoluzione delproblemamaanchedellelineeguidaasupportodelle attivitàdipianificazioneedischeduling.

Fig.2eFig.3mostranocomesipresental’interfacciawebdi SonarQube.

Fig.2.DashboardSonarQubeperunprogettodiesempio:Log4j2

Fig.3.RisultatiemetricheSonarQubeperunprogettodiesempio:Log4j2

4

ARCHITETTURADELPROGETTO

Finitalapanoramicaintroduttivasull’obiettivodelprogetto esuitoolsutilizzati,sipassaallaparteriguardanteilcasodi studioveroeproprio.Comeprimopassosièresonecessario costruireun’applicazionecheautomatizzassegranpartedel processodianalisi,inmododarendereiltuttopiùsemplice erapido.

L’applicazionepresentaunastrutturaalayer: - Unlayerrelativoallapartedibackend - Unlayerrelativoallapartedifrontend

ComesipuònotaredallaFig.4,adognicomponentedellayer dibackendcorrispondeunodeitoolutilizzati.Questivengono chiamatidaiwrapperche,attraversounalibreriapythonchiamata"subprocess",siinterfaccianoconilsistemaoperativo, rendendopiùagevolelaloroesecuzioneindipendentemente dallinguaggioincuisonoscritti.

Fig.4.Architetturadelprogetto

3
5

Nellayerdibackendsonocondensatetuttelefunzioniprincipalidelsistemaovveroiwrapperdeitoolutilizzati.Ogni wrappersioccupadiautomatizzareiltoolcorrispondentee dimanipolarnel’output:

• git_ck_wrapper:wrappercheautomatizzacompletamenteiltoolCKeleoperazionidicheckoutsuGIT. Comeprimopassovengonoprelevateleinformazionirelativealrepositorydaanalizzaredaunfile"settings.json"evieneeffettuatoilclonedaGIT.Successivamentevengonoestrattituttiicommitdalrepositorye filtratipermeseeannopergenerareuncampionesignificativo.Vienepoieffettuato,perognicommitestratto, uncheckoutdelrepositoryinmododaapplicareicambiamentiognivoltacheèstatorealizzatounpushnel commitedinfineeseguitoiljarincuièincapsulato CK.Lemetricheestratte,attraversoilmodulo metrics, vengonocondensateinununicoCSVcheponesulle righeicommit,sullecolonnelemetricheeinognicella lamediadellametricapercommit.Questeinformazioni verrannopoirielaboratedalfrontend;

• nicad_wrapper:wrapperutilizzatoperestrarredelle metriche"homemade"daifileXMLprodottiinoutput danicad6.Ilfunzionamentodiquestomoduloprevede chevenganoinseritinellacartella"nicad_input"ifile class.xmlottenutidanicad6,venganoestratteleinformazionidiinteresselequalipuoisarannosalvatein unfileCSVperagevolarelesuccessiveoperazionidi analisieffettuatedalfrontend;

• sonarqube_wrapper:wrapperutilizzatoperautomatizzarel’utilizzodeltoolSonarQube.Perfarpartire SonarQubeènecessariosfruttareilmultiprocessingdi python,inquantobisognamandareinesecuzionesia sonar-server,siasonar-scanner.Ilprimoospital’esecuzionedeltool,ilsecondosioccupadiandareadanalizzareilprogettoinquestione,clonatodaGITedinserito nellacartellabin,andandoarecuperarneleinformazionitramiteunfilepropertiesgeneratoautomaticamente conlaseguentestruttura:

- sonar.projectKey = nomecartelladelprogettoda analizzare

- sonar.projectName = nomecartelladelprogettoda analizzare

- sonar.sources = percorsocartellabindisonar-scanner

- sonar.java.binaries =.

- sonar.scm.disabled = true

Unavoltafinital’operazionediestrazionevieneautomaticamenteapertaunafinestradelbrowserchemostrai risultatisulserverconlasuainterfacciagrafica.

Nellayerdifrontendsonoinvececondensatelefunzioni chesioccupanodellapresentazionedeidatiedelflowdel programma:

• analysis:modulocherecuperaleelaborazionideiwrapper,effettuailplotdeigraficieriorganizzaleinformazioni;

• main:modulocheorganizzailflussodieventitramite chiamateallefunzionidianalysisedelbackend.

4 ANALISIQUANTITATIVA

Sonostatioggettodistudiocinqueprogettiopensourceprelevatidagithub,tuttiscrittiinJavainmododapotereffettuare un’analisipiùsignificativagrazieall’omogeneitàdeiprogetti campione.

Segueunadescrizionediciascunprogettoesaminato.

• jfree/fxgraphics2d:FXGraphics2Dèun’implementazionedell’APIGraphics2DdiJavadestinataaJavaFX Canvasperlacostruzionedigrafici.ConsentediriutilizzareilcodiceJava2Desistenteinun’applicazione JavaFX.

• atlanmod/Commons:questalibreriaèuninsiemedi classiemetodicomuni,tracui:

– lazyobjectseriferimentiperilcaricamentosurichiestaelamemorizzazionenellacachelocale; – unloggerasincrono; – unwrapperperlamemorizzazionenellacache,utilizzandoCaffeine;

– unwrapperperl’hashing,utilizzandol’hashingad allocazionezero; – unwrapperperlaserializzazione,utilizzandoFST; – classidiutilitàsuprimitive,raccolte,interfaccefunzionali,concorrenza,reflection...

Èstatocreatoperraggruppareecondividereclassi,metodi,dipendenzetraidiversiprogettidelteamAtlanmodeperfacilitarel’aggiornamentosenzainterferire conaltriprogetti.

• apache/dubbo-samples:questorepositorycontiene unaseriediprogettiperillustrarevariusidiDubboda quellidibaseaquellipiùavanzati.ApacheDubboèun frameworkRPCopensourcebasatosuJava.

• square/retrofit:repositorycontenenteunclientHTTP indipendentedaitipiperAndroideJava.Retrofittrasformaun’APIHTTPinun’interfacciaJava.

• groovy/gmaven:repositorycontenenteunwrapper delbuildtoolApacheMavenperillinguaggiodiprogrammazioneadoggettiGroovy(natocomelinguaggio alternativoaJava).

6

Il primopasso dell’analisihaprevistol’estrazionedellemetrichediprogetto.E’statoquindiutilizzatoilprimomodulo dell’applicazionechehaautomaticamentescaricatoirepository,filtratoicommit,fattoilcheckoutautomaticodelrepositoryperognicommitegeneratolemetricheperogni commitfiltrato.

Sièconstatato,aseguitoditestempiricichealprimocommit analizzatononcorrispondeunpushdicodicesorgente,ma sololacreazionedelrepositorystesso.Questocommitèstato quindirimossodaquellifiltratipermeseeannopergarantire ilcorrettofunzionamentodell’applicazione.

Risultatifxgraphics2d Fig.5.AndamentodellemetricheCKperfxgraphics2d
7

Risultatidubbo-samples

RisultatiCommons

Risultatigmaven

Risultatiretrofit

Il secondopasso dell’analisihaprevistol’estrazionedelle metricherelativeaicloni.E’statoquindiutilizzatoilsecondo modulodell’applicazionechehaconsentitolagenerazionedi fileCSVdisintesiottenutidallaletturadeifileXML

L’analisidelprogetto fxgraphics2d nonhaprodottoclonidi tipo-1ecloniditipo-3masolocloniditipo-2conilseguente risultato:

Fig.6.fxgraphics2d-Cloniditipo2

L’analisidelprogetto commons hainveceprodottotuttele tipologiedicloniconiseguentirisultati:

Fig.7.commons-Cloniditipo1

Fig.8.commons-Cloniditipo2

Fig.9.commons-Cloniditipo3

10

L’analisidelprogetto dubbo-samples haprodottoiseguenti risultati:

Fig.10.dubbo-samples-Cloniditipo1

Fig.11.dubbo-samples-Cloniditipo2

11

Fig.12.dubbo-samples-Cloniditipo3

12

L’analisidelprogetto retrofit haprodottoiseguentirisultati:

Fig.13.retrofit-Cloniditipo1

13
Fig.14.retrofit-Cloniditipo2 14

Fig.15.retrofit-Cloniditipo3

15

L’analisidelprogetto gmaven haprodottosolocloniditipo 2editipo3coniseguentirisultati:

Fig.16.gmaven-Cloniditipo2

Fig.17.gmaven-Cloniditipo3

Il terzopasso dell’analisihaprevistol’estrazionedimetricherelativealtechnicaldebt.E’statoquindiutilizzatoil terzomodulodell’applicazioneche,tramitel’avvioautomaticodisonar-server,avviatosull’indirizzodiloopbacksulla porta9001,edisonar-scanner,haconsentitodivisualizzare lemisuretramiteunwebbrowser.

Fig.18.Analisiquantitativasonarqube

16

L’analisihaprodottoperlemetriche CK irisultatimostrati nellefigure[Fig.19eFig.20].Prendendoinconsiderazione anchequantovistonell’analisiquantitativa,èstatopossibile notarechetuttiiprogetti,presentanounpatternricorrente. Ognivoltacheaumentailnumerodellerighedicodice,si riducel’accoppiamentotraleclassi,indicatodallametrica CBO.Questopattern,contrariamenteaquantosipossapensare,indicachel’aumentodellerighedicodicesiadovutonon tantoall’introduzionedinuovirequisitifunzionali,quanto adinterventidimanutenzionepreventiva,voltiamigliorarelaqualitàcomplessivadelcodiceecontemporaneamente agevolarefuturilavoridimanutenzione.Ilprogettochea seguitodelleanalisihapresentatounvalorediWMC,ovverodicomplessitàciclomaticadiMcCabe,piùelevatoèstato fxgraphics2d.

E’statopossibileosservarecomelacomplessitàciclomatica siadifattoindipendentedalnumerodirighedicodice.Ovviamentepiùunsistemaègrandeepiùaltaèlaprobabilità diavereunaWMCelevata,maanalizzandogliultimitresistemiilpiùgrandedeitre,ovverodubbosamples,presenta unacomplessitàinferiorealpiùpiccoloditutti,ovverogmaven.Ingeneraletuttiisistemirispettanoosonocomunque moltoviciniaivalorisogliaindicatiperognimetricatranne perCBO.Ilsistemafxgraphics2dhapresentatodeivalori diWMCedRFCdigranlungasuperioriallasoglialimite (rispettivamente14e[(WMC*DIT)+1]),diquasiildoppio; rivelandosiessereilpeggioreditutti.

Fig.19.MediadituttelemetricheestratteconiltoolCK

Fig.20.Istogrammarappresentantelatabellaprecedente

5 ANALISIQUALITATIVA
17

Perrendereancorapiùevidentilerelazionitralemetriche analizzateèstatoritenutoopportunocostruiredellematricidi correlazione.Siprestiattenzioneaivaloripresentiall’interno dellecelledellamatrice,inquantoessocorrispondealgrado dicorrelazionetralemetriche.

Adunacorrelazionedirettamenteproporzionaletralemetrichecorrispondeungradopositivochedefiniscelestesse come positivamentecorrelate.Altrimenti,selemetrichein analisiseguonounrapportodiproporzionalitàinversa,il gradomostratoassumevalorenegativoelestessevengono identificatecome negativamentecorrelate

Fig.21.Matricedicorrelazionefxgraphics2d

18

Fig.22.Matricedicorrelazionecommons

Fig.23.Matricedicorrelazionedubbo-samples

Fig.24.Matricedicorrelazioneretrofit

Fig.25.Matricedicorrelazionegmaven

L’analisideicloni,haprodottoperlemetriche Nicad6 iseguentirisultati.Comesipuònotaredaidiagrammiatorta nonèpossibileindividuareunpatternspecifico.

Fig.26.Clonifxgraphics2d

Fig.27.Clonicommons

Fig.28.Clonidubbo-samples

Fig.29.Cloniretrofit

Fig.30.Clonigmaven

21

L’analisihaprodottoperlemetriche sonarqube iseguenti risultati:

Fig.31.Analisiqualitativasonarqubefxgraphics2d

Fig.32.Analisiqualitativasonarqubecommons

22

Fig.33.Analisiqualitativasonarqubedubbo-samples

Fig.34.Analisiqualitativasonarquberetrofit

23

Fig.35.Analisiqualitativasonarqubegmaven

24

Datochel’applicazionesviluppataperautomatizzarel’utilizzodeitoolssuiprogettièugualmenteunprodottosoftware, sièritenutoopportunoeseguirel’interaanalisidescrittafino aquestopuntoanchesuessa,pervalutarneirequisitidiqualitàedimanutenibilità.Adifferenzadeiprogettianalizzati finora,ilfattodiaverlorealizzatocompletamenteinpython nonharesosempliceindividuareinautonomiadeitoolche consentisserodiestrarnemetriche,comenelcasodiCKperi progettijava.E’statoquindiselezionatountoolscrittoinpythonesclusivoperl’analisidiprogettirealizzaticonlostesso linguaggiodiprogrammazionechiamato multimetric Lemetricheanalizzatesonostate:

• cyclomaticcomplexity:complessitàciclomaticadi McCabe; Valoresoglia:complexity<10

• LOC:lineedicodice;

• FANOUT:indicedellechiamateafunzionidialtri moduli;

• maintainabilityindex:indicedimanutenibilità; Valoresoglia:maintainabilityindex<80

• halsteadbugprop:stimadelnumerodierrorinell’implementazione; Valoresoglia:bugprop<0.05

• halsteaddifficulty:stimadelladifficoltàdellacomprensioneedellascritturadelcodice;

• tiobe:qualitàcomplessivadelcodiceinaccordocongli standarddiTiobe; Valoresoglia:tiobe>80

• commentratio:rapportocodice/commenti. Valoresoglia:commentratio>30

Percontrollarelarealeefficaciadellamanutenzione,lemetrichesonostateestratteprimaedopotaliinterventi.

Altratipologiadianalisieffettuatasull’applicazioneèstatala clonedetectionutilizzandocomestrumento nicad6.Siccome l’applicazioneèdaconsiderarsicomeunaggregatoditool scrittiinlinguaggidiprogrammazionedifferenti,rilevabilida nicad,èstatofiltratosoloilcoredell’applicazionescrittoin python.Laclonedetectionnonhaprodottoinoutputalcun tipodiclone,risultatoinlineaconivaloriattesi,inquanto unodeiprincipalieffortrelativiallosviluppoèstatoquello dievitareilpiùpossibilediriciclarecodicegiàscrittoedi

utilizzareinvecedellefunzioniincapsulateinlibrerie(moduli python)homemade.

Infine,èstataeffettuataun’analisideltechnicaldebtintrodottoinvolontariamentedurantelosviluppo.Comesipuò notaredalla[Fig.18.]:

• Technicaldebt:30d

• Techincalratio:1.9

• CodeSmells:2037

Dopoavercondottoleanalisieaverregistratoivaloriad esseassociati,sonocominciatiilavoridimanutenzionee refactoringalfinedimigliorarelaqualitàcomplessivadel codiceintroducendo:

• Commentididocumentazionepiùsignificativi;

• Miglioreseparazionedellefunzionalitàinmoduliper areasemantica;

• Ripartizioneebilanciamentodelleresponsabilitàdei moduli;

• Renamingdimodulievariabiliinrelazionealloro ambitodiutilizzo;

• Eliminazionediridondanzeconsignificativoabbassamentodellelineedicodicedelsorgente(inalcuni casi);

• Abbassamentodelladipendenzatraimoduliinfavore diunamiglioremodularità.

6 MANUTENZIONEDELL’APPLICAZIONE
25

Alfinedirenderepiùsignificativiirisultatidelleanalisi èstatoritenutoopportunomostrareimmaginipreepost manutenzioneinFig.36,Fig.37,Fig.38eFig.39

Multimetric

Fig.36.Metrichepre-manutenzione

Comesipuònotare,siaivaloridellemetrichesiailtechnical debtrisultanonotevolmenteridottidagliinterventieffettuati. Difatti,sièpassatida30giornatelavorativeapocheore.

Fig.37.Metrichepost-manutenzione

Technicaldebt

Fig.38.Sonarqubepre-manutenzione

Fig.39.Sonarqubepost-manutenzione

26

Combinandolevarietipologiedianalisinonèpossibiledecretarequaletraiprogettioggettodistudiosiailmiglioreequale ilpeggiore.Ilprogettocheeccelleinunacategoriaditest risultaessereilpeggiorenellasuccessiva.Questostudiopermetteperòadunteamdimanutenzionediconoscere, ancora primadileggereilsorgente,lecaratteristichepeculiarie lostatodiunprogetto.Adesempio:

• fxgraphics2 èilsistemapiùcomplessodituttiecon unelevatoaccoppiamentotralesueclassimaèallo stessotempoilpiù"puro"cioèconmenocloni,appena 2,conilminortechnicaldebteconmenocodesmells.

• dubbo-samples ètraisistemimiglioriperl’analisidellemetricheCKma,acausadellasuanaturadaprogettoesempio/test,èilpiùapprossimativointerminiditechnicaldebt,rivelandoilvalorepiùaltoinassoluto.Di conseguenzarisultaessereilpeggioreancheperviadell’elevatonumerodicodesmells,ovverocattivepratiche diprogrammazione.

• retrofit èilsistemamiglioresottoilprofilodellemetricheCKesecondosoloadubbo-samplesinrelazioneal technicaldebteallapresenzadicodesmells.Nonostantesiailprogettoconilpiùelevatonumerodicommit (1967)eunodeipiùcortiinquantoalineedicodice,è ilsistemaconilnumeropiùelevatodicloni.

In conclusione èevidentechetutteletipologiedianalisi effettuate,sepresesingolarmente,nonsonosufficientiper avereunavisionecomplessivadellostatoedellaqualitàdelsistema.Risultaquindinecessarioapplicaretuttiitoolutilizzati. Ilsistemarealizzatoperlosvolgimentodiquestoprogetto potrebbeessereunabasedipartenzaperfuturisistemi"Wrapper"utilizzatiperautomatizzarecompletamenteoperazioni dianalisipreliminari.Inquestomodosipotrebbeagevolare illavorodicomprensionedeimanutentorivelocizzandola generazionedi"conoscenza".

7 CONCLUSIONI
27

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.