TinyOS论文03:Bugs or Anomalies? Sequence Mining based Debugging in Wireless Sensor Networks

bugs或者异常?基于序列挖掘的无线传感网程序调试技术。

论文提出了一种基于序列挖掘的WSNs调试技术(迭代式),这个技术命名为vPST-SVM,很显然这个调试技术实现的话是基于两个理论模型
1、一个是vPST,矢量化概率后缀树,要了解vPST就设计到解决简单模式匹配技术的后缀字典树、然后解决后缀字典树深度以及存储空间问题衍生出的后缀树,然后为后缀树结点添加搜索概率形成概率后缀树,最后对概率后缀树矢量化形成矢量化概率后缀树。vPST的作用是从传感网程序运行流中有效地提取和存储序列化信息,并以简单的矢量化的后缀树这一数据结构的形式表示该序列化信息。
2、另一个模型是SVM,支持向量机,支持向量机是一种分类算法,将WSN程序的执行流分成两类,一类是程序的正常执行行为,另一类的话是可能含有bug的异常程序执行行为,它有一个离群值作为异常程序执行行为的检测指标,离群值越大表示含有bug的可能性越高。
论文的贡献:
1、将PST模型扩展成vPST,vPST数据结构提取和存储的程序执行刘序列信息更有利如SVN分类算法;
2、提出了vPST-SVM调试技术,又利于发现传感网程序中的瞬态bug。
论文参考
1、Dustminer + Sentomist

Abstract

  1. 传感网程序由于它的分布式结构、高并发、资源有限等这些特点,很容易出现bug。
  2. 论文提出了一种基于序列挖掘的WSNs调试技术(迭代式)。实现步骤为:
    1、首先,论文了设计了一种数据结构:vPST,矢量化概率后缀树,它能从传感网程序运行流中有效地提取和存储序列化信息,并以简单的矢量化的后缀树这一数据结构的形式表示该序列化信息。
    2、之后,通过对vPST和SVM的集成(支持向量机:对于线性和非线性数据分类的一种健壮和通用的分类算法)构建了一种新的传感网调试技术:vPST-SVM。
    3、验证vPST-SVM调试技术的有效性、灵活性和通用性(2 LiteOS + 1 TinyOS)

一、Introduction

  1. 由于传感网分布式结构、高并发性和资源有限这些特点,传感网程序会有很多bug。而且这些bug调试起来也很困难:上下文相关 + 事件驱动 + 事件触发 + 瞬态错误 + 不可再现性。
  2. 论文提出了一种灵活和通用的调试技术,这种调试技术基于序列化数据分析和异常检测技术。这一调试技术基于两种理论方法:矢量化概率后缀树模型和支持向量机模型。
    1、原始的PST模型是一个的概率模型,它能从传感网程序运行流中有效地提取和存储序列化信息,并以简单的后缀树这一数据结构的形式表示该序列化信息。
    2、SVM是对于线性和非线性数据的一种健壮和通用的分类算法。
    3、将PST扩展成vPST,将程序运行流的序列化信息以矢量化的数据结构表示出来更有利于SVM的分类。

  3. 论文贡献:
    1、将PST模型扩展成了vPST
    2、提出了vPST-SVM检测技术

二、相关工作

传感网程序中的比较复杂的bug,譬如说由数据竞争,或者不正确的并发控制导致的bug。
基于数据挖掘技术的WSNs程序的bug检测工具:
1. 基于高频模式挖掘技术的Dustminer;
2. Sentomist

三、vPST-SVM异常检测技术

矢量概率后缀树(vPST)
1. 用传统的PST模型采用数理统计的的方法来分析不同的PST序列的子序列来计算源序列的相似度是不准确的。
2. 论文提出了扩展的PST:vPST。
1、相关概念介绍:模式匹配 + 后缀字典树 + 后缀树 + 概率后缀树 + 矢量化概率后缀树
2、vPST的构造:以指定的深度构造好PST后,通过连接每一个节点的概率矢量形成vPST。
3. vPST的优点:
1、跟PST一样都能保存好子序列信息和完整的序列信息,而且数据结构更简单;
2、SVM分析矢量后缀树比分析后缀树更简单;
3、分析子序列的相似性同时也会分析完整序列的相似性;

vPST-SVM迭代调试技术

  1. vPST-SVM:在vPST上集成了SVM,vPST-SVM的调试过程如下:
    1、从可能含有错误的程序的收集WSNs的程序运行流;
    2、从收集的程序运行流序列中构造PST数据结构;
    3、矢量化PST,构造成vPST数据结构;
    4、在vPST基础上应用SVM计算的异常指数,获取异常指数最高的序列;
    5、检测异常指数最高的序列是否含有bug;
    6、修复异常,返回执行步骤1;
    7、没有检测到bug,则停止;
  2. vPST深度的选择问题:
    1、vPST的深度是一个很重要的参数,为了有效检测bug,这个参数要求能自适应调整;
    2、对于复杂bug增加深度;简单bug则减少深度;(计算规模会随着深度增加而指数增长)
    3、合理的调试深度:不大于5
  3. 迭代的复杂性:

System design and implementation

  1. 要检查的程序:程序员根据经验判断出很容易出错的代码块(称之为热点);
  2. vPST-SVM调试器的组成结构:程序运行流控制器(前端) + 预处理器 + vPST分析器 + SVM分类器(这三个处于后端)
    这里写图片描述
    1、程序运行流控制器:负责生成和收集热点程序的程序执行流;
    2、预处理器:过滤噪音和其它干扰数据、压缩原始数据操作;减少数据维度;
    3、 vPST分析器:遍历所有手机的程序运行流和从中提取序列特征。
    4、SVM分类器:对程序执行流的vPST进行分类得到最可能含有程序bug的片段;
  3. 各个组件的具体实现:
    1、程序流控制器:在LiteOS和TinyOS传感网操作系统上构建了轻量级的程序执行流子系统
    2、vPST分析器 :c++实现的PST的构造 + vPST的实现
    3、SVM:SVM系统库。

五、CASE STUDIES

1、案例一:LiteOS程序的变量溢出bug

  1. 场景描述:
    1、多个LiteOS发送节点向一个接收节点发送数据包;
    2、接收节点成功接收到数据之后,向发送节点返回一个ACK确认号。接收节点收到ACK确认号后才发送新的数据包;否则从新发送原数据。
    3、发送方会重复发送相同的数据包;而接收方则会把相同数据包丢弃掉。

  2. 实现代码:

/* sender node */
while(1) 
{...
    if(AckReceived && !MsgSent) {
        ...
        lib_radio_send_msg(...);
    }else if(!AckReceived && MsgSent) {
        lib_radio_receive_timed( ... );
        // Bug #1
        PacketID=256*Buffer[I]+Buffer[0];
        }
    }
}
  1. bug触发:
    代码PacketID=256*Buffer[1]+Buffer[0]中,PacketID和数组Buffer是16位,而常亮256为8位。因此在计算256*Buffer[1]时是16位与8位的混合数据计算。当Buffer[1]变成3或者更大数的时候,会发生变量溢出,PacketID值不会超过512,因此接收方会误认为该数据包是已经接收到的数据包而丢弃。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值