- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目标机 宿主机 源代码 插桩器插桩 数据处理程序或软件 编译后的源码 插桩后的源码 编译器编译 生成数据 编译后的源码 触发桩程序 网线、串口、USB 串口、JTAG ① ② ④ ⑤ ⑥ ⑦ ⑧ 循环 图9-8 插桩测试原理图 本节提要 1 2 3 嵌入式软件的质量控制 软件测试的基本概念 嵌入式软件测试基础 嵌入式软件测试技术 4 9.4 嵌入式软件测试技术 嵌入式软件测试和普通软件测试一样,通常都要进行静态测试和动态测试,以发现不同的问题。 int Add(int*int1,int*int2) { if ((*int1=0)(*int2=0)) { return*int1+*int2; } return 0 } 通过静态检查,可以发现如下问题: 参数*int1和int2没有进行空指针验证,如果传入空指针,则会导致程序崩溃(crash)。 参数*int1和*int2进行值有效性验证不充分,如果int1和int2的二者中正的绝对值大于负的绝对值,则*int1+*int2执行结果为正值,符合要求,但当前的有效性验证会误判从而返回0。 没有对*int1和*int2进行边界值有效性验证。例如,如果int1和int2同为最大的32位符号整数2147483647,则*int1+*int2返回-2,不符合要求,但当前的有效性验证会因为误判而返回-2。 动态测试通过在抽样测试数据上运行程序来检验程序的动态行为和运行结果,以发现缺陷。在上例中,设计如下测试用例: int 1=5; int2=-7; int ret=Add(int1+int2); 期望结果:方法Add应该终止执行,并返回0. 实际结果:方法Add返回一个负的32位整数执行结果。发现程序错误。 9.4.1 软件静态测试 静态测试有如下优点: 不必动态地运行软件。在软件测试工程中,软件运行需要特定的环境和输入输出及相关系统的支持,静态分析省去了这些环节。 发挥人的优势,行之有效。静态分析主要是由人对软件源代码进行审核分析,从而发挥人的能动性,实施方便,实践证明行之有效。 不需特定的条件,容易开展。 静态测试的实践形式有代码走查、代码审议、技术评审、桌面检查和自动的静态分析。 代码走查:代码走查一般以走查小组形式进行,人工考查程序的逻辑,给出输入和预期的输出,当实际输出和预期的输出不等时,便可发现错误。 技术评审:综合运用走查和审议技术,逐页、逐节检查文档,在需求、结构或设计等方面提出问题。 代码审议:代码审议一般使用“代码检查单”,以审议小组形式,逐行检查代码,进行代码评估。 桌面检查:软件编制者自我检查软件源代码,效果不如以小组形式进行的评审或审议。 自动的静态分析:包括引用分析、接口分析、表达式分析。 静态分析 静态分析是一种利用测试工具对源代码进行的机械性和程序化的分析方法。静态分析速度快,工作质量稳定,可再现性强。静态分析可以只分析某些特定的缺陷,或只分析某些特定的模块,而不会受到其他缺陷和模块的影响。 静态分析的主要内容包括以下方面。 (1)数据流分析 如果程序中某一条语句的执行能改变某个变量的值,则称这个变量在该语句中定义(define)。 如果某一条语句的执行引用了某变量的值,则称这条语句引用了该变量(reference)。 通过定义和引用的关系,可以发现数据流的异常: 1)未定义就引用肯定会发生真实错误。 2)定义后未引用被认为是可疑错误。 3)定义后在定义被认为是可疑错误。 (2)控制流分析 控制流图是一种表示程序控制结构的有向图,可用于说明程序的逻辑路径。如果一个输入引起一条路径的执行,那么这条路径就称为可达的,否则不可达。如果一个输入引起一个路径成为一个无限循环,则称为死循环。 S n1 n2 n3 S n1 n2 n3 不可达 死循环 (3)软件度量分析 1)McCcbe圈复杂 V(G)可以用来衡量一个模块判定结构的复杂程序,其数值表示为独立路径的条数。圈复杂大说明程序代码质量低且难于测试和维护。经验表明,程序的错误和圈复杂度高有着很大关系。 V(G)有两种计算方法: V(G)=E-N+2,其中E是流图G中边的数量,经验流图中结点的数量。 V(G)=P+1,其中P是流图G中判定结点的数量。 如图9-10所示,用两种方法计算出的圈复杂度V(G)=10-8+2=4,V(G)=3+1=4。 2)Halstead软件科学度量 定义1: Halstead预测程序长度H是形如式(1)的一个度量: (1) 其中,n1表示
文档评论(0)