一种检测软件异常输入处理正确性的方法

文档序号:6363592阅读:300来源:国知局
专利名称:一种检测软件异常输入处理正确性的方法
技术领域
本发明涉及软件测试领域,尤其是指通过分析源程序代码,检查软件对各种异常输入是否进行了正确处理的方法。
背景技术
软件输入是软件的“门户”,是软件的驱动源,软件输入包括正常输入和异常输入,正常输入处理不当将直接影响软件功能,异常输入处理不当将影响软件容错性,导致软件出现各种错误。据统计,由于软件异常输入处理不当而造成的软件错误占软件错误的70%以上,由此可见,检查软件是否对各种异常输入进行了处理是发现软件错误的一个 重要方法。基于源程序代码分析的静态测试是软件测试的一个重要研究领域,通过静态测试,可以有效发现程序在编程规则、内存管理、指针使用、程序结构、控制流、数据流等方面存在的缺陷。静态测试是国内外开展较早的研究领域之一,目前已取得适用性成果,有代表性的有英国LARA公司的TestBed工具、Klocwork公司的Klocwork工具。这些工具根据不同的程序设计语言标准,通过对源程序代码分析,找出程序在符号使用、变量初始化、函数返回值、内存管理、缓冲区使用、指针使用等方面存在的缺陷。这些工具功能强大,使用方便,在软件静态测试中发挥了很好作用,但在软件异常输入检测方面欠缺,不能够对软件输入是否进行了异常处理进行分析。在软件异常输入检测方面,目前主要是通过人工输入各种异常值,动态执行软件的方式检查软件异常输入处理情况。这种方法一方面需要测试人员掌握软件输入的边界值和类型等信息才能设计出合理的测试用例;另一方面测试工作量大,对于数据库类等输入字段众多的软件,需要测试人员逐一验证各个字段异常处理的正确性。综上所述,在软件异常输入处理检测方面,无论是静态测试还是动态测试都存在不足,需要研究一种全新的方法解决这个问题。

发明内容
本发明所解决的技术问题是提供一种检测软件异常输入处理正确性的方法,能够对软件异常输入处理情况进行检测。技术方案如下一种检测软件异常输入处理正确性的方法,包括通过词法和语法分析,得到被测软件源代码的抽象语法树和符号表;遍历所述抽象语法树和符号表,得到所述被测软件源代码中的输入控件,所述输入控件为允许用户输入数据的控件;对所述输入控件进行辨识,找出未判断异常输入的输入控件。进一步采用类编译原理技术,对所述被测软件源代码进行词法和语法分析,通过分析得到所述抽象语法树和符号表。
进一步在获取所述输入控件过程中,以深度优先方法遍历所述抽象语法树,如果某个叶子节点是变量,通过查找符号表得到该变量类型;如果所述变量类型是输入控件类型,则说明该变量所描述的是一个输入控件。进一步所述输入控件变量采用变量声明和变量定义的定义方式,在对所述输入控件进行辨识过程中,通过在所述抽象语法树进行搜索,同时结合符号表中的内容,辨识出所述被测软件源代码中所有的输入控件及其变量。进一步对所述输入控件进行辨识,查找输入控件列表中的每个输入控件,然后以深度优先方法遍历抽象语法树,检查其中是否有对输入进行异常判断的语句,如果没有,则所述输入控件就属于未判断异常的输入控件。进一步所述输入控件包括文本输入控件、列表控件、可输入列表控件、表格控件、树形控件、表格树控件、弹出式列表控件或者样式文本控件。技术效果包括软件异常输入是导致软件出现错误的主要原因之一,本发明的最 大优点在于如何检测是否对异常输入进行了判断。通过识别输入控件,根据不同输入控件异常判断语言特征,找出未进行异常判断的控件,据此,开发人员可以方便地修改软件;测试人员可以设计出针对该控件的测试用例,从而大大提高测试的有效性和充分性。


