软件测试基础(三)
一. 软件测试方法
测试活动从不同角度出发,可以有不同的分类;
(1)黑盒测试和白盒测试,灰盒测试;
(2)静态测试和动态测试;
(3)人工测试和自动化测试。
1. 黑盒测试
黑盒测试把被测对象看成一个黑盒,只考虑其整体特性,不考虑其内部具体实现。
黑盒测试针对的被测对象可以是一个系统,一个子系统,一个模块,一个子模块,一个函数等。
黑盒测试又可以被称为基于规格的测试。
示意图:
测试类型:
(1)功能性测试:一种是顺序测试每个程序特性或功能,另一种途径是一个模块一个模块的测试,即每个功能在其最先调用的地方被测试;
(2)容量测试:检测软件在处理海量数据时的局限性,能发现系统效率方面的问题;
(3)负载测试:检测系统在一个很短时间内处理一个巨大的数据或执行许多功能调用上的能力;
(4)恢复性测试:主要保证系统在崩溃后能够恢复外部数据的能力。
特点:
(1)对于更大的代码单元来说(子系统甚至系统级)比白盒测试效率更高;
(2)测试人员不需要了解实现的细节,包括特定的编程语言;
(3)从用户的视角进行测试,很容易被大家理解和接受;
(4)有助于暴露任何规格不一致或有歧义的问题。
2. 白盒测试
白盒测试是依据被测软件分析程序内部构造,并根据内部构造设计用例,来对内部控制流程进行测试,可完全不顾程序的整体功能实现情况。
白盒测试是基于程序结构的逻辑驱动测试。又可以称为玻璃盒测试,透明盒测试,开放盒测试,结构化测试。
示意图:
目的:
(1)白盒测试一般在测试前期进行,通过达到一定的逻辑覆盖率指标,使得软件内部逻辑控制结构上的问题能基本得到消除;
(2)白盒测试能保证内部逻辑结构达到一定的覆盖程度,能够给与软件代码质量更大的保证;
(3)白盒测试发现问题后解决问题的成本较低。
常用技术:
静态分析:控制流分析,数据流分析,信息流分析等;
动态分析:逻辑覆盖测试(分支测试,路径测试等),程序插装等;
逻辑覆盖方法:语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,条件组合覆盖,路径覆盖等。
3. 灰盒测试
(1)根据例用的被测对象信息的不同,会采用不同的方法进行测试;
(2)例用被测对象的整体特性信息,采用黑盒测试方法;
(3)利用被测对象的内部具体实现信息,采用白盒测试方法;
(4)如果即利用被测对象的整体特性信息,又利用被测对象的内部具体实现信息,采用的就是灰盒测试方法。两种信息占的比例不同,相应的灰度就不同。完全是整体特性信息,就是黑盒测试,完全是内部具体实现信息,就是白盒测试。
(5)典型的灰盒测试比如集成测试和系统测试时借助log信息。
4. 静态测试
定义:不运行被测试的软件系统,而是采用其他手段和技术对被测试的软件进行检测的一种测试技术。例如:代码走读,文档评审,程序分析等。常用技术有静态分析技术。
静态分析技术:
定义:是一种不通过执行程序而分析程序执行的技术;
功能:检查软件的表示和描述是否一致,没有冲突或者没有歧义,它瞄准的是纠正软件系统在描述,表示和规格上的错误,因此是任何进一步测试执行的前提;
主要有三种不同的程序测试可能性:
(1)考虑程序是否满足编码规则,语法上是否具有一致性和完整性;
(2)考虑文档描述是否规范,准确,便于查阅;
(3)考虑程序和文档之间的一致性。
5. 动态测试
定义:按照预先设计的数据和步骤去运行被测软件系统,从而对被测软件系统进行检测的一种测试技术。常用技术有动态分析技术。
动态分析技术:
定义:是一种动态的检测技术,在调试器中运行目标程序,通过观察执行过程中程序的运行状态、内存使用状况以及寄存器的值等以发现潜在问题,寻找漏洞。
功能:从代码流和数据流两方面入手:通过设置断点动态跟踪目标程序代码流,以检测有缺陷的函数调用及其参数;对数据流进行双向分析,通过构造特殊数据触发潜在错误并对结果进行分析。动态分析需要借助调试器工具,SoftIce、OllyDbg、WinDbg等是比较强大的动态跟踪调试器。
常用方法:输入追踪测试法、堆栈比较法、故障注入分析法。
6. 人工测试
定义:测试活动(如评审,测试设计,测试执行等)由人来完成,狭义上是指测试执行由人工完成,这是最基本的测试形式。
7. 自动化测试
定义:一般是指通过计算机模拟人的测试行为,替代人的测试活动,狭义上是指测试执行由计算机来完成。
意义:
(1)对程序新版本运行前一版本执行的测试,提高回归测试效率;
(2)可以运行更多更频繁的测试,比如冒烟测试;
(3)可以执行手工测试困难或不可能做的测试,比如大量的重复操作或者集成测试;
(4)更好地利用资源,比如测试仪器或者被测对象。
局限:
(1)不能取代手工测试,自动化测试只能提高测试效率,不能提高测试有效性,即不可能发现更多的缺陷;
(2)手工测试比自动化测试发现的缺陷更多;
(3)对测试设计依赖性极大,测试设计的不好会遗漏问题;
(4)自动化测试对软件开发具有很大的依赖性,开发商出现变更可能导致前面的自动化测试完全失效;
(5)工具本身并不具备想象力,工具不具有智能。
二. 软件测试流程
1. 测试阶段和产出物
测试计划阶段--测试计划;
测试设计阶段--测试方案;
测试实现阶段--测试用例,测试流程;
测试执行阶段--测试报告。
2. 主要的测试文档
(1)测试计划:指明测试范围,方法,资源,以及相应测试活动的时间进度安排表的文档;
(2)测试方案:指明为完成软件或软件集成特性的测试而进行的测试设计方法的细节文档;
(3)测试用例:指明为完成一个测试项的测试输入,预期结果,测试执行条件等因素的文档;
(4)测试规程:指明执行测试时测试活动序列的文档;
(5)测试报告:指明执行测试结果的文档;
(6)测试日报:每天测试执行情况的记录和总结。
3. 系统测试过程与开发阶段示意图
4. 系统测试各阶段的输入,输出
5. 测试工程师系统测试各阶段任务
(1)软件测试阶段:评审软件需求规格说明书;
(2)软件设计阶段:评审软件概要设计说明书,软件详细设计说明书,协助编写系统测试计划;
(3)软件编码阶段:设计系统测试用例,准备测试资源(测试工具,测试环境等),开发测试脚本,开发测试工具,准备测试数据;
(4)软件测试阶段:执行测试用例,提交缺陷单,跟踪缺陷,回归测试,提交测试报告。
三. 软件测试质量
定义:软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。人们通过改善软件的各种质量属性,从而提高软件的整体质量。
属性:正确性,精确性,健壮性,可靠性,容错性,性能,易用性,安全性,可扩展性,可复用性,兼容性,可移植性,可测试性,可维护性,灵活性等。
质量模型:
软件测试与QA的区别:
(1)从性质上看:测试属于技术的工作;QA属于管理的工作。
(2)从对象上看:测试的对象是软件研发产品,大多数工作是对研发领域的检验;QA的对象是整个软件过程,覆盖各个领域。
(3)从手段上看:测试以事后检查为主;QA强调的是缺陷预防。
质量保证活动与软件测试的关系示意图: