60
A Unified Approach to Architecture Conformance Checking Andrea Caracciolo http://scg.unibe.ch Thesis Defense

PhD Defense presentation

Embed Size (px)

Citation preview

A Unified Approach to Architecture Conformance Checking

Andrea Caracciolohttp://scg.unibe.ch

Thesis Defense

2

“The code is the truth, but it is not the whole truth” — Grady Booch

3

4

5

6

7

8

9

10

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut dui fermentum, blandit ligula vel, hendrerit velit. Donec laoreet, urna et sodales pretium, lacus sapien pharetra libero, nec sodales neque velit sit amet tortor. Phasellus vitae magna at leo sagittis tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent eu accumsan diam. Phasellus lectus enim, elementum sed ultrices vitae, volutpat eget urna. Aliquam vitae sagittis urna, in lobortis orci.

TestMethods = Class with annotation:"@Test"Controllers = Package with name:”*controller*”, name!:Core = {Controllers, Model} except {Tests, Utils}

Core cannot contain code clones only Controllers can catch ValidationExceptionsWebAPI must have latency < "100 ms"Tests must have method Setup, Teardown

only Controllers can catch InputExceptionsTests must have method Setup, TeardownXMLWeb must have child "servlet-mapping"

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut dui fermentum, blandit ligula vel, hendrerit velit. Donec laoreet, urna et sodales pretium, lacus sapien pharetra libero, nec sodales neque velit sit amet tortor. Phasellus vitae magna at leo sagittis tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent eu accumsan diam. Phasellus lectus enim, elementum sed ultrices vitae, volutpat eget urna. Aliquam vitae sagittis urna, in lobortis orci.

Analyzers

DSLEvaluator

11

Thesis

To increase the cost-effectiveness of architecture conformance checking, we need a unified approach based on an extensible, declarative and empirically-grounded specification language.

12

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut dui fermentum, blandit ligula vel, hendrerit velit. Donec laoreet, urna et sodales pretium, lacus sapien pharetra libero, nec sodales neque velit sit amet tortor. Phasellus vitae magna at leo sagittis tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent eu accumsan diam. Phasellus lectus enim, elementum sed ultrices vitae, volutpat eget urna. Aliquam vitae sagittis urna, in lobortis orci.

TestMethods = Class with annotation:"@Test"Controllers = Package with name:”*controller*”, name!:Core = {Controllers, Model} except {Tests, Utils}

Core cannot contain code clones only Controllers can catch ValidationExceptionsWebAPI must have latency < "100 ms"Tests must have method Setup, Teardown

only Controllers can catch InputExceptionsTests must have method Setup, TeardownXMLWeb must have child "servlet-mapping"

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut dui fermentum, blandit ligula vel, hendrerit velit. Donec laoreet, urna et sodales pretium, lacus sapien pharetra libero, nec sodales neque velit sit amet tortor. Phasellus vitae magna at leo sagittis tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent eu accumsan diam. Phasellus lectus enim, elementum sed ultrices vitae, volutpat eget urna. Aliquam vitae sagittis urna, in lobortis orci.

Analyzers

DSLEvaluator

13

Dictō

14

Dictō

15

14 ppl18h

16

34 ppl

Inspection

Tools

Test Cases

none

17

• dependencies• naming conventions• signature• software update• data structure• event handling• file locationInspection

Tools

18

• dependencies• naming conventions• signature• software update• data structure• event handling• file locationInspection

Tools

19

MoneyAmount must be annotated with @Columns

The execution time of validateCombination() must be below 10 ms.

Models [..] cannot invoke operations from Business Services.

4 docs

20

MoneyAmount must be annotated with @Columns

21

Entity

MoneyAmount=Classwithname:"*.MoneyAmount"

MoneyAmount must be annotated with @Columns

22

Modal Operator

..must....cannot..

..canonly..only..can..

..must..some..

MoneyAmount must be annotated with @Columns

23

Predicate..dependon....haveannotation....haveemptycatchblock..havelatency<..

..“String”

..Symbol

..11+

MoneyAmount must be annotated with @Columns

24

MoneyAmount=Classwithname:"*.MoneyAmount"MoneyAmountmusthaveannotation“@Columns”

25

MoneyAmount=Classwithname:"*.MoneyAmount"

MoneyAmountmusthaveannotation“@Columns”

WholeIliasCodebasecannotinvoketriggerError WholeIliasCodebasecannotinvokeexitOrDieWholeIliasCodebasecannotinvokeSetErrorOrExceptionHandler

WholeIliasCodebasecannotinvokeeval

