一种缺陷处理方法及缺陷处理器技术

技术编号:9642345 阅读:56 留言:0更新日期:2014-02-07 00:48
本发明专利技术公开了一种缺陷处理方法,包括:通过SDDL-EXP,生成语法类缺陷模式;其中,所述SDDL-EXP为预定的值相关缺陷模式语言;根据所述语法类缺陷模式,在被测代码中查找检测点,并将所述语法类缺陷模式中的缺陷发生的条件实例化;根据预设的规范化策略,将所述被测代码中的变量及表达式进行转换;对转换后的被测代码进行后向的数据流分析,根据实例化的条件验证在所述检测点处是否有缺陷发生。本发明专利技术还同时公开了一种缺陷处理器。采用本发明专利技术的技术方案,能够便捷地扩充与用户相关的缺陷模式,并且通过该缺陷模式进行有效的缺陷检测,提升了用户的体验。

【技术实现步骤摘要】
一种缺陷处理方法及缺陷处理装置
本专利技术涉及静态测试技术,尤其涉及一种缺陷处理方法及缺陷处理装置。
技术介绍
静态代码缺陷分析技术通过对代码进行静态分析来推测程序运行时的表现行为,从而发现代码中可能存在的缺陷。这类技术主要包括抽象解释、定理证明、模型检测、符号执行和基于缺陷模式的代码检查等。基于缺陷模式的代码检查主要包括以下步骤:首先,对已有代码中出现过的缺陷进行总结并提炼出“缺陷模式知识”;然后,采用静态分析的方法对待检测的代码进行缺陷模式匹配以确定待检测的代码是否包含“缺陷模式知识”中的缺陷,并把匹配结果以缺陷检测报告的形式呈现给用户。采用上述方法的典型缺陷静态分析工具为FindBugs、PMD、Hammurapi等。然而,对于现有的基于缺陷模式的代码检查的缺陷静态分析工具,用户往往希望能够扩充“缺陷模式知识”,以使工具能够支持对自己所关注的“代码缺陷”进行检测。但大多数缺陷静态分析工具并没有为用户提供“添加新缺陷模式”的功能,或者,部分缺陷静态分析工具虽然支持用户扩充缺陷模式知识,但其扩展方式在易用性方面还存在很大不足。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种缺陷处理方法及缺陷处理装置,能够便捷地扩充与用户相关的缺陷模式,并且通过该缺陷模式进行有效的缺陷检测,提升了用户的体验。为达到上述目的,本专利技术的技术方案是这样实现的:一种缺陷处理方法,所述方法包括:通过表达式值静态默认描述语言SDDL-EXP生成语法类缺陷模式;其中,所述SDDL-EXP为预定的值相关缺陷模式语言;根据所述语法类缺陷模式,在被测代码中查找检测点,并将所述语法类缺陷模式中的缺陷发生的条件实例化;根据预设的规范化策略,将所述被测代码中的变量及表达式进行转换;对转换后的被测代码进行后向的数据流分析,根据实例化的条件验证在所述检测点处是否有缺陷发生。所述通过SDDL-EXP,生成语法类缺陷模式,包括:基于可扩展标记语言XML生成根标签<Default>,以及所述根标签<Default>的一级子标签:<Pattern>、<Operand>以及<Condition>,以及所述一级子标签<Operand>的二级子标签:<Order>和<Symbol>;在所述一级子标签<Pattern>中,以伪代码形式生成缺陷模式相关表达式;在所述二级子标签<Order>中,生成待检测的变量在所述缺陷模式相关表达式中的位置;在所述二级子标签<Symbol>中,为所述待检测变量生成标识符;在所述一级子标签<Condition>中,以所述标识符形式生成所述待检测变量发生缺陷的条件。所述方法还包括:基于XML生成根标签<Default>、以及所述根标签<Default>的一级子标签:<Pattern>、<Operand>以及<Condition>时,还生成所述根标签<Default>的一级子标签:<Description>、以及所述一级标签<Description>的二级子标签:<Name>、<Date>、<Language>以及<Example>;在所述二级子标签<Name>中,生成缺陷模式的名称;在所述二级子标签<Date>中,生成缺陷模式的创建时间;在所述二级子标签<Language>中,生成被检测代码的语言类型;在所述二级子标签<Example>中,生成示例代码。所述根据所述语法类缺陷模式,在被测代码中查找检测点,并将所述语法类缺陷模式中的缺陷发生的条件实例化,包括:解析所述一级子标签<Pattern>中的伪代码,确定出缺陷模式相关表达式的类型;在所述被测代码中查找与所述缺陷模式相关表达式的类型相匹配的表达式,并作为检测点;依据所述二级子标签<Order>,在所匹配的表达式中提取待检测的变量;将所述一级子标签<Condition>中的所述待检测变量发生缺陷的条件中的标识符替换为所提取的待检测的变量。所述根据预设的规范化策略,将所述被测代码中的变量及表达式进行转换,包括:以表达式的形式生成规范化策略,所述规范化策略包括:Constant类型规范化表达式、PrimitiveAddress类型规范化表达式、AllocitiveAddress类型规范化表达式、DereferenceExpression类型规范化表达式以及OffsetExpression类型规范化表达式;其中,Constant类型规范化表达式用于表示常量;PrimitiveAddress类型规范化表达式用于表示变量所代表的内存单元的地址;AllocitiveAddress类型规范化表达式用于表示语句动态分配的内存单元的地址;DereferenceExpression类型规范化表达式用于表示堆或栈上的内存单元;OffsetExpression类型规范化表达式用于表示通过基地址和地址偏移量得到的内存单元;根据所述规范化策略,将所述被测代码中的变量及表达式转换为所述规范化策略对应的规范化表达式。所述对转换后的被测代码进行后向的数据流分析,根据实例化的条件验证在所述检测点处是否有缺陷发生,包括:以所述检测点为起点,沿控制流图CFG进行后向的数据流分析,以验证所述检测点处缺陷发生的条件是否成立;其中,数据流分析的数据流值为<e,formula>二元组,所述e为被测代码中规范化后的表达式,所述formula为约束条件。所述沿CFG进行后向的数据流分析,包括:针对CFG中的每个节点,合并后继节点传递来的数据流值;更新合并后的数据流值并化简更新后的数据流值;当化简后的数据流值中的formula的值为true时,确定为所述检测点处有缺陷发生;当化简后的数据流值中的formula的值为false时,确定为所述检测点处没有缺陷发生;当化简后的数据流值中的formula的值为除true和false以外的值时,将化简后的数据流值传递给前驱节点。一种缺陷处理装置,所述缺陷处理装置包括:生成单元,用于通过SDDL-EXP,生成语法类缺陷模式;其中,所述SDDL-EXP为预定的值相关缺陷模式语言;检测单元,用于根据所述语法类缺陷模式,在被测代码中查找检测点,并将所述语法类缺陷模式中的缺陷发生的条件实例化;规范单元,用于根据预设的规范化策略,将所述被测代码中的变量及表达式进行转换;验证单元,用于对转换后的被测代码进行后向的数据流分析,根据实例化的条件验证在所述检测点处是否有缺陷发生。所述生成单元,还用于基于XML生成根标签<Default>、以及所述根标签<Default>的一级子标签:<Pattern>、<Operand>以及<Condition>、以及所述一级子标签<Operand>的二级子标签:<Order>和<Symbol>;在所本文档来自技高网...
一种<a href="http://www.xjishu.com/zhuanli/55/201310516392.html" title="一种缺陷处理方法及缺陷处理器原文来自X技术">缺陷处理方法及缺陷处理器</a>

