下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、静态测试的和动态测试浅析根据程序是否运行, 测试可以分为静态测试和动态测试。 静态测试就是静态分析, 对模 块的源代码进行研读, 查找错误或收集一些度量数据, 并不需要对代码进行编译和仿真运行。 动态测试需要真正运行程序发现错误, 通过有效的测试用例, 对应的输入输出出关系来分析 被测程序的运行情况。1、 静态测试所谓静态测试( static testing )就是不实际运行被测软件,而只是静态地检查程序代码、 界面或文档中可能存在的错误的过程。从概念中我们可以知道,其包括对代码测试、界面测试和文档测试三个方面:对于代码 测试, 主要测试代码是否符合相应的标准和规范; 对于界面测试, 主要测试
2、软件的实际界面 与需求中的说明是否相符; 对于文档测试, 主要测试用户手册和需求说明是否符合用户的实 际需求。静态测试包括对软件产品的设计规格说明书的审查,对程序代码的阅读、审查等。 静态分析的查错和分析功能是其他方法所不能替代的, 已被当作一种自动化的代码校验方法。静态方法是指不运行被测程序本身, 仅通过分析或检查源程序的文法、 结构、过程、接 口等来检查程序的正确性。 静态方法通过程序静态特性的分析, 找出欠缺和可疑之处, 例如 不匹配的参数、 不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、 空指针的 引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导
3、。通常静态测试包括: ( 1)代码检查:代码会审、代码走查、桌面检查; (2)静态结构分 析;( 3)代码质量度量。静态测试采用人工检测和计算机辅助静态分析手段进行检测,只进行特性分析。人工检测: 人工检测是指不依靠计算机而完全靠人工审查或评审软件。 人工检测这种 方法可以有效地发现逻辑设计和编码错误,发现计算机不易发现的问题。计算机辅助静态分析: 利用静态分析工具对被测程序进行特性分析, 从程序中提取一 些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。如用错的局部变量和全局变量, 不匹配的参数, 潜在的死循环等。 静态分析中还可以用符号代替数值求得程序结果, 以便对 程序进行运算规律的检
4、验。2、 动态测试动态测试( dynamic testing ),指的是实际运行被测程序,输入相应的测试数据,检查实 际输出结果和预期结果是否相符的过程, 所以判断一个测试属于动态测试还是静态的, 唯一 的标准就是看是否运行程序。动态方法是指通过运行被测程序, 检查运行结果与预期结果的差异, 并分析运行效率和 健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。动态测试是通过观察代码运行时的动作, 来提供执行跟踪、 时间分析, 以及测试覆盖度 方面的信息。通常动态测试包括: (1)黑盒测试:又称功能测试。这种方法把被测软件看成黑盒,在 不考虑软件内部结构和特性的情况
5、下测试软件的外部特性。( 2)白盒测试:又称结构测试。这种方法把被测软件看成白盒, 根据程序的内部结构和逻辑设计来设计测试实例, 对程序的 路径和过程进行测试。二者之间的区别:区别一:静态测试是用于预防的,动态测试是用于矫正的; 区别二:多次的静态测试比动态测试要效率和效益高; 区别三:静态测试综合测试程序代码; 区别四:在相当短的时间里,静态测试的覆盖度能达到100%,而动态测试经常是只能达到 50%左右,原因动态测试发现的 bug 大部分只是在测试实际执行的那部分代码;区别五:动态测试比静态测试更花时间; 区别六:静态测试比动态测试更能发现bug;区别七:静态测试的执行可以在程序编码编译前
6、,动态测试只能在编译后才能执行; 区别八:静态测试能发现动态测试所不能发现的一些:“Syntax error, code that hard tomaintain , code that hard to test , code that does not confirm to coding standard , and ANSI violations ”。黑盒白盒、动态静态测试之间的关系它们只是测试的不同角度而已, 同一个测试, 既有可能是黑盒测试, 也有可能是动态测试;既有可能是静态测试,也有可能是白盒测试。而且它们之间还有包括交叉的关系,总结以下 4 句话:黑盒测试有可能是动态测试(运行程
7、序,只看输入和输出),也有可能是静态测试(不运行程序,只是查看界面)白盒测试有可能是动态测试(运行程序,并分析代码结构),也有可能是静态测试(不运行程序,只是静态查看代码)动态测试有可能是黑盒测试(运行程序,只看输入和输出),也有可能是白盒测试(运行程序,并分析代码结构)静态测试有可能是黑盒测试(不运行程序,只是查看界面),也有可能是白盒测试(不运行程序,只是静态查看代码)以上的测试方法各有所长, 每种方法都可设计出一组有用的例子, 用这组测试用例可以 比较容易地发现某种类型的错误, 却不易发现另一种类型的错误, 不同的测试方法各自的目 标和侧重点不一样。 因此在实际测试中, 应结合各种测试方
8、法,形成综合策略,以达到更完 美的效果。 在单元测试主要用白盒测试; 在系统测试时主要用黑盒测试, 或者以黑盒测试为 主要测试方法,白盒测试为辅助方法等。、 软 件测试中的模糊测试1、 什么是模糊测试模糊测试, 是一种用于发现软件漏洞的自动化检测技术。 模糊测试的主要思想为提供非 预期的输入数据并监视异常结果来发现软件的故障或漏洞。 完整的模糊测试主要由识别输入、 构造测试样本、 执行测试样本、 捕获程序异常等几部分组成。 在整个自动化过程中,反复生 成各种数据样本并监视目标软件异常为模糊测试的主要工作流程。模糊测试( Fuzz Testing )是一种发现安全漏洞的有效的测试方法,在安全性测
9、试中越 来越受到重视。 模糊测试将随机的坏数据插入程序, 观察程序是否能容忍杂乱输入。 模糊测 试是不合逻辑的, 只是产生杂乱数据攻击程序。 采用模糊测试攻击应用程序可发现其他采用 逻辑思维来测试很难发现的安全缺陷。模糊测试( Fuzzing )事实上不是一种新技术。 模糊测试概念最早于 1989 年由 Wisconsin 大学的 Barton Miller 教授提出(威斯康星州的麦迪逊大学 BartonMiller 教授),它是一种 自动化或半自动化的漏洞挖掘技术, 通过向目标软件输入大量的畸形数据并监测目标系统的 异常来发现潜在的软件漏洞。 模糊测试可以完全不需要任何关于软件或协议的先验知
10、识, 但 借助于事先对目标软件或协议进行研究而得到的先验知识可以开发出更高效的模糊器 (Fuzzer ,测试者开发的用于模糊测试的工具) 。由于目前人们聚焦于开发更加安全的软件, 模糊测试才被更加广泛应用并成为公认的代码测试方法。在软件测试过程中, 一个程序被随机产生的数据大量验证, 称为模糊测试。 假如一个程 序在应对任一的这类数据上失效, 开始出现冲突、 锁住、 消耗大量内存或者产生不可控制的 程序错误,开发者就知道代码中某处出现了bug。因此这个缺陷可能在程序发布或者配置前被定位并予以矫正, 从而使可能的程序漏洞不出现在程序最终发行版本中。 软件测试被频繁 地用于测试缓冲区溢出漏洞, 而
11、这种溢出在输入字符的数量超出可用的缓冲区空间时候发生。软件程序有许多种的输入方式, 比如鼠标、 键盘和触摸屏。 另外还包括调用其它程序或 植入实用系统中的控制器数据。 模糊测试可以有效地找出漏洞, 是由于输入一个程序的数据 是随机的, 因此不会被任何的关于软件应该如何运行的偏见所束缚。当人们自己测试软件的时候,可能做出软件被如何使用的假设,而造成只对特定的输入进行测试。一个彻底的模糊测试是对有效数据和随机数据的联合调试。 有效数据测试防止程序在抵 达一个欠缺的代码块前出现拒绝信息。你必须意识到,虽然通过一个模糊测试,这并不意味着一个程序完全没有bug。软件测试仅仅是随机测试的模拟, 是程序行为
12、的一个有限样本的测试。 测试可能只展现那些软件可 以处理的没有冲突的例外。还有,模糊测试不能测试出开发中出现的逻辑错误。模糊测试一个大的优点在于它的成本效率; 测试通常是自动化的, 而且容易配置。 模糊 测试是一种有效的软件测试方法, 但它也只是众多软件测试方法中的一种。 静态分析、 相互 评价和安全代码方法学都是安全软件开发的方法。2、 举例说明解释模糊测试(模糊化) 的最好方法就是使用示例。最近以来,模糊化的最常见用处是 验证两种类型的数据分析程序:文件和网络。文件分析程序的一个例子是 Microsoft Word 。对 Word 文件分析程序进行模糊测试需要 什么?想象一下创建一百万个长
13、度和所包含数据均为随机的Word 文档。 假设这些文档不是由 Word 自己创建, 而实际上是通过将随机的二进制数据源输送到磁盘上的测试文件中创建 的。在 Word 中打开其中任意一个文件,看看会发生什么。这样做可能会出现三种结果。第一种,对于大多数测试文件,Word 会指出文件格式无法识别, 或文件已破坏而无法打开等错误。 第二种, 一百万个文件中的少数文件可能实际上 包含了某些可识别控件和可打印字符的组合。 那些文件将会正常打开, 没有任何问题。 第三 种,也是最有趣的情况是, 可能有几个文件包含了文件分析程序没有预见到的数据。在这种情况下,程序可能会出故障。对于安全性测试人员, 第三类测
14、试文档才是真正有意义的情况。 如果文件分析程序出现 故障,那意味着它存在 bug 。如果有 bug ,它可能是可利用的。例如, bug 可能会引起堆栈 损坏或堆损坏,从而造成故障。一般情况下,此类 bug 在联网环境下属于严重问题,因为各 种各样的文件类型都可作为电子邮件附件分发。 经验表明, 大多数用户都会打开附件, 而不 管其性质。在网络分析程序领域中也存在相似的问题。考虑一下典型的PC服务器或嵌入式网络设备所能理解的协议数量之多:DHCP(动态主机配置协议)、DNS HTTP、SMB(服务器消息块)和SMTP等等。每个协议实现都包括一个针对来源于网络的数据包的分析程序,而每 个分析程序都
15、可能需要一些复杂的逻辑。 此类代码也往往会有许多边界情况, 从而使之难以 验证。测试网络协议代码的一个方法是通过模糊化。 但是,在这种情况下, 我建议使用一种 “向 其提供随机数据即可”方法(在上面的 Word 分析程序上下文中说明)的变体。假设我需要测试一个 DHCP客户端。再进一步假设 DHCP客户端代码的某一特定部分特 别糟糕, 但是该段代码在某种程度上得到了分析程序另一部分 (被认为较为可靠) 的网络保 护。在这种情况下,用纯随机数据模糊化DHCP客户端不可能有效地使用时间,因为我预见代码的可靠部分会筛选出大多数不正确的数据。我改为采用一种更具针对性的方法。实际上,根据我的经验,在采用这种方式时模糊化最有效。继续该DHCP示例,我将模糊测试(模糊处理程序) 配置成使用已知有效数据、故意错误数据和随机数据的组合,而不是用大量纯随机数据来测试该客户端。 使用已知有效数据的目的是跳过我不感兴趣的分析程 序组件。 使用故意错误数据的目的是利用已知或我怀疑将成为代码中缺陷的情况。最后, 使用随机数据的目的就是看看会发生什么。在模糊化的过程中, 我的方法会随着我对可疑行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论