蓝色的是考点
书上找不到的
SDL
软件安全开发周期,微软提出,从安全角度指导软件开发过程的管理模式
模糊测试
向目标系统提供非预期输入并监视结果来发现系统的漏洞
渗透测试
模拟恶意黑客攻击,评估软件网络安全
正确性测试
正确性测试就是检查软件的功能是否符合规格说明的测试
第一章 软件测试基础
1.1 软件测试基本概念
软件测试定义[软件测试]
测试是评错:在特定的条件下运行系统或构件,观察或记录结果,做出评价
测试是做度量:分析某个软件项现存的和要求的条件之差别(即错误)并评价此软件项的特性
软件测试的特征
-
可以从需求开始,而不仅仅是代码(广义测试/静态测试)
-
即是静态活动也是动态活动
-
静态活动
-
代码静态检查
-
帮助信息
-
不执行程序所做的一些评审文档的操作
-
-
动态活动
-
设计测试用例执行的结果与预期结果的差别
-
-
-
用来预防失效
-
尽早发现软件的一些错误,使它尽可能少的产生错误,产生一些不可避免的结果
-
-
有助于在软件生命周期中尽早发现问题,以降低修复缺陷所需的成本
-
过程中应创建可重用的测试件
-
某些测试用例会反复执行,很多软件有很多版本,他们的测试项是完全相似的,所以设计测试用例要考虑可重用
-
软件测试目的
Glenford J.Myers观点
-
测试是程序执行的过程,目的在于发现错误。
-
测试是为了证明程序有错,而不是证明程序无错。
-
一个好的测试用例在于能够发现至今未发现的错误。
-
一个成功的测试是发现了至今未发现的错误的测试。
Bill Hetzelt观点
-
软件测试的目的不仅仅是为了发现软件缺陷与错误,同时也对软件进行度量和评估,提高软件质量。
软件测试目的总结
-
以最少的人力、物力、时间找出软件中潜在的各种错误和缺陷,通过修正错误和缺陷提高软件质量,回避潜在的软件错误和缺陷给软件造成的商业风险。
-
通过分析测试过程中发现的问题可以帮助发现当前开发工作所采用的软件过程的缺陷,以便进行软件过程改进;同时通过对测试结果的分析整理,可修正软件开发规则,并为软件可靠性分析提供相关依据。
-
评价程序或系统的属性,对软件质量进行度量和评估,以验证软件的质量满足用户的需求,为用户选择、接收软件提供有力的依据。
软件测试的关键问题(原则)
-
软件测试是为了证伪而非证真
-
要尽早开始并持续进行软件测试
-
重视无效和非预期使用习惯的测试
-
避免检查自己的程序(应使用第三方测试)
-
注意测试中的错误群集现象(二八原则,发现某个程序段的错误,接下来的部分还可能有连续错误)
-
要定期评审测试用例
-
全面检查每个测试结果(强检测和弱检测)
-
保护测试现场,归档资料(可以再现这个错误,环境、路径等等)
-
要注意软件测试的经济性原则(穷尽测试花的代价可能比开发还要大得多)
-
完全测试是不可能的
-
测试一定是有风险的(没有测试所有情况,就是有风险的)
-
测试不可能找出所有隐藏的软件故障
-
测试进行的越多,程序免疫能力越强(杀虫剂抗性现象)
-
并非所有故障都能修复
-
不要丢弃测试用例
软件测试与软件质量保证
-
软件质量保证是贯穿软件项目整个生命周期的有计划和有系统的活动,经常针对整个项目质量计划执行情况进行评估,检查和改进,向管理者、顾客或其他方提供信任,确保项目质量与计划保持一致。
-
确保软件项目的过程遵循了对应的标准及规范要求且产生了合适的文档和精确反映项目情况的报告,其目的是通过评价项目质量建立项目达到质量要求的信心。软件质量保证活动主要包括评审项目过程、审计软件产品,就软件项目是否真正遵循已经制定的计划、标准和规程等,给管理者提供可视性项目和产品可视化的管理报告。
软件测试是获取度量值的一种重要手段
1.2 软件测试的分类
黑盒测试、白盒测试以及二者关系
-
黑盒:
-
从软件外部对软件实施的测试,也称为功能测试或基于规格说明的测试
-
通过使用整个软件或某种软件功能严格测试,不检查程序源代码,不了解源代码程序的设计。
-
只通过输入和输出了解软件的工作。
-
测试软件的整体功能和性能
-
-
白盒:
-
又称为结构测试、透明盒测试、逻辑驱动测试或基于代码的测试
-
通过源代码进行测试而不是用户界面。
-
寻找内部代码在算法、溢出、路径、条件等地方的缺陷并加以修正。
-
-
二者关系/比较:
-
黑盒侧重功能,与白盒互补,容易发现白盒不易被发现的类型测试。
-
在已知产品的因素方面:
-
黑盒:已知程序的功能需求、设计规格,可以通过测试验证程序需要的功能是否已被实现,是否复合要求。
-
白盒:已知程序的内部工作结构,可以通过测试验证程序的内部结构是否符合要求,是否含有缺陷。
-
-
在检查测试的主要内容方面:
-
黑盒检查:
-
功能是否都满足需求;是否有功能出现缺陷
-
接口上是否能正确接受输入;输出结果是否正确
-
是否有数据结构信息或者外部信息访问错误
-
是否有初始化或终止性错误
-
-
白盒检查:
-
所有程序模块的独立路径都需要至少被测试一遍
-
所有的逻辑判定的真值与假值都需要被至少测试一遍
-
在运行的边界内和循环的边界上执行循环体
-
测试内部数据结构是否有效
-
-
-
在静态测试方法方面:
-
静态黑盒:产品需求文档、用户手册、帮助文件等
-
静态白盒:走查、复审、评审程序源代码、数据字典、系统设计文档、环境设置、软件配置项等
-
-
在动态测试方法方面:
-
动态黑盒:通过数据输入并运行程序来检验输出结果,如功能测试、验收测试和一些性能测试(或安全性、兼容性)等
-
动态白盒:通过驱动程序来调用,如进行单元测试、集成测试、部分性能测试(或恢复性、可靠性)等
-
-
其它关系:
-
黑盒测试与白盒测试是设计测试用例的两种基本方法
-
在集成测试阶段采用黑盒测试与白盒测试相结合的方法
-
应用系统负载压力测试一般采用黑盒测试方法
-
白盒测试是在已知产品的内部工作过程的情况下对产品进行测试,黑盒测试则不考虑产品的内部工作过程
-
白盒测试主要测试每种内部操作是否符合设计要求,黑盒测试则测试每个功能是否符合需求;白盒测试主要由开发人员实施
-
-
白盒测试常用工具,各适用于什么情况?
-
静态测试工具:对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码质量,生成系统的调用关系图等。
-
CodeWizard:C++,静态代码分析
-
-
动态测试工具:一般采用"插桩"的方式向代码生成的可执行文件中插入一些检测代码,用来统计程序运行时的数据。
-
JTest:Java单元测试
-
JContract:系统级验证类部件是否被正常使用,对Jtest的延伸
-
C++ Test: 不用编写用例,自动测试,帮开发者预防错误。是单元测试工具,还可以用来黑盒测试
-
Insure++:C++,检测内存错误、内存泄露,以及覆盖性分析
-
Robot、QTP等
-
其它测试工具
-
LoadRunner——性能测试测试工具
-
Bugzilla——缺陷管理测试工具
-
Junit——单元测试测试工具
插桩程序设计
一般采用"插桩"的方式向代码生成的可执行文件中插入一些检测代码,用来统计程序运行时的数据。
不破坏原来的逻辑完整性,在相对应位置上插入探针,输出程序运行特征数据,并进行分析。
如果我们想要了解一个程序在某次运行中可执行语句被覆盖的情况,或是每个语句的实际执行次数,最好的办法就是利用插桩技术,它在软件测试技术上占有非常高的地位。最简单的插桩:在程序中插入打印语句printf(“ ...”)语句。
插桩策略:
-
语句覆盖探针(基本块探针):在基本块的入口和出口处,分别植入相应的探针,以确定程序执行时该基本块是否被覆盖。
-
分支覆盖探针:c/c++语言中,分支由分支点确定。对于每个分支,在其开始处植入一个相应的探针,以确定程序执行时该分支是否被覆盖。
-
条件覆盖探针:c/c++语言中,if, swich,while, do-while, for 几种语法结构都支持条件判定,在每个条件表达式的布尔表达式处植入探针,进行变量跟踪取值,以确定其被覆盖情况。
静态测试、动态测试
静态测试:指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程。
-
代码测试:主要测试代码是否符合相应的标准和规范。
-
界面测试:主要测试软件的与需求中的说明是否相符。
-
文档测试:主要测试用户手册和需求说明是否真正符合用户的实际需求。
-
程序分析
-
工具,(Logiscope)Telelogic,可用作Java/C++等规范。
动态测试:指实际运行被测程序,按照预先顺序输入相应的测试数