软件测试技术
软件的概念:信息处理系统的所有或部分程序、规程、规则和任何相关的文档的集合。
程序:源程序+目标程序
源程序:高级语言、汇编语言编写的程序
目标程序:源程序经编译或解释加工以后可以由计算机直接执行的程序
文档:用自然语言或形式化语言所编写的文字资料和图表,用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果以及使用方法。
软件测试包括:源程序+目标程序+文档
软件测试的定义:使用人工或者自动手段,来运行或测试某个系统的过程。其目的在于检测它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
测试过程(了解) 每一阶段都要从头来一次
需求占缺陷比例高达56%
需求可能存在的问题
需求文档编写有问题、功能不明确,流程不清晰,不正确占50%,余下50%是需求的遗漏造成的。
测试计划
测试计划的内容(了解):
确定测试范围
制定测试策略
测试资源安排
进度及安排
风险及对策
测试范围:功能,性能
策略:测试方法
资源进度安排:人,物,时间。细化到最小颗粒逐渐反推相加
测试用例设计
基于需求的测试用例设计:
验证需求是否正确,完整性,无二义性,并且逻辑一致性
从黑盒角度设计出充分并且必要的测试集
基于需求的测试需要工具支持,比如QC
测试用例设计:
等价类划分法
边界值分析法
因果图法
基本路径分析法
场景设计法
错误猜测试
正交分解法
……..
黑盒测试的基本概念:
穷举输入测试是不实现的。这就需要我们认真研究测试方法,以便能开发出尽可能少的测试用例,发现尽可能多的软件故障。
常用的黑盒测试方法有等价类划分,边界值分析,决策表测试等,每种方法各有所长,我们应针对软件开发项目的具体特点,选择合适的测试方法,有效地解决软件开发中的测试问题。
等价类划分:
等价类划分是一种典型的黑盒测试方法,它完全不考虑程序的内部结构,只根据程序规格说明书对输入范围进行划分,把所有可能的输入数据,即程序输入域划分为若干个互不相交的子集,称为等价类,然后从每个等价类中选取少数具有代表性的数据作为测试用例,进行测试。
在确立了等价类之后,可按下表的形式列出所有划分出的等价类表
等价类表
等价类划分+边界值法
因果图法
因果图法的原理
因果图法测试用例的设计步骤
- 确定软件规格中的原因和结果。分析规格说明中哪些是原因(即输入条件或输出条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
- 确定原因和结果之间的逻辑关系。分析软件规格说明书中的语义,找出原因与结果之间,原因与原因之间对应的关系,根据这些关系画出因果图。
- 确定因果中的各个约束。由于语法或环境的限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记 表明约束或限制条件。
- 把因果图转化为决策表
- 根据决策表设计测试用例
决策表法(不会考)
决策表通常由条件桩,条件项,动作桩和动作项4部分组成。
生成的决策表
测试执行中的关键
测试环境的准备
构建测试运行的平台和安装需要的软硬件系统。
人员的安排
不仅包括指定哪些人参加功能测试,哪些人参加系统测试和谁负责测试环境的维护等,还要包括人员的培训,知识的传递。
测试用例包括哪些内容:测试功能(目标),测试环境,测试要录入的数据,测试的具体操作,预期结果,不包括实际结果。
测试执行的准备
培训和知识传递
测试任务安排
测试环境的建立
测试环境的设置
测试自动化运行平台
白盒测试
静态白盒测试和动态白盒测试
静态白盒测试:主要测三个方面软件的设计,体系结构和代码。从而找出软件缺陷的过程,有时也称为结构化分析
原因:尽早发现软件错误;为黑盒测试人员提供建议
方式:1.确定问题2.遵守规则3.准备期间4.编写 告
方法:互查,走查,会议评审。
互查:小组之间成员之间交流互相交流源代码,怎么去调用源代码,对方如何调用处理,增进感情。
走查:每个项目会派出代表,或者项目主的每个成员都会出来陈述代码第一步怎么做,第二部怎么做……,或者用什么样的算法去提高底层的效率。
好处:检查代码的注释是否写好,效率是否有问题。把控整个小组的代码风格(如命名风格,申明变量的风格)。
会议评审:公司的高层会派一个专家组进驻你的项目,然后看看你的项目设定或者编码情况。但是成本高。因为专家进来之前对这个项目不是很熟悉,专家组需要一定的时间来了解这个项目。
动态白盒测试
检查代码并观察运行状况
利用查看代码(做什么)和实现方法(怎么做)得到的信息来确定哪些需要测试,哪些不要测试,如和开展测试
又称为结构化测试
动态白盒测试期望达到的目的
所有独立路径至少都能测试一遍
所有逻辑判断都能测试True和False两条路径;
所有循环结构都能测试到边界和循环域内的情况;
确保内部数据结构的有效性。
白盒测试主要的方法
逻辑覆盖测试法
基本路径测试法
循环路径覆盖法
逻辑覆盖测试法
语句覆盖:每条语句至少执行一次
判定覆盖:每个判定的每个分支至少执行一次
条件覆盖:每种条件下的语句都应该被执行
判定/条件覆盖:同时满足判定覆盖和条件覆盖
条件组合覆盖:每个判定中,各条件的每一种组合至少出现一次。
路径覆盖:程序中每一条可能的路径至少执行一次。
基本路径测试法(阅读代码->画出流程图->圈复杂度->设计测试用例->进行相关测试)
基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
路径是控制流程图中节点的顺序,始于入口节点,止于出口节点
程序可能通过的路径是:
路径 1:1 – 11
路径 2:1 – 2 – 3 – 4 – 5 – 10 – 1 – 11
路径 3:1 – 2 – 3 – 6 – 8 – 9 – 10 – 1 – 11
路径 4:1 – 2 – 3 – 6 – 7 – 9 – 10 – 1 – 11
圈复杂度的计算:
- 边-节点+2
- 封闭+1
- 矩阵模型(可以不用掌握)
循环路径覆盖法
五种测试用例
- 整个跳过循环
- 只有一次通过循环
- 两次通过循环
- m次通过循环,m
- n-1,n,n+1次通过循环
实际运用中,基本路径+循环使用的最多
将测试进行分段
测试越早发生越好
代码分段构件和测试,最后合在一起形成更大的部分
单元测试内容
运行单元程序有时需要基于被测单元的接口,开发相应的驱动模块和桩模块
驱动模块
驱动模块:对底层或子层模块进行测试所编写的调用这些模块的程序。
桩模块:对顶层或上层模块进行测试时所编写的替代下层模块的程序。
集成测试的模块
渐增式测试模块与非渐增式测试模块
非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒法(先测试最小模块,再测试最大的模块)
大棒方式的优缺点
好处:非常快捷
坏处:容易出错,一旦出现错误,不知道是哪个模块出现的错误
渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。当使用渐增方式把模块结合到程序中去时,有自顶向下和自底向上两种集成策略和混合
自顶向下的优缺点
优点:可以纵观全局,很快的发现软件测试文档出现的问题
自底向上的优缺点:
效率高,但是需要大量的驱动
自顶向下和自底向上集成策略
驱动程序/驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在集成测试中接收测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。
桩程序/桩模块(stub),也有人称为存根程序,用以测试被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检测被测模块与其下级模块的接口。
自动化性能测试原理
首先保证一个用户能正常访问,记录访问过程,记录通讯包
通过测试工具模拟更多用户同时发通讯包,后台无法区分是人或工具
通过测试工具模拟大量用户同时向后台发出请求,来达到产生压力和指定压力的目的,在产生指定压力的同时监控后台系统的资源消耗情况,监控客户端的请求处理时间
复制出客户端发往服务端的请求,模拟用户
关注的是通讯包,协议,不关心客户端形式
关于LoadRunner
LoadRunner是Mercury Interaction公司开发一款成熟的性能测试工具,LoardRunner作为性能测试的实现者,涉及性能测试流程,性能测试技术和软件系统架构等众多方面的知识点。
LoardRunner提供的解决方案

LoadRunner的过程
脚本生成器Virtual User Generator
VuGen提供了基于录制的可视化图形开发环境,可以方面简洁地生成用于负载的性能脚本。
压力调度和监控系统Controller
负责对整个负载的过程进行设置,制定负载的方式和周期,同时提供了系统监控的功能。
压力生成器Load Generator
负责将VuGen脚本复制成大量虚拟用户对系统生成负载。
结果分析工具Analysis
通过Analysis我们可以对负载生成后的相关数据进行整理分析。
自动化测试的步骤:
录制一个操作的过程,称为脚本
回放一下,验证脚本是否正确
脚本增强(参数化如密码,用户名。在脚本中设置检查点,检查运行过程中是否执行成功,如果成功了就会出现字符串或图片。)
设置自动化测试执行的策略
事务,设定我们的场景(一开始多少线程启动,做什么样的事情,到达某一时刻线程,其他一些零界点做什么事情,线程在什么时候停止,在什么时候再启动)在测试过程中观察参数的变化(相应时间,等)
分析 告,在 告中我们查看某个功能运行时间效率是否达到我们之前的设定,或者方差是我们期望的,否则进行调优。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!