83
Specification and Detection of SOA Antipatterns Francis Palma [email protected] Ptidej Team, DGIGL, École Polytechnique de Montréal Latece, Département d'informatique, Université du Québec à Montréal Supervisors: Dr. Naouel Moha and Dr. Yann-Gaël Guéhéneuc

Specification and Detection of SOA Antipatterns

Embed Size (px)

Citation preview

Specification and Detection of SOA Antipatterns

Francis Palma [email protected]

Ptidej Team, DGIGL, École Polytechnique de Montréal

Latece, Département d'informatique, Université du Québec à Montréal

Supervisors: Dr. Naouel Moha and Dr. Yann-Gaël Guéhéneuc

B.Sc. in Computer Science and Engineering 2005

2

B.Sc. in Computer Science and Engineering 2005

M.Sc. in Software Engineering 2010

2

B.Sc. in Computer Science and Engineering 2005

M.Sc. in Software Engineering 2010

Research Collaborator 2011 Jan – 2011 Aug

2

B.Sc. in Computer Science and Engineering 2005

M.Sc. in Software Engineering 2010

Research Collaborator 2011 Jan – 2011 Aug

PhD Candidate… 2011 Fall to present

2

Good Things in Lille…

Background

Background

• Traditional architectural models vs. Service-Oriented Architecture (SOA)

• Service-based Systems (SBSs) [Palma et al. 2013]

• Different SOA technological/architectural choices:

o SOAP-based Web service

o SCA (Service Component Architecture)

o REST-style (REpresentational State Transfer), etc.

Specification and Detection of SOA Antipatterns 3

SOA Technologies

XML-RPC-based Web services SOAP-based Web services

Service Component Architecture REST-style

Specification and Detection of SOA Antipatterns 4

An Example

SBSs evolve to fit new user requirements, execution contexts:

- may degrade design and quality of service (QoS)

- may cause the appearance of common poor solutions: Antipatterns

Specification and Detection of SOA Antipatterns 5

Motivation

• Maintenance and evolution phase consumes resources of more than 60%

(Harrison and Cook, 1990)

• SOA antipatterns:

- evolution may introduce antipatterns or

- existing antipatterns might hinder evolution

Main objective:

To ease the maintenance and evolution of SBSs by detecting SOA antipatterns

• Detection of SOA antipatterns

- assessing statically: the design quality

- assessing dynamically: the QoS

Specification and Detection of SOA Antipatterns 6

Antipatterns Example

Tiny Service

Few Methods Low Cohesion Very High Coupling

Specification and Detection of SOA Antipatterns 7

Antipatterns Example

Tiny Service Multi Service

Many Methods Very Low Cohesion High Response Time Low Availability

Few Methods Low Cohesion Very High Coupling

Specification and Detection of SOA Antipatterns 7

More Examples… DropBox Server Response 1:

