软件测试基础:测试分类详解
软件测试基础:测试分类详解
课程大纲
1.两种架构(Architecture)
1.1 B/S(Browser/Server)
浏览器服务器架构(大体3步):用户通过浏览器向服务器发出请求,服务器处理请求,将结果通过网络返回到用户浏览器展示。服务器内部,会有应用层处理请求,操作数据库(增删改查),返回用户请求的数据。
通信方式
标准的 Web 协议:http/https。
举例
各种网站、管理系统、云平台、办公协作平台(蓝湖、即时设计……)。
1.2 C/S(Client/Server)
客户端服务器架构:用户在电脑手机等设备上安装客户端,通过客户端将请求发送给服务器端进行处理,服务器端进行计算和处理后将结果返回给客户端。
服务器内部,会有应用层处理请求,操作数据库(增删改查),返回用户请求的数据。
通信方式
socket协议或其他协议。
举例
电脑:QQ、微信、大型游戏。
手机:各种app。
2.软件测试工程师大方向
1.业务测试
web端、移动端(app、小程序、h5)
2.测试开发
服务端测试开发、UI自动化测试、接口自动化测试、性能测试、渗透测试(安全测试)……
大数据测试、AI算法测试、自动驾驶……
3.测试类型
3.1 按开发阶段分
1.单元测试
代码模块(程序的最小单位)的测试,一般由开发完成。从程序内部结构出发设计用例,验证是否实现设计说明书中的功能、性能、接口、约束条件等。各模块可平行独立进行。
2.集成测试
模块组装到一起后,测试模块之间、子系统之间是否互相影响功能,即测试系统内部接口。
3.系统测试
整个系统开发、集成完毕后进行测试,也就是常见的功能测试阶段。
4.验收测试
交付用户前,与客户一起进行,向用户演示、验证软件与需求一致(功能、性能、安全性等)。
3.2 按是否运行程序分
1.静态测试(static test)
不运行程序,不对软件进行输入输出对比预期的验证,只静态地检查程序代码、界面或文档中可能存在的错误。
常见方法:
a.文档测试,验证用户手册和需求说明是否符合用户的实际需求。
b.代码测试,验证代码是否符合相应的标准和规范。
c.界面测试,验证软件的实际界面与需求中的说明是否相符。
2.动态测试(dynamic test)
运行程序,输入数据后查看输出数据是否与预期一致。常见方法:功能测试、性能测试……
3.3 按是否看代码分
1.黑盒测试
不看代码,直接根据输入输出判断软件是否有错误。测试方法:功能测试、UI测试(界面测试)、兼容性测试……
2.白盒测试
又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。测试方法:语句覆盖、判定覆盖、路径覆盖、条件覆盖、判定条件覆盖、条件组合覆盖。
注意:白盒测试可能静态或动态,黑盒也是;反之亦然。
3.灰盒测试
介于白盒测试与黑盒测试之间,多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。
3.4 按是否手工执行分
1.手工测试
人工执行测试用例来识别软件中的错误、问题和缺陷。
2.自动化测试
编写脚本自动执行测试用例来保证产品主体功能正确和完整。
3.5 其他
1.文档测试(Documentation Testing)
主要指对软件文档进行审核、验证,确保文档的质量和准确性(完整性、正确性、一致性、易理解性、易浏览性)。
2.冒烟测试(Smoke testing)
又叫“版本验证测试”、“高压线测试”。来源:硬件开发完成后,通电看机器是否冒烟,初步验证是否有问题。开发与测试共同进行。新版本开发完成后 ,验证基本/核心的功能和流程能否走通、是否有致命性和阻塞流程bug。通过冒烟,则正式转测,否则打回到开发流程。(可以通过自动化测试提效。)
3.回归测试(Regression test)
重复执行以前(版本)的全部或部分的相同测试用例,验证软件修改后未影响原有功能。回归策略有2种:
① 完全回归,运行所有测试用例。最保险、成本最高。用例库不断变大,成本难以控制。
② 部分回归,运行最重要的、关键的、最频繁使用的和可疑的测试用例。有改动的模块或接口,功能未改动部分的测试用例。回归效率更高。
4.交叉测试
测试人员相互交换测试的模块。优点:防止漏测;避免思维固化,保持测试新鲜感。注意项:用例管理;明确任务分配;测试人员熟悉系统;测试结果留存,体现在用例中。
5.随机测试(Ad-hoc testing)
根据测试者的经验对软件进行功能和性能抽查。是执行测试用例的重要补充手段,是保证测试覆盖完整性的有效方式和过程。对被测软件的一些重要功能进行复测,对于软件更新和新增加的功能要重点测试。重点对一些特殊点情况点、特殊的使用环境、并发性、进行检查。尤其对以前测试发现的重大Bug,进行再次测试。可以结合回归测试(Regressive testing)一起进行。
6.探索性测试(Exploratory Testing)
基于敏捷模型的软件测试风格,不是一种具体的软件测试技术。
7.安全测试(Security Testing)
验证系统安全性。3种方法:
① 代码漏扫,扫描代码安全漏洞;
② 渗透测试,使用自动化工具或者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时刻所存在的安全漏洞。真实有效,一般找出来的问题都是正确的,也是较为严重的。一个致命的缺点:模拟的测试数据只能到达有限的测试点,覆盖率很低。
③ 程序数据扫描。
8.alpha测试(开发者内测)
非正式验收测试,类似于用户验收测试,是另一种质量控制。软件开发完成初期到测试完成之间均可。由熟悉产品预期功能的产品开发人员和工程师执行。使用白盒测试和黑盒测试技术来执行。通过发现和修复在开发初始阶段未解决的故障来微调软件产品,尤其注重界面和特色。
9.beta测试(用户内测)
软件、产品或服务在正式发布之前进行的最后一轮测试。内部测试和产品发布之间进行。目标受众抽样试用产品。发现和修复潜在的问题和Bug。缩小产品与用户需求之间的差距:获取用户反馈,从而改进和优化产品。
10.兼容性测试(Compatibility testing)
电脑系统:Linux、Windows、Mac……
移动端系统:iOS、android、windows……
手机品牌、型号:按照市场份额选购测试机、三方测试平台。
分辨率:按照市场份额测试。
web不同浏览器:chrome、Firefox、ie……
手机不同浏览器……