A Unified Approach to - Portalscg.unibe.ch/.../2015-04-14-Caracciolo-Dicto-Wicsa.pdf2015/04/14  ·...

Preview:

Citation preview

A Unified Approach to Architecture Conformance CheckingAndrea Caracciolo, Mircea Filip Lungu, Oscar Nierstrasz

WICSA ’15

http://scg.unibe.ch

Erosion

2

Design = Implementation

Compliance Monitoring

?

Compliance Monitoring

3

non-automated techniques60%

4

A

Б

Compliance Monitoring

5

A

Б

Tools

Compliance Monitoring

6

A

Б

Specification Formalisms

Compliance Monitoring

7

A

Б

Reports

Compliance Monitoring

8

A

Б

Compliance Monitoring

9

A

Compliance Monitoring

10

Persistence cannot depend on Service

Impl must have annotation "@Service"

System cannot contain cycles

Dictō

A Unified Approach

Dictō

11

Core cannot contain code clones only Controllers can catch ValidationExCustomerAPI must have latency < "100 ms"Tests must have method Setup, Teardown WebRoot must have child "servlet-mapping"

Rules @ scg.unibe.ch/dicto

Dictō

12

@ scg.unibe.ch/dicto

Maintainability

Compatibility

Performance

Reliability

Core cannot contain code clones only Controllers can catch ValidationExCustomerAPI must have latency < "100 ms"Tests must have method Setup, Teardown WebRoot must have child "servlet-mapping"

Rules

Dictō

13

Controllers = Class with annotation:"@Controller"Views = Class with name:"app.*.*View"Tests = Method with modifier!:"static", name:"test*"Core = {Controllers, Model} except {Tests, Utils}

Entities @ scg.unibe.ch/dicto

Dictō

14

@ scg.unibe.ch/dicto

Code Local/Remote artifacts

Entities

Controllers = Class with annotation:"@Controller"Views = Class with name:"app.*.*View"Tests = Method with modifier!:"static", name:"test*"Core = {Controllers, Model} except {Tests, Utils}

Analysis

15

Test can only depend on Model, Controller

depend-on(com.app.View, com.app.View) = False depend-on(com.app.View, com.app.Test) = False depend-on(com.app.View, com.app.Util) = True

View can only depend on Model, Controller

depend-on(com.app.Test, com.app.View) = False depend-on(com.app.Test, com.app.Test) = False depend-on(com.app.Test, com.app.Util) = False

Test, View can only depend on Model, Controller

Reporting

16

SYSTEM cannot contain cycles

Persistence cannot depend on Service

Impl must have annotation "@Service"

Dictō

Statistics

Reporting

17

New IssueStatistics

SYSTEM cannot contain cycles

Persistence cannot depend on Service

Impl must have annotation "@Service"

Dictō

Evaluation

18

Medium size company various - Java EE / .NET100 employees

Open source project LMS - PHP (1.8M LOC)12 service providers, 900’000+ users

Large size companyB2B - Java EE (50K LOC)1’000 employees

Evaluation

19

Impact: Code quality? Awareness?

Expressivity/Usability: Fit needs? Usable?

Ease of adoption: Cost–effective? Process?

Summary

DictōA uniform, readable, executable DSLfor specifying architectural constraints.

20

SYSTEM cannot contain cycles

Persistence cannot depend on Service

Impl must have annotation "@Service"

@ scg.unibe.ch/dictoAndrea Caracciolo

Recommended