Page 74 - 《软件学报》2021年第12期
P. 74
3738 Journal of Software 软件学报 Vol.32, No.12, December 2021
状态按钮、记录日志等).对于这类需求,目前仍需编写 Event-State→Event 规则.因此,SSRules 将 SS 范式转译为
Event-State→Event,并允许两种范式共存.未来可以扩展降低这类需求编程难度的具体范式.
3.2 SS范式的定义
表 6 的左部列出了 SSRules 系统支持的 SS 范式的抽象语法,其中:FOR 语句集结同一动作实体的所有规则,
且约定组内靠前的规则优先级更高;每条规则(ssrule)包含在 WHILE 子句指定的条件成立时,对该实体全部或
部分能力的期望状态;多条规则按从前到后的次序、以第 1 条满足 WHILE 条件的规则中的 EXPECT 子句来设
置期望的实体能力状态;一般地,无 WHILE 子句的规则放在最后作为安全默认.Condition 中的“entityID.
capName op value”,“historyOp timeperiod entityID.capName value”分别表示当前状态和历史状态型原子判断,
其中,历史状态运算符 historyOp 的 4 种可能取值的含义举例如下.
• “WITHIN 5 分钟电扇.开关关”表示电扇的开关在 5 分钟内曾经处于关闭状态,则该原子判断为真;
• “!WITHIN 5 分钟电扇.开关关”表示电扇的开关在 5 分钟内不曾处于关闭状态,则该原子判断为真;
• “STAY 5 分钟电扇.开关开”表示电扇的开关在 5 分钟内持续处于开启状态,则该原子判断为真;
• “!STAY 5 分钟电扇.开关关”表示电扇的开关在 5 分钟内未一直处于开启状态,则该原子判断为真.
Table 6 Abstract syntax of paradigms of SS rules and EE rules used in SSRules
表 6 SSRules 系统使用的 SS 范式和 EE 范式的抽象语法
State-State(SS)范式 Event-Event(EE)范式
ssrulesGroup:=FOR entityID ssrule+ eerule:=IF event+ [WHILE condition] THEN eeAction+
ssrule:=EXPECT capState+ WHILE condition event:=entityID.capName FROM range TO range
capState:=(capName,Value) |entityID.capName STAYON value REACH timeperiod
condition:=condition OR condition eeAction:=entityID.capName.cmdName value
|condition AND condition condition:=condition OR condition
|NOT condition |condition ANDcondition
|(condition) |NOT condition
|entityID.capName op value |(condition)
|historyOp timePeriod entityID.capName value |entityID.capName op value
op:=‘==’|‘!=’|‘<’|‘>’|‘≤’|‘≥’ |historyOp timePeriod entityID.capName value
historyOp=‘STAY’|‘WITHIN’|‘!STAY’|‘!WITHIN’ op:=‘==’|‘!=’|‘<’|‘>’|‘≤’|‘≥’
timePeriod:=时长 historyOp=‘STAY’|‘WITHIN’|‘!STAY’|‘!WITHIN’
timePeriod:=时长
range:=值集
3.3 SS范式的缺陷避免能力分析
SS 范式天然地排除了表 2 中所列的缺陷⑨、缺陷⑩这两种缺陷.对于在使用 State-State 时序范式时可能存
在的缺陷①~缺陷⑧这 8 种缺陷,SS 范式的表示机制能完全避免缺陷①优先级冲突;SS 范式的表示及转译机制
能部分解决或消除缺陷②安全默认偏差、缺陷③非瞬时动作、缺陷⑥重复触发,其附带效果可以辅助改善缺陷
④缺少反向动作;对于缺陷⑤无限循环、缺陷⑦不确定时序等缺陷的检测,可以通过模型检查等方法在规则转
译之前避免;由于难以提供通用的鉴别何谓矛盾的机制,因而 SSRules 不能解决缺陷⑧矛盾的动作.下面分别讨
论 SS 范式应对缺陷①~缺陷③和缺陷⑥的措施.
(1) “按动作实体将规则分组、组内规则有序”可完全避免缺陷①优先级冲突
用户只需移动规则在组内的相对位置,免除显式设置优先级数值的困难.由于同一动作实体的各规则优先
级不同,故无缺陷①(示例见 3.1 节).
(2) “将配置的安全默认规则自动作为动作实体的最低优先级规则”可辅助消除缺陷②安全默认偏差
SSRules 提供可配的安全默认设置文件,其中的条目形如“实体/实体类 ssrule”可描述指定实体或实体类的
默认期望状态,SSRules 会自动将其追加到相应实体的规则集尾部,作为最低优先级规则.例如针对门锁可以配
置默认安全规则“EXPECT (状态,锁定)”,则用户只需描述其他需求,如:
FOR 门锁 EXPECT (状态,未锁定) WHILE 人体传感器.状态==激活 [AND 其他安全条件]
而 SSRules 会自动在尾部追加“EXPECT (状态,锁定)”.只要人体传感器不再激活,SSRules 就会按最后一条