答:软件测试是在规定的条件下对程序进行操作,以发现错误,对软件质量进行评估。
答:软件测试的目的在于(1)发现软件的缺陷和错误(2)保证软件的质量,确保能够满足用户以及产品的需求。
(标重点)软件测试的目的是为了找bug,并不是验证软件没有bug。
白盒测试是测试人员要了解程序结构和处理过程,按照程序内部逻辑测试程序,检查程序中的每条通路是否按照预定要求正确工作.它主要的针对被测程序的源代码。
不太需要关注程序功能
黑盒测试又称为功能测试或数据驱动测试)是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。
答:
静态测试:不用运行程序的测试,如文档测试、代码检查等
动态测试:需要执行代码,接口测试、覆盖率分析、性能分析、内存分析等。
逻辑覆盖法:主要包括语句覆盖,判断覆盖,条件覆盖,判断/条件覆盖,条件组合覆盖,路径覆盖等。
六种覆盖标准发现错误的能力由弱到强的变化:
答:等价划分类,边界值分析,错误推测法、判定表分析法、因果图法、正交试验设计法、场景法、功能图分析法等。
等价类:等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序
中的错误都是等效的.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.
等价类划分可有两种不同的情况:有效等价类和无效等价类.
边界值分析法:边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.(内点,上点,离点)
错误猜测法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法.
判定表分析法:等价类未考虑输入条件之间的联系,相互组合等.无效类每个用例只出现一次,不能覆盖多个无效等价类并存的情况。不同的组合用二进制解决。(条件桩和动作桩)
因果图法:输入之间有相互的组合关系,且输入和输出之间有相互的制约和依赖关系,是判定表的复杂版,最终生成的就是判定表,根本上等价
正交表分析法:有时候,大量的参数的组合而引起测试用例数量上的激增,同时,这些测试用例并没有明显的优先级上的差距,而测试人员又无法完成这么多数量的测试,就可以通过正交表来进行缩减一些用例,从而达到尽量少的用例覆盖尽量大的范围的可能性。(打印机)
场景法:指根据用户场景来模拟用户的操作步骤,一般借助流程图来确定基本流和备选流(淘宝下单流程)。
状态图法:针对流程分析法不跨多个界面,状态图法保证每一个功能/状态的可达项都被覆盖,但对无效的路径无法覆盖(MP3).
答:灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段。目前互联网的测试大多数都是灰盒测试。
答:
按照软件的生命周期划分:单元测试、集成测试、系统测试、回归测试、验收测试。
按照测试关注点划分:功能测试、性能测试、稳定性测试、易用性测试、安全性测试。
按照测试实施者划分:开发方测试(α测试)、用户测试(β测试)、第三方测试。
按照技术/测试用例设计划分:白盒测试、黑盒测试、灰盒测试。
按照分析方法划分:静态测试、动态测试。
按照测试执行方式划分:手工测试、自动化测试。
按照测试对象划分:程序测试、文档测试。
答:完成最小的软件设计单元(模块)的验证工作,确保模块被正确编码。通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早发现和解决不易显现的错误。
答:这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,系统测试能够对软件所有功能进行功能测试,能够覆盖系统所有联合的部件,是针对整个产品系统进行的测试,能够验证系统是否满足需求规格的定义,因此,我认为系统测试很重要。
答:
区别:
应用场景:
答:
需要的知识:
软件测试基础理论知识,如黑盒测试、白盒测试等;
编程语言基础,如C/C++、java、python等;
自动化测试工具,如Selenium、Appium等;
计算机基础知识,如数据库、Linux、计算机网络等;
测试卡框架,如JUnit、Pytest、Unittest等。
具备的能力:
业务分析能力、缺陷洞察能力、团队协作能力、专业技术能力、逻辑思考能力、问题解决能力、沟通表达能力和宏观把控能力。
答:
手工测试缺点:
手工测试的优点:
自动化测试的缺点:
自动化测试的优点:
答:
定义:
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。
前提条件:
实施自动化测试之前需要对软件开发过程进行分析,以观察其是否适合使用自动化测试。通常需要同时满足以下条件:
答:
答:早发现问题和发现别人无法发现的问题。
答:测试和开发可以按照V模型或W模型的方式进行结合。但应该按照W模型的方式进行结合比较合理。
V模型:
测试过程加在开发过程的后半段,比较被动。
W模型:
测试提前,甚至和开发是同步进行,测试不仅是程序,还包括需求和设计。W模型有利于尽早地全面的发现问题,降低软件开发的成本,风险前置。
答:
答:
按W模型:
需求测试 -> 概要设计测试 -> 详细设计测试 -> 单元测试 -> 集成测试 -> 系统测试 -> 验收测试
我工作中实际测试流程:
需求评审 -> 技术评审 -> case评审 -> 开发自测以及冒烟测试 -> 整体提测(集成测试) -> 回归测试 -> 系统测试 -> 验收测试
答:
答:两个维度去划分
从外部看,主要有:
1.吞吐量:每秒钟系统能够处理的请求数,任务数
2.响应时间:服务处理一个请求或一个任务的耗时
3.错误率:一批请求中结果出错的请求所占比例
从服务器的角度看,性能测试关注CPU、内存、服务器负载、网络、磁盘IO
可以采用性能测试工具(WeTest服务器性能),该工具是腾讯wetest团队出品,使用起来简单方便,但测试功能相当强大,能提供10W+以上的并发量,定位性能拐点,测出服务器性能最大并发。
答:内存、CPU、流量、电量、启动速度、滑动速度、界面切换速度、与服务器交互的网络速度。
接口测试:postman
性能测试:jmeter
抓包工具:chales、fiddler
UI自动化:uiautomator2、appium、atx
稳定性测试:monkey、maxim、uicrawler、appcrawler
兼容性测试:wetest、testin
内存、cpu、电量测试:GT、soloPi
弱网测试:chales
答:
复杂版:
简单版:
答:
α测试:在受控的环境下进行,由用户在开发者的场所进行,开发者指导用户测试,开发者负责记录发现的错误和使用中遇到的问题。
β 测试:在开发者不可控的环境下进行,由软件最终用户在一个或多个客户场所下进行,用户记录测试中遇到的问题,并定期上报给开发者。
传统的瀑布式开发,也就是从制定计划到需求分析到系统设计,到编码,到测试,到提交到运维大概这样的流程,要求每一个开发阶段都要做到最好。
迭代式开发,不要求每一个阶段的任务做的都是最完美的,而是明明知道还有很多不足的地方,却偏偏不去完善它,而是把主要功能先搭建起来为目的,以最短的时间,最少的损失先完成一个“不完美的成果物”直至提交。然后再通过客户或用户的反馈信息,在这个“不完美的成果物”上逐步进行完善。
螺旋开发,很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。
敏捷开发,相比迭代式开发两者都强调在较短的开发周期提交软件,但是,敏捷开发的周期可能更短,并且更加强调队伍中的高度协作。
敏捷开发也对应着有敏捷测试,测试环节贯穿整个迭代周期,从需求评审到发布上线,都离不开测试快速跟进。
测试左移:需求评审、用例设计、自测工具、静态代码扫描等;
测试中:业务测试,接口测试,性能测试等;
测试右移:稳定性测试,回归测试,灰度测试等
答:
压力测试是在高负载情况下,对系统稳定性进行测试。在高负载的情况下,系统出现异常的概率要比正常负载时要高。高负载包含长时间运行、大数据、高并发等情况。
在做压力测试时,一般要考虑环境因素、性能指标、运行时间等要素。
系统架构方面:
web项目,一般都是b/s架构,基于浏览器的
app项目,则是c/s的,必须要有客户端,用户需要安装客户端
web测试只要更新了服务器端,客户端就会同步更新。App项目则需要客户端和服务器都更新。
性能方面:
web页面主要会关注响应时间
而app则还需要关心流量、电量、CPU、GPU、Memory这些。
它们服务端的性能没有区别,都是一台服务器。
兼容方面:
web是基于浏览器的,所以要更倾向于浏览器和电脑硬件,电脑系统的方向的兼容
app测试则要看分辨率,屏幕尺寸,还要看设备系统。
web测试是基于浏览器的,所以不必考虑安装卸载。
而app是客户端的,则必须测试安装、更新、卸载。出了常规的安装、更新和卸载,还要考虑到异常场景,包括安装时的中断、弱网、安装后删除安装文件。此外app还有一些专项测试,如网络、适配性。