软件测试中的静态分析和动态分析 软件测试静态分析
发布日期:2020-10-09摘要:静态分析和动态分析是谁提出的? 静态分析和动态分析最早是挪威经济学家弗瑞希于1933年发表《动态经济 学中的扩散问题和冲击问题》一文中从计量经济学的角度进行划分的。但时至今 曰,经济学界常常将二者混淆...
静态分析和动态分析是谁提出的?
静态分析和动态分析最早是挪威经济学家弗瑞希于1933年发表《动态经济 学中的扩散问题和冲击问题》一文中从计量经济学的角度进行划分的。
但时至今 曰,经济学界常常将二者混淆在一起,导致许多纠缠不清的是非争论。
对此,张 建华先生提出了如下观点:静态分析是在假定其sup7sup也条件不变的前提下,以某些经济变量为自变量(不是 以时间为自变量),研究作为函数的另一些经济变量随作为自变量的经济变量取值的变化而变化的规律。
它是一种组合选择分析,其中自变量与函数的不同取值 之间是一种并列关系,不存在时间先后顺序和前后演替关系。
这种分析体现的是 机械论思维方式,它假定其他因素都不变,只有一种或几种可变因素,在此前提 下,孤立地研究可变因素对经济现象的影响,并把这种影响看作是某种铁定不变 的精确关系。
如以需求定理为例,假定其他条件都不变,只有价格与商品需求量在变化, 其中价格为自变量,商品需求量为函数。
一般的规律是,当商品价格比较高时, 商品需求量就比较少;当商品价格比较低时,商品需求量就比较大。
这就属于静 态分析。
动态分析则是以时间为自变量,研究各种经济变量,随时间的变化而变化 的规律。
这是一种过程演化分析,其中不同的变量状态之间是一种生长生成、 演替进化关系,有一定的时间顺序和前因后果关系。
这里体现的是系统论和随 机概率论思维方式,它将各种相关因素看作一个系统整体,考虑这些相关因素 之间的交互作用,研究它们各自以及它们共同对经济现象的影响,并认为这种 影响并非铁定不变,而呈一种概率关系。
例如,仍以价格和需求量的关系来 讲,若用动态分析,就是首先搜集若干时期某种商品的价格和需求量(销售 量)数据,建立商品价格和商品需求量的时间序列,从中可以看出商品价格与 商品需求量随时间变化而变化的轨迹,然后进一步进行统计相关分析,看商品 价格的变化与商品需求量的变化是否存在相关关系,最后再通过回归分析等方 法建立商品需求量与商品价格之间的函数关系。
结果可能使人大吃一惊:当商 品价格较高时,商品需求量也较高,当商品价格较低时,商品需求量也较低, 二者呈同方向变化,民间俗语称之为“买涨不买跌”,与上述需求定理正好相 反。
那么,我们应该相信哪个结论呢?其实,这两个结论都没有错,只是分析 方法不同,结论也不同罢了。
一般地,静态分析的结论既不能用动态资料来证实,也不能用动态资料来证 伪。
需要注意的是,在文字描述上,静态分析常常给人以动态的错觉,如“当商 品供过于求时,商品价格下降,引起需求增加,供给减少,逐渐趋于供求均衡; 反之,当商品供不应求时,商品价格上涨,会促使供给增加,需求减少,最后也 逐渐趋于供求均衡”这一段话,乍一看,商品价格、供给和需求都在变化,似乎 是动态分析,但实质上是静态分析,其中价格与需求量取值的变化与时间无关。
与此同时,动态分析到最后,通过对主要经济变量的时间序列数据作相关分析、 回归分析等处理,建立起主要经济变量之间的函数关系,形如Qd= 1000-3P等,似乎是静态分析,但其实是动态分析,其中价格P本身是以时间为自变量的函 数,从而需求量Qd也是随着时间的变化而变化。
目前经济学基础理论研究普遍采用静态分析方法。
如西方经济学中的边际效 用递减规律、边际替代率递减规律、边际技术替代率递减规律、边际收益递减规 律、边际消费倾向递减规律以及凯恩斯关于有效需求决定国民收人原理等,都是 静态分析方法的杰作。
“静态测试与动态测试的区别”
1.PB软件的特点 利用PB开发中大型的MIS应用系统,一般采用三层C/S的体系结构.在这种结构下,系统可分为两部分,即后台数据库部分和前台应用程序部分,后台采用非面向对象的关系数据库管理系统RDBMS(如SQL Server等)实现对应用数据的组织,安全性、完整性维护,以及存取控制;前台应用程序部分利用PB提供的可视化编程技术实现用户的各种需求。
其特点表现在,利用PB提供的窗口、菜单及数据窗口等对象很方便地实现友好的用户界面,系统的各种功能以窗口对象为主线,利用PB 提供的Script语言,通过对窗口的各控件的事件描述来实现。
与传统的面向过程的语言相比较,PB支持面向对象的程序设计方法,其用户界面的元素都是对象,所以都有属性、事件和方法,具有继承、封装和重用等面向对象的特性。
2.测试目标 无论传统的系统,还是基于PB的C/S系统,测试的目标都是确保所开发软件的功能符合用户的要求。
具体表现在以下几个方面: (1)确保系统达到需求功能的说明; (2)确保系统满足性能需求; (3)强度测试确认程序能够处理要求的负载; (4)确保系统在要求的硬件和软件平台上工作正常。
3.测试方法 原则上讲,可以将软件测试方法分为两大类,即静态测试和动态测试。
静态测试是对被测程序进行特性分析的一些方法的总称,这种方法的主要特性是不利用计算机运行被测试的程序,而是采用其他手段达到检测的目的。
动态测试是实际运行被测程序,输入相应的测试用例,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性。
动态测试的两种主要的方法是黑盒测试和白盒测试。
4.测试过程 测试虽然是软件生存周期的一个独立阶段,但测试工作却渗透到从分析、设计直到编程的各个阶段中,如测试计划的编写从分析和设计阶段就开始了,而具体的测试工作随编程工作的不断深入也在进行中。
在实际工作中,测试环节可分为明显的、同等重要的三个阶段:即单元测试、集成测试(又称构件测试)和系统测试。
测试工作中的第四个阶段是验收测试阶段,验收测试无论在规模上或性质上都和系统测试很相似,它们的根本区别在于:前者是内部的,而后者则是受“客户”控制的。
(1)单元测试 软件单元定义了一个软件很底层的块,用PB开发的客户机/服务器的软件系统中,一个窗口、函数、菜单、报表或一个存储过程都可以作为一个单元进行测试。
单元测试是测试的第一步。
1)人员安排:对于一个完整的软件单元,没有人比它的开发者更熟悉它,因此,开发者自己对其进行测试是最合适的。
2)单元测试计划:测试计划必须在单元测试之前被设计和记录好。
大量的文档说明必须足够详细,以备当单元开发者调离、提升或其他原因离开其岗位时,其他人员也能对相应的单元进行测试。
此外,在集成测试和系统测试阶段,清晰、详细、易于理解的单元测试文档对于测试者也将发挥巨大作用。
单元测试的测试计划由单元的开发者(也是该单元的测试者)编制,但在测试计划执行前必须进行审查。
这些审查由开发者以外的人进行,第一遍审查由开发者的直接上司去做,其目的在于找出测试计划中的错误、缺点和疏漏之处。
第二遍审查由测试该单元所属系统的测试人员进行,其目的在于确认测试计划符合公布的标准。
如果测试计划在任何方面有问题,都将被立即退回到开发者手中。
3)进行单元测试的时间:在客户机/服务器的开发过程中,单元测试是测试的第一步。
经验表明,单元测试执行得越快,它的结果就越有价值,在开发周期中错误发现得越早,纠正它们所花的代价就越小。
一般来讲,单元编码完成后,就对其进行单元测试。
另外,单元测试可以并行进行。
对于彼此独立的单元,进行并行测试可以加速测试的进程。
软件测试走查中的静态分析技术中的数据流分析问题
代码如下: 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语句。
白盒测试有几种方法
一般可分为:静态分析和动态分析两种技术。
白盒测试技术一般可分为:静态分析和动态分析两种技术;静态分析:1、检查程序内部的完整性和一致性。
2、考虑预定义规则。
3、把程序和其相应的规格或文档进行比较。
静态分析主要包含手工的“检视”和“走读”,静态分析不需要软件的执行。
动态分析是需要执行系统的测试方式,主要包括:“测试覆盖率分析”、“跟踪”、“调整”和“模拟和断言检查”。
...
什么是黑盒测试和白盒测试?
软件测试的两个方面而已。
白盒测试:是通过程序的源代码进行测试而不使用用户界面。
这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。
黑盒测试:是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。
测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。
在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收和正确的输出
什么是软件的静态测试和动态测试,他们的区别?
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
采用什么方法对软件进行测试呢?常用的软件测试方法有两大类:静态测试方法和动态测试方法。
其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。
其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。
语句覆盖每条语句至少执行一次。
判定覆盖每个判定的每个分支至少执行一次。
条件覆盖每个判定的每个条件应取到各种可能的值。
判定/条件覆盖同时满足判定覆盖条件覆盖。
条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
路径覆盖使程序中每一条可能的路径至少执行一次。
"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
"白盒"法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
贯穿程序的独立路径数是天文数字。
但即使每条路径都测试了仍然可能有错误。
第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。
第二,穷举路径测试不可能查出程序中因遗漏路径而出错。
第三,穷举路径测试可能发现不了一些与数据相关的错误。
如何挑选白盒测试工具 白盒测试目前主要用在具有高可靠性要求的软件领域,例如:军工软件、航天航空软件、工业控制软件等等。
白盒测试工具在选购时应当主要是对开发语言的支持、代码覆盖的深度、嵌入式软件的测试、测试的可视化等。
对开发语言的支持:白盒测试工具是对源代码进行的测试,测试的主要内容包括词法分析与语法分析、静态错误分析、动态检测等。
但是对于不同的开发语言,测试工具实现的方式和内容差别是较大的。
目前测试工具主要支持的开发语言包括:标准C、C++、Visual C++、Java、Visual J++等。
代码的覆盖深度:从覆盖源程序语句的详尽程度分析,逻辑覆盖标准包括以下不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖和修正判定条件覆盖。
·语句覆盖 为了暴露程序中的错误,程序中的每条语句至少应该执行一次。
因此语句覆盖(Statement Coverage)的含义是:选择足够多的测试数据,使被测程序中每条语句至少执行一次。
语句覆盖是很弱的逻辑覆盖。
·判定覆盖 比语句覆盖稍强的覆盖标准是判定覆盖(Decision Coverage)。
判定覆盖的含义是:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次,因此判定覆盖又称为分支覆盖。
·条件覆盖 在设计程序中,一个判定语句是由多个条件组合而成的复合判定。
为了更彻底地实现逻辑覆盖,可以采用条件覆盖(Condition Coverage)的标准。
条件覆盖的含义是:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。
·多条件覆盖 多条件覆盖也称条件组合覆盖,它的含义是:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。
显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。
·修正条件判定覆盖 修正条件判定覆盖是由欧美的航空/航天制造厂商和使用单位联合制定的“航空运输和装备系统软件认证标准”,目前在国外的国防、航空航天领域应用广泛。
这个覆盖度量需要足够的测试用例来确定各个条件能够影响到包含的判定的结果。
它要求满足两个条件:首先,每一个程序模块的入口和出口点都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;其次,程序的判定被分解为通过逻辑操作符(and、or)连接的布尔条件,每个条件对于判定的结果值是独立的。
不同的测试工具对于代码的覆盖能力也是不同的,通常能够支持修正条件判定覆盖的测试工具价格是极其昂贵的。
嵌入式软件的测试:对于嵌入式软件的测试,我们还需要一方面进一步考虑测试工具对于嵌入式操作系统的支持能力,例如DOS、Vxworks、Neculeus、Linux和Windows CE等;另一方面还需要考虑测试工具对于硬件平台的支持能力,包括是...
-
给我们打电话
7*24小时服务热线:1399999999
全国客服热线:400-0000-000 -
百度地图
福建省三明市 -
给我们发邮件
E-mail:[email protected]
在线沟通