cs599 formal methods in software architectures 1 temporal examples in rapide mohammad al said miheer...

28
CS599 Formal Methods in S oftware Architectures 1 Temporal Examples in Rapide • Mohammad Al Said • Miheer Bhachech • Aditya Garg

Post on 22-Dec-2015

222 views

Category:

Documents


0 download

TRANSCRIPT

CS599 Formal Methods in Software Architectures

1

Temporal Examples in Rapide

• Mohammad Al Said

• Miheer Bhachech

• Aditya Garg

CS599 Formal Methods in Software Architectures

2

Rapide Syntax

Architecture

•architecture_declaration ::=   architecture identifier `(' [ parameter_list ] `)'       [ return interface_expression ]       is       [ module_constituent_list ]       [ connect { connection } ]     end [ architecture ] [ identifier ] `;' •connection ::=     pattern connector pattern `;'   | other kinds of pattern connections ... •connector ::= `to' | `=>' | `||>'

CS599 Formal Methods in Software Architectures

3

InterfaceThe interface type of a component consists of the set of constituents by which the component communicates with other components.

•Interface types are declared using the following syntax: •type_declaration ::=   type identifier is interface_expression `;' •interface_type_expression ::=   interface { interface_constituent }     [ behavior behavior_declaration ]   end [ interface ] [ identifier ] •interface_constituent ::=     provides { interface_declarative_item }   | requires { interface_declarative_item }   | action { action_name_declaration }   | private { interface_declarative_item }   | service { service_declarative_item }   | constraint { pattern_constraint_list}  

CS599 Formal Methods in Software Architectures

4

Actions and Functions

•action_name_declaration ::=    action mode identifier     `(' [ formal_parameter_list ] `)' `;' •mode ::= in | out •function_name_declaration ::=   function identifier     `(' [ formal_parameter_list ] `)'     [ return type_expression ] `;' •For example, •action in Write(value : Data); function Read() return Data;

CS599 Formal Methods in Software Architectures

5

Tool Support

There are several tools to assist programmers who want to develop Rapide models of systems. The tools include:

•an architecture-based editor for defining system models, •a compiler for producing executables from the system models, •a constraint checking runtime system that is used by an executable to produce a history of the execution, •a graphical browser for viewing histories, and •an animation facility providing another view of histories. •The Rapide Toolset is available for Solaris 2.5, SunOS 4.1.3. and Linux.

CS599 Formal Methods in Software Architectures

6

CS599 Formal Methods in Software Architectures

7

Gas_StationAssumptions:• Operator schedules pumps to customers.• No mechanism that map customers to the right pump.• Main Gas tank refilling process is not included.• Main Gas Tank is divided into 3 tanks based on Fuel grade. • Car’ Gas tank is not included.

CS599 Formal Methods in Software Architectures

8

type Dollars is Real; type Gallons is Real;type Fuel is Integer; type Customer is interface action out Pre_Pay(Cost : Dollars), Turn_On(), Walk(), Turn_Off(), Select_Grade(Fuel_Grade : Fuel); in Okay(), Change(Cost : Dollars); behavior D : Dollars; FG : Fuel; begin start => Pre_Pay(D);; Okay => Walk;; Okay => Select_Grade(FG); Turn_On();;  end Customer;

Customer

CS599 Formal Methods in Software Architectures

9

