《开发者测试》第二章 程序静态分析

2.1 程序静态分析概述


  ·定义:在不运行程序的前提下,仅通过分析或检查程序的语法、结构、过程、接口等对程序进行分析的过程。

  ·目的:检测软件中的缺陷。

2.1.1 代码评审

常见代码评审项目
·所有的设计要求是否都实现? ·每一项功能目的是否都有注释?
·代码编制是否遵照编码规范? ·是否按注释类型格式编写注释?
·所有的代码是否风格保持一致? ·代码注释量是否达到了规定值?
·所有的注释是否清楚和正确? ·所有变量的命名是否依照规则?
·所有代码的异常处理是否都有注释? ·循环嵌套是否优化到最少?

  ·桌面检查:

    ·开发人员通过阅读程序、对照错误列表、推演测试数据等方式对代码进行缺陷检测的方法;

    ·缺点:效率低、随意性大;

  ·代码审查:

    ·若干开发人员和测试人员组成审查小组,通过阅读、讨论、评价和审议等,对程序进行静态分析;

  ·代码走查:

    ·由人扮演计算机角色,把数据代入程序并模拟代码的运行,观察程序是否正常运行的过程;

    ·提前准备测试用例。

2.1.2 结构分析

  帮助测试人员理解软件的整体架构。

  程  {  系统结构                  {  文件调用关系图

  序  {  数据结构         分析生成       {  模块控制流图

  源——{  数据接口    ——————》  ——{  类间依赖关系图

  代  {  内部控制逻辑             {  函数调用关系图

  码  {  ...                   {  ...

2.2 程序流程分析


2.2.1 控制流分析

  ·目的:构造一个表达程序结构的控制流图;

  ·通过控制流分析,缺陷可以被有效地检测出来,从而保证程序可以正常运行,并降低管理资源的耗费。

2.2.2 数据流分析

  ·一种软件验证技术,用于分析变量在程序的定义、使用及传递情况,以检测变量定义/使用错误和异常错误;

  ·主要包括三类错误:

    ①变量被定义,但还未被使用;

    ②变量被使用,但还未被定义;

    ③变量在使用之前被定义多次。

  ·需要一个程序的控制流分析的 控制流图 和制流图中每条语句包含的 定义变量和使用变量 进行分析。

2.3 符号执行


  ·一种介于程序运行与程序正确性证明之间的方法。

  ·作用:

    ·检查程序执行结果是否符合预期;

    ·通过符号执行产生程序的执行路径,为进一步自动生成测试数据提供约束条件;

  ·根据符号执行过程中是否使用具体值,可将符号执行技术分为静态符号执行动态符号执行

2.3.1 静态符号分析

  ·定义:不执行程序的前提下,以符号值作为输入,并通过符号执行模拟代码运行的过程,最后确认哪些 输入变量 可以执行程序的给定 路径 ,到达目标结果语句;(白盒静态分析)

  ·通俗点说,就是如果把一个程序比作LOL英雄,英雄的最终属性值为程序的输出(包括攻击力、防御力、血槽、蓝槽),英雄的武器出装为程序的输入(出冰杖还是大剑)。那么符号执行的任务就是,给定了一个英雄的最终属性值,分析出该英雄可以通过哪些出装方式达到这种最终属性值效果。

  ·路径条件:一个建立在符号化输入的 布尔公式 ,是执行某条路径时输入必须满足的限制的 积累 

  ·在符号执行过程中的每个 分支点(像if语句)上,路径条件都会进行更新:

    ①如果路径条件变得不可满足,则对应的程序路径也是不可行的;

    ②如果路径条件是可满足的,则该路径条件的任何一个解决方案都是执行该条件的程序输入;

  ·不使用一般程序运行时使用的具体值作为输入;

  ·漏洞分析:将产生漏洞的条件设置为程序目标结果,理论上就很容易挖掘出漏洞的输入变量了。

看懂符号分析:https://www.anquanke.com/post/id/157928

论文:http://www.doc88.com/p-1773800898173.html

2.3.2 动态符号分析

  ·定义:同时结合了 符号输入 和 具体输入 来对程序进行分析;

  ·做法:在符号输入的基础上,当遇到复杂路径或大规模路径时 使用具体输入值代替符号输入 ,以此来驱使符号执行继续向后开展,并可获得可求解的约束路径;

    ·在动态符号执行时,运行工具要跟踪记录符号状态以及当前路径的运行条件;

    ·在一条路径运行结束后,运行工具将路径中未覆盖分支的最后一个路径条件约束 取反 ,再将新的路径条件传递给约束求解器进行求解;

    ·如果约束求解器可以给出一个满足新路径条件的解,运行工具会运行该条路径并重复上述路径,直至所有路径被覆盖或覆盖特定目标或满足时间需求

2.4 编程规范和规则


  比赛的一些编程规范。

2.5 程序静态分析工具


  介绍工具。

猜你喜欢

转载自www.cnblogs.com/wasi-991017/p/11610208.html