代码如下:
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语句。
动态时序分析就是通常我们所说的仿真,该仿真可以验证功能,也可以验证时序,首先确定测试向量,输入硬件模型,进行仿真。由于为了完整地测试每条路径的功能或者时序是否都满足,测试向量需要很大,也不能保证100%的覆盖率。如果到了门级的仿真将非常消耗时间。
静态分析主要是通过分析源代码,程序的二进制文件,程序执行的数据,程序的行为,程序的结构等,来帮助开发人员发现潜在的漏洞。编译原理主要是学习编译技术,即将高级语言程序翻译成可执行代码,检验语法正确性和语义正确性,以及提供计算机程序优化的方法,它与静态分析没有直接的联系,但它们都可以帮助开发人员更好地实现计算机程序的功能。
(1)人工检测:是指不依靠计算机而是靠人工审查程序或评审软件,包括代码检查、静态结构分析和代码质量度量等;
(2)计算机辅助静态分析:利用静态分析工具对被测试程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。
静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。
扩展资料:
代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。
在实际使用中,代码检查比动态测试更有效率,能快速找到缺陷,发现30%~70%的逻辑设计和编码缺陷;代码检查看到的是问题本身而非征兆。但是代码检查非常耗费时间,而且代码检查需要知识和经验的积累。
代码检查应在编译和动态测试之前进行,在检查前,应准备好需求描述文档、程序设计文档、程序的源代码清单、代码编码标准和代码缺陷检查表等。静态测试具有的发现缺陷早、降低返工成本、覆盖重点和发现缺陷的概率高的优点以及耗时长、不能测试依赖和技术能力要求高的缺点。
第一次调用时:n=3,a初始化为1,返回时,n的值为4,a值为2
第二次调用时:n=3,a保持函数上次调用后的值为2,则返回时,n的值为5,a的值为3
所以输出的s的值为9
静态测试 静态方法是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用
静态时序分析是采用穷尽分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。它 不需要输入向量 就能穷尽所有的路径,且 运行速度很快、占用内存较少 ,不仅可以对芯片设计进行全面的 时序功能检查 ,而且还可利用时序分析的结果来优化设计,因此静态时序分析已经越来越多地被用到数字集成电路设计的验证中。
测试向量/测试向量:
就是用来测试模块的激励信号。模块编好了以后,用一系列的激励信号作为输入,然后查看模块的输出信号是否正确,来验证模块是否正确。
动态时序模拟就是通常的仿真,因为不可能产生完备的测试向量,覆盖门级网表中的每一条路径。因此在动态时序分析中,无法暴露一些路径上可能存在的时序问题。
动态时序验证是在验证功能的同时验证时序,需要输入向量作为激励。随着规模增大,所需要的向量数量以指数增长,验证所需时间占到整个设计周期的50%,且这种方法难以保证足够的覆盖率,因而对片上系统芯片设计已成为设计流程的瓶颈,所以必须有更有效的时序验证技术取代它。
动态时序仿真的优点是 比较精确,而且同静态时序相比较,它适用于更多的设计类型 。
但是它也存在着比较明显的缺点:
以上就是关于软件测试走查中的静态分析技术中的数据流分析问题全部的内容,包括:软件测试走查中的静态分析技术中的数据流分析问题、如何学习数字电路中的静态时序分析、静态分析需要看编译原理吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)