WholeIliasCodebasecannotdependonSuppressErrors ilExceptionsWithoutTopLevelExceptioncanonlydependonilExceptions GUIClassescannotdependonilDBClass GUIClassescannotdependonilDBGlobal onlyGUIClassescandependonilTabsClass onlyGUIClassescandependonilTabsGlobal onlyGUIClassescandependonilTemplateClass onlyGUIClassescandependonilTemplateGlobal IliasTemplateFilecannotcontaintext"on(blur|change|click|dblclick|focus|keydown|keypress|keyup|load|mousemove|mouseup|mousedown|mouseenter|mouseleave|mouseout|mouseover|mousewheel|resize|select|submit|unload|wheel|scroll)" IliasTemplateFilecannotcontaintext"<script*>" WholeIliasCodebasecannotinvokeraiseError IliasTemplateFilecannotcontaintext"javascript*:"

26

SCM

E-learning

Framework

WholeIliasCodebasecannotinvoketriggerError WholeIliasCodebasecannotinvokeexitOrDieWholeIliasCodebasecannotinvokeSetErrorOrExceptionHandler

WholeIliasCodebasecannotinvokeeval

WholeIliasCodebasecannotdependonSuppressErrors ilExceptionsWithoutTopLevelExceptioncanonlydependonilExceptions GUIClassescannotdependonilDBClass GUIClassescannotdependonilDBGlobal onlyGUIClassescandependonilTabsClass onlyGUIClassescandependonilTabsGlobal onlyGUIClassescandependonilTemplateClass onlyGUIClassescandependonilTemplateGlobal IliasTemplateFilecannotcontaintext"on(blur|change|click|dblclick|focus|keydown|keypress|keyup|load|mousemove|mouseup|mousedown|mouseenter|mouseleave|mouseout|mouseover|mousewheel|resize|select|submit|unload|wheel|scroll)" IliasTemplateFilecannotcontaintext"<script*>" WholeIliasCodebasecannotinvokeraiseError IliasTemplateFilecannotcontaintext"javascript*:"

27

SCM

E-learning

Framework

WholeIliasCodebasecannotinvoketriggerError WholeIliasCodebasecannotinvokeexitOrDieWholeIliasCodebasecannotinvokeSetErrorOrExceptionHandler

WholeIliasCodebasecannotinvokeeval

WholeIliasCodebasecannotdependonSuppressErrors ilExceptionsWithoutTopLevelExceptioncanonlydependonilExceptions GUIClassescannotdependonilDBClass GUIClassescannotdependonilDBGlobal onlyGUIClassescandependonilTabsClass onlyGUIClassescandependonilTabsGlobal onlyGUIClassescandependonilTemplateClass onlyGUIClassescandependonilTemplateGlobal IliasTemplateFilecannotcontaintext"on(blur|change|click|dblclick|focus|keydown|keypress|keyup|load|mousemove|mouseup|mousedown|mouseenter|mouseleave|mouseout|mouseover|mousewheel|resize|select|submit|unload|wheel|scroll)" IliasTemplateFilecannotcontaintext"<script*>" WholeIliasCodebasecannotinvokeraiseError IliasTemplateFilecannotcontaintext"javascript*:"

28

0 250000 500000 750000 1000000

1,000,000

500,000

50,000

1M

0.5M

50K

SCM

E-learning

FrameworkLOC

WholeIliasCodebasecannotinvoketriggerError WholeIliasCodebasecannotinvokeexitOrDieWholeIliasCodebasecannotinvokeSetErrorOrExceptionHandler

WholeIliasCodebasecannotinvokeeval

WholeIliasCodebasecannotdependonSuppressErrors ilExceptionsWithoutTopLevelExceptioncanonlydependonilExceptions GUIClassescannotdependonilDBClass GUIClassescannotdependonilDBGlobal onlyGUIClassescandependonilTabsClass onlyGUIClassescandependonilTabsGlobal onlyGUIClassescandependonilTemplateClass onlyGUIClassescandependonilTemplateGlobal IliasTemplateFilecannotcontaintext"on(blur|change|click|dblclick|focus|keydown|keypress|keyup|load|mousemove|mouseup|mousedown|mouseenter|mouseleave|mouseout|mouseover|mousewheel|resize|select|submit|unload|wheel|scroll)" IliasTemplateFilecannotcontaintext"<script*>" WholeIliasCodebasecannotinvokeraiseError IliasTemplateFilecannotcontaintext"javascript*:"

29

0 4.5 9 13.5 18

16

17

3

SCM

E-learning

Framework

16

17

3

Rules

30

Expressiveness

Persistence=Packagewithname:“app.*.persistence.*”

Service=Packagewithname:“app.*.service.*”

PersistencecannotdependonService

app. .persistence. .service……

31

Expressiveness

Persistence=Packagewithname:“app.*.persistence.*”

Service=Packagewithname:“app.*.service.*”

PersistencecannotdependonService

Persistence=Packagewithname:“app.*.persistence.**”

Service=Packagewithname:“app.*.service.**”

app. .persistence. .service……

32

Usability

WholeIliasCodebasecannotdependonSuppressErrors

33

Usability

WholeIliasCodebasecannotdependonSuppressErrors/***Silencingerrorswiththe@operatorisbad

* practice.Itmakescodeunnecessarilyharderto* debugifthecurrentlysuppressederrorchanges* intoarealshow-stopperbug.Trytohandlethe* possiblewarningsanderrors.

*/ WholeIliasCodebasecannotdependonSuppressErrors

