Upload
andrea-caracciolo
View
40
Download
1
Embed Size (px)
Citation preview
A Unified Approach to Architecture Conformance Checking
Andrea Caracciolohttp://scg.unibe.ch
Thesis Defense
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
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
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
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……
33
Usability
WholeIliasCodebasecannotdependonSuppressErrors/***Silencingerrorswiththe@operatorisbad
* practice.Itmakescodeunnecessarilyharderto* debugifthecurrentlysuppressederrorchanges* intoarealshow-stopperbug.Trytohandlethe* possiblewarningsanderrors.
*/ WholeIliasCodebasecannotdependonSuppressErrors
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
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
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
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
58
Future Work Design
- research requirements- evaluate specification methods- mine rules- suggest rules
Check- formal logic
Report- actionable fixes- violation presentation/prioritization