Page 68 - 《软件学报》2021年第12期
P. 68
3732 Journal of Software 软件学报 Vol.32, No.12, December 2021
不总能被修复.
(2) 3 种缺陷被提及
[6]
⑤ 无限循环(infinite loop)的原因是规则相互触发,这种缺陷在机器人终端用户编程中常被遇到 ;
⑥ 重复触发(repeated triggering)指用户希望规则仅触发一次,但却触发多次.这种缺陷主要出现在 State-
State 范式下因状态触发器持续为真导致规则触发多次.Cao 等人 [25] 在 mashup 编程工作中提及了这种
缺陷;
⑦ 不确定的时序(nondeterministic timing)是由于系统处理同时发生的触发器的顺序不确定而导致.Huang
[6]
等人 简要讨论了 TAP 中存在的这种缺陷.
这 3 种缺陷均可以通过静态分析来检测,但是实际系统无法鉴别重复触发是否是用户的有意行为.缺陷⑤
和缺陷⑦还可以通过动态分析检测.
(3) TAP 新增缺陷
⑧ 矛盾的动作(contradictory action)指的是长周期内在矛盾的动作间无限循环(例如加热和冷却之间不断
交替);
⑨ 时间窗错误(time-window fallacy)是当用户在编写 Event-Event 范式的规则时忘指定时间窗时导致;
⑩ 翻转触发器(flipped triggers)是因用户难以指定触发器中哪部分是事件哪部分是状态而导致的.这种缺
陷在静态或动态分析中都很难检测到.
表 2 总结了上述 10 种缺陷的原因、引起缺陷的 TAP 编程范式、缺陷检查或修复方法.
Table 2 Causes and detection of various bugs in TAP rules
表 2 各种 TAP 缺陷的起因与可检测性
缺陷类型 缺陷原因 引起缺陷的 TAP 范式 缺陷检测/修复 在 SSRules 中的情况
A 用户难以正确 规则按动作实体
① 优先级 设置规则的 State-State 静态检测 无 分组,组内靠前的
冲突 触发器
优先级 规则优先级高
② 安全默认 A 用户认为设备默认 All 在特定领域 部分 系统提供可配的
偏差 在安全状态,但却不是 嵌入系统默认 解决 安全默认
在 State-State→Event 时
系统提示、不提供 才有,SS 范式不提供
③ 非瞬时 B 时序缺陷 State-State 混淆的选项、更多 部分 用户选择动作事件而由
动作 触发器 解决
TAP 结构等 SSRules 根据指定的期望
状态来判断执行前提
A 用户认为 系统提示, SSRules 处理②③的
④ 缺少反向 会自动撤销 All 可静态检测, 辅助 对策可以附带改善
动作 改善
某些动作 但不总能修复 这种缺陷
检测实体依赖
⑤ 无限循环 C 控制流缺陷 All,规则相互触发 静态或动态分析 可检测
关系是否有环
All, State 型触发器
⑥ 重复触发 C 控制流缺陷 因状态持续为真 可静态分析 部分 消除那些会出错的
是否重复
重复触发
消除
而多次触发
⑦ 不确定 B 时序缺陷 All 静态或动态分析 提示 检测实体依赖关系
时序
⑧ 矛盾的 C 控制流缺陷 All,在矛盾的 难以检测 未解决 存在,无法检测
动作 动作间循环
⑨ 时间窗 A 用户忽略 Event-Event 可以静态检测 无 不存在
错误 时间窗的设置 触发器
⑩ 翻转 A 用户分不清 Event-State/ 检测标准 无 不存在
触发器 事件和状态 Event 触发器 不好确定
10 种缺陷中,第①种、第②种、第④种、第⑨种、第⑩种归结为与用户预期不一样,第③种、第⑦种为时
序缺陷,剩余 3 种为控制流缺陷.表中第 3 列的“All”表示表 1 中的 4 类 TAP 规则都可能引起这种缺陷.从中可见:
第①种和第③种这两种缺陷仅存在于纯状态触发器的 TAP 编程中,而第⑨种、第⑩种仅存在于含事件的触发