Header: { x-frame-options=[SAMEORIGIN], x-dropbox-request-id=[b9a25269beb2c75fa7d7e21e1638bb9d], Connection=[keep-alive], Server=[nginx], pragma=[no-cache], cache-control=[no-cache], x-server-response-time=[64], x-dropbox-http-protocol=[None], set-cookie=[gvc=MjExODUyMTE….. expires=Tue, 26 Mar 2019 18:34:14 GMT], Transfer-Encoding=[chunked], Date=[Thu, 27 Mar 2014 18:34:14 GMT], Content-Type=[application/json], X-RequestId=[c64da98881e565a90a5dd9aecea9f049] } Body: { "hash": "f9d780e7655fe43261b4de9ec9a926eb", "revision": 2, "rev": "21e8a5a19", "thumb_exists": false, "bytes": 0, "modified": "Tue, 28 Jan 2014 21:45:31 +0000", "path": "/test", "is_dir": true, "icon": "folder", "root": "dropbox", "contents": [ { "revision": 3, "rev": "31e8a5a19", "thumb_exists": false, "bytes": 4, "modified": "Tue, 28 Jan 2014 21:46:30 +0000", "client_mtime": "Tue, 28 Jan 2014 21:46:30", "path": "/test/test.txt", "is_dir": false, "icon": "page_white_text", "root": "dropbox", "mime_type": "text/plain", "size": "4 bytes“ } ], "size": "0 bytes“ } 8

More Examples… DropBox Server Response 1:

Header: { x-frame-options=[SAMEORIGIN], x-dropbox-request-id=[b9a25269beb2c75fa7d7e21e1638bb9d], Connection=[keep-alive], Server=[nginx], pragma=[no-cache], cache-control=[no-cache], x-server-response-time=[64], x-dropbox-http-protocol=[None], set-cookie=[gvc=MjExODUyMTE….. expires=Tue, 26 Mar 2019 18:34:14 GMT], Transfer-Encoding=[chunked], Date=[Thu, 27 Mar 2014 18:34:14 GMT], Content-Type=[application/json], X-RequestId=[c64da98881e565a90a5dd9aecea9f049] } Body: { "hash": "f9d780e7655fe43261b4de9ec9a926eb", "revision": 2, "rev": "21e8a5a19", "thumb_exists": false, "bytes": 0, "modified": "Tue, 28 Jan 2014 21:45:31 +0000", "path": "/test", "is_dir": true, "icon": "folder", "root": "dropbox", "contents": [ { "revision": 3, "rev": "31e8a5a19", "thumb_exists": false, "bytes": 4, "modified": "Tue, 28 Jan 2014 21:46:30 +0000", "client_mtime": "Tue, 28 Jan 2014 21:46:30", "path": "/test/test.txt", "is_dir": false, "icon": "page_white_text", "root": "dropbox", "mime_type": "text/plain", "size": "4 bytes“ } ], "size": "0 bytes“ }

No hyperlinks to follow! No hyperlinks to follow!

No hyperlinks to follow! No hyperlinks to follow!

8

More Examples…

No hyperlinks to follow! No hyperlinks to follow!

No hyperlinks to follow! No hyperlinks to follow!

DropBox Server Response 1:

Header: { x-frame-options=[SAMEORIGIN], x-dropbox-request-id=[b9a25269beb2c75fa7d7e21e1638bb9d], Connection=[keep-alive], Server=[nginx], pragma=[no-cache], cache-control=[no-cache], x-server-response-time=[64], x-dropbox-http-protocol=[None], set-cookie=[gvc=MjExODUyMTE….. expires=Tue, 26 Mar 2019 18:34:14 GMT], Transfer-Encoding=[chunked], Date=[Thu, 27 Mar 2014 18:34:14 GMT], Content-Type=[application/json], X-RequestId=[c64da98881e565a90a5dd9aecea9f049] } Body: { "hash": "f9d780e7655fe43261b4de9ec9a926eb", "revision": 2, "rev": "21e8a5a19", "thumb_exists": false, "bytes": 0, "modified": "Tue, 28 Jan 2014 21:45:31 +0000", "path": "/test", "is_dir": true, "icon": "folder", "root": "dropbox", "contents": [ { "revision": 3, "rev": "31e8a5a19", "thumb_exists": false, "bytes": 4, "modified": "Tue, 28 Jan 2014 21:46:30 +0000", "client_mtime": "Tue, 28 Jan 2014 21:46:30", "path": "/test/test.txt", "is_dir": false, "icon": "page_white_text", "root": "dropbox", "mime_type": "text/plain", "size": "4 bytes“ } ], "size": "0 bytes“ } 8

More Examples… DropBox Server Response 2: Header: { x-frame-options=[SAMEORIGIN], x-dropbox-request-id=[cd12e1e844327464485842b11b530071], Connection=[keep-alive], Server=[nginx], pragma=[no-cache], cache-control=[no-cache], x-server-response-time=[110], x-dropbox-http-protocol=[None], set-cookie=[gvc=MzIwNTkxODQzNjQy.....; expires=Sat, 06 Apr 2019 22:11:47 GMT; Transfer-Encoding=[chunked], Date=[Mon, 07 Apr 2014 22:11:47 GMT], Content-Type=[application/json], X-RequestId=[d509463440ada422459335fd3c71d309] } Body: { "referral_link": "https://db.tt/AaWjP9HP", "display_name": "Francis Palma", "uid": 118690394, "country": "CA", "quota_info": { "datastores": 0, "shared": 293074019, "quota": 2147483648, "normal": 1661304356 }, "team": null, "email": "[email protected]" }

No hyperlinks to follow! No hyperlinks to follow!

No hyperlinks to follow! No hyperlinks to follow!

DropBox Server Response 1:

Header: { x-frame-options=[SAMEORIGIN], x-dropbox-request-id=[b9a25269beb2c75fa7d7e21e1638bb9d], Connection=[keep-alive], Server=[nginx], pragma=[no-cache], cache-control=[no-cache], x-server-response-time=[64], x-dropbox-http-protocol=[None], set-cookie=[gvc=MjExODUyMTE….. expires=Tue, 26 Mar 2019 18:34:14 GMT], Transfer-Encoding=[chunked], Date=[Thu, 27 Mar 2014 18:34:14 GMT], Content-Type=[application/json], X-RequestId=[c64da98881e565a90a5dd9aecea9f049] } Body: { "hash": "f9d780e7655fe43261b4de9ec9a926eb", "revision": 2, "rev": "21e8a5a19", "thumb_exists": false, "bytes": 0, "modified": "Tue, 28 Jan 2014 21:45:31 +0000", "path": "/test", "is_dir": true, "icon": "folder", "root": "dropbox", "contents": [ { "revision": 3, "rev": "31e8a5a19", "thumb_exists": false, "bytes": 4, "modified": "Tue, 28 Jan 2014 21:46:30 +0000", "client_mtime": "Tue, 28 Jan 2014 21:46:30", "path": "/test/test.txt", "is_dir": false, "icon": "page_white_text", "root": "dropbox", "mime_type": "text/plain", "size": "4 bytes“ } ], "size": "0 bytes“ } 8

More Examples… DropBox Server Response 2: Header: { x-frame-options=[SAMEORIGIN], x-dropbox-request-id=[cd12e1e844327464485842b11b530071], Connection=[keep-alive], Server=[nginx], pragma=[no-cache], cache-control=[no-cache], x-server-response-time=[110], x-dropbox-http-protocol=[None], set-cookie=[gvc=MzIwNTkxODQzNjQy.....; expires=Sat, 06 Apr 2019 22:11:47 GMT; Transfer-Encoding=[chunked], Date=[Mon, 07 Apr 2014 22:11:47 GMT], Content-Type=[application/json], X-RequestId=[d509463440ada422459335fd3c71d309] } Body: { "referral_link": "https://db.tt/AaWjP9HP", "display_name": "Francis Palma", "uid": 118690394, "country": "CA", "quota_info": { "datastores": 0, "shared": 293074019, "quota": 2147483648, "normal": 1661304356 }, "team": null, "email": "[email protected]" }

DropBox Server Response 1: Header: { x-frame-options=[SAMEORIGIN], x-dropbox-request-id=[b9a25269beb2c75fa7d7e21e1638bb9d], Connection=[keep-alive], Server=[nginx], pragma=[no-cache], cache-control=[no-cache], x-server-response-time=[64], x-dropbox-http-protocol=[None], set-cookie=[gvc=MjExODUyMTE….. expires=Tue, 26 Mar 2019 18:34:14 GMT], Transfer-Encoding=[chunked], Date=[Thu, 27 Mar 2014 18:34:14 GMT], Content-Type=[application/json], X-RequestId=[c64da98881e565a90a5dd9aecea9f049] } Body: { "hash": "f9d780e7655fe43261b4de9ec9a926eb", "revision": 2, "rev": "21e8a5a19", "thumb_exists": false, "bytes": 0, "modified": "Tue, 28 Jan 2014 21:45:31 +0000", "path": "/test", "is_dir": true, "icon": "folder", "root": "dropbox", "contents": [ { "revision": 3, "rev": "31e8a5a19", "thumb_exists": false, "bytes": 4, "modified": "Tue, 28 Jan 2014 21:46:30 +0000", "client_mtime": "Tue, 28 Jan 2014 21:46:30", "path": "/test/test.txt", "is_dir": false, "icon": "page_white_text", "root": "dropbox", "mime_type": "text/plain", "size": "4 bytes“ } ], "size": "0 bytes“ }

No hyperlinks to follow! No hyperlinks to follow!

No hyperlinks to follow! No hyperlinks to follow!

8

Alchemy Client Request: Header: { cache-control=[no-cache], content-type=[application/xml], connection=[keep-alive], host=[access.alchemyapi.com], accept=[application/xml], path=/calls/url/URLGetRankedNamedEntities?... get /calls/url/urlgetrankednamedentities?... user-agent=[Apache CXF 2.7.5], pragma=[no-cache] } Alchemy Server Response: Header: { content-type=[application/xml; charset=utf-8], cache-control=[no-cache], connection=[keep-alive], access-control-allow-origin=[*], content-length=[506], server=[nginx], date=[Fri, 15 Aug 2014 19:30:28 GMT] } Body: <?xml version="1.0" encoding="UTF-8"?> <results> <status>OK</status> <usage>By accessing AlchemyAPI or using information generated by AlchemyAPI, you are agreeing to be bound by the AlchemyAPI Terms of Use:http://www.alchemyapi.com/company/terms.html </usage> <url>http://www.cnn.com/2011/09/28/us/...</url> <language>english</language> <microformats> <a href="/cnn" rel="tag">cnn</a> </microformats> </results>

More Examples…

9

Alchemy Client Request: Header: { cache-control=[no-cache], content-type=[application/xml], connection=[keep-alive], host=[access.alchemyapi.com], accept=[application/xml], path=/calls/url/URLGetRankedNamedEntities?... get /calls/url/urlgetrankednamedentities?... user-agent=[Apache CXF 2.7.5], pragma=[no-cache] } Alchemy Server Response: Header: { content-type=[application/xml; charset=utf-8], cache-control=[no-cache], connection=[keep-alive], access-control-allow-origin=[*], content-length=[506], server=[nginx], date=[Fri, 15 Aug 2014 19:30:28 GMT] } Body: <?xml version="1.0" encoding="UTF-8"?> <results> <status>OK</status> <usage>By accessing AlchemyAPI or using information generated by AlchemyAPI, you are agreeing to be bound by the AlchemyAPI Terms of Use:http://www.alchemyapi.com/company/terms.html </usage> <url>http://www.cnn.com/2011/09/28/us/...</url> <language>english</language> <microformats> <a href="/cnn" rel="tag">cnn</a> </microformats> </results>

More Examples…

9

Alchemy Client Request: Header: { cache-control=[no-cache], content-type=[application/xml], connection=[keep-alive], host=[access.alchemyapi.com], accept=[application/xml], path=/calls/url/URLGetRankedNamedEntities?... get /calls/url/urlgetrankednamedentities?... user-agent=[Apache CXF 2.7.5], pragma=[no-cache] } Alchemy Server Response: Header: { content-type=[application/xml; charset=utf-8], cache-control=[no-cache], connection=[keep-alive], access-control-allow-origin=[*], content-length=[506], server=[nginx], date=[Fri, 15 Aug 2014 19:30:28 GMT] } Body: <?xml version="1.0" encoding="UTF-8"?> <results> <status>OK</status> <usage>By accessing AlchemyAPI or using information generated by AlchemyAPI, you are agreeing to be bound by the AlchemyAPI Terms of Use:http://www.alchemyapi.com/company/terms.html </usage> <url>http://www.cnn.com/2011/09/28/us/...</url> <language>english</language> <microformats> <a href="/cnn" rel="tag">cnn</a> </microformats> </results>

More Examples…

9

YouTube Client Request: Header: { cache-control=[no-cache],

content-type=[application/xml], connection=[keep-alive], host=[www.googleapis.com], accept=[application/xml], get/youtube/v3/subscriptions?mine=true&part=snippet&access_token=.. http/1.1=[null], user-agent=[Apache CXF 2.7.11], pragma=[no-cache]

} YouTube Server Response: Header: { x-frame-options=[SAMEORIGIN], content-type=[application/json; charset=UTF-8], cache-control=[private, max-age=300,must-revalidate,no-transform], x-xss-protection=[1; mode=block], x-content-type-options=[nosniff], expires=[Tue, 14 Oct 2014 17:57:26 GMT], etag=["PSjn-HSKiX6orvNhGZvglLI2lvk/PZz4CABe3efkukxgHuo_yc_qoJs"], content-length=[324], server=[GSE], alternate-protocol=[443:quic,p=0.01], date=[Tue, 14 Oct 2014 17:57:26 GMT], vary=[X-Origin, Referer, Origin] } Body: { "kind": "youtube#videoListResponse", "etag": "\"PSjn-HSKiX6orvNhGZvglLI2lvk/PZz4CABe3efkukxgHuo_yc_qo", "pageInfo": { "totalResults": 1, "resultsPerPage": 1 }, “ items": [ { "kind": "youtube#video", "etag": "\"PSjn- HSKiX6orvNhGZvglLI2lvk/9hUt36nrZXNpfqDh...", "id": "SRQtW-sjDGw" } ] }

More Examples…

Alchemy Client Request: Header: { cache-control=[no-cache], content-type=[application/xml], connection=[keep-alive], host=[access.alchemyapi.com], accept=[application/xml], path=/calls/url/URLGetRankedNamedEntities?... get /calls/url/urlgetrankednamedentities?... user-agent=[Apache CXF 2.7.5], pragma=[no-cache] } Alchemy Server Response: Header: { content-type=[application/xml; charset=utf-8], cache-control=[no-cache], connection=[keep-alive], access-control-allow-origin=[*], content-length=[506], server=[nginx], date=[Fri, 15 Aug 2014 19:30:28 GMT] } Body: <?xml version="1.0" encoding="UTF-8"?> <results> <status>OK</status> <usage>By accessing AlchemyAPI or using information generated by AlchemyAPI, you are agreeing to be bound by the AlchemyAPI Terms of Use:http://www.alchemyapi.com/company/terms.html </usage> <url>http://www.cnn.com/2011/09/28/us/...</url> <language>english</language> <microformats> <a href="/cnn" rel="tag">cnn</a> </microformats> </results>

9

YouTube Client Request: Header: { cache-control=[no-cache],

content-type=[application/xml], connection=[keep-alive], host=[www.googleapis.com], accept=[application/xml], get/youtube/v3/subscriptions?mine=true&part=snippet&access_token=.. http/1.1=[null], user-agent=[Apache CXF 2.7.11], pragma=[no-cache]

} YouTube Server Response: Header: { x-frame-options=[SAMEORIGIN], content-type=[application/json; charset=UTF-8], cache-control=[private, max-age=300,must-revalidate,no-transform], x-xss-protection=[1; mode=block], x-content-type-options=[nosniff], expires=[Tue, 14 Oct 2014 17:57:26 GMT], etag=["PSjn-HSKiX6orvNhGZvglLI2lvk/PZz4CABe3efkukxgHuo_yc_qoJs"], content-length=[324], server=[GSE], alternate-protocol=[443:quic,p=0.01], date=[Tue, 14 Oct 2014 17:57:26 GMT], vary=[X-Origin, Referer, Origin] } Body: { "kind": "youtube#videoListResponse", "etag": "\"PSjn-HSKiX6orvNhGZvglLI2lvk/PZz4CABe3efkukxgHuo_yc_qo", "pageInfo": { "totalResults": 1, "resultsPerPage": 1 }, “ items": [ { "kind": "youtube#video", "etag": "\"PSjn- HSKiX6orvNhGZvglLI2lvk/9hUt36nrZXNpfqDh...", "id": "SRQtW-sjDGw" } ] }

More Examples…

Alchemy Client Request: Header: { cache-control=[no-cache], content-type=[application/xml], connection=[keep-alive], host=[access.alchemyapi.com], accept=[application/xml], path=/calls/url/URLGetRankedNamedEntities?... get /calls/url/urlgetrankednamedentities?... user-agent=[Apache CXF 2.7.5], pragma=[no-cache] } Alchemy Server Response: Header: { content-type=[application/xml; charset=utf-8], cache-control=[no-cache], connection=[keep-alive], access-control-allow-origin=[*], content-length=[506], server=[nginx], date=[Fri, 15 Aug 2014 19:30:28 GMT] } Body: <?xml version="1.0" encoding="UTF-8"?> <results> <status>OK</status> <usage>By accessing AlchemyAPI or using information generated by AlchemyAPI, you are agreeing to be bound by the AlchemyAPI Terms of Use:http://www.alchemyapi.com/company/terms.html </usage> <url>http://www.cnn.com/2011/09/28/us/...</url> <language>english</language> <microformats> <a href="/cnn" rel="tag">cnn</a> </microformats> </results>

9

SBSs + Antipatterns = ?

An automatic approach to detect SOA antipatterns in SBSs may support their

easy maintenance and evolution.

Poor performance

Hard for comprehension

Low maintainability

Hard for evolution

Expensive maintenance life

Low reusability +

Specification and Detection of SOA Antipatterns 10

Research Problems

• No specification of SOA antipatterns

• No dedicated approach and framework for the detection of SOA

antipatterns in SBSs

• Impact of SOA antipatterns is not yet verified in service-based systems

Specification and Detection of SOA Antipatterns 11

Research Questions

Research Questions

RQ1: Do service-oriented antipatterns differ from the object-oriented antipatterns?

RQ2: Do the service-oriented antipatterns vary in diverse SBSs developed using different SOA technologies?

RQ3: Can we efficiently specify and detect SOA antipatterns regardless of SOA technologies?

RQ4: How do the SOA antipatterns impact the maintenance and evolution of SBSs?

Specification and Detection of SOA Antipatterns 12

Related Work

Related Work

Specification and Detection of SOA Antipatterns 13

Related Work: Summary

What to Detect/ Technology OO CBSs SOA Other

Code Smells

Emden and Moonen, 2002 Khomh et al., 2009 Moha et al., 2010 Luo et al., 2010

Maneerat and Muenchaisri, 2011

X X X

Antipatterns

Correa et al., 2000 Marinescu, 2001, 2004 Boussaidi et al., 2005

Kreimer, 2005, Biehl, 2006 Salehie et al., 2006

Choinzon and Ueda, 2006 Rao and Reddy, 2007

Khomh et al., 2009, 2011 Llano and Pooley, 2009

Moha et al., 2010 Cortellessa et al., 2010

Luo et al., 2010, Settas et al., 2011 Stoianov and Sora, 2010 Kessentini et al., 2011

Parsons and Murphy, 2004 Parsons and Murphy, 2008

Chis, 2008

X Wong et al., 2010 Fourati et al., 2011

Design Patterns

Kramer and Prechelt, 1996 Antoniol et al., 1998

Heuzeroth et al., 2003 Tsantalis et al., 2006 Kaczor et al., 2006

Guéhéneuc and Antoniol, 2008 Stoianov and Sora, 2010

Maggioni and Arcelli, 2010 Kaczor et al., 2010

Rasool and Mäder, 2011

X

Di Penta et al., 2007

X

Specification and Detection of SOA Antipatterns 14

Contributions…

Introduction: Contribution

With the goal to assess the design and QoS of SBSs:

• SODA (Service Oriented Detection for Antipatterns), a novel and

innovative approach

• SOFA (Service Oriented Framework for Antipatterns), a framework,

- to specify SOA antipatterns and detect them automatically

- to perform static and dynamic analyses

Specification and Detection of SOA Antipatterns 15

Our Detection Approach

Proposed SODA Approach

Specification and Detection of SOA Antipatterns 16

SOA Antipatterns Tree

Specification and Detection of SOA Antipatterns 17

Domain Analysis

“Multi Service also known as God Object

corresponds to a service that implements a

multitude of methods related to different

business and technical abstractions. This

aggregates too much into a single service, such

a service is not easily reusable because of the

low cohesion of its methods and is often

unavailable to end-users because of its overload,

which may induce a high response time”

(Dudney et al., 2003)

Textual Description of Antipatterns

1. S

pe

cifi

cati

on

s

Rule Card

2. G

en

era

tio

n

Detection Algorithms

3. D

ete

ctio

n

SBS Template

Services involved in

antipatterns

Specification and Detection of SOA Antipatterns 18

Antipatterns Specification Language

Textual Description of Antipatterns

1. S

pe

cifi

cati

on

s

Rule Card

2. G

en

era

tio

n

Detection Algorithms

3. D

ete

ctio

n

SBS Template

Services involved in

antipatterns

Specification and Detection of SOA Antipatterns 19

Specification Examples

1 RULE_CARD: GodObjectWebService {

2 RULE: GodObjectWebService { INTER LowCohesion MultiOperation HighResponseTime LowAvailability };

3 RULE: LowCohesion { COH VERY_LOW };

4 RULE: MultiOperation { NOD HIGH };

5 RULE: HighResponseTime { RT VERY_HIGH };

6 RULE: LowAvailability { A LOW };

7 };

1 RULE_CARD: GodComponent {

2 RULE: GodComponent { INTER HighEncapsulatedService MultiMethod HighParameter };

3 RULE: HighEncapsulatedService { NOSE HIGH };

4 RULE: MultiMethod { NMD VERY_HIGH };

5 RULE: HighParameter { TNP VERY_HIGH };

6 };

Textual Description of Antipatterns

1. S

pe

cifi

cati

on

s

Rule Card

2. G

en

era

tio

n

Detection Algorithms

3. D

ete

ctio

n

SBS Template

Services involved in

antipatterns

Specification and Detection of SOA Antipatterns 20

Algorithm Generation

Textual Description of Antipatterns

1. S

pe

cifi

cati

on

s

Rule Card

2. G

en

era

tio

n

Detection Algorithms

3. D

ete

ctio

n

SBS Template

Services involved in

antipatterns

Model Driven Engineering (MDE)

Parsing

1

Visiting & Replacing

2

Templates

Models of Rule Cards

Rule Cards

Algorithms

Specification and Detection of SOA Antipatterns 21

SOFA Detection Framework

Textual Description of Antipatterns

1. S

pe

cifi

cati

on

s

Rule Card

2. G

en

era

tio

n

Detection Algorithms

3. D

ete

ctio

n

SBS Template

Services involved in

antipatterns

Specification and Detection of SOA Antipatterns 22

Subjects and Objects

Validation: Subjects

Service Component Architecture SOAP-based Web services

1. Multi Service 2. Tiny Service 3. Sand Pile 4. Chatty Service 5. The Knot 6. Nobody Home 7. Duplicated Service 8. Bottleneck Service 9. Service Chain 10. Data Service 11. God Component 12. Bloated Service 13. Stovepipe Service

1. God Object Web Service 2. Fine Grained Web Service 3. Ambiguous Name 4. Duplicated Web Service 5. Chatty Web Service 6. Low Cohesive Operations in the Same Port 7. Redundant Port 8. Maybe It is Not RPC 9. Data Web Service 10. CRUDy Interface

REST

1. Ignoring Status Code 2. Tunneling Everything Through GET 3. Tunneling Everything Through POST 4. Forgetting Hypermedia 5. Ignoring Caching 6. Misusing Cookies 7. Ignoring MIME Types 8. Breaking Self Descriptiveness 9. Contextless Resource Names 10. Singularised URI Nodes

Specification and Detection of SOA Antipatterns 23

Validation: Objects

Service Component Architecture

Home-Automation – an SCA-based demo system to automate household

FraSCAti – the largest open source SCA system and runtime library for SCA apps

REST APIs

12 REST APIs including BestBuy, DropBox, Facebook, Twitter, and YouTube 115 RESTful method calls

SOAP-based Web Services

120+ Weather- and Finance-related SOAP Web services

Specification and Detection of SOA Antipatterns 24

Detection Results in SCA

*Availability 100%

Detection Result: Multi Service in SCA

Mediator

Specification and Detection of SOA Antipatterns 25

Partial Results on SCA (FraSCAti)

Antipattern Name

Services Involved

Metrics Time Precision Recall

Tiny Service sca-parser NMD=1; CPL=0.56 0.067s [1/1] 100%

[1/1] 100%

Bottleneck Service

sca-composite sca-parser

RT=41ms;CPL=0.96; NIR=16;NOR=8 RT=45ms;CPL=0.84; NIR=16;NOR=5

0.086s [1/2] 50%

[1/1] 100%

Specification and Detection of SOA Antipatterns 26

Summary Results on SCA

SCA Systems Average Precision Average Recall Average

Detection Time

Home-Automation 92.5% 100% 0.387s

FraSCAti 89.17% 95% 0.089s

Average 90.84% 97.5% 0.238s

Specification and Detection of SOA Antipatterns 27

Detection Results in Web Services

51

Detection of Chatty Web Service antipattern in TaarifCustoms Web service.

RULE_CARD: ChattyWebService {

RULE: ChattyWebService {INTER LowCohesion HighDataAccessor MultiOperation LowPerformance};

RULE: LowCohesion {COH LOW};

RULE: HighDataAccessor {ANAO VERY_HIGH};

RULE: MultiOperation {NOD HIGH};

RULE: LowPerformance {INTER HighRT LowA};

RULE: HighRT {RT HIGH};

RULE: LowA {A LOW};

};

23

Low Cohesion High Accessor Methods High Methods High Response Time Low Availability

Detection Result: Chatty Web Service

Specification and Detection of SOA Antipatterns

Summary Results on Web Services

Experiments Detection

Times Detected

(True Positive) Manually Validated

Precision Recall

13 Weather Web services

102.19s 7

(6) 6 85.71% 100%

109 Finance Web services

192.91s 24

(22) 22 91.67% 100%

Average - - - 88.69% 100%

Specification and Detection of SOA Antipatterns 29

Detection in REST

SODA-R approach for REST

SODA-R: Service Oriented Detection for Antipatterns in REST

Step 1

Analysis

Description of REST patterns and antipatterns

Heuristics

Step 2

Algorithms

Detection

Detected REST patterns and antipatterns

REST APIs Implementation

Application of Algorithms

Specification and Detection of SOA Antipatterns 30

Detection Heuristics

1: ENTITY-LINKING(response-header, response-body, http-method) 2: body-links[] EXTRACT-ENTITY-LINKS(response-body) 3: header-link response-header.getValue(“Link”)

4: if (http-method = GET and (LENGTH(body-links[]) = 1 or header-link NIL)) or 5: (http-method = POST and (“Location:” response-header.getKeys() or 6: LENGTH(body-links[]) = 1))) then 7: print “Entity Linking detected” 8: end if

Heuristic of Entity Linking pattern

1: FORGET-HYPER-MEDIA(response-header, response-body, http-method) 2: body-links[] EXTRACT-ENTITY-LINKS(response-body) 3: header-link response-header.getValue(“Link”) 4: if (http-method = GET and (LENGTH(body-links[]) = 0 or header-link = NIL)) or 5: (http-method = POST and (“Location:” response-header.getKeys() and 6: LENGTH(body-links[]) = 0))) then 7: print “Forgetting Hypermedia detected” 8: end if

Heuristic of Forgetting Hypermedia antipattern

Specification and Detection of SOA Antipatterns 31

Detection Phase

Heuristics

Detection Algorithms

Service Interfaces

Step 2.2

Dynamic Invocation

REST requests and responses

Client Authentication

REST APIs

Detected REST patterns

and antipatterns

Step 2.3

Application

Implementation

Algorithms

Interfaces

Step 2.1

Specification and Detection of SOA Antipatterns 32

Validation: Objects in REST

REST APIs Online Documentations

alchemyapi.com/api/

bbyopen.com/developer/

dev.bitly.com/api.html

charlieharvey.org.uk/about/api/

dropbox.com/developers/core/docs/

developers.facebook.com/docs/graph-api/

developer.musicgraph.com/api-docs/overview/

github.com/blackducksw/ohloh_api/

integrate.teamviewer.com/en/develop/documentation/

dev.twitter.com/docs/api/

developers.google.com/youtube/v3/

developer.zappos.com/docs/api-documentation/

Specification and Detection of SOA Antipatterns 33

REST Detection Results

Detection Results for Antipatterns

-

0.50

1.00

1.50

2.00

2.50

3.00

3.50

average_antipatterns_instance

Specification and Detection of SOA Antipatterns 34

Detection Results for Antipatterns

-

0.50

1.00

1.50

2.00

2.50

3.00

3.50

average_antipatterns_instance

Specification and Detection of SOA Antipatterns 34

-

0.50

1.00

1.50

2.00

2.50

3.00

3.50

average_patterns_instances

Detection Results for Patterns

Specification and Detection of SOA Antipatterns 35

-

0.50

1.00

1.50

2.00

2.50

3.00

3.50

average_patterns_instances

Detection Results for Patterns

Specification and Detection of SOA Antipatterns 35

-

0.50

1.00

1.50

2.00

2.50

3.00

3.50

Detection Results: Antipatterns vs. Pattern

Specification and Detection of SOA Antipatterns 36

Forgetting_Hypermedia Entity_Linking

-

0.50

1.00

1.50

2.00

2.50

3.00

3.50

Detection Results: Antipatterns vs. Pattern

Specification and Detection of SOA Antipatterns 36

Example Detection Results

(7) A

lchem

y -

(12) B

estBuy -

(3) B

itly -

(4) C

harlieH

arvey -

(15) D

ropB

ox -

(29) F

acebook -

(8) M

usicg

raph -

(3) O

hlo

h -

(8) T

eamV

iewer -

(10) T

witter -

(9) Y

ouT

ube -

(7) Z

appos -

(115) T

otal -

Averag

e Precisio

n -

Recall -

Detectio

n T

ime -

Forgetting Hypermedia

1/1 0/0 2/2 0/0 9/10 8/8 7/7 0/0 3/3 4/4 2/3 0/0 36/38 94.58% 19.54s

1/1 0/0 2/2 0/0 9/9 8/8 7/7 0/0 3/3 4/4 2/2 0/0 36/36 100%

Entity Linking

6/6 11/11 1/1 4/4 3/3 21/21 1/1 2/2 1/1 5/5 6/6 4/4 65/65 100% 19.90s

6/6 11/11 1/1 4/4 3/3 21/21 1/1 2/2 1/1 5/5 6/7 4/4 65/66 98.81%

Specification and Detection of SOA Antipatterns 37

Four Hypotheses

H1: Generality

Our DSL allows the specification of various SOA antipatterns, from simple to more complex ones

1 RULE_CARD: LowCohesiveOperations { 2 RULE: LowCohesiveOperations { INTER MultiOperation LowCohesivePT }; 3 RULE: MultiOperation { NOD HIGH }; 4 RULE: LowCohesivePT { ARIO LOW }; 5 };

Specification and Detection of SOA Antipatterns 38

H1: Generality

Our DSL allows the specification of various SOA antipatterns, from simple to more complex ones

1 RULE_CARD: CRUDyInterface { 2 RULE: CRUDyInterface { INTER ChattyInterface HighCRUDOperation }; 3 RULE: ChattyInterface { RULE_CARD: ChattyWebService }; 4 RULE: HighCRUDOperation { NCO > 1 }; 5 };

1 RULE_CARD: ChattyWebService { 2 RULE: ChattyWebService { INTER LowCohesion HighDataAccessor MultiOperation LowPerformance }; 3 RULE: LowCohesion { COH LOW }; 4 RULE: HighDataAccessor { ANAO VERY_HIGH }; 5 RULE: MultiOperation { NOD HIGH }; 6 RULE: LowPerformance { INTER HighRT LowA }; 7 RULE: HighRT { RT HIGH }; 8 RULE: LowA { A LOW }; 9 };

1 RULE_CARD: LowCohesiveOperations { 2 RULE: LowCohesiveOperations { INTER MultiOperation LowCohesivePT }; 3 RULE: MultiOperation { NOD HIGH }; 4 RULE: LowCohesivePT { ARIO LOW }; 5 };

Specification and Detection of SOA Antipatterns 38

H2: Accuracy

The detection algorithms have an average precision of more than 75% and a recall of 100%, i.e., more than three-quarters of detected antipatterns are true positive and we do not miss any existing antipatterns

Web Services 88.69% 100%

Average Precision Average Recall

SCA 90.84% 97.5%

REST 89.42% 94%

Specification and Detection of SOA Antipatterns 39

Average 89.65% 97.17%

H3: Extendibility

Our DSL and SOFA framework are extensible for adding new metrics and new SOA antipatterns

Web Services 10 0 10

Antipatterns Patterns New Metrics

SCA 13 0 17

REST 8 5 -

Total 31 5 27

Specification and Detection of SOA Antipatterns 40

H4: Performance

The computation time required for the detection of antipatterns using the generated algorithms is reasonably very low, i.e., in the order of few seconds

Web Services 147.55s

Average Detection Time

SCA 0.238s

REST 21.43s

Average 51.41s

Specification and Detection of SOA Antipatterns 41

Impact of Antipatterns

Impact of Antipatterns

The Wilcoxon Rank Sum Test

42

To Conclude…

Conclusion

Specification and Detection of SOA Antipatterns 43

Conclusion

Specification and Detection of SOA Antipatterns 43

Conclusion

Specification and Detection of SOA Antipatterns 43

Conclusion

Specification and Detection of SOA Antipatterns 43

Current and Future Plan

• Antipatterns in service-oriented business processes, i.e., BPEL

• Semantic analysis of REST APIs based on dictionaries

(WordNet and Stanford Core NLP)

• A comprehensive tool support for the detection

• Further validation of the approach with more Web services and

RESTful APIs

Specification and Detection of SOA Antipatterns 44

Thanks and Questions?

Antipattern Template

Generated Code