面试常见问题
什么是软件测试?
正向思维:通过程序是否正常运行,以及是否达到了用户预期的需求
逆向思维:通过执行测试用例发现程序的错误和缺陷
软件测试的目的是什么?
找出软件中潜在的错误和缺陷,通过修复错误和缺陷提高软件的质量,回避软件发布后因缺陷或错误带来的商业风险。
黑盒、白盒、灰盒的区别:
黑盒测试(数据驱动测试,功能测试):不考虑程序内部的逻辑结构内部特性,只依据程序的规格说明书,检查程序的功能是否符合它的功能说明。
白盒测试(逻辑驱动测试,结构测试):已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。
灰盒测试:看系统接口是否满足要求。
负载测试、压力测试、性能测试、容量测试的区别:
负载测试:通过加压,观察系统的响应事件、吞吐量等,知道系统的极限性能指标,发现系统可能存在的性能瓶颈、内存泄露、不能实时同步等问题。
压力测试:通过增加负载,查看系统在峰值使用情况下的操作行为,容错、可恢复能力,发现隐患。压力测试分为高负载下的长时间的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试
性能测试:获得系统在某种特定条件下的性能指标数据。
容量测试:系统承受大量数据,测试系统是否能够正常处理,通常和数据库有关。
什么是回归测试?
抽象说法:在程序有修改的情况下,保证原有功能正常。
具体说法:测试发现bug --> 开发修改后重新打包 --> 重新测试,保证程序在修改bug之后正常运行,且不会带来新的错误。
什么是冒烟测试?
新版本验证测试,主要确认新版本是否存在致命性bug,功能可以正常运行,不会影响下一轮测试。不要求覆盖面有多广,但是要保证被测对象的主功能点得到测试,保证所有被修改过以及修改相关的功能都是可用的,若都通过则可以进行系统测试。
系统测试的16个测试策略:
功能测试、安全测试、容量测试、性能测试、压力测试、稳定性测试、可用性测试、健壮性测试、GUI测试、安装测试、配置测试、异常测试、备份测试、文档测试、在线帮助测试、网络测试
测试流程:
(1)测试人员参与需求评审、交互评审,理解需求,进行需求分析;
(2)测试负责人编写测试计划,分配测试任务,评估测试周期;
(3)测试人员整理交互or需求疑难点,确认异常场景or特殊情况下的交互细节,最好能画出新功能的数据量图&流程图;
(4)测试人员编写测试点,转化测试用例,评审测试点or测试用例;
(5)开发提测前,开发自行走查,产品视觉验收,若有必要测试可接入冒烟测试;
(6)提测阶段,缺陷管理,发现bug,提交bug;
(7)执行新功能测试用例,主流程回归测试,交叉测试,拓展测试;
(8)预发布环境验证;
(9)线上环境验证;
黑盒测试主要是为了发现以下错误:
(1)是否有不正确或遗漏的功能
(2)在接口上,输入是否能正确的接受,能否输出正确的结果
(3)是否有数据结构错误或外部信息(例如数据文件)访问错误
(4)性能上是否能够满足要求
(5)是否有初始化或终止性错误
黑盒测试缺点:
(1)不可能覆盖所有的代码,覆盖率较低;
(2)部分路径不能测试到,不能测试程序中隐藏的错误;
(3)自动化测试的复用性较低
黑盒测试方法:
等价类、边界值、场景法、错误推测、因果图、判定表
自动化测试相关:
自动化测试优点:
(1)回归测试更方便,由于回归测试的动作和用例是完全设计好,测试结果也是可以预料的,将回归测试自动运行,可以提高测试效率缩短回归测试时间。
(2)测试具有一致性和可重复性,每次测试的结果和执行的内容的一致性可以得到保证,达到测试的可重复的效果。
(3)测试的执行可靠性,按脚本执行,后续定位复现有明确的路径可循。
(4)资源利用率高,人力成本低。
自动化测试缺点:
(1)手工测试比自动化测试发现的缺陷更多。
(2)只适合回归测试。
(3)手工测试编写时间少于测试脚本编写时间。
(4)手动测试可以考人的想象力去测试,而工具是死的。
总结:自动化测试是对手工测试的一种补充,自动化测试不可能完全替代手工测试,因为很多数据的正确性、界面是否美观、业务逻辑的满足程度等都离不开测试人员的人工判断。
app常见测试点:
(1)安装卸载测试
(2)在线升级测试:在线升级,升级后可正常使用
(3)兼容性测试:不同系统(安卓/IOS),安卓不同版本,手机不同尺寸,不同分辨率
(4)异常测试:断网、断电、服务器异常情况下,客户端是否正常处理
(5)交互性测试:来电、来短信、低电量提示、插拔充电线会不会影响App
(6)功能测试:检查功能是否符合需求,涉及 UI 层、接口、数据、服务端、代码逻辑等
(7)稳定性测试:通过 Monkey 命令行工具,对正在开发的应用程序进行压测,向系统发送伪随机的用户事件流(按键输入、触屏输入、手势输入)进行压测
(8)网络测试:不同网络场景,wifi、3G、4G、电信、移动、联通、弱网
(9)易用性测试:操作简单,符合用户使用习惯
(10)性能测试:App运行时设备的CPU、GPU、流量、耗电量、响应时间等
静态测试和动态测试的区别:
静态测试:不运行被测程序,通过评审文档和阅读代码等方式测试软件
动态测试:通过运行被测程序,检查运行结果与预期结果的差异,通常使用白盒和黑盒测试从不同角度设计用例来查找代码中的错误
什么是需求文档测试:
测试需求中是否存在逻辑矛盾,需求在技术上是否可以实现。
什么是设计文档测试:
测试设计是否符合全部需求,以及设计是否合理。
软件质量模型(6大特性):
(1)功能性:功能满足需求
(2)可靠性:容错性、易恢复
(3)易用性:易学易操作,提示易懂,有用户手册
(4)效率:响应时间长短,资源利用率
(5)维护性:有日志可查,稳定性(版本更新后不会因为修改而引入新的问题)
(6)可移植性:兼容性、易安装
系统测试范围/策略/方法(8大方法):
(1)功能测试
(2)性能测试
(3)用户体验测试
(4)UI 测试
(5)兼容性测试
(6)安装测试
(7)文档测试
(8)稳定性测试
App测试与Web测试的区别:
(1)系统架构不同,Web端的服务更新后,客户端会自动同步更新;如果是App修改了服务端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。
(2)兼容性不同:Web端要考虑不同的浏览器,比如:IE、谷歌、火狐;App的兼容性要考虑选择主流的机型,不同的分辨率,不同的操作系统。
(3)性能方面:App要考虑电量、流量、GPU渲染等。
(4)App要考虑安装、卸载、升级测试,交叉事件测试,前后台切换,弱网测试。
(5)App要考虑界面操作,如:横竖屏切换,多点触控。
软件设计文档内容:
(1)软件架构:描述软件的体系结构、模块划分和依赖关系等。
(2)类图:展示软件中的类及其之间的关系,以便了解数据结构和设计模式。
(3)流程图:描述软件的业务流程和逻辑流程,以便了解程序的执行过程。
(4)数据模型:描述软件的数据结构、关系和约束,以便了解数据的流向和存储。
(5)接口设计:描述软件的内外部接口、参数和返回值等,以便了解模块之间的交互方式。
(6)数据库设计:描述数据库的结构、表关系和数据类型,以便了解数据的存储和访问方式