300 likes | 409 Views
Qualitative Reasoning of Distributed Object Design. Nima Kaveh & Wolfgang Emmerich Software Systems Engineering Dept. Computer Science University College London n.kaveh@cs.ucl.ac.uk. Talk Outline. Intro – Distributed Systems Motivations & Challenges Example Scenario Our Approach
E N D
Qualitative Reasoning of Distributed Object Design Nima Kaveh & Wolfgang Emmerich Software Systems Engineering Dept. Computer Science University College London n.kaveh@cs.ucl.ac.uk
Talk Outline • Intro – Distributed Systems • Motivations & Challenges • Example Scenario • Our Approach • Safety & Liveness properties • Summary
oo-Distributed Systems • Composed of objects/components • Objects are distributed across multiple machines executing in parallel • Communication is done via object requests • Client/Server interaction, via request invocations, form the synchronization behaviour of a distributed application
oo-Distributed Systems Design • Design of distributed objects is complex • Non-deterministic behaviour of dynamic component interactions • Different synchronization primitives • Subtle differences to local-based counterparts (Deadlock by recursion) • Lack of design and analysis support • Main focus on static characteristics • Large number of potential test cases
Motivations & Challenges • Confront complexities by offering developers with design aid • Complement existing Software Engineering validation and verification techniques • Only expose designers to the popular UML notation • Solution not dependent on any specific semantic notation • Build on existing tools and notations
Our Approach • Assume distributed systems are built using middleware • Exploit the fact that there are only few middleware primitives for synchronization of distributed objects • Representation of these primitives as stereotypes in UML models • Formal specification of stereotype semantics • Model checking of UML models against given safety and liveness properties
Stereotype UML Class & Statechart diagrams + props. Process Algebra Generation Approach Overview Results – UML Sequence diagrams Model Checking Design Domain Verification Domain
Communication Primitives • Distributed objects communicate by object requests • Middleware synchronization primitives define how a client object: • Invokes a method request • Operates during invocation processing • Obtains results of method invocation • Middleware threading policies define how a server object: • Receives method requests • Handles concurrent requests
Policies & Primitives • Mainstream object middleware provides few primitives and policies • Synchronization Primitives (Client-side): • Synchronous Requests • Deferred Synchronous Requests • One-way Requests • Asynchronous Requests • Threading Policies (Server-side): • Single Threaded • Multi Threaded
Process Algebra Generation Approach Overview Stereotype UML Class & Statechart diagrams + props Results – UML Sequence diagrams Model Checking Developer Domain Verification Domain
Trading Class Diagram <<singleThreaded>> NotificationServer <<singleThreaded>> myUpdateServer Trader receiveEquityData() traders addTrader() receiveServerUpdates() removeTrader() myEquityServer controller notifier <<singleThreaded>> traders EquityServer receiveTraderUpdate()
addTrader removeTrader idle receiveEquityData finishedsendout preparing data reply sending <<synchronous>> traders.receiveServerUpdates() Notification Server Statechart
idle receiveTraderUpdate update reply <<synchronous>> notifier.receiveEquityData() updates completed Equity Server Statechart
trader3:Trader trader2:Trader trader1:Trader equityServer1:EquityServer notifier1:NotificationServer Object Diagram Used to depict run-time configuration of the system
User defined properties • Designers must specify properties that the modelled system must adhere to • Enforce restriction on parallel execution of state diagram models • Safety • Nothing bad happens during execution • Deadlock, event ordering • Liveness • Something good eventually happens • Eventual termination
0 EquityServer.receiveTraderUpdate 1 NotificationServer.receiveEquityData 2 Safety Property Trader.receiveServerUpdates Specifies action ordering across the three state diagrams
<<singleThreaded>> NotificationServer <<singleThreaded>> myUpdateServer Trader <<progress>> receiveEquityData() addTrader() <<progress>> receiveServerUpdates() traders removeTrader() myEquityServer controller notifier <<singleThreaded>> traders EquityServer <<progress>> receiveTraderUpdate() Liveness Property Progress evaluates to the temporal logic property of “always eventually”
Stereotype UML Class & Statechart diagrams + props Approach Overview Process Algebra Generation Results – UML Sequence diagrams Model Checking Developer Domain Verification Domain
Process Algebra Generation • Use Finite State Process algebra (Magee & Kramer 99) to model object synchronisation • Finite number of synchronization primitives and activation policies ÞDefine FSP fragments for all primitive/policy combinations • Compose FSP fragments along the combination of client/server primitives and the object diagram
Process Algebra Generation Trading Class Diagram Equity Server Statechart <<singleThreaded>> NotificationServer idle controller receiveTraderUpdate update reply <<synchronous>> notifier notifier.receiveEquityData() <<singleThreaded>> EquityServer updates completed Combination of single threaded server and synchronous invocation detected
Application FSP Specification EQUITYSERVER=(startserver->Idle), Idle=(receivetraderupdate->Update), Update=(notifier.receiveequitydata->receiveInvocationReply ->Updatescompleted), Updatescompleted=(reply->Idle). NOTIFICATIONSERVER=(startnotificationserver->Idle), Idle=(receiveequitydata->Preparingdata | addtrader->Idle | removetrader->Idle), Preparingdata=(reply->Sending), Sending=(traders.receiveserverupdates->receiveInvocationReply ->Sending | finishedsendout->Idle). NOTIFIER_OA =(receiveRequest->relayRequest->receiveReply->relayReply->NOTIFIER_OA). ||TRADING_SYSTEM = (notifier1:NOTIFICATIONSERVER || equityserver1:EQUITYSERVER || notificationserverOA:NOTIFIER_OA ) /{ equityserver1.notifier.receiveequitydata / notificationserverOA.receiveRequest, equityserver1.receiveInvocationReply / notificationserverOA.relayReply, notifier1.receiveequitydata / notificationserverOA.relayRequest, notifier1.reply / notificationserverOA.receiveReply }.
User-defined Property FSP Specification Safety: property SFY_1= ({trader1,trader2}.equityServer1.receivetraderupdate->S1), S1= ({equityServer1}.notifier1.receiveequitydata->S2), S2= ( {notifier1}.trader1.receiveserverupdates->SFY_1 | {notifier1}.trader2.receiveserverupdates->SFY_1). Liveness: progress EQUITYSERVER_PRG={ trader1.equityServer1.receivetraderupdate, trader2.equityServer1.receivetraderupdate} progress NOTIFICSERVER_PRG ={equityServer1.notifier1.receiveequitydata } progress TRADER_PRG = {notifier1.trader1.receiveserverupdates, notifier1.trader2.receiveserverupdates }
Stereotype UML Class & Statechart diagrams + props Approach Overview Process Algebra Generation Generate UML Sequence diagrams for results Model Checking Developer Domain Verification Domain
Model Checking • Generate a Labelled Transition System from the input process algebra • Carry out an exhaustive search in state space of the underlying LTS for action traces leading to property violations • In case of violation, produce an action trace • Trace is used to construct a UML sequence diagram to show scenario leading to the property violation • For liveness violations the sequence diagram depicts the trace to the terminal set
Trader TraderOA Context aware minimization • Model checking suffers from the state explosion problem • Optimisation is achieved by: • Only modelling the synchronization behaviour of a middleware application • Building a state space of transitions in state diagrams that only correspond to remote requests
Stereotyped UML Class & Statechart diagrams + props Approach Overview Process Algebra Generation Results – UML Sequence diagrams Model Checking Developer Domain Verification Domain
trader1: equityServer1: notifier1 : Trader EquityServer NotificationServer receiveTraderUpdate receiveEquityData receiveServerUpdates receiveTraderUpdate receiveServerUpdates receiveEquityData Relating Results Scenario demonstrating method invocations leading to deadlock
Summary • Tackle non-deterministic synchronisation problems in oo-middleware systems at design • Defined semantics for client/server communication primitives • Used the powers of the model checking to detect potential execution traces that leading to property violations • Confine designers to a pure UML interaction only • Introduced no new notations
Future Work • Investigate heuristic approaches such as pattern detection in the UML design diagrams • Carry out an industrial case study to analyse the scalability and feasibility of our approach • Provide semantic mapping to the Promela (SPIN), to demonstrate the general applicability of our concepts