type Operator is interface action in Request(Cost : Dollars), Refill_Tank(FL : Boolean; Tank : Fuel), Result(Cost : Dollars); out Schedule(Cost : Dollars), behavior Payment : Dollars; Fuel_Level_Low : var Boolean :=False; Tank_Number: Fuel; Action Add_Fuel_To_Tank(Tank : Fuel); Begin (?X : Boolean ; ?Y : Fuel) (Refill_Tank(?X ; ?Y) => Fuel_Level_Low :=?X; Tank_Number :=?Y;; Fuel_Level_Low => Add_Fuel_To_Tank($Tank_Number);; (?X : Dollars)Request(?X) => Payment := ?X; Schedule(?X);; (?X : Dollars)Result(?X) => Remit($Payment - ?X);;  end Operator;

Operator

CS599 Formal Methods in Software Architectures

10

type Pump is interface action in On(), Off(), Activate(Cost : Dollars), Select_Fuel_Grade(Fuel_Grade : Fuel), Ok(); out Report(Amount : Gallons; Cost : Dollars), Request_Gas_From_Tank(GT : Fuel); behavior Free : var Boolean := True; Premium_Cost : var Real := 1.9; Plus_Cost : var Real := 1.8; Regular_Cost : var Real :=1.7; Reading, Limit : var Dollars := 0; Gallons_Dispensed : var Gallons :=0; action In_Use(), Done(), Fuel_Grade_Selected(); begin (?X : Dollars)(On ~ Activate(?X) AND Ok) where $Free => Free := False; Limit := ?X; Fuel_Grade_Selected;; Fuel_Grade_Selected => In_Use;; In_Use => if (((?Y : Fuel) Select_Fuel_Grade(?Y) == 1 ) then Reading := $Premium_Cost * $Gallons_Dispensed ) elsif (((?Y : Fuel) Select_Fuel_Grade(?Y) == 2) then Reading := $Plus_Cost * $Gallons_Dispensed ) else Reading := $Regular_Cost * $Gallons_Dispensed endif; Done;; Off or Done => Free := True; Report($Reading);; end Pump;

Pump

CS599 Formal Methods in Software Architectures

11

type Fuel_Tank is interface action in Requested_Gas_Type(Fuel_Grade : Fuel); out Ok(), Request_To_Refill_Tank(FL : Boolean ; Tank : Integer);   behavior Fuel_Level : var Boolean :=True; Available_Gas , Threshold : Gallons; action Select_Tank_Type(Fuel_Grade : Fuel) , Send_To_Pump(); begin (?FG : Fuel) Request_Gas_Type(?FG) => Select_Tank_Type(?FG);; (Available_Gas <= Threshold ) => Fuel_Level_Ok :=False; Request_To_Refill_Tank($Fuel_Level, ?FG);; Send_To_Pump => Ok;; end Fuel_Tank;

Fuel_Tank

CS599 Formal Methods in Software Architectures

12

architecture gas_station() return root is O : Operator; P1, P2, P3, P4 : Pump; C1, C2, C3, C4 : Customer; T : Tank; connect (?C : Customer; ?X : Dollars) ?C.Pre_Pay(?X) => O.Request(?X); (?X : Dollars; ?P : Pump) O.Schedule(?X) => ?P.Activate(?X); (?X : Dollars) O.Schedule(?X) => ?C.Okay; (?C : Customer; ?P : Pump; ?F : Fuel) ?C.Select_Grade(?F) => ?P.Select_Fuel_Grade(?F); (?P : Pump; T : Tank; ?F : Fuel) ?P.Request_Gas_From_Tank(?F) => T.Requested_Gas_Type(?F); (?F : Fuel ; FL : Boolean) T.Request_To_Refill_Tank(?FL , ?F) => O.Refill_Tank(?FL , ?F); (?P : Pump) T.Ok => ?P.Ok (?C : Customer; ?P : Pump) ?C.Turn_On => ?P.On; (?C : Customer; ?P : Pump) ?C.Turn_Off => ?P.Off; (?X : Gallons; ?Y : Dollars; ?P : Pump) ?P.Report(?X, ?Y) => O.Result(?Y); end gas_station;

CS599 Formal Methods in Software Architectures

13

Cruise Control System• Assumptions made about the system:

– The system consists of five interfaces

• Driver

• Accelerator

• Brakes

• SpeedMeter

• Cruise

– The engine is always on in the system.

– The Cruise can sense a change in the car speed.

– Whenever the accelerator is pressed, SpeedMeter increases the speed and has the current speed of the car. SpeedMeter can increase & decrease the speed of the car.

– While going uphill or downhill, the Cruise will try to maintain the CRUISE_SPEED by sending an action to the SpeedMeter.

CS599 Formal Methods in Software Architectures

14

System Block Diagram

in out out in

out out out out

in in in in

out in

in out

Driver

Cruise

Accelerator

SpeedMeter

Brakes

CS599 Formal Methods in Software Architectures

15

Driver Interface

type BOOL is boolean;

type INT is integer;

type Driver is interface

action out Press_Accelerator(),

Press_Cruise_On(),

Press_Cruise_Set(),

Press_Brakes(),

Press_Cruise_Resume(),

Release_Accelerator(),

Press_Cruise_Accelerate(),

Press_Cruise_Decelerate(),

Press_Cruise_Off();

end Driver;

CS599 Formal Methods in Software Architectures

16

Brakes Interface

type Brakes is interface

action in Pressed();

out Cruise_Disable();

behavior

begin

Pressed() => Cruise_Disable();;

end Brakes;

CS599 Formal Methods in Software Architectures

17

Accelerator Interfacetype Accelerator is interface

action in Pressed(),

Released();

out Cruise_Again(),

IncreaseSpeed(Speed : INT);

behavior

Speed : INT;

begin

Pressed() => IncreaseSpeed(?Speed);;

Released() => Cruise_Again();;

End Accelerator;

CS599 Formal Methods in Software Architectures

18

SpeedMeter Interface(1)

type SpeedMeter is interface

action in IncreaseSpeed(Speed : INT),

Cruise_Acc(), Cruise_Dec(),

UpHill(Speed : INT),

DownHill(Speed : INT);

out Speed_Check(Speed : INT);

Cruise_accl_dcl(Speed : INT);

behavior

currentSpeed : var INT;

CS599 Formal Methods in Software Architectures

19

SpeedMeter Interface(2)begin

(?X:INT) IncreaseSpeed(?X)

=> currentSpeed := ?X;

Speed_Check($currentSpeed);;

Cruise_Acc()

=> Cruise_accl_dcl($currentSpeed);;

Cruise_Dec()

=> Cruise_accl_dcl($currentSpeed);;

(?X : INT) UpHill(?X)

=> currentSpeed := ?X;;

(?X : INT) DownHill(?X)

=> currentSpeed := ?X;;

End SpeedMeter;

CS599 Formal Methods in Software Architectures

20

Cruise Interface (1)type Cruise is interface

action in Speed_Check(SPEED : INT);

Cruise_On();

Cruise_Off();

Cruise_Set();

Cruise_Disabled();

Cruise_Resume();

Cruise_Again();

Cruise_AccelDecel();

out Change_In_Speed(Speed : INT);

CS599 Formal Methods in Software Architectures

21

Cruise Interface (2)behavior

CurSpeed : var INT ;

PREVIOUS_SPEED : var INT ;

IN_CRUISE :var BOOL := False;

CRUISE_ENABLED :var BOOL := False;

CRUISE_ON : var BOOL := False;

CRUISE_SPEED : var INT ;

CRUISE_SET : var BOOL := False;

ALLOWABLE : var BOOL := False;

ACCEL_RELEASED : var BOOL := False;

BRAKE_PRESSED : var BOOL := False;

ACCEL_PRESSED : var BOOL := False;

action Cruise_Status();

CS599 Formal Methods in Software Architectures

22

Cruise Interface (3)begin

Cruise_Off()

=> CRUISE_ON := False;

CRUISE_ENABLED := False;

(?Y : INT) Speed_Check(?Y) where ?Y>30 and ?Y<90 and $CRUISE_ON

=> CurSpeed := ?Y;

ALLOWABLE := True;

ACCEL_PRESSED := True;

Cruise_Status();;

Cruise_Status() where $CRUISE_ENABLED := True

=> CRUISE_ENABLED := False;

ACCEL_PRESSED := False;

BRAKE_PRESSED := False;

IN_CRUISE := True;;

CS599 Formal Methods in Software Architectures

23

Cruise Interface (4)

Cruise_Again() where $IN_CRUISE := True

=> CRUISE_ENABLED := True;

CRUISE_SPEED := PREVIOUS_SPEED;

IN_CRUISE := False;;

Cruise_On()

=> CRUISE_ON := True;;

Cruise_Set() where $ALLOWABLE and $CRUISE_ON

=> CRUISE_SPEED :=$CurSpeed;

PREVIOUS_SPEED := $CRUISE_SPEED;

CRUISE_ENABLED := True;

ALLOWABLE := False;;

CS599 Formal Methods in Software Architectures

24

Cruise Interface (5)Cruise_Disabled() where $CRUISE_ENABLED := True

=> CRUISE_ENABLED := False;

BRAKE_PRESSED := True;;

Cruise_Resume() where $CRUISE_ENABLED := False and $BRAKE_PRESSED

and $CurSpeed > 30

=> CRUISE_ENABLED := True;

CRUISE_SPEED := $PREVIOUS_SPEED;

BRAKE_PRESSED := False;;

(?X : INT) Cruise_AccelDecel(?X) where ?X>30 and ?X<90 and $CRUISE_ENABLED=> CRUISE_SPEED := ?X;;

CS599 Formal Methods in Software Architectures

25

Cruise Interface (6)(?X : INT) Change_In_Speed(?X) where $BRAKE_PRESSED := False and

$ACCEL_PRESSED := False and ?X <$CRUISE_SPEED and ?X>30

=>SignalAccelerator($CRUISE_SPEED);;

(?X : INT) Change_In_Speed(?X) where $BRAKE_PRESSED := False and

$ACCEL_PRESSED := False and ?X >$CRUISE_SPEED and ?X<90

=>SignalBrake($CRUISE_SPEED);;

End Cruise;

CS599 Formal Methods in Software Architectures

26

The Architecture(1)achitecture cruise_control() return root

is

D : Driver;

A : Accelerator;

B : Brake;

S : SpeedMeter;

C : Cruise;

connect

D.Press_Cruise_On() => C.Cruise_On();

D.Press_Accelerator() => A.Pressed();

(?X : INT) A.IncreaseSpeed(?X) => S.IncreaseSpeed(?X);

(?X : INT) S.SpeedCheck(?X) => C.Speed_Check(?X)

D.Press_Cruise_Set() => C.Cruise_Set();

D.Press_Brakes() => C.Cruise_Disabled();

D.Press_Cruise_Resume() => C.Cruise_Resume();

CS599 Formal Methods in Software Architectures

27

The Architecture(2)D.Release_Accelerator() => A.Released();

A.Cruise_Again() => C.Cruise_Again();

D.Press_Cruise_Set() => C.Cruise_Set();

D.Press_Cruise_Accelerate() => S.Cruise_Acc();

(?X : INT) S.Cruise_accl_dcl(?X) => C.CruiseAccelDecel(?X);

D.Press_Cruise_Decelerate() => S.Cruise_Dec();

(?X : INT) S.Cruise_accl_dcl() => C.CruiseAccelDecel(?X);

(?X : INT) C.Change_In_Speed(?X) => S.UpHill(?X);

(?X : INT) C.Change_In_Speed(?X) => S.DownHill(?X);

D.Press_Cruise_Off() => C.Cruise_Off();

end cruise_control;

CS599 Formal Methods in Software Architectures

28

Conclusions•Using Rapide we can simulate executions of the system and verify that the traces of those executions conform to the high level specifications of the desired behavior.

•Rapide concepts are being used for complex event processing.

•Applications of Complex Event Processing:•Network Monitoring and Management

•Network Intrusion Detection

•Extensive tool support

•Huge Language

•The learning curve is high

•The manuals are not very user friendly