34

MoneyAmount=Classwithname:"*.MoneyAmount"

MoneyAmountmusthaveannotation“@Columns”

35

Probō

36

dependOn(com.app.Test,com.app.View)dependOn(com.app.Test,com.app.Controller)dependOn(com.app.Test,com.app.Test)dependOn(com.app.Test,com.app.Util)dependOn(com.app.Test,com.app.Model)…

Test,ViewcanonlydependonModel,Controller

TestcanonlydependonModel,Controller

ViewcanonlydependonModel,Controller ∧

37

Test,ViewcanonlydependonModel,Controller

TestcanonlydependonModel,Controller

ViewcanonlydependonModel,Controller ∧

TFTFT dependOn(com.app.Test,com.app.View)

dependOn(com.app.Test,com.app.Controller)dependOn(com.app.Test,com.app.Test)dependOn(com.app.Test,com.app.Util)dependOn(com.app.Test,com.app.Model)…

Test Util

38

Structural

Behavioral

Controller,Model,DaomustbelayeredCoreExceptionsmustbecaughtPojoMethodscanonlybenamed“get*”,“set*”DataBeanmusthaveattribute“destroy-method”onlyTestPackagecancontaindeadmethodsModelcannotcontaincodeclones;containcycles

ModelClassescannotleadtodeadlockPriceAPImusthavecontent“CHF”CustAPImusthavelatency<100msCustAPImusthandleloadfrom30users

34

39

Structural

Behavioral

PhpDA

saxon-lint

9

40

Accuracy

+600%

+350%

41

Performance

0

1.75

3.5

5.25

7

CS1 CS2 CS3

7 min

42

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut dui fermentum, blandit ligula vel, hendrerit velit. Donec laoreet, urna et sodales pretium, lacus sapien pharetra libero, nec sodales neque velit sit amet tortor. Phasellus vitae magna at leo sagittis tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent eu accumsan diam. Phasellus lectus enim, elementum sed ultrices vitae, volutpat eget urna. Aliquam vitae sagittis urna, in lobortis orci.

TestMethods = Class with annotation:"@Test"Controllers = Package with name:”*controller*”, name!:Core = {Controllers, Model} except {Tests, Utils}

Core cannot contain code clones only Controllers can catch ValidationExceptionsWebAPI must have latency < "100 ms"Tests must have method Setup, Teardown

only Controllers can catch InputExceptionsTests must have method Setup, TeardownXMLWeb must have child "servlet-mapping"

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut dui fermentum, blandit ligula vel, hendrerit velit. Donec laoreet, urna et sodales pretium, lacus sapien pharetra libero, nec sodales neque velit sit amet tortor. Phasellus vitae magna at leo sagittis tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent eu accumsan diam. Phasellus lectus enim, elementum sed ultrices vitae, volutpat eget urna. Aliquam vitae sagittis urna, in lobortis orci.

Analyzers

DSLEvaluator

Reporting

43

44

45

3.2

1.1

1.2

0.1

1.5

2.1

46

47

48

Design

49

Encode

50

Encode

Usability Customizability

51

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut dui fermentum, blandit ligula vel, hendrerit velit. Donec laoreet, urna et sodales pretium, lacus sapien pharetra libero, nec sodales neque velit sit amet tortor. Phasellus vitae magna at leo sagittis tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent eu accumsan diam. Phasellus lectus enim, elementum sed ultrices vitae, volutpat eget urna. Aliquam vitae sagittis urna, in lobortis orci.

TestMethods = Class with annotation:"@Test"Controllers = Package with name:”*controller*”, name!:Core = {Controllers, Model} except {Tests, Utils}

Core cannot contain code clones only Controllers can catch ValidationExceptionsWebAPI must have latency < "100 ms"Tests must have method Setup, Teardown

only Controllers can catch InputExceptionsTests must have method Setup, TeardownXMLWeb must have child "servlet-mapping"

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut dui fermentum, blandit ligula vel, hendrerit velit. Donec laoreet, urna et sodales pretium, lacus sapien pharetra libero, nec sodales neque velit sit amet tortor. Phasellus vitae magna at leo sagittis tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent eu accumsan diam. Phasellus lectus enim, elementum sed ultrices vitae, volutpat eget urna. Aliquam vitae sagittis urna, in lobortis orci.

Analyzers

DSLEvaluator

52

DesignEncode

53

DesignEncode

Usability Customizability

Unified approach based on Dictō

54

Persistence cannot depend on Service

Service must have annotation “@Service”

System cannot contain cycles

www.andrea-caracciolo.comAndrea Caracciolo

extensible, declarative, empirically-grounded

55

56

57 Michael Godfrey

Where is the science?

58

Future Work Design

- research requirements- evaluate specification methods- mine rules- suggest rules

Check- formal logic

Report- actionable fixes- violation presentation/prioritization

59

DSL vs. GPL

60