测试金字塔和业务测试分析
第一层:UI界面层,包含功能验证测试、兼容性与用户测试,兼容性测试主要是对硬件环境(设备)和软件环境(系统)进行测试,用户测试例如验收测试;
【#|软件测试(测试阶段分类)】第二层:业务逻辑层,包含客户端模拟测试(例如A为注册模块,B为登录模块,我们知道要先注册用户名和密码才能进行登录,但是此时注册模块还没有完成,要对登录模块进行测试,因此会写一个驱动生成用户名和密码,就可以对登录模块进行测试)、内外接口测试(内部接口和外部接口是相对而言的)、SDK接口测试(SDK就是软件中第三方开发工具包,这些工具一般都很成熟,之所以要进行测试的原因是看这个工具的功能是不是我们想要的,并且要看系统调用这些接口是不是能够匹配);
第三层:数据处理层,包含单元测试和CodeReview(代码评审)按开发阶段划分(重点)
- 单元测试
单元测试是对单元模块进行测试,测试对象是模块;
测试阶段:编码后或者编码前(TDD:测试驱动开发);
测试对象:最小模块;
测试人员:白盒测试人员或者开发工程师;
测试依据:代码和注释+详细设计文档;(依据软件测试V模型来对应)
测试方法:白盒测试;
测试内容:模块接口测试、局部数据结构测试、路径测试(例如if else,switch)、错误处理测试、边界测试; - 集成测试
集成测试就是联合测试,将程序模块采用一定的集成策略组装起来,对系统接口和集成后的功能进行测试;
测试阶段:一般单元测试之后;
测试对象:模块间的接口;
测试人员:白盒测试工程师或者开发工程师;
测试依据:单元测试模块+概要设计文档;(依照软件测试V模型进行对应)
测试方法:黑盒测试+白盒测试;
测试内容:模块之间数据传输(接口)、模块之间功能冲突(集成后这个模块的功能是否与另一是模块冲突)、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响; - 系统测试
也就是将软件系统看成是一个系统的测试,只关心输入和输出,包含对功能、性能以及软件所运行的软硬件环境进行测试,包含回归测试和冒烟测试(这两个不止在系统测试阶段)
测试阶段:集成测试通过之后;
测试对象:整个系统(软硬件);
测试人员:黑盒测试工程师;
测试依据:需求规格说明文档;
测试方法:黑盒测试;
测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性;
1、回归测试
回归测试指的是修改了旧代码后,重新进行测试来确认修改没有引入新的错误或者导致其它代码产生错误;
回归测试在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试,因此成本比较大,因此要选择正确的回归测试策略,例如实现自动化测试;
2、冒烟测试
冒烟测试测试的对象时每一个新编译的需要正式测试的软件版本,目的就是确认软件基本功能正常,可以进行后续的测试工作; - 验收测试
验收测试是部署软件之前的最后一步测试,它是为了确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求;
测试阶段:系统测试通过之后;
测试对象:整个系统(软硬件);
测试人员:最终用户或者需求方;
测试依据:用户需求、验收标准;
测试方法:黑盒测试;
测试内容:同系统测试;
- α测试
α测试是由一个用户在开发环境下进行的测试,也就是将用户或者除了开发人员和测试人员以外的人请来测试,他有一定的局限性,即客户受制于开发环境的影响; - β测试
β测试是一种验收测试,β5测试由软件的最终用户们在一个或者多个场所进行;
α测试与β测试的区别是:
α测试是把用户请到开发方的场所来进行测试,β测试是指在一个或者多个用户的场所进行测试;α测试先于β测试执行; - 第三方测试
第三方测试是第三方软件公司或者机构客观进行评价软件;
- 静态测试
静态测试是指不运行程序,只分析或者检查程序的语法、结构、过程、接口等来检查程序的正确性,对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。例如代码静态分析和文档测试都属于静态测试 - 动态测试
动态测试是运行程序,检查运行结果和预期结果的差异,并分析运行效率、正确性和健壮性等,这种方法由三部分组成:构造测试用例,执行程序,分析程序的输出结果;大多数软件测试工作都属于动态测试;
- 手工测试
手工测试就是人工一个一个输入用例,然后观察结果;
优缺点:
优点:自动化测试无法完全替代手工测试,缺点是执行效率慢,量大易错; - 自动化测试
自动化测试就是在预设条件下运行系统或应用程序,评估运行结果,也就是将人为驱动的测试行为转化为机器执行;
自动化测试适用于回归测试和兼容性测试的情况下;
常用的自动化框架:
Python—unittest pytest;
java-----TestNG;
Robot framwork;
常用的自动化测试工具:
selenium(web自动化)、loadrunner、jmeter、appium(手机)soupui(接口)
自动化测试的流程:
(1)确定和搭建测试框架;
(2)编写测试用例,把测试用例转换为自动化测试脚本;
(3)执行自动化测试脚本;
(4)输出执行结果报告;
(5)完善自动化测试脚本;
- 黑盒测试
黑盒测试是将软件和程序当做一个黑色的盒子,不关心软件和程序内部结构,只关心软件的输入和输出数据是否符合需求;
例如用到黑盒测试的测试用例设计方法有等价类、边界值、因果图法、正交排列法、场景设计法、错误猜测法;
按照开发阶段划分,用到黑盒测试的测试阶段有集成测试、系统测试、验收测试、冒烟测试; - 白盒测试
白盒测试又称为结构测试,他指的是打开盒子,要研究代码的源代码和程序结果;
白盒测试的测试方法:
(1)逻辑覆盖
(2)循环覆盖
(3)路径覆盖
一般主要的测试点有:
语句覆盖、判定条件、路径(if else,switch)、判定组合、路径组合
按照开发阶段划分,用到白盒测试的测试阶段有单元测试、集成测试; - 灰盒测试
灰盒测试是介于白盒测试和黑盒测试之间的一种测试,多用于集成测试阶段,不仅关心输入输出的正确性,同时也关注程序内部的情况;
- 国际化测试
- 本地化测试
软件本地化:开发软件时利用语言技术和工程技术,使得软件可以适用不同的语言;
软件国际化:开发软件时使得我们的软件能够适用不同的语言和文化风俗,不用修改源程序就可以使得软件本地化的一种技术;
- 业务测试
业务测试是测试人员将系统各个模块串接起来运行,模拟真实用户实际的工作流程,满足用户需求定义的功能来进行测试的过程;他关注的是需求和用户; - 界面测试
界面测试是测试用户界面的功能模块的布局是否合理,整体风格是否一致,各个控件的放置位置是否符合用户使用习惯,此外还要测试界面操作便捷性、界面美观、文字图片是否完美等; - 容错性测试
容错性测试是检查软件在异常条件下自身是否具有防护性的措施或某种灾难性回复的手段,当系统出错时,能否在指定时间间隔内修正错误并重新启动系统,容错性测试包含:
(1)输入异常数据或进行异常操作,以检验系统的保护性,如果系统的容错性号,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃;
(2)灾难恢复性测试,通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失,系统和数据能否能尽快恢复; - 文档测试
文档测试关注文档的术语、文档的正确性、文档的完整性、文档的一致性、文档的易用性; - 兼容性测试
兼容性主要是指软件之间能否很好的运作,会不会有影响、软件和硬件之间能否发挥很好的效率工作,会不会影响导致系统的崩溃;
例如:
平台测试;
浏览器测试:不同浏览器在css、js解析上的不同会导致页面的显示不同;
软件本身能否向前或者向后兼容:向前兼容指的是软件增加的功能,向后兼容指的是本次迭代的内容会不会影响后期增加的功能;
测试软件能否与其他相关的软件兼容—相互同步;
数据兼容性测试:例如淘宝、支付宝之间,淘宝订单在支付宝进行确认在淘宝中也会被确认; - 易用性测试
易用性是交互的适应性、功能性和有效性的集中体现,它属于人体工程学的范畴;也要从直观性、舒适性、灵活性考虑; - 安装测试
也就是测试程序的安装和卸载,例如没有网络、WiFi、4G的情况下安装程序,暂停看能不能恢复; - 安全测试
例如qq收藏图片检测图片有无病毒,防止攻击,数据级别的测试(日志安全性测试,SQL注入,xss等) - 性能测试
性能测试首先想到的就是时间,例如单位时间用户负载量,用户响应:一般用户响应时间在3s以内,用户能承受的负载量下能否稳定运行,还有用户能否有舒服的体验;
检验是否满足需求规格说明书中规定的性能,通常表现在:
对资源利用进行的精确度量;
对执行间隔:用户向系统发送请求,服务器能很快地处理请求,说明性能较好;
日志事件;
响应时间:用户发送一个请求到收到回复这一段时间;
吞吐量:系统每秒钟处理信息的数量,处理精度等进行的检测; - 内存泄漏测试
内存泄漏产生的原因一般有:
(1)分配完了内存忘了回收;
(2)程序写法有问题,造成没有办法回收;
(3)某些API函数的使用不正确,造成内存泄漏;
(4)没有及时释放;
检测方法:
(1)对于不同的程序可以使用不同的方法来检查,也可以使用一些工具;
(2)通过代码扫描分析工具来检查;
推荐阅读
- 软件测试|软件测试知识点及面试题目汇总
- #|Spring分布式缓存
- 测试用例|如何统一接口测试的功能、自动化和性能测试用例
- #|html最全知识点(超级详细)
- 软件测试面试必问(fiddler 在工作中有哪些应用(怎么破?))
- 修仙之道|2D回合制游戏开发相关
- #|Spring Framework
- 软件测试|目前最受欢迎的12个Python web框架,你用过几个()
- 做软件测试需要一直培养成长的技能