图I是本发明中检测软件异常输入处理正确性的方法的工作流程图;图2是本发明中词法和语法分析的工作流程图;图3是本发明中代码片段的部分抽象语法树示意图;图4是本发明中输入控件辨识工作流程图;图5是本发明中未判断异常输入的输入控件识别的工作流程图;图6是本发明中示例代码段对应的软件界面示意图;图7是本发明中经过词法和语法分析后示例代码段的部分抽象语法树结构示意图。
具体实施例方式本发明针对已有方法存在的问题,采用源代码分析技术,主要解决如何找出程序中没有对各种异常输入进行处理的输入控件问题,从而提高测试充分性,减少测试工作量。下面参考附图和优选实施例,对本发明技术方案作详细描述。如图I所示,是本发明中检测软件异常输入处理正确性的方法的工作流程图,本方案的执行过程如下。一、词法和语法分析该步骤的主要目的是得到被测软件源代码的抽象语法树和符号表。采用类编译原理技术,对被测软件源代码进行词法和语法分析,通过分析,得到抽象语法树和符号表。定义I :抽象语法树是一棵树T =〈V,E>,其中V是树的节点,由源代码中的各种语法结构组成;E是树的边,负责连接各种语法结构。
定义2 :符号表是一个表形数据结构,词法分析过程中产生的标识符作为符号表的入口,后续分析得到的信息,如标识符的类型、使用方式、存储空间等都可以根据需要加入到表中。如图2所示,是本发明中词法和语法分析的工作流程图。词法和语法分析是生成代码与界面控件映射关系的基础。本方案采用通用的方法对被测软件的源代码进行词法和语法分析,由算法I描述。算法 I. Lexical_Syntax_Analyze (P)输入P :源代码输出(AST,SymTable) P的抽象语法树和符号表I. TokenStream < -Lexical_Analyze(P)2. (AST, ) SymTable) < -Syntax_Analyze (TokenStream)3. Return (AST, SymTable)源代码在经过词法和语法分析后,将得到其抽象语法树和符号表。算法I的第I步对源代码P进行词法分析,得到P的标记流TokenStream ;第2步以标记流为基础进行语法分析,得到P的抽象语法树AST和符号表SymTable ;第3步将AST和SymTable返回。下面是一个Java Swing的示例代码片段。I、javax. swing. JMenufileMenu = new javax. swing. JMenu();2、javax. swing. JMenuItemopenFileMenuItem = new javax. swing.JMenuItemO ;3、fileMenu. add(openFileMenuItem);表I是代码对应的符号表
权利要求
1.一种检测软件异常输入处理正确性的方法,包括 通过词法和语法分析,得到被测软件源代码的抽象语法树和符号表; 遍历所述抽象语法树和符号表,得到所述被测软件源代码中的输入控件,所述输入控件为允许用户输入数据的控件; 对所述输入控件进行辨识,找出未判断异常输入的输入控件。
2.如权利要求I所述的检测软件异常输入处理正确性的方法,其特征在于采用类编译原理技木,对所述被测软件源代码进行词法和语法分析,通过分析得到所述抽象语法树和符号表。
3.如权利要求I所述的检测软件异常输入处理正确性的方法,其特征在于在获取所述输入控件过程中,以深度优先方法遍历所述抽象语法树,如果某个叶子节点是变量,通过查找符号表得到该变量类型;如果所述变量类型是输入控件类型,则说明该变量所描述的是ー个输入控件。
4.如权利要求I所述的检测软件异常输入处理正确性的方法,其特征在于所述输入控件变量采用变量声明和变量定义的定义方式,在对所述输入控件进行辨识过程中,通过在所述抽象语法树进行搜索,同时结合符号表中的内容,辨识出所述被测软件源代码中所有的输入控件及其变量。
5.如权利要求I所述的检测软件异常输入处理正确性的方法,其特征在于对所述输入控件进行辨识,查找输入控件列表中的每个输入控件,然后以深度优先方法遍历抽象语法树,检查其中是否有对输入进行异常判断的语句,如果没有,则所述输入控件就属于未判断异常的输入控件。
6.如权利要求I至5任一项所述的检测软件异常输入处理正确性的方法,其特征在于所述输入控件包括文本输入控件、列表控件、可输入列表控件、表格控件、树形控件、表格树控件、弹出式列表控件或者样式文本控件。
全文摘要
本发明公开了一种检测软件异常输入处理正确性的方法,通过词法和语法分析,得到被测软件源代码的抽象语法树和符号表;遍历所述抽象语法树和符号表,得到所述被测软件源代码中的输入控件,所述输入控件为允许用户输入数据的控件;对所述输入控件进行辨识,找出未判断异常输入的输入控件。本发明技术方案能够检测软件是否对异常输入进行了处理。
文档编号G06F11/36GK102681932SQ201210017980
公开日2012年9月19日 申请日期2012年1月19日 优先权日2012年1月19日
发明者于秀山, 于长钺, 吴玲, 杜旭涛, 杨豹, 迟芳, 黄忠见 申请人:于秀山
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1