静态测试 静态方法是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用
静态代码分析是代码审计的方式之一,即代码审计也可以通过其他方式来审查源码的安全。比如,运行该源码,执行针对性的 *** 作等。
静态代码分析就是在不运行软件源码的情况下,从数据流、语义、结构、控制流、配置流等方面对源代码进行的分析。
代码中的bug往往是由于开发者忽略一些代码缺陷而造成的,这些代码缺陷可能是极其微小的错误,以至于在程序的编译期并未给出很好的错误,从而导致这些代码缺陷在程序的运行期以某种非正常形式呈现出来。
那么对于开发这开说,这些微小的代码缺陷,往往是很难跟踪调试的,因此也为修复代码带来了很大困难。Xcode静态代码分析的作用即发现项目源代码中的某些代码缺陷,并分类进行提示,以方便开发者及时关注并加以修改,从而把代码缺陷(潜在的bug)及时清除。
代码如下:
void f1(int p1, int p2, int p3)
{
p1 = p3 - p2;
}
main()
{
int a,x,y;
printf ("Type in a value for a");
scanf ("%d",&a);
printf ("\n");
y = 0;
if (x != 0)
{
f1 (&y,a,x);
}
printf ("A is %d\n",a);
}
对上面代码进行数据流分析,结果如下:
变量 x: UR(未初始化就引用)
变量y: DU(初始化后未被引用就出作用域了)
变量y: DD(初始化后未被引用就再次被初始化)
1)x 的 UR异常是由于在“if“的条件之前未给x 赋初值引起的。
修正:
在原码中给x 赋初值或从键盘输入一个值给 x。
2)Y的 DU异常是由于 Y被赋初值0 后,或是在f1 函数中再次赋值后,都
没有被引用就出了其作用域。
修正:
在程序末尾,在打印语句中加入 y。
3)y 的 DD 异常是在 Y 被赋初始值 0 后如果是走 if 的真分支那么 Y 在没有
被引用的情况下就再次被赋了初值。这是由于使用了不完整的 if 语句造
成的。
修正:
用 if-then-else结构重写if语句。
静态代码分析原理分为两种:分析源代码编译后的中间文件(如Java的字节码);分析源文件。主要分析技术如下:
缺陷模式匹配
事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行匹配,从而完成软件安全分析。优点:简单方便;缺点:需要内置足够多的缺陷模式,容易产生误报。
类型推断/类型推断
类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。
模型检查
建立于有限状态自动机的概念基础上。将每条语句产生的影响抽象为有限状态自动机的一个状态,再通过分析有限状态机达到分析代码目的。
校验程序并发等时序特性。
数据流分析
从程序代码中收集程序语义信息,抽象成控制流图,可以通过控制流图,不必真实的运行程序,可以分析发现程序运行时的行为。
以上就是关于下面哪个属于静态分析的主要内容全部的内容,包括:下面哪个属于静态分析的主要内容、静态代码分析应该怎么 *** 作呢、软件测试走查中的静态分析技术中的数据流分析问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)