本发明专利技术公开了一种软件程序变量的不安全使用的检测方法,属于程序分析技术领域,包括如下步骤:1)建立软件程序的控制流图;2)根据控制流图,对程序进行层次化的数据流分析,获得程序中每一个变量的操作序列;3)检测每个操作序列中是否出现变量的不安全使用。本发明专利技术所提出的软件程序变量的不安全使用的检测方法,能快速检测到变量的不安全使用,运用在程序软件的开发早期,能及早发现程序中,特别是程序的异常处理代码中的缺陷,改善代码质量,提高软件的可靠性,降低软件开发成本。
【技术实现步骤摘要】
本专利技术涉及一种软件程序缺陷的检测方法,尤其涉及软件中与异常处理相关的程 序变量的不安全使用的检测方法,属于程序分析
技术介绍
软件程序的运行依赖于一定的运行环境,运行环境直接影响软件运行结果的正确 性。例如运行时计算机内存耗尽,可能导致程序被迫停止,而没有产生正确的执行结果。 这种违背预期正常执行的程序行为,称为程序发生异常。为了提高软件程序的可靠性,使软 件程序更好的适应动态变化的运行环境,需要在软件设计时在程序中加入异常处理模块, 预先指定程序发生异常后应当执行的操作,以减少程序运行过程中的意外终止。高级程序设计语言如JAVA、C++等,提供了异常处理机制,将异常处理技术固化在 程序设计语言结构中。异常处理机制包括预先设定了程序运行时可能捕获到的所有异常 类型,在程序运行过程中监测异常的发生,当发生异常时,生成异常对象,并通过异常传播 机制,将异常传递给相应的异常处理模块。异常处理模块是程序员预先设定的异常发生后 的处理动作。设计程序时,程序员将程序中的一段代码指定为警戒区域,当警戒区域内部出 现异常时,程序跳转到异常处理模块,执行程序员事先指定的异常处理操作,使程序继续运 行下去,避免程序的崩溃。然而异常处理模块的引入,增加了程序的控制流程,从而增加了编程的难度。最近 的一些调研报告指出,在实际开发中,异常处理代码的质量往往不高,程序的异常处理模块 中普遍存在设计缺陷,且这类缺陷难以被现有的方法和工具发现。因此,需要一种发现软件 异常处理模块缺陷的方法,以提高软件质量。目前改进软件质量的技术主要有软件测试、代码评审以及形式验证。软件测试, 是使用人工或者自动方式来生成程序的输入,运行程序获得输出结果,通过比较输出结果 是否与预期相符来判断程序中是否存在缺陷。它要求被测试的是一个可运行的系统,并接 受一定的输入。但是通过程序的输入难以控制程序运行时产生异常,也就难以得到异常发 生后程序的输出结果,因此难以判断程序异常执行路径上是否存在缺陷。代码评审也称代 码复查,是指通过阅读代码来检查源代码与编码标准的符合性以及代码质量,通常由人手 工完成,因此效率不高。软件形式验证的主要思想是通过使用形式证明的方式来验证一个 程序设计得是否正确,它不适用于大规模的软件系统。在软件开发过程中,发现并修正程序缺陷是一个花费巨大的工作。软件产品的开 发依次历经需求、设计、编码、测试、部署几个阶段。软件开发的普遍经验表明尽早的发现 程序中的缺陷,尽早的改正,有助于降低软件开发的成本。因此,与软件测试、代码评审以及 形式验证的方法相比,利用程序的静态分析技术能够在程序开发的早期自动化的发现程序 中的缺陷,有助于降低软件开发的成本。目前,已经有一些研究成果,能够利用程序分析技术自动的发现程序中的缺陷。包 括 开源软件工具 FindBugs (http //f indbugs. sourceforge. net/)是一个利用静 态程序分析技术检测Java程序缺陷模式的工具。所谓缺陷模式,是指某些编码习惯,它们 通常都是程序的缺陷。· JLint (http://artho. com/jlint/)与 FindBugs 类似,分析 Java 程序,执行语 法检查和数据流分析。· PMD (http //pmd. sourceforge. net/)只对 Java 源代码进行语法检查,主要用 于检查程序代码风格。这些工具能够检测出来的程序缺陷有空引用、并发程序中的死锁、数组长度小于 零、以零作为除数、不可达的程序代码(dead code)、在执行路径中输入输出流没有关闭等。已有的方法、技术及工具表明利用静态程序分析的方法,能够有效的发现程序设 计的缺陷,有助于改善程序质量。但同时,已有的方法、技术及工具还有不完善的地方,它们 并不能找出所有的程序缺陷,特别是程序异常处理模块的设计缺陷。软件程序应该具有这样的特性当一个操作在执行过程中发生异常而失效时,依 赖于这个操作成功执行的后续操作应该停止执行。否则会将不正确的程序状态继续传播下 去,引起不正确的程序结果。软件程序的这个特性称为依赖安全(cbpendency safety)。依 赖安全的特性保证了当程序由于异常或其它原因导致操作失效时,程序能够停止在一个一 致的状态。违背了这个特性,往往意味着程序设计的缺陷。现有的方法、技术及工具并不能 发现软件程序设计中的这种缺陷,因此本专利技术提供了一种静态检测方法,利用程序中变量 之间的依赖关系,检测软件程序中的这种缺陷。
技术实现思路
本专利技术针对软件程序中变量的不安全使用这种缺陷模式,提供了一种检测程序异 常处理模块缺陷的自动化方法,降低了软件开发的成本,提高了程序质量,减少了软件运行 中可能出现的问题。本专利技术提供的,包括以下步骤1)建立软件程序的控制流图。2)根据控制流图,对程序进行层次化的数据流分析,获得程序中每一个变量的操 作序列。3)检测每个操作序列中是否出现变量的不安全使用。所述变量的不安全使用是指操作序列中依次出现eDef和Use,且eDef和Use之间 不存在其它eDef和sDef操作时,Use为变量的不安全使用。所述软件程序中包括正常程序语句和警戒区域还包括异常处理模块或/和 finally 模块。所述控制流图的建立方法如下A、建立正常执行路径。其方法为将每条正常程序语句设定为一个节点,按语句执 行顺序,两相邻语句之间设置有向边。有向边为程序的正常执行路径,有向边的方向表示语 句执行的先后顺序。B、建立警戒区域内部执行路径。其方法为将警戒区域内的每条语句设定为一个 节点,按照语句执行顺序,两相邻语句之间设置有向边。有向边为警戒区域内部执行路径,有向边的方向表示语句执行的先后顺序。C、建立正常程序语句与后续警戒区域之间的有向边,有向边的方向表示语句执行 的先后顺序。D、建立异常执行路径。其方法为若警戒区域抛出异常对象,查找与异常对象相对 应的异常处理模块,若查找到,建立异常处理模块内部执行路径,并在异常对象节点与异常 处理模块的第一个节点之间建立有向边;若查找不到,设置异常退出节点,建立异常对象节 点指向异常退出节点的有向边。E、查找finally模块,若查找到,建立finally模块内部执行路径;建立警戒区域 最后节点和异常处理模块最后节点指向finally模块之间的有向边;建立finally模块与 后续正常语句节点之间的有向边;将finally模块插入异常对象节点与异常退出节点之 间,按语句执行顺序建立有向边,即按异常对象节点、finally模块和异常退出节点的顺序 建立有向边;若查找不到,建立警戒区域最后节点指向后续正常程序语句的有向边;并建立异 常处理模块最后节点指向后续正常程序语句的有向边。建立异常处理模块内部执行路径的方法为将异常处理模块内的每条语句设定为 一个节点,按照语句执行顺序,两相邻语句之间设置有向边。有向边为异常处理模块内部执 行路径,有向边的方向表示语句执行的先后顺序。建立finally模块内部执行路径的方法为将finally模块内的每条语句设定为 一个节点,按照语句执行顺序,两相邻语句之间设置有向边。有向边为finally模块内部执 行路径,有向边的方向表示语句执行的先后顺序本文档来自技高网...
【技术保护点】
一种软件程序中变量的不安全使用的检测方法,包括如下步骤:1)建立软件程序的控制流图;2)根据控制流图,对程序进行层次化的数据流分析,获得程序中每一个变量的操作序列;3)检测每个操作序列中是否出现变量的不安全使用。
【技术特征摘要】
【专利技术属性】
技术研发人员:伍晓泉,魏峻,高楚舒,
申请(专利权)人:中国科学院软件研究所,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。