【技术保护点】
一种缺陷处理方法,其特征在于,所述方法包括:通过表达式值静态默认描述语言SDDL?EXP生成语法类缺陷模式;其中,所述SDDL?EXP为预定的值相关缺陷模式语言;根据所述语法类缺陷模式,在被测代码中查找检测点,并将所述语法类缺陷模式中的缺陷发生的条件实例化;根据预设的规范化策略,将所述被测代码中的变量及表达式进行转换;对转换后的被测代码进行后向的数据流分析,根据实例化的条件验证在所述检测点处是否有缺陷发生。

【技术特征摘要】
1.一种缺陷处理方法,其特征在于,所述方法包括:通过表达式值静态默认描述语言SDDL-EXP生成缺陷模式;其中,所述SDDL-EXP为预定的值相关缺陷模式语言;所述缺陷模式由以下标签组成:根标签<Default>,以及所述根标签<Default>的一级子标签:<Pattern>、<Operand>和<Condition>,以及所述一级子标签<Operand>的二级子标签:<Order>和<Symbol>;根据所述缺陷模式,在被测代码中查找检测点,并将所述缺陷模式中的缺陷发生的条件实例化;根据预设的规范化策略,将所述被测代码中的变量及表达式进行转换;对转换后的被测代码进行后向的数据流分析,根据实例化的条件验证在所述检测点处是否有缺陷发生。2.根据权利要求1所述的缺陷处理方法,其特征在于,所述通过SDDL-EXP,生成缺陷模式,包括:基于可扩展标记语言XML生成根标签<Default>,以及所述根标签<Default>的一级子标签:<Pattern>、<Operand>和<Condition>,以及所述一级子标签<Operand>的二级子标签:<Order>和<Symbol>;在所述一级子标签<Pattern>中,以伪代码形式生成缺陷模式相关表达式;在所述二级子标签<Order>中,生成待检测的变量在所述缺陷模式相关表达式中的位置;在所述二级子标签<Symbol>中,为所述待检测变量生成标识符;在所述一级子标签<Condition>中,以所述标识符形式生成所述待检测变量发生缺陷的条件。3.根据权利要求2所述的缺陷处理方法,其特征在于,所述方法还包括:基于XML生成根标签<Default>、以及所述根标签<Default>的一级子标签:<Pattern>、<Operand>和<Condition>时,还生成所述根标签<Default>的一级子标签:<Description>、以及所述一级子标签<Description>的二级子标签:<Name>、<Date>、<Language>和<Example>;在所述二级子标签<Name>中,生成缺陷模式的名称;在所述二级子标签<Date>中,生成缺陷模式的创建时间;在所述二级子标签<Language>中,生成被检测代码的语言类型;在所述二级子标签<Example>中,生成示例代码。4.根据权利要求3所述的缺陷处理方法,其特征在于,所述根据所述缺陷模式,在被测代码中查找检测点,并将所述缺陷模式中的缺陷发生的条件实例化,包括:解析所述一级子标签<Pattern>中的伪代码,确定出缺陷模式相关表达式的类型;在所述被测代码中查找与所述缺陷模式相关表达式的类型相匹配的表达式,并作为检测点;依据所述二级子标签<Order>,在所匹配的表达式中提取待检测的变量;将所述一级子标签<Condition>中的所述待检测变量发生缺陷的条件中的标识符替换为所提取的待检测的变量。5.根据权利要求1至4任一项所述的缺陷处理方法,其特征在于,所述根据预设的规范化策略,将所述被测代码中的变量及表达式进行转换,包括:以表达式的形式生成规范化策略,所述规范化策略包括:Constant类型规范化表达式、PrimitiveAddress类型规范化表达式、AllocitiveAddress类型规范化表达式、DereferenceExpression类型规范化表达式以及OffsetExpression类型规范化表达式;其中,Constant类型规范化表达式用于表示常量;PrimitiveAddress类型规范化表达式用于表示变量所代表的内存单元的地址;AllocitiveAddress类型规范化表达式用于表示语句动态分配的内存单元的地址;DereferenceExpression类型规范化表达式用于表示堆或栈上的内存单元;OffsetExpression类型规范化表达式用于表示通过基地址和地址偏移量得到的内存单元;根据所述规范化策略,将所述被测代码中的变量及表达式转换为所述规范化策略对应的规范化表达式。6.根据权利要求5所述的缺陷处理方法,其特征在于,所述对转换后的被测代码进行后向的数据流分析,根据实例化的条件验证在所述检测点处是否有缺陷发生,包括:以所述检测点为起点,沿控制流图CFG进行后向的数据流分析,以验证所述检测点处缺陷发生的条件是否成立;其中,数据流分析的数据流值为<e,formula>二元组,所述e为被测代码中规范化后的表达式,所述formula为约束条件。7.根据权利要求6所述的缺陷处理方法,其特征在于,所述沿CFG进行后向的数据流分析,包括:针对CFG中的每个节点,合并后继节点传递来的数据流值;更新合并后的数据流值并化简更新后的数据流值;当化简后的数据流值中的formula的值为true时,确定为所述检测点处有缺陷发生;当化简后的数据流值中的formula的值为false时,确定为所述检测点处没有缺陷发生;当化简后的数据流值中的formula的值为除true和false以外的值时,将化简后的数据流值传递给前驱节点。8...

【专利技术属性】
技术研发人员:王雅文宫云战金大海黄俊飞王前
申请(专利权)人:北京邮电大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1