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