SlideShare una empresa de Scribd logo
1 de 65
Leveraging Software Architecturesto Guide and Verify the Development of Sense/Compute/Control Applications Damien Cassou1,2, Emilie Balland1, Charles Consel1, Julia Lawall3 1Phoenix, INRIA, France 2Software Architecture Group, HPI, Germany 3APL, DIKU, Denmark
Contributions A design language to specify a software system A compiler to process such specification for  the verification of safety properties  the guidance of the implementation  the conformance 2 Context: Sense/Compute/Control software systems
Sense/Compute/Control (SCC)Software System Environment Compute Sense 3 Control
4 Sense/Compute/Control (SCC)Software System aileron, engine Control Compute direction Sense GPS, flight plan
5 Sense/Compute/Control (SCC)Software System alarm triggering Control Environment Compute intrusion? Sense motion detection
Found in various domains ,[object Object]
home automation
tier-system monitoring
robotics
…6 Sense/Compute/Control (SCC)Software Systems Environment [Taylor et al., Software Architecture: Foundations, Theory, and Practice, 2009]
The SCC Architectural Style sources sensors actuators actions orders control operators Environment refined information context operators raw data 7 [Chen et al., Context aggregation and dissemination in ubiquitous computing, WMCSA’02] [Edwards et al., Architecture-driven self-adaptation and self-management in robotics, SEAMS’09]
The SCC Architectural Style 8 sources actuators sensors actions Control orders control operators Sense Environment Compute refined information context operators raw data
9 Environment Interface Application  Logic sources actuators sensors actions control operators Environment context operators
10 The SCC Architectural Style control operators Information use Information refinement context operators
Going Beyond the SCC Style 11   Our approach ,[object Object]
a compiler  Objectives to verify safety properties to guide implementation to ensure conformance
Compiling a Design Design Language abstract Design concrete Design 12
Compiling a Design Design Language abstract generated Design Compiler Software system defeats guidance and verification concrete Design 13
Compiling a Design Design Language abstract generated Design Compiler Software system mixes design and implementation generated concrete Software System Design Compiler 14
Compiling a Design Design Language abstract generated Software system Design Compiler generated Compiler Software System Design generated concrete Software System Design Compiler 15
Our Approach Design language GPL Compiler Design GPL programming framework developer’s code 16
Our Approach verification Developer’s code Compiler Programming framework Design 17
Our Approach verification Developer’s code Compiler Programming framework Design 18
Our Approach verification by construction Developer’s code Compiler Programming framework Design 19
20 Diving Into the Design Language sources actuators sensors actions alarm triggering control operators Environment intrusion? context operators motion detection
21 sources actuators sensors actions control operators context operators
22 sources actuators sensors actuators actions control operators control operators context operators context operators sensors
design language dedicated to SCC actuators context Intrusion as Boolean {   context BuildingLocked;   context Presence; } control operators 23 Boolean Intrusion context operators Boolean Boolean Presence Building Locked sensors
24 keycode motion Keypad MotionSensor actuators control operators Boolean Intrusion context operators Boolean Boolean Presence Building Locked Boolean Integer sensors
25 keycode motion Keypad MotionSensor Alarm actuators OnOff control operators IntrusionManager controller IntrusionManager{   context Intrusion;   action OnOff on Alarm; } Intrusion Boolean Boolean Presence Building Locked Boolean Integer sensors
keycode motion image Alarm Mailer Keypad Keypad MotionSensor Camera actuators OnOff Send UpdateSt control operators IntrusionManager SecurityManager Boolean Intrusion File context operators Boolean Boolean Scene Image Presence Building Locked 26 File Boolean Integer sensors
actuators control operators context operators 27 Intrusion Presence Building Locked sensors
28 Interaction Description event 3 Intrusion Intrusion request event 2 Presence Building Locked 1 Building Locked Presence multiple interpretations event 1 request 3 Intrusion Intrusion request event 2 request request 1 2 Building Locked Building Locked 2 Presence Presence
29 Interaction Description event 3 Intrusion request too abstract! event 2 1 Building Locked Presence multiple interpretations event 1 request 3 Intrusion Intrusion request event 2 request request 1 2 Building Locked Building Locked 2 Presence Presence
Interaction Contracts 1 request Main 1 Activation condition 30
Interaction Contracts source Sensor 3 event Main 1 Activation condition event 2 Data requirement 1 request 2 3 Emission 2 request Context Operator3 Context Operator2 31
Interaction Contracts 3 Intrusion 1 Activation condition context Intrusion asBoolean {   context Presence;   context BuildingLocked;   interaction {     whenprovided Presence     get BuildingLocked     maybepublish   } } 2 Data requirement 2 1 32 3 Emission Building Locked Presence 1 2 3
Compiling a Design 33 Developer’s code Programming framework Compiler Design
Programming Framework The compilermaps ,[object Object]
each interaction contract to an abstract method constrained with type declarations34
Programming Framework 35 Compiler Programming framework Design Activation condition Interaction contract    Abstract method ,[object Object]
 parameters
 return type1 1 Data requirement 2 1 2 3 Emission 3 3
