defaultios11.0.2

ios11.0.2  时间:2021-05-24  阅读:()
HALId:hal-01471294https://hal.
inria.
fr/hal-01471294Submittedon26Apr2017HALisamulti-disciplinaryopenaccessarchiveforthedepositanddisseminationofsci-entificresearchdocuments,whethertheyarepub-lishedornot.
ThedocumentsmaycomefromteachingandresearchinstitutionsinFranceorabroad,orfrompublicorprivateresearchcenters.
L'archiveouvertepluridisciplinaireHAL,estdestinéeaudéptetàladiffusiondedocumentsscientifiquesdeniveaurecherche,publiésounon,émanantdesétablissementsd'enseignementetderecherchefranaisouétrangers,deslaboratoirespublicsouprivés.
CodeSmellsiniOSApps:HowdotheycomparetoAndroidSarraHabchi,GeoffreyHecht,RomainRouvoy,NaouelMohaTocitethisversion:SarraHabchi,GeoffreyHecht,RomainRouvoy,NaouelMoha.
CodeSmellsiniOSApps:HowdotheycomparetoAndroid.
MOBILESoft'17-4thIEEE/ACMInternationalConferenceonMobileSoftwareEngineeringandSystems,May2017,BuenosAires,Argentina.
hal-01471294CodeSmellsiniOSApps:HowdotheycomparetoAndroidSarraHabchi1,GeoffreyHecht1,2,RomainRouvoy1,3,NaouelMoha21Inria/UniversityofLille,France2UniversiteduQuebec`aMontreal,Canada3IUF,Francesarra.
habchi@inria.
fr,geoffrey.
hecht@inria.
fr,romain.
rouvoy@inria.
fr,moha.
naouel@uqam.
caAbstract—Withbillionsofappdownloads,theAppleAppStoreandGooglePlayStoresucceededtoconquermobiledevices.
However,thissuccessalsochallengesappdeveloperstopublishhigh-qualityappstokeepattractingandsatisfyingend-users.
Inparticular,tamingtheever-growingcomplexityofmobileappstocopewithmaintenanceandevolutiontasksundersuchapressuremayleadtobaddevelopmentchoices.
Whilethesebadchoices,a.
k.
a.
codesmells,arewidelystudiedinobject-orientedsoftware,theirstudyinthecontextofmobileapps,andinparticulariOSapps,remainsinitsinfancy.
Therefore,inthispaper,weconsiderthepresenceofobject-orientedandiOS-speciccodesmellsbyanalyzing279open-sourceiOSapps.
Aspartofthisempiricalstudy,weextendedthePAPRIKAtoolkit,whichwaspreviouslydesignedtoanalyzeAndroidapps,inordertosupporttheanalysisofiOSappsdevelopedinObjective-CorSwift.
WereportontheresultsofthisanalysisaswellasacomparisonbetweeniOSandAndroidapps.
Wecommentourndingsrelatedtothequalityofappsinthesetwoecosystems.
Interestingly,weobservedthatiOSappstendtocontainthesameproportionsofcodesmellsregardlessofthedevelopmentlanguage,buttheyseemtobelesspronetocodesmellscomparedtoAndroidapps.
Keywords—Mobileapps;iOS;Android;softwarequality;codesmells.
I.
INTRODUCTIONMobileappshavetocontinuouslyevolveinordertomeettheuserexpectationsandstayaheadoftheappstorescompeti-tion.
However,atdesignandcodelevels,thisevolutionusuallyincreasethecomplexityandsmell-pronenessofmobileapps.
Codesmellsarewell-knownintheObject-Oriented(OO)developmentcommunityaspoororbadpracticesthatimpactnegativelythesoftwaremaintainability,evencausinglong-termproblems[24].
Thepresence,theevolution,andeventheimpactofcodesmellsinOOsystemshavebeenwidelyaddressedintheliterature[33],[46],[51].
Recently,Mannanetal.
analyzedthepublicationsrelatedtocodesmellsthathavebeenpublishedbetween2008and2015intopconferencesinSoftwareEngineering:ICSE,FSE,OOPSLA/SPLASH,ASE,ICSM/ICSME,MSR,andESEM[37].
Fromatotalof52papers,theyfoundonly5papersaddressingcodesmellsinAndroidandnopaperrelatedtoiOSorWindowsPhone.
Therest47papersconcernonlycodesmellsindesktopapplications.
ThisshowsthatcodesmellsintheiOSecosystemremainsanopenissuethatneedstobeaddressedbythecommunity.
Inthispaper,westudycodesmellsintheiOSecosystem.
Inparticular,werstproposeacatalogof6iOS-speciccodesmellsthatweidentiedfromthedevelopers'feedbacksandtheplatformofcialdocumentation.
Thesesmellshavenotbeenaddressedintheliteraturebefore.
Inourproposedcatalog,wealsoemphasizethesimilaritiesbetweenthese6smellsand3Android-specicsmells.
Secondly,webuildonPAPRIKA[28],atooledapproachthatdetectsOOandAndroidsmellsinAndroidapps.
Specically,ourstudyexploitsanextensionofPAPRIKAtoanalyzeiOSappsdevelopedwithObjective-CorSwiftlanguages.
Tothebestofourknowledge,PAPRIKAistheonlytooledapproachabletodetectiOSspeciccodesmells.
TherstpartofourstudyaimstoassessthepresenceofOOandiOScodesmellsinopen-sourceiOSappsinordertocomparetheproportionsofcodesmellsbetweenappsdevelopedinObjective-CandSwift.
Weanalyze103Objective-Cand176Swiftappstodetectthecodesmellsfromourcatalog.
Inthesecondpartofthisstudy,wecomparetheresultsobtainedoniOSappswiththeresultsoftheanalysisof1,551open-sourceAndroidappsanalyzedwithPAPRIKA.
Thisstudyaimstohighlightthedifferencesintermofsmellspresencebetweenthetwomobileplatforms.
Theobjectiveofthisstudyistoanswerthefollowingtworesearchquestions:RQ1:AreOOandiOSsmellspresentinSwiftandObjective-CwiththesameproportionFINDING:Yes,wediscoveredthatdespitethedifferencesbetweenthetwolanguages,codesmellstendtoappearwiththesameproportionoronlyaslightdifferenceinObjective-CandSwift.
RQ2:ArecodesmellspresentiniOSandAndroidwiththesameproportionFINDING:No,forallcodesmellsattheexceptionoftheSwissArmyKnifeweobservedthatAndroidappstendtohaveasignicantlybiggerproportioncodesmells.
Thispaperisorganizedasfollows.
SectionIIdiscussesexistingworksoncodesmellsdetectioninmobileapps.
SectionIIIintroducesconceptsrelatedtotheanalysisofiOSappscodesourceandbinaries.
SectionIVreportsonthecatalogof6iOS-specicsmells.
SectionVdescribeshowwemodiedthePAPRIKAtooledapproachtoadaptittoiOSapps.
SectionVIreportstheresultsofanempiricalstudythatexaminesthepresenceofOOandiOS-speciccodesmellsonadatasetof103Objective-Cand176Swiftapps.
SectionVIIcomparestheresultsofthedetectionofthe6codesmellsbetweeniOSandAndroidapps.
Finally,SectionVIIIsummarizesourworkandoutlinesfurtherworkstoperformonthisresearchtopic.
II.
RELATEDWORKInthissection,wediscusstherelevantliteratureaboutcodesmellsinmobileappsandtheirdetection.
WithregardtoiOSapps,thereareonlyfewtoolsthatsupporttheanalysisofcodequality.
However,tothebestofourknowledge,noneofthemsupportsspeciciOSsmells.
OCLINT[50]isastaticanalyzerthatinspectsC,C++andObjective-Ccode,searchingforcodesmellsandpossiblebugs.
UnlikeLINT[2],whichdetectsAndroid-speciccodesmells,OCLINTdoesnotsupportiOS-specicsmells.
INFER[31]worksalsoonAndroidandCprograms,andusesthestaticanalysisfordetectingpotentialbugsiniOSapps.
Moreover,itdetectspossiblememoryleaksiniOS,nullpointerexceptionsandresourceleaksinAndroid.
CLANG[15],SONARQUBE[62]andFAUXPAS[23]arealsostaticanalyzersthatcanbeusedtodetectpotentialbugsinObjective-Cprojects,buttheydonotsupportspeciciOSaws.
ForSwift,themaincodeanalyzersareTAILOR[69],SWIFTLINT[56]andLINTERSWIFTC[9].
TAILORisastaticanalyzerthatchecksstylingconsistencyandhelpsavoidingbugs.
SWIFTLINTaimstoenforceSwiftstyleandconventions,andLINTERSWIFTCisaLinterpluginforsyntaxanalyzis.
Lookingtoothermobileplatforms,Linares-Vasquezetal.
[35]usedDECOR[46]toperformthedetectionof18differentOOcodesmellsinmobileappsbuiltusingJavaMobileEdition(J2ME)[53].
Thislarge-scalestudywasper-formedon1,343appsandshowsthatthepresenceofcodesmellsnegativelyimpactsthesoftwarequalitymetrics,inparticularmetricsrelatedtofault-proneness.
Theyalsofoundthatsomecodesmellsaremorecommonincertaincate-goriesofJavamobileapps.
RegardingAndroid,Verloop[75]usedpopularJavarefactoringtools,suchasPMD[64]andJDEODORANT[72]todetectcodesmells,likelargeclassandlongmethodinopen-sourceAndroidapps.
Theyfoundthatcodesmellstendtoappearatdifferentfrequenciesincoreclasses(i.
e.
,classesthatinheritfromtheAndroidframework)comparedtonon-coreclasses.
Forexample,longmethodwasdetectedtwiceasmanyincoreclassesintermsofratio.
However,Android-speciccodesmellswerenotconsideredinthesetwostudies.
RegardingtheanalysisofAndroidapps,thereareafewtoolsandapproachesdevotedtothestudyofAndroidcodesmellspecicities[2],[45],[60].
Reimannetal.
[57]proposeacatalogof30qualitysmellsdedicatedtoAndroid.
ThesecodesmellsaremainlyoriginatedfromthegoodandbadpracticesdocumentedonlineinAndroiddocumentationsorbydevelopersreportingtheirexperienceonblogs.
Theycovervariousaspectslikeimplementations,userinterfacesordatabaseusages.
Theyarereportedtohaveanegativeimpactonproperties,suchasefciency,userexperienceorsecurity.
Reimannetal.
arealsoofferingthedetectionandcorrectionofcodesmellsviatheREFACTORYtool[58].
ThistoolcandetectcodesmellsfromanEclipseModelingFramework(EMF)model.
ThesourcecodecanbeconvertedtoEMFifnecessary.
However,wehavenotbeenyetabletoexecutethistoolonanAndroidapp.
Moreover,thereisnoevidencethatallthecodesmellsofthecatalogaredetectableusingthisapproach.
AndroidSDKintegratesLint[2],arule-basedstaticcodeanalysistoolabletoscanAndroidprojectssearchingforpotentialOOandAndroidspeciccodesmells(LeakingInnerClass,InternalGetter/Setter,andvariantsofInitOnDraw,orOverDrawamongothers).
Lintoffersthepossibilityofaddingnewrulestoimplementthedetectionofuserdenedcodesmells.
However,theadditionofrulesrequirestheusertodevelopthedetectionalgorithmsinJava.
GjoshevskiandSchweighofer[25]used140Lintrulesinastudythataimstoanalyzewhetherthesize(intermsoflinesofcode)isrelatedtothetechnicaldebtandwhicharethemostcommonissuesonAndroidapps.
Theyanalyzed30opensourceAndroidappsandconcludethatthesize,intermsoflinesofcode,doesnotimpactonthetechnicaldebtandthatthemostcommoncodesmellsintheappsunderstudywereVisibilitymodier,Avoidcommented-outlinesofcode,andMagicnumber.
Mannanetal.
[37]comparedthepresenceofwell-knownOOcodesmellsin500Androidappsand750desktopap-plicationsinJava.
Theydidnotobservemajordifferencesbetweenthesetwotypesofapplicationsintermsofdensityofcodesmells.
However,theyobservedthatthedistributionofcodesmellsonAndroidismorediversiedthanfordesktopapplications,wherethemostcommoncodesmellsarebyfarinternalandexternalduplications.
Tothebestofourknowledge,theonlyfunctionalap-proachdevotedtothedetectionofAndroidcodesmellsisPAPRIKA[29].
ItmodelsAndroidappsinalarge-scalegraph,whichisexploredbyspecicqueriestodetectcodesmells.
WedescribeitinmoredetailsinSectionVasweextendedthisapproachtoanalyzeiOSapps.
III.
BACKGROUNDONIOSAPPSANALYSISThissectionreportsontheongoingstateofpracticeintermsofbothstaticanddynamicanalysisintheiOSecosystem.
A.
DynamicAnalysisMostoftheexistingdynamicanalysistechniquesworkonapplicationsandsystemsrunningonx86architectures.
Whilethisarchitectureiswidelyusedfordesktopoperatingsystems,mobilesoftwaresystemsratherusetheARMarchitecture,whichiscompletelydifferent[68].
Consequently,theexistingdynamicanalysistechniquescannotbeusedforanalyzingiOSapps.
AnotherconstraintforthedynamicanalysisofiOSapplicationsisthegeneraladoptionofevent-basedgraphicuserinterfaces,whichmakesapplicationfeaturesdependingontheeventstriggeredbytheuser.
Moreover,anitenumberofautomaticrunsoftheappmaybeunabletocoveralltheexecutionpaths[68].
Therefore,arelevantdynamicanalysisofiOSappsrequiresnecessarilyaninteractionwiththegraphicinterface.
B.
StaticAnalysisofBinariesAlthoughObjective-CisastrictsupersetoftheClan-guage,itsbinariesdifferfromtheC/C++onesbytheusemessagestosupporttheinteractionsamongobjects.
Moreover,allmessagesareroutedbytheroutineobjc_msgSend.
Thismeanseverymethodcallfromanobjecttoanotherinducesanadditionalcalltothemethodobjc_msgSend[22].
Theroutingandtheadditionalcallsimpactsignicantlytheseman-ticsofcontrolowgraphs,andthustheresultsofthestaticanalysis.
Besides,resolvingtherealmethodcallsinthiscaserequiresmanipulationsattheleveloftheCPUregistersandtypeinformationtracking,whichishighlycomplex[22].
C.
StaticanalysisofSourceCodeiOSapplicationsaremadeavailableintheAppStoreasIPAles.
WiththeIPAextension,thecodesourcelesareencryptedwithFairPlay,atechniquefornumericalrightsmanagementadoptedbyApple,andcompressedwiththeZIPformat[52].
Asaresult,theaccesstothesourcecodethroughtheselesrequiresdecryptionandreverse-engineering,whichisprohibited.
Thisimpliesthatsourcecodeanalysiscanonlybeappliedonopen-sourceapps.
Synthesis:Regardingthecurrentstateofpractices,con-straints,andtoolsavailableintheiOSecosystemtoanalysemobileapps,weconsiderthatthemostrelevantsolutiontostudycodesmellsiniOSapplicationsconsistsinanalysingthesourcecodeofapplicationspublishedasopen-sourcesoftware.
IV.
CODESMELLSINIOSAPPSThissectionintroducesourrstcontribution:acatalogofiOS-speciccodesmells.
WerstexplaintheprocesswefollowedtominecommoniOSsmells,thenwedescribetheidentiedsmellsasacatalog,andnallywehighlightthesimilaritiesbetweenthesecodesmellsandtheAndroidones.
A.
CodeSmellsIdenticationProcessAscodesmellsiniOShavenotbeenaddressedbythestateoftheart,wedecidedtorelyontheplatformofcialdocumentationandthecommunity'sknowledgetoidentifythesesmells.
Thesourcesweconsideredrelevantforourtaskare:TheAppledeveloperguide[7];Well-knownwebreferencesforiOSdevelopment:Ray-Wenderlich[55]andObjc.
io[49];Usingagroundedtheorymethod[67],wemanuallyparsedthepostsofthesesourcesandidentiedtheproblemsraisedbydevelopers,aswellasthecriticallyrecommendedpractices.
Thereafter,weselectedthemostrelevantbadpracticesanddetailedthemfromdataof:Developersblogs;Q&AforumslikeStackOverow[65].
Lastly,weformalizedtheproblemsusingthemini-antipatterntemplateproposedbyBrownetal.
[11].
B.
CatalogofiOSCodeSmellsName:SingletonAbuseCategory:ConceptualProblem:Singletonisoneofthedesignpatternsrecom-mendedbyAppleforthedevelopmentofiOSapps[5].
Devel-opersinteractoftenwiththispatternthroughplatformclasseslikeUIApplicationandNSFileManager.
Moreover,theXCodeIDEhasadefaultcodetoeasilygenerateaSingletoninstance.
However,thistendstoencourageabuseofthispatternininappropriatesituations.
Example:ArecurrentexampleofabusiveuseofSingletoniswhenthesingletonclassisusedforstoringglobalvariablesoftheapplication—e.
g.
userdatathatareaccessedbyalltheappclasses.
Havingaglobaldataintheapplicationmakesitstateful,andthusdifculttounderstandanddebug[66].
References:[1],[19],[30],[34],[66]Name:MassiveViewController(MAVC)Category:ConceptualProblem:MostoftheiOSappsaredesignedusingMVC,adesign/architecturalpatternthatsplitstheapplicationintothreelayers:model,view,andcontroller,andwherethedefaultroleofthecontrolleristolinkthetwootherlayers[42].
However,iniOS,appcontrollerstendtocarrymuchmoreresponsibilitiesthanconnectingthemodeltotheviews[42].
Inparticular,thecontrollerhandlesUIevents,likeclicksandswipes,becauseitispartoftheresponsechain.
Italsoreceivesthesystemwarningsregardingthememorystateandithastoperformthenecessaryoperationsformanagingthememoryoccupiedbytheapp.
Alltheseadditionalresponsi-bilitiesmakethecontrollersmassive,complex,anddifculttomaintain[32].
References:[8],[13],[41],[42],[54],[63]Name:HeavyEnter-BackgroundTasks(HEBT)Category:PerformanceProblem:Sinceversion4.
0ofiOS,appsareallowedtoexecutetasksinthebackground.
Thispossibilityrequiresfromappssomespecicadjustments,likefreeingthememoryspaceorstoppingsometasks,tomanagethetransitionfromfronttobackground.
TheseadjustmentsmustbeappliedtothemethodapplicationDidEnterBackground:fromtheAppDelegateclass,whichiscalledwhentheappmovestothebackground[6].
However,aproblemoccurswhentheoperationsofthismethodlastforalongtime,thusexhaustingtheallocatedexecutiontime,andcausingthecompletionhandlertobecalledinordertosuspendtheapp.
References:[6]Name:IgnoringLow-MemoryWarning(ILMW)Category:PerformanceProblem:IniOS,whenthesystemrequiresmorememorytoperformitstasks,itsendslow-memorywarningstotheappsholdinganimportantmemoryspaceviathemethoddid-ReceiveMemoryWarning:oftheUIViewControllerclass.
Everyviewcontrollershouldimplementthismethodtofreetheunusedmemoryspace—e.
g.
,viewselementsthatarenotcurrentlyvisible.
However,whenthemethodisnotimplemented,theviewcontrollercannotreacttothesystemwarnings,andiftheapplicationisholdinganimportantmemoryspace,itwillbekilledbythesystem[3].
References:[3],[38]Name:BlockingTheMainThread(BTMT)Category:PerformanceProblem:IniOS,theUIKitisdirectlytiedtothemainthread,soallthegraphicaluserinterfaceinteractionsareinthisthreadandareimpactedbytheexecutiontimeoftheotheroperationssharingit[4].
Therefore,everyheavyprocessinginthemainthreadmakestheUIcompletelyunresponsive.
Theoperationsthatoftenblockthemainthreadareidentiedby[39]as:Thesynchronousaccesstothenetwork,Theaccesstothedisk,especiallyforreadingorwritingvoluminousles,Theexecutionofcomplextasks,likeanimationsorcomplexdataprocessing.
References:[4],[39]Name:DownloaldAbuseCategory:PerformanceProblem:Mobileappsrelyincreasinglyononlinedatastoragetosavetheircontentwithoutimpactingtheuser'slimitedinternalstorage.
Despitethepositiveimpactofthispracticeonuserexperience,itmayalsoleadtoperformanceproblemsifusedinappropriately.
TheDownloadAbusecodesmelldescribesthecasewheretheonlinedataaredownloadedwithabuse,themostexplicitcaseofthismaybedownloadingthesamedatarepeatedlywithoutusingthecachememory.
Sincetheaccesstoonlinedatarequiresmoreenergythantheaccesstointernaldisk[12],thispracticenegativelyimpactsthebatteryautonomy.
Furthermore,dependingonthenetworkstateitmayalsoimpacttheexecutiontime,anditcanbecostlyiftheuserisconnectedtoaGSMnetwork.
References:[4],[26],[40]C.
SimilaritieswithAndroidSmellsWenoticedthatsomeoftheaforementionediOSspeciccodesmellsaresimilartoAndroidcodesmellslistedinpreviousworks[26],[27],[57].
WefocusheretheAndroidsmellsthatweconsiderasanalogoustotheaforementionediOSsmellswithanemphasisonthecommonalities.
NoLowMemoryResolver(NLMR):whentheAndroidsystemisrunninglowonmemory,thesystemcallsthemethodonLowMemory()ofeveryrunningactivity.
Thismethodisresponsibleoftrimmingthememoryusageoftheactivity.
Ifthismethodisnotimplementedbytheactivity,theAndroidsystemautomaticallykillstheprocessoftheactivitytofreememory,whichmayleadtoanunexpectedprogramtermination[27],[57].
ThissmellisanalogoustoIGNORINGLOWMEMORYWARNINGiniOS.
HeavyMainThreadMethod(HEAVY):thiscodesmellisacompositionof3similarAndroidsmells:HeavyServiceStart[27],HeavyBroadcastReceiver[27],[28],andHeavyAsyncTask[27],[57].
ThethreecodesmellsaredenedasAndroidmethodsthatcontainheavyprocessingandaretiedtothemain-thread.
Consequently,thethreecodesmellsleadtofreezingtheUIandmaketheappunresponsive.
ThemainconceptofthethreecodesmellsisanalogoustoBLOCKINGTHEMAIN-THREADiniOS.
V.
ADAPTINGPAPRIKAFORIOSPAPRIKA[28]isatooledapproachthatdetectsOOandAndroidsmellsinAndroidapps.
Itrsttransformstheinputappintoaqualitymodel,whichisstoredinadatabasegraph,andthenappliesqueriesontothesegraphstodetecttheoccur-rencesofcodesmells.
Sofar,PAPRIKAsupportsonlyAndroidapps,whicharewrittenwiththeJavaprogramminglanguage.
However,iOSappsaremostlywrittenwithObjective-CandSwift.
ThisimpliesthatPAPRIKArequirestobeextendedtosupporttheselanguagesinordertobeusedaspartofourstudy.
WedevotethefollowingsubsectionstoexplainthechangesweappliedtoPAPRIKA.
A.
CodeAnalysis1)FromParsingAndroidApps:PAPRIKAusestheSOOTframework[74]anditsDEXPLERmodule[10]toanalyzeAPKartifacts.
SOOTconvertstheDalvikbytecodeofAndroidappsintoaSOOTinternalrepresentation,whichissimilartotheJavalanguage,andalsogeneratesthecallgraphoftheapp.
TherepresentationandthegraphareusedbyPAPRIKAtobuildamodelofthecode(includingclasses,methods,attributes)asagraphannotatedwithasetofrawqualitymetrics.
PAPRIKAenrichesthismodelwithmetadataextractedfromtheAPKle(e.
g.
,appname,package)andtheGooglePlayStore(e.
g.
,rating,numberofdownloads).
2)ToParsingiOSApps:AsSOOTdoesnotsupportObjective-CnorSwift,wehadtondanalternativesolution.
TheanalysisofiOSbinariesischallengingduetotheissuesexposedinSectionIII,thusweoptedforsourcecodeanalysis.
WegeneratedtwoparsersforObjective-CandSwiftusingtwoANTLR4grammars[70],[71]andtheANTLRparsergener-ator.
Readingthesourcecode,theparsersbuildanAbstractSyntaxTree(AST)oftheanalyzedprogram.
WebuiltacustomvisitorforeachparserinordertoextractfromtheASTallthenecessaryattributesandmetricstofeedPAPRIKAandtobuildtheassociatedgraphmodel.
Sinceweareretrievingappsfromopen-sourcerepositories(e.
g.
,GitHub)insteadoftheofcialonlinestores,wecannotretrievethecomplementarymetadata,butthisdoesnotimpactthedetectionprocessandtheresultsweobtain.
B.
PaprikaModelforiOSThePAPRIKAmodelbuiltfromthecodeanalysisphaseisconvertedintoagraphwherethenodesareentities,theedgesarerelationships,andthenodesattributesarepropertiesorqualitymetrics.
MoredetailsaboutthePAPRIKAmodelaregivenin[28].
ThegraphmodelofPAPRIKAwasoriginallydesignedtoreectthecorecomponentsofanyAndroidapp,andconsequentlyitisbasedontheJavalanguageelements.
WhileObjective-CandSwiftsharethesamecoreconceptsofJava(classes,methodsandattributes),theyhavealsofeaturesoftheproceduralparadigmlikefunctionsandglobalvariablesandtheyintroducenewconceptslikeextensions,structsandprotocols.
Tocopewithalltheseparticularities,weenrichedtheoriginalPAPRIKAmodelwithnewconceptsandweremovedfewothersaswell.
TheexhaustivelistofentitiesandmetricsusedforiOSisprovidedonline1.
C.
StoringtheiOSModelPAPRIKAstoresthemodelgeneratedfromtheappanalysisinaNeo4jdatabase[47].
NEO4Jisaexiblegraphdatabasethatoffersgoodperformancesonlarge-scaledatasetsespe-ciallywhencombinedwiththeCYPHER[48]querylanguage.
WethereforereusethestoragelayerofPAPRIKAasitisscalableandefcientandallowstoeasilystoreandquerythegraphmodel.
D.
CodeSmellsQueriesPAPRIKAusesCypher[48]queriesforexpressingthecodesmells.
Whenappliedonthegraphdatabase,thesequeriesdetectsmellsinstances.
WekeptthePAPRIKAoriginalqueriesfortheOOsmellsandwejustupdatedthemetricsthresholds.
ThethresholdsarecomputedusingtheBoxplottechnique[73]byconsideringallthedatasetappsandthus,wehavedifferentthresholdsinObjective-CandSwift.
ForiOS-specicsmells,wefollowthesameprocessdenedbyPAPRIKAfortransformingtheliteraldenitionofthecodesmellintoaquery.
ThefollowingtwoexamplesillustratethequeriesfordetectingIgnoringLow-MemoryWarning(ILMW)andMassiveViewController(MAVC).
Listing1:IgnoringLow-MemoryWarning(ILMW)query.
MATCH(cl:Class)WHEREHAS(cl.
is_view_controller)ANDNOT(cl:Class)-[:CLASS_OWNS_METHOD]->(:Method{name:'didReceiveMemoryWarning'})RETURNclTheILMWquerylooksfortheviewcontrollersmissinganimplementationofthemethoddidReceiveMemoryWarning,whichisrequiredtoreacttothesystemmemorywarnings.
1http://sofa.
uqam.
ca/paprika/paprikaios.
phpListing2:MassiveViewController(MAVC)query.
MATCH(cl:Class)WHEREHAS(cl.
is_view_controller)ANDcl.
number_of_methods>very_high_nomANDcl.
number_of_attributes>very_high_noaANDcl.
number_of_lines>very_high_nolRETURNclFortheMASSIVEVIEWCONTROLLERquery,classesareidentiedassmellinstanceswheneverthemetricsnum-berofmethods(nom),numbersofattributes(noa),andnumberoflines(nol)areveryhigh.
Itisimportanttonotethattranslatingsmellsintoqueriesisnotalwayspossible.
Thiscanbeduetothecomplexityofthesmellitself,asforSINGLETONABUSE,whichisaverycontextualsmellthatrequiressomeintelligenceandwecannotdeneanaccuraterulefordetectingit.
Also,staticanalysiscannotalwayscatchthesmellconcept.
Forexample,dynamicanalysisisrequiredtomeasuretheexecutiontimetodetecttheHEBTsmelland,forDOWNLOADABUSE,dataowanalysisisneededtodeterminewhetherthedownloadeddataisbeingreusedornot.
Therefore,PAPRIKAcannotbeusedoff-the-shelftodetectthesmellsSINGLETONABUSE,HEBT,andDOWNLOADABUSE.
1)HandlingtheUncertainty:Standardthreshold-basedap-proachesforcomputingoutliersarelimitedastheycanonlyreportbooleanvalues.
Inordertodeliverresultsthatareclosertohumanreasoning,PAPRIKAadoptsfuzzylogic[76].
Inparticular,PAPRIKAusesjFuzzyLogic[14]tocomputethefuzzyvaluebetweenthetwoextremecasesoftruth(0and1).
Foreachmetric,theveryhighvalueisconsideredasanextremecaseoftruth.
Thesefuzzyvaluesrepresentthedegreeoftruthorcertaintyofthedetectedinstance.
VI.
STUDYOFSMELLSPRESENCEINIOSThissectionfocusesonourrstresearchquestion:RQ1:AretheOOandiOSsmellspresentinSwiftandObjective-CwiththesameproportionsUsingourextendedversionofPAPRIKA,westudythepres-enceofOOandiOSsmellsonadatasetofObjective-CandSwiftapps.
Thefollowingsubsectionspresentthedetailsofthestudy,theresultswithadiscussion,andweconcludewiththerelatedthreatstovalidity.
A.
ObjectsTheobjectsofourstudyaretheiOSandOOsmellsde-tectablebyPAPRIKA.
Asmentionedpreviously,afteradaptingPAPRIKA,weareabletodetectthreeiOSsmells,namelyMassiveViewController(MAVC),IgnoringLowMemoryWarning(ILMW),andBlockingtheMainThread(BTMT).
InadditiontothesethreeiOSsmells,PAPRIKAcandetectfourwell-knownOOsmells,namelyBLOB,SwissArmyKnife(SAK),LongMethod(LM),andComplexClass(CC)[11],[24].
B.
iOSDatasetandInclusionCriteriaFollowingthetechnicalchoicesweadoptedtoextendPA-PRIKAforiOS,weneedthesourcecodeoftheappstoanalyze,thusourdatasetisexclusivelycomposedofopen-sourceapps.
WechosetoconsideracollaborativelistofappsavailablefromGithub[21]thatis,asfarasweknow,thelargestrepositoryofopen-sourceiOSappsavailableonline.
Itgatherscurrently605appsofdiversecategoriesanddevelopedbydifferentdevelopers,almost47%ofthembeingpublishedintheAppStore.
TheseappsarewrittenwithObjective-C,Swift,Xamarin,andotherweblanguagessuchasHTMLandJavaScript.
WeconsideredonlythenativeappswrittenwithObjective-CandSwift.
Wealsoexcludeddemoandtutorialappssincetheyareverylightandnotrelevantforourstudy.
Asaresultweincluded103Objective-Cappsand176Swiftappswithinthisstudy.
Theexhaustivelistofappsusedinourstudyisavailableonline.
2C.
HypothesesandVariablesIndependentvariable:Theindependentvariableofthisstudyistheprogramminglanguageoftheapp:Objective-C(ObjC)orSwift.
Dependentvariables:Thedependentvariablesaretheproportionsofcodesmellsintheanalyzedapps.
Hypothesis:Tocomparethepresenceofthedifferentcodesmells(CS∈{Blob,LM,CC,SAK,MaVC,ILMW,BTMT})inthetwolanguages(L∈{ObjC,Swift}),weformulatethefollowingnullhypothesis,whichweappliedtothetwodatasets:HRCS:ThereisnodifferencebetweentheproportionsofcodesmellsfortheappswrittenwithObjective-CorSwift;D.
AnalysisMethodFirst,weanalyzetheObjective-CandSwiftdatasetstoidentifytheOOandiOSsmells.
Then,wecompute,foreachapp,theratiobetweenthenumberofcodesmellsandthenumberofconcernedentities—e.
g.
theratioofILMWisnormalizedwiththenumberofviewcontrollers.
Afterwards,wecomputethemedianandtheinterquartilerangeoftheratios.
WealsocomputeCliff'sδ[59]effectsizetoquantifytheimportanceofthedifferenceinproportionsofthesmells.
Cliff'sδisreportedtobemorerobustandreliablethanCohen'sd[17].
Itisanon-parametriceffectsizesmeasure—i.
e.
,itmakesnoassumptionsofaparticulardistribution—whichrepresentsthedegreeofoverlapbetweentwosampledistributions[59].
Itrangesfrom1(ifalltheselectedvaluesintherstgrouparelargerthantheonesofthesecondgroup)to+1(ifalltheselectedvaluesintherstgrouparesmallerthanthesecondgroup).
Itevaluatestozerowhentwosampledistributionsareidentical[16]:2http://sofa.
uqam.
ca/paprika/paprikaios.
phpCliff'sδ=+1,Group1>Group2;1,Group1Interpretingtheeffectsizes:Cohen'sdismappedtoCliff'sδviathepercentageofnon-overlap,asshowninTableI[59].
Cohen[18]statesthatamediumeffectsizerepresentsadifferencelikelytobevisibletoacarefulobserver,whilealargeeffectisnoticeablylargerthanmedium.
TABLEI:MappingCohen'sdtoCliff'sδ.
Cohen'sStandardCohen'sd%ofnon-overlapCliff'sδsmall0.
2014.
7%0.
147medium0.
5033.
0%0.
330large0.
8047.
4%0.
474Wechosetousethemedianandtheinterquartilerangebecauseourdataarenotnormallydistributed.
Likewise,weoptedfortheCliff'sδtestsinceitissuitablefornon-normaldistributions.
Moreover,Cliff'sδisalsorecommendedforcomparingsamplesofdifferentsizes[36].
E.
ResultsThissectionreportsanddiscussestheresultsweobtainedtoanswerourrstresearchquestion.
1)OverviewoftheResults:TableIIsynthesizestheper-centagesofappsaffectedbyeachcodesmellforthetwodatasets.
TABLEII:Percentageofappsaffectedbysmells.
LangBLOBLMCCSAKMAVCILMWBTMTApps%ObjC58.
8296.
0876.
4724.
5133.
3385.
296.
86Swift40.
3487.
5069.
3214.
7710.
2378.
410.
00FortheiOSsmells,weobservethatILMWappearsinmostoftheapps.
ThemethodapplicationDidReceive-MemoryWarning:isnotimplementedinmostofthecases.
Missingtheimplementationofthismethodcanbejustiedwhenabsolutelynoresourcecanbefreedbytheapp,howeveritisunlikelythatsuchalargeproportionofactivitiesbelongstothiscase.
Wethereforehypothesizethatdevelopersarenotawareofthebenetsofimplementingthismethod.
MAVCisalsorelativelycommon,asitappearsinmorethan10%oftheappsinthetwodatasets.
Though,BTMTisnotarecurrentcodesmell,asitappearsinonly6%oftheObjective-Capps,anditdoesnotappearatallintheSwiftones.
Generally,wecanobservethatiOSsmellstendtobemorepresentintheObjective-CappsthantheSwiftones.
Nonetheless,thisinsightneedstobeconsolidatedinordertoconcludebeforethecomparativestudyofthenextsubsection.
RegardingtheOOsmells,LMisthemostrecurrentone,asitappearsinapproximately90%oftheappsofthetwodatasets.
BLOBandCCarealsoverycommonwithpercentagesrangingfrom40%to76%.
SAKislessprevalent,butitspercentageisstillsignicant.
SimilarlytotheiOSsmells,thepercentagesshowthatObjective-CappsaremorepronetoOOsmellsthanSwiftapps.
2)ComparisonbetweenObjective-CandSwift:Thefol-lowingtableshows,foreachsmellandprogramminglanguage,themedian(med)andinterquartilerange(IQR)oftheratiosofsmellsintheapps.
Also,itreportsontheCliff'sδeffectsizebetweentheratiosinthetwodatasets.
Foreachapplicationa,theratioofthesmellsisdenedby:ratios(a)=fuzzyvalues(a)numberofentitiess(a)wherefuzzyvalues(a)isthesumofthefuzzyvaluesofthedetectedinstancesofthesmellsintheappaandnumberofentitiess(a)isthenumberoftheentitiescon-cernedbythesmellsintheappa.
Asareminder,forBLOB,CCandBTMT,theconcernedentityistheclass,whileforLMitisthemethod.
ForMAVCandILMW,itistheviewcontrollerandforSAKitistheinterface.
TheCliff'sδvaluesareevaluatedaccordingtothemappingTABLEIII:Ratioscomparisonbe-tweenObjective-CandSwift.
SmellLangMedIQRCliff'sδBLOBObjC0.
0040.
0200.
304(S)Swift0.
0000.
004LMObjC0.
0600.
0550.
135(I)Swift0.
0480.
059CCObjC0.
0330.
0710.
062(I)Swift0.
0260.
074SAKObjC0.
0000.
0000.
115(I)Swift0.
0000.
000MAVCObjC0.
0000.
0150.
181(S)Swift0.
0000.
000ILMWObjC0.
9050.
6340.
156(S)Swift0.
5830.
833BTMTObjC0.
0000.
0000.
069(I)Swift0.
0000.
000I:INSIGNIFICANTDIFFERENCE.
S:SMALLDIFFERENCE.
denedinTableI.
IfavalueisundertheSMALLrange,thedifferenceisconsideredINSIGNIFICANT.
First,weobservethatthemedianratioforSAK,MAVCandBTMTisnull.
ThisisconsistentwiththeresultsofTableII,sincethesesmellsappearinlessthan35%oftheapps,whichmeansthatinmorethan70%oftheappstheratioisnull.
Consequently,therstquartileandthemedianfortheirratiosarenullandtheIQRisverysmalloralmostnull.
WealsoobservethattheIQRisverysmallforallthesmellsexceptILMW.
Theseweakvaluesshowthatthesesmellsarepresentintheappswithcloseratios.
AsforILMW,thehighIQRvalueindicatesthatthissmellisabundantinsomeapps,butnearlyabsentintheothers,andthisenforcesourhypothesisintheprevioussubsectionabouttheILMWorigin.
Inotherwords,themajorityofthedevelopersarenotawareofthememorywarningsimportanceandtheILMWratioishighintheirapps,whilefewotherdevelopersareawareoftheissueandtheyhavemuchlessILMWinstancesintheirapps.
Thecliff'sδvaluesshowthatthedifferencebetweenthesmellratiosinObjective-CandSwiftisinsignicantforLM,CC,SAK,andBTMT.
Moreover,themedianandtheIQRforthesesmellsareverycloseinthetwodatasets.
Therefore,wedeductthatthesesmellsarepresentinthetwodatasetswiththesameproportionsandwecanacceptthestudyhypothesisHRCSforCS∈{LM,CC,SAK,BTMT}.
ForBLOB,MAVCandILMW,therearesmalldifferencesinthesmellratiosinthetwolanguages.
Thus,werejectthehypothesisHRCSforCS∈{BLOB,MaVC,ILMW},andweconcludethatthesesmellsareslightlymorepresentinObjective-CthanSwift.
ThesimilarproportionsofILMW,MAVCandBTMTbetweenObjective-CandSwiftarequiteexpectable,asthesesmellsarerelatedtotheplatformconcepts,whicharesharedbythetwodatasetsapps.
ConcerningOOsmells,wewereexpectingdifferentproportionsofcodesmellsasthemetricsusedtodetectthesesmells(e.
g.
,complexity,numberoflines)aredependentofthelanguagestructureandfeatures.
Thus,weexpectedconcepts,suchasprotocols,genericsorfunctionalprogramming,whicharepresentsinSwiftbutnotinObjective-Ctoaffecttheproportionofcodesmells.
However,wehavesimilarproportioninourresults.
Tofurtherinvestigatethispoint,welookatthemetricsrelatedtothesesmellsandwecomparethem.
Forthispurpose,wecomputeforeachmetricthemedian,rstandthirdquartile,andthestandarddeviation.
Thequartilesallowustoobservehowthemetricsaredistributed,andthestandarddeviationtocatchtheeffectofoutliers.
WealsousetheWilcoxon–Mann–Whitneytest[61]tocheckifthedistributionsofourmetricsinbothdatasetsareidentical,sothatthereisa50%probabilitythatanobservationfromavaluerandomlyselectedfromtheObjective-CdatasetwillbeidenticaltoanobservationrandomlyselectedfromtheSwiftdataset.
Toperformthiscomparison,weusea99%condencelevel—i.
e.
,p-value<0.
01.
TableIVdepictsthecomputedvaluesforthemetrics:classcomplexity(CLC),numberofattributes(NOA),numberofmethods(NOM),numberoflinesinamethod(NOLM),numberoflinesinaclass(NOLC),andnumberofmethodsinaninterface(NOMI).
FortheWilcoxon–Mann–Whitneytest,sincethep-valuesforallthemetricsarelessthanthethreshold(p=0.
01),wecannotacceptthehypothesisofthesimilarityinthetwodistributions.
Moreover,theresultsindicatethatthequartilevaluesinObjective-CareconsiderablyhigherthanSwift,withalsoamuchhigherstandarddeviation.
Thismeansthatthemetricsrangeiswider,butalsothattherearemoreoutliersinObjective-C.
TheseresultsclearlyshowthattheappswritteninObjective-CandSwiftareverydifferentintermsofOOmetrics.
ComparedtoSwift,Objective-Cappstendtohavelongerandmorecomplexmethodsandclasses,withmoreattributesandmethodsinclassesandinterfaces.
ThisislikelyduetothefeaturesintroducedinSwiftthathelpthedevelopertobetterstructuretheapps.
Asanexample,theExtensionstoexistingtypes,theStructs,andtheadvancedEnumsareTABLEIV:MetricscomparisonbetweenObjective-CandSwift.
MetricLangQ1MEDQ3SDp-valueCLCObjC261622.
340Swift02511.
72NOAObjC0366.
840Swift0012.
58NOMObjC1488.
570Swift0138.
41NOLMObjC361320.
701.
7e-39Swift251126.
09NOLCObjC1239108153.
842.
6e-196Swift51743143.
19NOMIObjC1132.
871.
1e-227Swift0122.
61featuresthatencouragedeveloperstoimplementlighterclassesinSwift.
Followingthisdeduction,wecanafrmthatthepresenceofOOsmellswiththesameproportionsiniOSappsisnotduetothesimilaritybetweenthelanguagesObjective-CandSwift.
Weratherhypothesizethatitisduetothedevelopmentframework,asitdictatesthearchitectureandsomepractices,aswellasthedevelopershabits.
Infact,thedeveloperscommunityisalmostthesameforthetwolanguages.
F.
ThreatstoValidityWediscussherethemainissuesthatmayhavethreatenedthevalidityofthevalidationstudy,byconsideringtheclassi-cationofthreatsproposedin[20]:InternalValidity:Thethreatstointernalvalidityarerelevantinthosestudiesthatattempttoestablishcausalrelationships.
Inthiscase,theinternalvaliditymightbeaffectedbythedetectionstrategyofPAPRIKA.
Werelyonarobustsetofstandardmetricstoevaluatethepresenceofawell-denedsetofcodesmellsintheanalyzedapplications.
However,forthethreshold-basedcodesmells,wecomputedthethresholdsfromtheanalysisofthewholedataset,toavoidinuencingthedetectionresults.
ExternalValidity:Thisreferstotheapproximatetruthofcon-clusionsinvolvinggeneralizationswithindifferentcontexts.
Themainthreattoexternalvalidityistherepresentativenessoftheresults.
Weusedsetsof103and176representativeopen-sourceapps.
Itwouldhavebeenpreferabletoconsidernonopen-sourceappstobuildabiggerandmorediversedataset.
However,thisoptionwasnotpossibleastheanalysisofiOSbinariesisrestricted.
Webelievethatourdatasetstillallowsustogeneralizeourresultstoopen-sourceiOSapps,butthatfurtherstudiesareneededtoextendourresultstoalliOSapps.
ConstructValidity:Thethreatstoconstructvalidityconcerntherelationbetweentheoryandobservations.
Inthisstudy,thesethreatscouldbeduetoerrorsduringtheanalysisprocess.
Wewereverycarefulwhencollectingandpresentingtheresultsanddrawingconclusionsbasedontheseresults.
ConclusionValidity:Thisthreatreferstotherelationbe-tweenthetreatmentandtheoutcome.
Themainthreattotheconclusionvalidityinthisstudyisthevalidityofthestatisticaltestsapplied,wealleviatedthisthreatbyapplyingasetofcommonlyacceptedtestsemployedintheempiricalsoftwareengineeringcommunity[43].
Wepaidattentionnottomakeconclusionsthatcannotbevalidatedwiththepresentedresults.
VII.
COMPARATIVESTUDYBETWEENIOSANDANDROIDInthissection,weconductacomparativestudybetweeniOSandAndroidappstoobservehowcodesmellsproportionsmaydifferinthetwoplatforms.
Apreviousstudy[37]alreadyexploredthedifferenceoftheproportionofcodesmellsbetweenAndroidandJavadesktopapplications.
Ourgoalhereistocomparethetwomobile-specicplatformsinasimilarway,byansweringoursecondresearchquestion:RQ2:IsthereadifferencebetweeniOSandAndroidintermsofcodesmellspresenceA.
AndroidDatasetandInclusionCriteriaInordertocompareiOSandAndroidapps,weusetheiOSdatasetdescribedinSectionVI-EandanAndroiddatasetcomposedof1,551open-sourceAndroidapps.
Weconsider1,551Androidappsthatdifferbothininternalattributes,suchastheirsize,andexternalattributesfromtheperspectiveofendusers,suchasuserrankingandnumberofdownloads.
TheseappswerecollectedfromtheF-Droidrepository3inApril2016.
ThedatasetcontainsalltheappsavailableatthistimethatwecouldanalyzewithPAPRIKA.
F-Droidisanon-protvolunteerproject,whichaimstocollectallkindsofAndroidopen-sourceapps.
Thedetailedlistofappsincludedinthedatasetcanbefoundonline.
4B.
VariablesandHypothesesIndependentvariables:Thenatureoftheapp,AndroidoriOS,istheindependentvariableofourstudy.
Dependentvariable:Thedependentvariablescorrespondto:theaverageproportionoftheOOsmells:BLOB,LM,CC,SAK,theaverageproportionofthesimilariOSandAndroidsmells:NLMR/ILMW,HEAVY/BTMT.
Hypotheses:Toansweroursecondresearchquestion,weformulatethefollowingnullhypothesis,whichweappliedtotheiOSandAndroiddatasets(CS∈{Blob,LM,CC,SAK,NLMR/ILMW,HEAVY/BTMT}):HRCS:ThereisnodifferencebetweentheproportionscodesmellsinAndroidandiOSapps;3F-Droid:https://f-droid.
org4http://sofa.
uqam.
ca/paprika/paprikaios.
phpC.
AnalysisMethodTocompareourresults,weusethemedianandthein-terquartilerange.
WealsocomputetheCliff'sδeffectsizetoquantifytheimportanceofthedifferenceoftheplatformonthesmellspresence.
Later,todiscussandexplaintheobtainedresultswecomparethemetricsvaluesinthetwoplatformsusingtheWilcoxonandMann-Whitneytest.
Asmentionedpreviously,Cliff'sδandMann-Whitneymakenoassumptionabouttheassessedvariablesdistribution,andbothofthemaresuitableforcomparingdatasetsofdifferentsizes.
D.
ResultsThissectionreportsanddiscussestheresultsweobtainedtoansweroursecondresearchquestion.
TABLEV:PercentageofAndroidappsaffectedbysmells.
BLOBLMCCSAKHEAVYNLMRApps%78.
4098.
1986.
5912.
3141.
8498.
321)OverviewoftheResultsforAndroid:WecanobserveinTableVthatBLOB,LMandCCappearinmostoftheapps(morethan75%inallcases).
Indeed,mostappstendtocontainatleastoneofthesecodesmells.
Ontheotherside,justlikeiniOS,SAKisuncommonandonlyappearsin12%oftheanalyzedapps.
ConcerningAndroid-speciccodesmells,theHEAVYcodesmellsappearinalmosthalfoftheapps.
Afterinspection,weobservedthatusuallythereisonlyoneinstanceofthesesmellsforeachapp.
NLMRisourmostcommonsmellwithmorethan98%oftheappsconcerned.
Here,wealsonoticedthatthereisoftenonlyoneactivityaffectedperapp.
2)ComparisonofCodeSmellsProportionsbetweeniOSandAndroid:ForthecomparisonofproportionsofcodesmellsbetweeniOSandAndroid,wecomparetheratiobe-tweenthenumberofcodesmellsandthenumberofconcernedentitiesforeachcodesmellineveryapp.
Themedians,IQRandCliff'sδeffectsizesofthedistributionsobtainedarepresentedinTableVI.
TheCliff'sδvaluescolumnpresentsforeachsmelltheClifftestforAndroidwithObjective-C,thenforAndroidandSwift,respectively.
Atrstglance,wecanobservethatwehaveasignicantdifferencebetweentheproportionsofcodesmellsinAndroidcomparedtoObjective-CandSwiftinallthecases,exceptSAK.
ForOOsmells,Cliff'sδalwaysgivesalargedifferenceforBLOB,CCandLM.
Furthermore,thisisconrmedbythegreatermeansinAndroidappsforthesesmellsandthus,werejectthehypothesisHRCSforallOOcodesmells,exceptSAK.
WeacceptHRSAKsinceCliff'sδshowsnosignicantdifferenceanditsmedianandIQRarealmostthesameinthetwoplatforms.
Asexplainedbefore,SAKisuncommoninbothAndroidandiOSapps.
ConcerningsimilarmobilesmellsbetweenAndroidandiOS,werejectthehypothesisHRNLMR.
InthecaseofTABLEVI:RatioscomparisonbetweenAndroidandiOSSmellLangMedIQRCliff'sδBLOBObjC0.
0040.
0200.
495(L)0.
648(L)Android0.
0520.
129Swift0.
0000.
004LMObjC0.
0600.
0550.
710(L)0.
727(L)Android0.
1560.
289Swift0.
0480.
059CCObjC0.
0330.
0710.
509(L)0.
518(L)Android0.
1220.
317Swift0.
0260.
074SAKObjC0.
0000.
000-0.
121(I)-0.
015(I)Android0.
0000.
000Swift0.
0000.
000NLMR/ILMWObjC0.
9050.
6340.
397(M)0.
512(L)Android1.
0000.
000Swift0.
5830.
833HEAVY/BTMTObjC0.
0000.
0000.
261(S)0.
331(M)Android0.
0000.
007Swift0.
0000.
000I:INSIGNIFICANTDIFFERENCE.
S:SMALLDIFFERENCE.
M:MEDIUMDIFFERENCE.
L:LARGEDIFFERENCE.
Objective-C,thereisamediumdifferencewhilethereisalargedifferenceforSwift.
Inbothcases,AndroidappshaveabiggerproportionofcodesmellsasNLMRappearsalmostinallAndroidapps(cf.
TableV).
Onthecontrary,therearemanyappswithoutILMWoniOS.
Thisisconrmedbythemedianat1andtheIQRat0,whilethemedianisunder1withanon-nullIQRforiOSapps.
WealsorejectthehypothesisHRHEAVY.
InthecaseofObjective-C,thereisasmalldifferencewhilethereisamediumdifferenceforSwift.
Again,AndroidappshaveabiggerproportionofHEAVYcodesmells,butthemediansremainsat0,whichmeansthanmostappsdonotcontainthesesmells.
However,AndroidappshaveabiggerIQRwithstillasignicantproportionofappscontainingthesesmellswhiletheBTMTisuncommoninObjective-CandSwift.
Insummary,AndroidappstendtocontainmorecodesmellsthaniOSappsinbothlanguagesattheexceptionoftheSAKcodesmells,whichappearinthesameproportionforalllanguages.
Itshouldbenotedthat,whiletheresultsclearlyindicatethattheAndroidappshavemoreoutliersthantheiOSones,thisdoesnotnecessarilymeanthatAndroidappsaregloballyworstintermsofquality.
Tofurtherexaminethedifferencesbetweenthetwoplatformsapps,weconsiderthemetricsvalues.
WecomparethedistributionsofcommonmetricsthatweuseforourrequesttodetectiOSandAndroidcodesmells.
WeexcludedthemetricsofthenumberoflinesinmethodsandclassesbecauseinAndroidPAPRIKAusesthenumberofinstructions.
Thenumberofinstructionsdoesnotalwayscorrespondtothenumberoflines,andthuswecannotcomparethetwometrics.
TABLEVII:MetricscomparisonbetweeniOSandAndroid.
MetricLangQ1MEDQ3SDp-valueCLCObjC261622.
340.
710Android351335.
92Swift02511.
72NOAObjC0366.
841e-480Android12422.
25Swift0012.
58NOMObjC1488.
571.
57-110Android24712.
61Swift0138.
41NOMIObjC1132.
870.
262.
9e-140Android1136.
97Swift0122.
61Thep-valuesshowadisparitybetweenthemetricsvaluesinthedifferentdatasets.
Exceptforthecomplexity,themetricsinAndroidaredifferentforbothObjective-CandSwift.
Objective-Chasthehighestvaluesinthemedianandthethirdquartile,asexplainedbeforethisisprobablyduetothelanguagenature.
Androidhasalsohighmetricsvalues,butlessthanObjective-C.
TheseresultssupportourhypothesisabouttheAndroidappsquality.
TheAndroidappsdonothavethehighestmetricvaluesbuttheyshowthehigheststandarddeviation,whichmeansthattheytendtohavemoreoutliers.
Theseoutliersmaybeattributedtotheplatformspecicities,likethearchitectureandframeworkconstraints,ortothelackofdocumentationandcodequalityassessmenttools.
Futureworkscaninvolvedevelopersinthisstudytofurtherinvestigatethispoint.
E.
ThreatstoValidityInthissubsection,weanalyzethefactorsthatmaythreatenthevalidityofthisstudyusingthesameclassicationappliedinSectionVI-F:InternalValidity:Again,inthiscase,theinternalvaliditymightbeaffectedbythedetectionstrategyofPAPRIKA.
FortheAndroiddataset,wealsotriedtorelyonarobustsetofmetricstoevaluatethepresenceofawell-denedsetofcodesmellsintheanalyzedapplications.
However,forthethreshold-basedcodesmells,wecalculatedthethresholdsbasedontheanalysisofthewholedataset,soasnottoinuencethedetectionresults.
ExternalValidity:Inthisstudy,weanalyzedalarge,het-erogeneousdatasetofAndroidopen-sourceappsavailableonF-Droid.
Inasimilarway,wetriedtouseasmanyopen-sourceiOSappsaspossible,asmentionedinthepreviousstudy.
Despiteourefforts,theiOSdatasetsaresignicantlysmallerandthusprobablylessrepresentativethanourAndroiddataset.
However,ouranalysisremainsmeaningfulaswewerecarefultoonlyconcludeonstatisticaltests,whicharesuitableforsamplesofdifferentsizes.
Webelievethatalldatasetsprovideaneutralanddiversesetofapps,butitshouldalsobenotedthat,inthisstudy,wearefocusingonlyonopen-sourceappsandthus,wecannotgeneralizeourresultstoallavailableapps.
Furtherinvestigationsareneededtoconrmthatopen-sourceandnonopen-sourceappsaresimilarintermsofcodesmells.
ConstructValidity:Theconstructvaliditycanbethreatenedbythewaywearecomputingthresholds.
Indeed,wecouldusethesamethresholdsforalldetections(e.
g.
,byusinganaveragethresholdbetweenAndroidandiOS).
Howeverwebelievethatinthiscasethethresholdswillnotberelevantregardingthecontexts.
Moreover,boxplotsarecommonlyusedforassessingvaluesinempiricalstudies[43].
ConclusionValidity:Asbefore,themainthreattothecon-clusionvalidityinthisstudyisthevalidityofthestatisticaltestsapplied,wealleviatedthisthreatbyapplyingthesametests.
VIII.
CONCLUSIONANDFUTUREWORKSInthispaper,weconductedastudyrelatedtothepresenceofcodesmellsintheiOSmobileplatform.
Weproposedacatalogof6smellsthatweidentiedfromthedocumentationandthedevelopersfeedbacks,thesesmellsarespecictoiOSandhavenotbeenreportedintheliteraturebefore.
WealsopresentedanadaptationofthePAPRIKAtooledapproach,whichwasoriginallydesignedfordetectingsmellsinAndroidapps,todetectsmellsiniOSappswrittenwithObjective-CandSwift.
BasedonthesmellscatalogandtheextendedPAPRIKAtoolkit,weperformedtwostudiestoinvestigatethescopeofthecodesmellsinmobileapps.
Werstanalyzed279iOSappswithPAPRIKAandcomparedtheproportionsofsmellsinappswrittenwithObjective-candSwift.
WeobservedthattheObjective-CandSwiftappsareverydifferentintermsofqualitymetrics.
Inparticular,theSwiftappstendtobelighter.
However,thesedifferencesdonotseemtoimpactthesmellsproportionssincethetwotypesofappsexhibitOOandiOSsmellsequally.
Then,wecomparediOSappswithAndroidappsinordertoinvestigatethepotentialdifferencesbetweenthetwoplatforms.
ThecomparisonshowedthatAndroidappstendtohavemoresmellsthantheiOSones,andagainwedemonstratedthatthisisnotduetotheprogramminglanguage,butratherpotentiallytotheplatform.
Thisworkprovidedinterestinginsightsforbothdevelopersandscienticcommunity.
IthighlightedsomeofthecommonsmellsusedintheiOSappsandprovidedrelevantinformationaboutthecodequalityinamobileplatform,whichhasnotbeenaddressedbythecommunitybefore.
Moreover,weprovidedanopen-sourcetoolkit,PAPRIKA,whichis—tothebestofourknowledge—thersttosupportthedetectionofsmellsiniOSapps.
ThisfacilitatesandencouragesconductingfurtherstudiesoniOSapps.
Infutureworks,weareplanningtoinvolvedevelopersinthisstudyinordertoexplainthereasonsforthesmellsintro-duction.
WearealsoplanningtoincludeiOSbinariesanalysistotakeadvantageofthehugenumberofappsavailableintheonlinestores.
Thiswouldallowustoworkonbiggerdatasetsandhavemoregeneralizableresults.
REFERENCES[1]Agiletribe.
Don'tabusesingletonpattern.
https://agiletribe.
wordpress.
com/2013/10/08/dont-abuse-singleton-pattern/,2013.
accessed:2017-01-06.
[2]Android.
AndroidLint-AndroidToolsProjectSite.
http://tools.
android.
com/tips/lint,2015.
accessed:2017-01-20.
[3]Apple.
Threadingprogrammingguide.
https://developer.
apple.
com/library/ios/documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.
html,2014.
accessed:2017-01-06.
[4]Apple.
Performancetips.
https://developer.
apple.
com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips/PerformanceTips.
html,2015.
accessed:2017-01-06.
[5]Apple.
TheSingletonpatterninCocoa.
https://developer.
apple.
com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Singleton.
html#//appleref/doc/uid/TP40008195-CH49-SW1,2015.
accessed:2016-10-20.
[6]Apple.
Worklessinthebackground.
https://developer.
apple.
com/library/ios/documentation/Performance/Conceptual/EnergyGuide-iOS/WorkLessInTheBackground.
html#//appleref/doc/uid/TP40015243-CH22-SW1,2015.
accessed:2016-10-20.
[7]Apple.
Appledeveloperdocumentation.
https://developer.
apple.
com/develop/,2017.
accessed:2017-01-09.
[8]F.
Ash.
Introductiontomvvm.
https://www.
objc.
io/issues/13-architecture/mvvm/,2014.
accessed:2017-01-06.
[9]Atom.
Linterswiftc.
https://atom.
io/packages/linter-swiftc,2016.
ac-cessed:2017-01-09.
[10]A.
Bartel,J.
Klein,Y.
LeTraon,andM.
Monperrus.
Dexpler:convertingandroiddalvikbytecodetojimpleforstaticanalysiswithsoot.
InProc.
oftheACMSIGPLANInternationalWorkshoponStateoftheArtinJavaProgramanalysis,pages27–38.
ACM,2012.
[11]W.
H.
Brown,R.
C.
Malveau,H.
W.
S.
McCormick,andT.
J.
Mowbray.
AntiPatterns:RefactoringSoftware,Architectures,andProjectsinCrisis.
JohnWiley&Sons,Inc.
,NewYork,NY,USA,1stedition,1998.
[12]A.
CarrollandG.
Heiser.
Ananalysisofpowerconsumptioninasmartphone.
Proceedingsofthe2010USENIXconferenceonUSENIXannualtechnicalconference,pages21–21,2010.
[13]E.
Chris.
Lighterviewcontrollers.
https://www.
objc.
io/issues/1-view-controllers/lighter-view-controllers/,2013.
accessed:2017-01-06.
[14]P.
CingolaniandJ.
Alcala-Fdez.
jfuzzylogic:ajavalibrarytodesignfuzzylogiccontrollersaccordingtothestandardforfuzzycontrolprogramming.
InternationalJournalofComputationalIntelligenceSystems,6(sup1):61–75,2013.
[15]Clang.
Clangstaticanalyzer.
http://clang-analyzer.
llvm.
org/,2016.
accessed:2016-10-20.
[16]N.
Cliff.
Dominancestatistics:Ordinalanalysestoanswerordinalquestions.
PsychologicalBulletin,114(3):494,1993.
[17]J.
Cohen.
Statisticalpoweranalysisforthebehavioralsciences(rev.
LawrenceErlbaumAssociates,Inc,1977.
[18]J.
Cohen.
Apowerprimer.
Psychologicalbulletin,112(1):155,1992.
[19]W.
Colin.
Singletons:You'redoingthemwrong.
http://cocoasamurai.
blogspot.
fr/2011/04/singletons-your-doing-them-wrong.
html,2011.
ac-cessed:2017-01-06.
[20]T.
CookandD.
Campbell.
Quasi-experimentation:Design&analysisissuesforeldsettings.
HoughtonMifinCompany,1979.
[21]Crowd.
Collaborativelistofopen-sourceiosapps.
https://github.
com/dkhamsing/open-source-ios-apps,2016.
accessed:2016-10-20.
[22]M.
Egele,C.
Kruegel,E.
Kirda,andG.
Vigna.
PiOS:DetectingPrivacyLeaksiniOSApplications.
InNDSS,2011.
[23]FauxPas.
Fauxpas.
http://fauxpasapp.
com/#highlights,2016.
accessed:2017-01-09.
[24]M.
Fowler.
Refactoring:improvingthedesignofexistingcode.
PearsonEducationIndia,1999.
[25]M.
GjoshevskiandT.
Schweighofer.
SmallScaleAnalysisofSourceCodeQualitywithregardtoNativeAndroidMobileApplications.
In4thWorkshoponSoftwareQuality,Analysis,Monitoring,Improvement,andApplications,pages2–10,Maribor,Slovenia,2015.
CEURVol.
1375.
[26]M.
Gottschalk,J.
Jelschen,andA.
Winter.
SavingEnergyonMobileDevicesbyRefactoring.
28thInternationalConferenceonInformaticsforEnvironmentalProtection(EnviroInfo2014),2014.
[27]G.
Hecht.
Detectionandanalysisofimpactofcodesmellsinmobileapplications.
Theses,UniversiteLille1:SciencesetTechnologies;UniversiteduQuebec`aMontreal,Nov.
2016.
[28]G.
Hecht,B.
Omar,R.
Rouvoy,N.
Moha,andL.
Duchien.
Trackingthesoftwarequalityofandroidapplicationsalongtheirevolution.
In30thIEEE/ACMInternationalConferenceonAutomatedSoftwareEngineering,page12.
IEEE,2015.
[29]G.
Hecht,R.
Rouvoy,N.
Moha,andL.
Duchien.
DetectingAntipatternsinAndroidApps.
ResearchReportRR-8693,INRIALille;INRIA,Mar.
2015.
[30]M.
Hector.
Defeatingtheantipatternbully.
https://krakendev.
io/blog/antipatterns-singletons,2015.
accessed:2017-01-06.
[31]Infer.
Infer.
http://fbinfer.
com/,2016.
accessed:2016-04-29.
[32]G.
JeffandS.
Conrad.
Architectingiosappswithviper.
https://www.
objc.
io/issues/13-architecture/viper/,2014.
accessed:2016-10-20.
[33]F.
Khomh,M.
D.
Penta,andY.
G.
Gueheneuc.
Anexploratorystudyoftheimpactofcodesmellsonsoftwarechange-proneness.
In200916thWorkingConferenceonReverseEngineering,pages75–84,Oct2009.
[34]C.
Kyle.
Whysingletonsarebad.
http://www.
kyleclegg.
com/blog/9272013why-singletons-are-bad,2013.
accessed:2017-01-06.
[35]M.
Linares-Vasquez,S.
Klock,C.
McMillan,A.
Sabane,D.
Poshyvanyk,andY.
-G.
Gueheneuc.
Domainmatters:bringingfurtherevidenceoftherelationshipsamonganti-patterns,applicationdomains,andquality-relatedmetricsinjavamobileapps.
InProc.
ofthe22ndInternationalConferenceonProgramComprehension,pages232–243.
ACM,2014.
[36]G.
Macbeth,E.
Razumiejczyk,andR.
D.
Ledesma.
Cliff'sdeltacalculator:Anon-parametriceffectsizeprogramfortwogroupsofobservations.
UniversitasPsychologica,10(2):545–555,2011.
[37]U.
A.
Mannan,I.
Ahmed,R.
A.
M.
Almurshed,D.
Dig,andC.
Jensen.
Understandingcodesmellsinandroidapplications.
InProceedingsoftheInternationalWorkshoponMobileSoftwareEngineeringandSystems,pages225–234.
ACM,2016.
[38]F.
Marcelo.
25iosappperformancetipsandtricks.
http://www.
raywenderlich.
com/31166/25-ios-app-performance-tips-tricks#memwarnings,2013.
accessed:2017-01-06.
[39]F.
Marcelo.
25iosappperformancetipsandtricks.
https://www.
raywenderlich.
com/31166/25-ios-app-performance-tips-tricks#mainthread,2013.
accessed:2017-10-06.
[40]F.
Marcelo.
25iosappperformancetipsandtricks.
https://www.
raywenderlich.
com/31166/25-ios-app-performance-tips-tricks#cache,2013.
accessed:2017-01-06.
[41]Z.
Marcus.
Massiveviewcontroller.
http://www.
cimgf.
com/2015/09/21/massive-view-controllers/,2015.
accessed:2017-01-06.
[42]M.
Matteo.
Howtokeepyourviewcontrollerssmallforabettercodebase.
http://matteomanferdini.
com/how-to-keep-your-view-controllers-small-for-a-better-code-base/,2014.
accessed:2017-01-06.
[43]K.
Maxwell.
Appliedstatisticsforsoftwaremanagers.
PrenticeHall,2002.
[44]T.
J.
McCabe.
Acomplexitymeasure.
IEEETransactionsonSoftwareEngineering,SE-2(4):308–320,Dec1976.
[45]R.
MinelliandM.
Lanza.
Softwareanalyticsformobileapplications–insightsandlessonslearned.
In17thEuropeanConferenceonSoftwareMaintenanceandReengineering(CSMR),pages144–153.
IEEE,2013.
[46]N.
Moha,Y.
-G.
Gueheneuc,L.
Duchien,andA.
-F.
LeMeur.
DECOR:Amethodforthespecicationanddetectionofcodeanddesignsmells.
SoftwareEngineering,IEEETransactionson,36(1):20–36,2010.
[47]Neo4j.
NEO4J.
http://neo4j.
com.
accessed:2017-01-09.
[48]Neo4j.
Cypherquerylanguage.
http://neo4j.
com/docs/stable/cypher-query-lang.
html,2016.
accessed:2016-05-17.
[49]Objc.
io.
Objc.
io.
https://www.
objc.
io/,2017.
accessed:2017-01-09.
[50]OCLint.
Oclint.
http://oclint.
org/,2016.
accessed:2016-04-29.
[51]S.
Olbrich,D.
S.
Cruzes,V.
Basili,andN.
Zazworka.
Theevolutionandimpactofcodesmells:Acasestudyoftwoopensourcesystems.
InProceedingsofthe20093rdInternationalSymposiumonEmpiricalSoftwareEngineeringandMeasurement,ESEM'09,pages390–400,Washington,DC,USA,2009.
IEEEComputerSociety.
[52]OpenTheFile.
Whatisanipaleandhowdoiopenanipalehttp://www.
openthele.
net/extension/ipa,2015.
accessed:2016-05-17.
[53]Oracle.
Javaplatform,microedition(javame).
http://www.
oracle.
com/technetwork/java/embedded/javame/index.
html.
accessed:2017-01-09.
[54]L.
Raymond.
Cleanswiftiosarchitectureforxingmassiveviewcontroller.
http://clean-swift.
com/clean-swift-ios-architecture/,2015.
accessed:2017-01-06.
[55]Raywenderlich.
Raywenderlich.
https://www.
raywenderlich.
com/,2016.
accessed:2017-01-09.
[56]Realm.
Swiftlint.
https://github.
com/realm/SwiftLint,2016.
accessed:2017-01-09.
[57]J.
Reimann,M.
Brylski,andU.
Amann.
ATool-SupportedQualitySmellCatalogueForAndroidDevelopers.
InProc.
oftheconfer-enceModellierung2014intheWorkshopModellbasierteundmodell-getriebeneSoftwaremodernisierung–MMSM2014,2014.
[58]J.
Reimann,M.
Seifert,andU.
Amann.
Onthereuseandrecommenda-tionofmodelrefactoringspecications.
Software&SystemsModeling,12(3):579–596,2013.
[59]J.
Romano,J.
D.
Kromrey,J.
Coraggio,andJ.
Skowronek.
Appropriatestatisticsforordinalleveldata:Shouldwereallybeusingt-testandcohen'sdforevaluatinggroupdifferencesonthensseandothersurveys.
InannualmeetingoftheFloridaAssociationofInstitutionalResearch,pages1–33,2006.
[60]I.
J.
M.
Ruiz,M.
Nagappan,B.
Adams,andA.
E.
Hassan.
Understandingreuseintheandroidmarket.
In20thInternationalConferenceonProgramComprehension(ICPC),pages113–122.
IEEE,2012.
[61]D.
J.
Sheskin.
Handbookofparametricandnonparametricstatisticalprocedures.
crcPress,2003.
[62]SonarQube.
Sonarqube.
http://www.
sonarqube.
org/,2015.
accessed:2016-10-20.
[63]K.
Soroush.
Massiveviewcontroller.
http://khanlou.
com/2015/12/massive-view-controller/,2015.
accessed:2017-01-06.
[64]SourceForge.
Pmd.
https://pmd.
github.
io/,2016.
accessed:2016-05-30.
[65]stackoverow.
Stackoverow.
http://stackoverow.
com/,2017.
ac-cessed:2017-01-09.
[66]P.
Stephen.
Avoidingsingletonabuse.
https://www.
objc.
io/issues/13-architecture/singletons/#avoiding-singletons,2014.
accessed:2017-01-06.
[67]A.
StraussandJ.
Corbin.
Groundedtheorymethodology:Anoverview.
InN.
K.
DenzinandY.
S.
Lincoln,editors,HandbookofQualitativeResearch,pages273–285,ThousandOaks,CA,1994.
SagePublications.
[68]M.
Szydlowski,M.
Egele,C.
Kruegel,andG.
Vigna.
Challengesfordynamicanalysisofiosapplications.
InOpenProblemsinNetworkSecurity,pages65–77.
Springer,2012.
[69]Tailor.
Tailorswiftstaticanalyzer.
https://tailor.
sh/,2016.
accessed:2016-10-20.
[70]P.
Terence.
Objc.
g4.
https://github.
com/antlr/grammars-v4/tree/master/objc,2015.
accessed:2017-01-06.
[71]P.
Terence.
Swift.
g4.
https://github.
com/antlr/grammars-v4/blob/master/swift/Swift.
g4,2016.
accessed:2017-01-06.
[72]N.
Tsantalis,T.
Chaikalis,andA.
Chatzigeorgiou.
Jdeodorant:Identica-tionandremovaloftype-checkingbadsmells.
InSoftwareMaintenanceandReengineering,2008.
CSMR2008.
12thEuropeanConferenceon,pages329–331.
IEEE,2008.
[73]J.
W.
Tukey.
ExploratoryDataAnalysis.
Addison-Wesley,1977.
[74]R.
Vallee-Rai,P.
Co,E.
Gagnon,L.
Hendren,P.
Lam,andV.
Sundaresan.
Soot-ajavabytecodeoptimizationframework.
InProc.
oftheconferenceoftheCentreforAdvancedStudiesonCollaborativeresearch,page13.
IBMPress,1999.
[75]D.
Verloop.
CodeSmellsintheMobileApplicationsDomain.
PhDthesis,TUDelft,DelftUniversityofTechnology,2013.
[76]L.
A.
Zadeh.
Fuzzylogicanditsapplicationtoapproximatereasoning.
InIFIPCongress,pages591–594,1974.

