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 编程中,而第⑨种、第⑩种仅存在于含事件的触发
   63   64   65   66   67   68   69   70   71   72   73