Code Generation 36 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 37 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 38 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 39 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 40 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 41 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 42 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 43 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 44 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 45 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Code Generation 46 Alarm Mailer controller IntrusionManager{   context Intrusion;   contextSceneImage;  interaction {     whenprovided Intrusion     getSceneImage     do OnOff on Alarm,Send on Mailer   } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion(                                boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … }   protectedfinalclass Select  { … }   protectedfinalclassSceneImage { … }  } generated framework code
Implementation abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } 47 Alarm Mailer OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 48 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 49 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 50 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 51 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 52 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 53 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 54 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 55 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion(    boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code
Implementation 56 ,[object Object]
  leverage code completionclassIntrusionManagerextendsAbstractIntrusionManager {   ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) {       Actions actions;       actions = select.alarms().all().on();       Mailer mailer = select.mailers().anyOne();       File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions;     } } developer code

Más contenido relacionado

Similar a Leveraging Software Architectures to Guide and Verify the Development of Sense/Compute/Control Applications

AMIRA: Automated Malware Incident Response and Analysis (Black Hat USA Arsena...
AMIRA: Automated Malware Incident Response and Analysis (Black Hat USA Arsena...AMIRA: Automated Malware Incident Response and Analysis (Black Hat USA Arsena...
AMIRA: Automated Malware Incident Response and Analysis (Black Hat USA Arsena...
Jakub "Kuba" Sendor
 
Hack any website
Hack any websiteHack any website
Hack any website
sunil kumar
 
Reversing & malware analysis training part 12 rootkit analysis
Reversing & malware analysis training part 12   rootkit analysisReversing & malware analysis training part 12   rootkit analysis
Reversing & malware analysis training part 12 rootkit analysis
Abdulrahman Bassam
 

Similar a Leveraging Software Architectures to Guide and Verify the Development of Sense/Compute/Control Applications (20)

JEDI Slides-Intro2-Chapter20-GUI Event Handling.pdf
JEDI Slides-Intro2-Chapter20-GUI Event Handling.pdfJEDI Slides-Intro2-Chapter20-GUI Event Handling.pdf
JEDI Slides-Intro2-Chapter20-GUI Event Handling.pdf
 
Introduccion a AspectJ
Introduccion a AspectJIntroduccion a AspectJ
Introduccion a AspectJ
 
Java-Events
Java-EventsJava-Events
Java-Events
 
AMIRA: Automated Malware Incident Response and Analysis (Black Hat USA Arsena...
AMIRA: Automated Malware Incident Response and Analysis (Black Hat USA Arsena...AMIRA: Automated Malware Incident Response and Analysis (Black Hat USA Arsena...
AMIRA: Automated Malware Incident Response and Analysis (Black Hat USA Arsena...
 
Reversing & Malware Analysis Training Part 9 - Advanced Malware Analysis
Reversing & Malware Analysis Training Part 9 -  Advanced Malware AnalysisReversing & Malware Analysis Training Part 9 -  Advanced Malware Analysis
Reversing & Malware Analysis Training Part 9 - Advanced Malware Analysis
 
Robotlegs Extensions
Robotlegs ExtensionsRobotlegs Extensions
Robotlegs Extensions
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
 
How to write clean & testable code without losing your mind
How to write clean & testable code without losing your mindHow to write clean & testable code without losing your mind
How to write clean & testable code without losing your mind
 
Developing natural user interface applications with real sense devices
Developing natural user interface applications with real sense devicesDeveloping natural user interface applications with real sense devices
Developing natural user interface applications with real sense devices
 
Python GUI Programming
Python GUI ProgrammingPython GUI Programming
Python GUI Programming
 
Hack any website
Hack any websiteHack any website
Hack any website
 
Advanced Malware Analysis Training Session 6 - Malware Sandbox Analysis
Advanced Malware Analysis Training Session 6  - Malware Sandbox AnalysisAdvanced Malware Analysis Training Session 6  - Malware Sandbox Analysis
Advanced Malware Analysis Training Session 6 - Malware Sandbox Analysis
 
Reversing & malware analysis training part 12 rootkit analysis
Reversing & malware analysis training part 12   rootkit analysisReversing & malware analysis training part 12   rootkit analysis
Reversing & malware analysis training part 12 rootkit analysis
 
Touch Android Without Touching
Touch Android Without TouchingTouch Android Without Touching
Touch Android Without Touching
 
Flash and Hardware
Flash and HardwareFlash and Hardware
Flash and Hardware
 
Basic malware analysis
Basic malware analysis Basic malware analysis
Basic malware analysis
 
Metasploit Railguns presentation @ tcs hyderabad
Metasploit Railguns presentation @ tcs hyderabadMetasploit Railguns presentation @ tcs hyderabad
Metasploit Railguns presentation @ tcs hyderabad
 
ADVANCED MALWARE THREATS -- NO HAT 2019 (BERGAMO / ITALY)
ADVANCED MALWARE THREATS --  NO HAT 2019 (BERGAMO / ITALY)ADVANCED MALWARE THREATS --  NO HAT 2019 (BERGAMO / ITALY)
ADVANCED MALWARE THREATS -- NO HAT 2019 (BERGAMO / ITALY)
 
ExtJS framework
ExtJS frameworkExtJS framework
ExtJS framework
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Último (20)

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 

Leveraging Software Architectures to Guide and Verify the Development of Sense/Compute/Control Applications

  • 1. Leveraging Software Architecturesto Guide and Verify the Development of Sense/Compute/Control Applications Damien Cassou1,2, Emilie Balland1, Charles Consel1, Julia Lawall3 1Phoenix, INRIA, France 2Software Architecture Group, HPI, Germany 3APL, DIKU, Denmark
  • 2. Contributions A design language to specify a software system A compiler to process such specification for the verification of safety properties the guidance of the implementation the conformance 2 Context: Sense/Compute/Control software systems
  • 3. Sense/Compute/Control (SCC)Software System Environment Compute Sense 3 Control
  • 4. 4 Sense/Compute/Control (SCC)Software System aileron, engine Control Compute direction Sense GPS, flight plan
  • 5. 5 Sense/Compute/Control (SCC)Software System alarm triggering Control Environment Compute intrusion? Sense motion detection
  • 6.
  • 10. …6 Sense/Compute/Control (SCC)Software Systems Environment [Taylor et al., Software Architecture: Foundations, Theory, and Practice, 2009]
  • 11. The SCC Architectural Style sources sensors actuators actions orders control operators Environment refined information context operators raw data 7 [Chen et al., Context aggregation and dissemination in ubiquitous computing, WMCSA’02] [Edwards et al., Architecture-driven self-adaptation and self-management in robotics, SEAMS’09]
  • 12. The SCC Architectural Style 8 sources actuators sensors actions Control orders control operators Sense Environment Compute refined information context operators raw data
  • 13. 9 Environment Interface Application Logic sources actuators sensors actions control operators Environment context operators
  • 14. 10 The SCC Architectural Style control operators Information use Information refinement context operators
  • 15.
  • 16. a compiler Objectives to verify safety properties to guide implementation to ensure conformance
  • 17. Compiling a Design Design Language abstract Design concrete Design 12
  • 18. Compiling a Design Design Language abstract generated Design Compiler Software system defeats guidance and verification concrete Design 13
  • 19. Compiling a Design Design Language abstract generated Design Compiler Software system mixes design and implementation generated concrete Software System Design Compiler 14
  • 20. Compiling a Design Design Language abstract generated Software system Design Compiler generated Compiler Software System Design generated concrete Software System Design Compiler 15
  • 21. Our Approach Design language GPL Compiler Design GPL programming framework developer’s code 16
  • 22. Our Approach verification Developer’s code Compiler Programming framework Design 17
  • 23. Our Approach verification Developer’s code Compiler Programming framework Design 18
  • 24. Our Approach verification by construction Developer’s code Compiler Programming framework Design 19
  • 25. 20 Diving Into the Design Language sources actuators sensors actions alarm triggering control operators Environment intrusion? context operators motion detection
  • 26. 21 sources actuators sensors actions control operators context operators
  • 27. 22 sources actuators sensors actuators actions control operators control operators context operators context operators sensors
  • 28. design language dedicated to SCC actuators context Intrusion as Boolean { context BuildingLocked; context Presence; } control operators 23 Boolean Intrusion context operators Boolean Boolean Presence Building Locked sensors
  • 29. 24 keycode motion Keypad MotionSensor actuators control operators Boolean Intrusion context operators Boolean Boolean Presence Building Locked Boolean Integer sensors
  • 30. 25 keycode motion Keypad MotionSensor Alarm actuators OnOff control operators IntrusionManager controller IntrusionManager{ context Intrusion; action OnOff on Alarm; } Intrusion Boolean Boolean Presence Building Locked Boolean Integer sensors
  • 31. keycode motion image Alarm Mailer Keypad Keypad MotionSensor Camera actuators OnOff Send UpdateSt control operators IntrusionManager SecurityManager Boolean Intrusion File context operators Boolean Boolean Scene Image Presence Building Locked 26 File Boolean Integer sensors
  • 32. actuators control operators context operators 27 Intrusion Presence Building Locked sensors
  • 33. 28 Interaction Description event 3 Intrusion Intrusion request event 2 Presence Building Locked 1 Building Locked Presence multiple interpretations event 1 request 3 Intrusion Intrusion request event 2 request request 1 2 Building Locked Building Locked 2 Presence Presence
  • 34. 29 Interaction Description event 3 Intrusion request too abstract! event 2 1 Building Locked Presence multiple interpretations event 1 request 3 Intrusion Intrusion request event 2 request request 1 2 Building Locked Building Locked 2 Presence Presence
  • 35. Interaction Contracts 1 request Main 1 Activation condition 30
  • 36. Interaction Contracts source Sensor 3 event Main 1 Activation condition event 2 Data requirement 1 request 2 3 Emission 2 request Context Operator3 Context Operator2 31
  • 37. Interaction Contracts 3 Intrusion 1 Activation condition context Intrusion asBoolean { context Presence; context BuildingLocked; interaction { whenprovided Presence get BuildingLocked maybepublish } } 2 Data requirement 2 1 32 3 Emission Building Locked Presence 1 2 3
  • 38. Compiling a Design 33 Developer’s code Programming framework Compiler Design
  • 39.
  • 40. each interaction contract to an abstract method constrained with type declarations34
  • 41.
  • 43. return type1 1 Data requirement 2 1 2 3 Emission 3 3
  • 44. Code Generation 36 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 45. Code Generation 37 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 46. Code Generation 38 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 47. Code Generation 39 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 48. Code Generation 40 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 49. Code Generation 41 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 50. Code Generation 42 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 51. Code Generation 43 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 52. Code Generation 44 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 53. Code Generation 45 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 54. Code Generation 46 Alarm Mailer controller IntrusionManager{ context Intrusion; contextSceneImage; interaction { whenprovided Intrusion getSceneImage do OnOff on Alarm,Send on Mailer } } OnOff Send IntrusionManager Boolean File Intrusion Scene Image abstractclassAbstractIntrusionManager { abstract Actions onIntrusion( boolean intrusion, SceneImagesceneImage, Select select); protectedfinalclass Actions { … } protectedfinalclass Select { … } protectedfinalclassSceneImage { … } } generated framework code
  • 55. Implementation abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } 47 Alarm Mailer OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 56. Implementation 48 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 57. Implementation 49 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 58. Implementation 50 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 59. Implementation 51 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 60. Implementation 52 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 61. Implementation 53 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 62. Implementation 54 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 63. Implementation 55 Alarm Mailer abstractclassAbstractIntrusionManager { abstract ActionsonIntrusion( boolean intrusion, SceneImagesceneImage, Select select); } OnOff Send IntrusionManager generated framework code Boolean File Intrusion Scene Image classIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 64.
  • 65. leverage code completionclassIntrusionManagerextendsAbstractIntrusionManager { ActionsonIntrusion(boolean intrusion, SceneImagesceneImage, Select select){ if (intrusion) { Actions actions; actions = select.alarms().all().on(); Mailer mailer = select.mailers().anyOne(); File image = sceneImage.get(); actions.add(mailer.send(“Intrusion !”, “admin”, image)); return actions; } } developer code
  • 66. Summary A design language dedicated to specifying SCC software systems A compiler to process such specification for the guidance of the implementation the conformance 57
  • 67. Status Report Implementation using standard language tools Java, ANTLR, StringTemplate Safety property verification generation of Promela specifications e.g., interaction invariants Several application domains avionics: simulated auto-pilot and AR drone building automation: light, fire, security, newscast, etc. misc.: web-server monitoring, home messenger, etc. Ongoing empirical evaluation with both students and professional software engineers http://diasuite.inria.fr Damien Cassou, Emilie Balland, Charles Consel, Julia Lawall
  • 68. 59
  • 69. Facilitating Evolution eases developer’s work by showing mismatches leveraging development tools ensures conformance 60
  • 70. Productivity 61 ➡ 76% actually executed
  • 71. Code Generation 3 boolean motion MotionSensor Presence 1 2 3 <⇑MotionSensor.motion; ⇓MotionSensor.motion; ⇑ self > boolean 1 2 abstractclassAbstractPresence { abstractbooleanonMotionFromMotionSensor( boolean motion, Select select); } 62 1 2 3 1 generated framework code
  • 72. Implementation 3 boolean motion MotionSensor Presence 2 boolean 1 abstractclassAbstractPresence { abstractbooleanonNewMotionFromMotionSensor( boolean motion, Select select); } generated framework code class Presence extendsAbstractPresence { booleanonMotionFromMotionSensor(boolean motion, Select select) { if (motion) return true; MotionSensors sensors = select.motionSensors().all(); for (MotionSensor sensor : sensors) if (sensor.getMotion()) return true; return false; } } developer code 63
  • 73. A Research Vehicle This work is part of a larger research project with 7 PhDs leveraging the frameworks QoS (FASE’11) security (ICPS’09, DAIS’11) error-handling (OOPSLA’10) virtual testing (Mobiquitous’10 and ‘09) SIP (ICC’10, ICIN’09, IPTComm’08) end-user programming (DSLWC’09) 64
  • 74. Limitations Applies only to new projects Applies only to Sense/Compute/Control Requires architects to learn a new language Imposes small run-time overhead 65

Notas del editor

  1. Software architectures have long been used as a way to make software design explicit. However, these architectures are barely leveraged to guide subsequent phases of a software development cycle. In this work, we propose to leverage software architectures for the implementation and verification phases
  2. SCC applications are applications that interact with an external environment
  3. In this pattern, sensors…Interactions between these components are restricted.Explain that it separates the logic and the environment handling
  4. In this style, sensors…Interactions between these components are restricted
  5. In this style, sensors…Interactions between these components are restricted
  6. In this style, sensors…Interactions between these components are restricted
  7. The pattern guides the architect in describing his application. We want to go further and use this description to guide…
  8. REQUEST + EVENT
  9. CONFORMANCE