cyun29元/月,香港CN2 GIA云服务器低至起;香港多ip站群云服务器4核4G

cyun怎么样?cyun蓝米数据是一家(香港)藍米數據有限公司旗下品牌,蓝米云、蓝米主机等同属于该公司品牌。CYUN全系列云产品采用KVM架构,SSD磁盘阵列,优化线路,低延迟,高稳定。目前,cyun推出的香港云服务器性价比超高,香港cn2 gia云服务器,1核1G1M/系统盘+20G数据盘,低至29元/月起;香港多ip站群云服务器,16个ip/4核4G仅220元/月起,希望买香港站群服务器的站长...

racknerd:美国大硬盘服务器,$599/月,Ryzen7-3700X/32G内存/120gSSD+192T hdd

racknerd当前对美国犹他州数据中心的大硬盘服务器(存储服务器)进行低价促销,价格跌破眼镜啊。提供AMD和Intel两个选择,默认32G内存,120G SSD系统盘,12个16T HDD做数据盘,接入1Gbps带宽,每个月默认给100T流量,5个IPv4... 官方网站:https://www.racknerd.com 加密数字货币、信用卡、PayPal、支付宝、银联(卡),可以付款! ...

ManSora:英国CN2 VPS,1核/1GB内存/10GB SSD/1TB流量/100Mbps/KVM,$18.2/月

mansora怎么样?mansora是一家国人商家,主要提供沪韩IEPL、沪日IEPL、深港IEPL等专线VPS。现在新推出了英国CN2 KVM VPS,线路为AS4809 AS9929,可解锁 Netflix,并有永久8折优惠。英国CN2 VPS,$18.2/月/1GB内存/10GB SSD空间/1TB流量/100Mbps端口/KVM,有需要的可以关注一下。点击进入:mansora官方网站地址m...

ios11.0.2为你推荐
2019年全国职业院校技能大赛签约xp内存nod32functionscss日照职业技术学院RIZHAOCouriercss支持ipadpreviouslybitipad如何上网如何用手机流量在IPAD上上网ipad连不上wifiipad无法加入网络怎么回事
腾讯云盘 securitycenter 樊云 狗爹 BWH mediafire下载 mobaxterm 大容量存储器 域名评估 免费防火墙 国外免费asp空间 idc查询 申请网页 视频服务器是什么 学生服务器 中国电信宽带测速 hdsky 聚惠网 亿库 第八届中美互联网论坛 更多