Upload
lyhanh
View
215
Download
0
Embed Size (px)
Citation preview
Short Bio ' Model'Driven'Engineering'(2000'–'2010)'◦ Elabora@on'of'modeling'language'◦ Model'transforma@on'(OMG'–'QVT)'◦ Model'Interoperability'◦ Itera@ve'Modeling'
' SoMware'Maintenance'(2010'–'now)'◦ Code'Source'evolu@on'◦ Internet'Maintenance'◦ Web'ecosystem'◦ InternetQspeed'Maintenance'
09/02/15' IWAISE'14' 2'
LIP6'
LaBRI'
Internet Application ' Runs'on'the'Internet'(='Internet'Communica@on)'
' Uses'Internet'resources'
' Provides'Internet'resources'
' Composed(of(at(least(2(sides((Front(/(Back)(
09/02/15' IWAISE'14' 3'
Traditional Software Engineering ' Requirements'are'defined'a'priori''◦ by'the'product'owner'
' Tes@ng'and'Evalua@on'are'done'before'deployment''◦ by'the'product'owner'
' Evolu@on'is'driven'by'the'product'owner'
09/02/15' IWAISE'14' 5'
Internet Speed Software Engineering ' Requirements'neither'change'and'are'unreachable'◦ Sell'products'and'Make'more'money'◦ Exchange'short'message'and'A_ract'more'people'
' Evalua@on'is'done'aMer'the'deployment'◦ By'looking'at'the'user'behavior''
' Evolu@on'is'infinitely'driven'by'the'Market''' 'and'by'the'Internet'
09/02/15' IWAISE'14' 6'
Example: Cdiscount ' Electronic'Commerce'Company'
' Best'seller'of'TV,'Wine,'etc…'
' ''
' Requirements:'Sell'products'!'
' Evalua@on:'Sales'!'
' Life'of'a'page'is'very'short'!'
09/02/15' IWAISE'14' 7'
Software Maintenance on Internet ' Perfec@ve'Maintenance'(new)'
' Correc@ve'Maintenance'(fix)'
' Adap@ve'Maintenance'(update)'
' More(than(100(men(for(CDiscount(
09/02/15' IWAISE'14' 8'
Challenges ' Be'able'to'address'maintenance'issues'at'the'internet'speed'
' =>'Reduce'the'@me'
' =>'Reduce'the'cost'
' =>'Improve'quality'
' Evalua@on'via'Observa@on'(Customer'Behavior)'
09/02/15' IWAISE'14' 9'
Example 1: Track with BigData ' Req:'Track'customer'(Perfec@ve'Maintenance)'
' Record(all(ac?ons(performed(by(the(customers(
' Use(BigData(to(analyse(!(
09/02/15' IWAISE'14' 10'
Example 2: Moving to MEAN ' Req:'improve'technology'(adap@ve'maintenance)'
' Add(angular(components(
' Integrate(Node(and(MongoDB(
09/02/15' IWAISE'14' 11'
Prediction Approaches ' SoMware'Maintenance'is'about'80%'of'the'project'cost''
' A'predic@on'approach'aims''◦ to'an@cipate'the'next'maintenance'opera@ons'◦ or'to'limit'them'
' Approaches:'◦ MDA'◦ Architecture'and'refactoring'
09/02/15' IWAISE'14' 12'
Predict with Model Driven Development ' Three'levels'of'abstrac@on'◦ CIM:'Requirements'◦ PIM:'Analysis,'Abstract'Design'◦ PSM:'Concrete'Design'
' Code'Genera@on'/'Model'Transforma@on'
' How'to'use'MD'for'Internet'Speed'SoMware'Maintenance?'
09/02/15' IWAISE'14' 13'
MD and BigData ' CIM'◦ All'the'ac@ons'should'be'recorded'◦ An'analysis'is'a'request'on'the'ac@ons'
' PIM'◦ How'to'capture'ac@ons?'◦ What'is'an'ac@on?''◦ What'is'an'analysis?'
' PSM'◦ How'to'model'BigData'plakorm?'
09/02/15' IWAISE'14' 14'
MD and MEAN ' CIM'◦ S@ll'the'same'
' PIM'◦ S@ll'the'same'◦ How(to(model(Front(End?(
' PSM'◦ How'to'model'Angular?'
09/02/15' IWAISE'14' 15'
Predict with Architecture and Metrics ' A'good'architecture'helps'maintenance'
' Measure'how'good'is'the'architecture'with'metrics'
' Use'refactoring'to'improve'the'architecture'
09/02/15' IWAISE'14' 17'
Architecture and BigData ' How'to'move'from'3'@ers'architecture'to'BigData?'◦ NoSQL'◦ Map'&'Reduce'
' Is'there'any'useful'metrics?'
?'
09/02/15' IWAISE'14' 18'
Architecture and MEAN ' How'to'move'from'ASP.net'to'Angular?'◦ MonoQpage'◦ TwoQway'synchroniza@on'◦ JavaScript'◦ REST'
' Is'there'any'metrics'?'
09/02/15' IWAISE'14' 19'
Internet-speed Architecture and Metrics ' Architecture'variability'◦ No'schema'◦ Dynamic'◦ Cloud'
' Metrics'◦ Mainly'OO'◦ No'universal'predictor'
09/02/15' IWAISE'14' 20'
Predict or Replay ' Is'it'really'possible'to'predict'at'the'internet'speed?'
' Instead,'can'we'replay'(and'improve)'exis@ng'maintenance'opera@ons?'
09/02/15' IWAISE'14' 21'
Replay: Challenges ' Context'mapping'◦ Find'applica@ons'that'share'the'same'maintenance'issues'
' Observa@on'gathering'◦ Observe'these'applica@ons'and'gather'the'performed'maintenance'opera@ons'
' Evalua@on'measuring'◦ Rank'the'performed'opera@ons'
' Replay'◦ Adapt'and'perform'new'maintenance'opera@ons'
09/02/15' IWAISE'14' 22'
First Attempt: Library Migration ' Update'third'party'library'(Adap@ve'Maintenance)'◦ More'than'one'dependent'library'for'any'large'applica@on'(>'10'kloc)'◦ Reuse'code'≈'Wri_en'code''◦ Maven:'70'000'Libraries,'70'millions'of'libraries'
' Issues:'◦ Which'library'to'consider?'Which'one'to'select?'◦ How'to'modify'the'applica@on?'Which'maintenance'opera@ons?'
09/02/15' IWAISE'14' 23'
Observe Existing Library Migrations ' Observe'Java'Applica@ons'that'already'performed'a'library'migra@on'
' Create'graph'of'migra@ons'
' Measure'the'trends'
' Iden@fy'maintenance'opera@on'
' =>'Can'be'used'as'guidelines'!'
Log4J&
Logback&Slf4J&
09/02/15' IWAISE'14' 24'
How to find library migrations? ' Look'at'all'the'versions'of'exis@ng'applica@ons'and'detect'the'used'libraries'
' Iden@fy'two'successive'versions'where'one'library'is'removed'and'another'one'is'added'
JUnit& JUnit& TestNG& TestNG&
Deal'with'false'posi@ve'
09/02/15' IWAISE'14' 25'
Results = Trends
Migration library graph Categories and trends
Migration evolution graph Period of migration
09/02/15' IWAISE'14' 26'
How to find Maintenance operations? ' Observe'library'migra@ons'to'iden@fy'maintenance'opera@ons'
' With'the'intent'to'replay'them'
Before' AMer'
09/02/15' IWAISE'14' 27'
Line& Symbol&
4' Log.getLog'
9' Log.getLog'
11' Log.fatal'
Line& Symbol&
4' Logger.getLogger'
9' Logger.getLogger'
11' Logger.error'
Diff'(unix)(
REM$(between$L4$and$L5)$:$${Log.getLog}$ADD$:$(between$L4$and$L5)${Logger.getLogger}'
« migration » Hunk if REM$& ADD$non empty
3'hunks'
09/02/15' IWAISE'14' 28'
Synthesis on Library Migration ' We'can'◦ observe'trends'of'migra@on'◦ gather'the'performed'maintenance'opera@ons,'
' By'analysing'these'opera@ons,'we'can'◦ adapt'them'◦ replay'them'
09/02/15' IWAISE'14' 29'
How to replay? ' Create'a'sample'of'exis@ng'applica@on'◦ Popula@on,'Representa@veness,'Efficiency,'etc.'
' Analyse'the'sample'◦ Source'code,'Commits,'Issues,'Requirements,'etc.'
' Rank'the'effect'◦ Effect'observa@on,'Methodology'
' Abstract'maintenance'opera@on'◦ AST'diff'
' Perform'maintenance'
09/02/15' IWAISE'14' 30'
Ongoing research ' Sampling'and'performing'analyses'◦ Harmony'(Java),'DigIt'(Ruby)'
' Abstract'maintenance'opera@on'◦ GumTree''
' Age'of'an'Internet'Applica@on'◦ Genera@on'of'updates'
09/02/15' IWAISE'14' 31'
Harmony ' Build'random'or'constrainted'samples'from'exis@ng'Open'Source'plakorms'(GitHub,'GoogleCode,'…)'
' Code'your'analysis'on'top'of'an'abstract'framework'
=>&Automa8c&run&of&the&analysis&&h_ps://code.google.com/p/harmony/'
&
09/02/15' IWAISE'14' 32'
Age of an Internet Application
09/02/15' IWAISE'14' 34'
Artefact'A''(Version'1)'
Artefact'B'''(Version'2)'
Depends(on(
Depends(on(
Version'1' Jan.'2012'
Version'2' Oct.'2012'
Version'3' Oct.'2013'
Version'1' Jan.'2012'
Version'2' Feb.'2012'
Version'3' Oct.'2013'
Applica@on'
Updating application ' Analyze'artefact'to'iden@fy'possible'updates'
' Find'applica@ons'that'performed'some'of'the'updates'
' Measure'the'effects'
09/02/15' IWAISE'14' 35'
Version'1' Jan.'2012'
Version'2' Oct.'2012'
Version'3' Oct.'2013'
Artefact'Change'Analyze'
Replay and Big Data? ' Few'exis@ng'applica@ons'
' However,'already'iden@fying'some'opera@ons'(Hadoop,'Spark,'…)'
09/02/15' IWAISE'14' 36'
Replay and MEAN? ' More'exis@ng'applica@ons'
' Many'framework,'languages'
' Iden@fying'migra@on'opera@ons'(from'3'@ers)'
09/02/15' IWAISE'14' 37'