发明名称 |
一种基于逻辑执行块的嵌入式软件测试插桩方法 |
摘要 |
本发明公开了一种基于逻辑执行块的嵌入式软件测试插桩方法。首先根据不同的覆盖测试类型,对被测程序进行预处理。接着分析被测程序结构,获得语句类型、层级关系、嵌套关系等信息。根据这些信息和逻辑执行关系对被测程序分块,每个逻辑执行块入口和出口位置插入探针函数。运行插桩后的被测程序,收集桩信息,统计插桩点语句的执行次数。最后根据插桩点语句类型和被测程序层级关系、嵌套关系,确定每段代码块中语句的执行次数。该方法能厘清程序层级关系、嵌套关系,计算包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖在内的多种覆盖率。该方法基于代码块插桩,大大降低程序插桩后的膨胀率,减小海森堡效应对实时性测试的影响。 |
申请公布号 |
CN102521123B |
申请公布日期 |
2016.04.06 |
申请号 |
CN201110379877.2 |
申请日期 |
2011.11.24 |
申请人 |
西安邮电大学 |
发明人 |
王忠民;霍艺伟;梁琛;王文浪;范琳 |
分类号 |
G06F11/36(2006.01)I |
主分类号 |
G06F11/36(2006.01)I |
代理机构 |
|
代理人 |
|
主权项 |
一种基于逻辑执行块的嵌入式软件测试插桩方法,包括如下步骤:(1)根据不同的覆盖测试类型,对被测程序进行不同的预处理,具体包括补全每个逻辑执行块的起始和终止大括号,使程序的逻辑执行结构易于分析处理;根据不同的覆盖测试类型,处理程序中的分支语句和循环语句;将原分支体、循环体中的语句抽象为一个函数,便于在条件拆分后的各个分支中调用,以减少代码量;预处理可能变动了程序语句所在的行号,所以生成预处理前后程序的行号对应关系表;(2)分析预处理后被测程序的结构,获得被测程序语句类型、层级关系、嵌套关系信息,具体包括以超前搜索的方式,从语句中识别出每种类型的标志字符串,从而得到语句的类型,确定语句的可执行性为可执行或非可执行;在分析过程中,用一个数组记录插桩相关的语句信息,包括语句类型、语句所处的嵌套层级以及语句的执行次数,数组元素的下标对应该语句的行号;其中嵌套层级初始化为0,在程序分块过程中填充;可执行语句的执行次数初始化为‑1,非可执行语句的执行次数初始化为‑2,在执行次数统计过程中计算;根据配对的大括号将程序划分为不同的逻辑执行块,逻辑执行块以左大括号为入口,以右大括号为顺序出口,以跳转语句为非顺序出口;一个逻辑执行块有且只有一个入口和一个顺序出口,但是可以有多个非顺序出口;根据逻辑执行块入口和顺序出口可以确定该块所处的嵌套层级;(3)在结构分析的基础上,对被测程序按逻辑执行关系分块,每个逻辑执行块作为一个插桩单位,将其入口、顺序出口和非顺序出口定为插桩点;(4)初始化探针函数及插桩环境,在插桩点插入探针函数,探针函数设计为发送当前插桩点的位置信息;(5)运行插桩后的被测程序,每经过一次插桩点,由探针函数发送该插桩点的位置信息,统计接收到的桩信息,来更新语句信息中相应行号的执行次数,从而计算出各插桩点的执行次数;(6)根据步骤(2)中记录的被测程序语句类型、层级关系、嵌套关系信息,遍历语句信息,用栈结构来匹配逻辑执行块的入口、顺序出口和非顺序出口,按照逻辑执行块所处的嵌套层级及其入口、顺序出口和非顺序出口,计算每个逻辑执行块中所有语句的执行次数,进而计算出覆盖率。 |
地址 |
710121 陕西省西安市长安区西长安街路西安邮电大学 |