Upload
tom-mens
View
77
Download
0
Embed Size (px)
Citation preview
AnalyzingtheEvolu1onofTes1ngLibraryUsage
inOpenSourceJavaProjects
1
AhmedZEROUALI,TomMENS
SoDwareEngineeringLab,UniversityofMons,Belgium
SANER2017EarlyResearchAchievements—Klagenfurt,Austria,February2017
Mo1va1on
2
soDwareproject
library1
library2
libraryn
…
soDwareprojectsoDware
project
library1
library1
library1
library1
library1
library1
Mo1va1on
3
soDwareproject
library1
library2
libraryn
…
soDwareprojectsoDware
project
library1
library1
library1
library1
library1
library1
Mo1va1on
4
soDwareproject
library1
library2
libraryn
…
so0waredeveloper
WhichlibraryshouldIuse?WhenshouldIupgrade?WhenshouldImigrate?Whatistheimpact?
Whatistheeffortinvolved?
library1
library1
library1
Mo1va1on
5
librarymaintainer
soDwareproject
library1
library2
libraryn
…
Whousesmylibraryandhow?Howtostayaheadofcompe11on?
Howtoavoidusersmigra1ngtootherlibraries?WhenshouldIreleaselibraryupdates?
Focus
6
Mostpopularprogramminglanguage[1]
>900kofopensourceJavaprojects.
[1]AccordingtoTIOBEIndexforJanuary2017h_p://www.1obe.com/1obe-index/[2]Accordingtoh_ps://mvnrepository.com/open-source/tes1ng-frameworks
MostpopularJavates@ngandmockinglibraries[2]
Mo1va1on
7h_p://blog.takipi.com/we-analyzed-60678-libraries-on-github-here-are-the-top-100/(April2015)
Mo1va1on
8mvnrepository.com/open-source/tes1ng-frameworksmvnrepository.com/open-source/mocking
MostFrequentlyUsedTes1ng-relatedLibraries
9
AssertJ
MostFrequentlyUsedTes1ng-relatedLibraries
10
Considered:20,688JavaprojectsonGitHubExcluded:• projects<2years• unforkedprojects• forks• projectsnotusingtheselectedlibrariesRetained:4,532Javaprojects
Dataset
11
Metrics Value
ConsideredJavaprojects
20,688
Projectsusingatleastoneoftheconsideredlibraries
4,532
Commits 125,580
Sourcefiles 10,033,726
Tes1ngrelatedimportstatements
31,264,586
Whichlibrariesareusedmostfrequently?
12
JUnitistheundisputedkingofJavates1nglibraries.Mockitoismorepopularthanitscompe1tors.
Whenarelibrariesintroducedinaproject’slife1me?
13
Whichlibrariesareusedinaproject’slife1me?
14
Whichlibrariesareusedsimultaneouslyinprojects?
15
Mockito EasyMock PowerMock
JUnit 100% 7% 12% 23% 4% 32%
JUnit TestNG Spring Hamcrest AssertJ
9% 5%TestNG 64% 100% 13% 18% 6% 33% 12% 4%Spring 99% 12% 100% 37% 8% 53% 18% 10%
59% 10% 10%AssertJ 95% 16% 23% 41% 100% 61%
Hamcrest 99% 9% 18% 100% 7%11% 15%
Mockito 98% 11% 19% 42% 8% 100% 8% 13%EasyMock 77% 14% 22% 24% 5% 28% 100% 10%
87% 19% 100%PowerMock 99% 9% 23% 47% 13%
Whichlibrariesareusedsimultaneouslyinprojects?
• JUnitisveryfrequentlyaccompanied(>94%)byHamcrest,AssertJ,Spring,MockitoorPowerMock
• JUnitisrarelyusedwithcompe1torTestNG(7%)
• PowerMockismostlyusedasanextensionofMockito(86.5%)
16
Howfrequentlydolibrariesco-occuratfilelevel?
17
Propor1onaldistribu1onofJavafiles(inallprojects)rela1ngtopairsofmockinglibraries.
Doprojectsmigratetocompe1nglibraries?Permanentmigra1ons
18
library1 library2
library1 library2
Doprojectsmigratetocompe1nglibraries?Temporarymigra1ons
19
Howfrequentlyarelibrariesusedover1me?
20
Tes1ngandmatchinglibraries->
<-Mockinglibraries
Limita1ons
21
q OpensourceJavaProjectsusingMavenasthebuildautoma1ontool.q Project’slife1metwoyears.
q Importstatements.
MainFindings
22
• Manylibrariesareusedsimultaneously.
• Manyoftheconsideredlibrariescomplementone
another,somearecompe1ng.
• 5%oftheconsideredprojectsweresubjecttolibrary
migra1ons.
FutureWork/OpenQues1ons
23
so0waredeveloper
librarymaintainer
Howtoanalyselibraryevolu1onpa_ernstorecommend• whentoupgradetoanewlibraryversion?• whentomigratetoacompe1nglibrary?• howtoupgradeormigrate(e.g.effort&impact)?
Howtoanalyselibraryusagepa_ernsto• avoidlibrarymigra1on?• facilitatelibraryupgrading?• maximiseusageoflibraryfunc1onali1es?• detectopportuni1esfornewfunc1onali1es?