软件测试类型

软件测试面试题 - 图1

常用测试方法

软件测试面试题 - 图2

系统测试方法

软件测试面试题 - 图3

什么是软件测试

软件测试是利⽤测试⼯具按照测试⽅法和流程对开发出来的产品进⾏功能、性能、安全等的测试。满⾜产品需求。

软件产品质量模型(ISO / IEC 9126)

  • 功能性:提供满足明确和隐含要求的功能的能力
  • 可靠性:在特定条件下使用时,软件产品呢维持规定的性能级别能力
    • 设备最好不要出故障
    • 设备出故障了,不要影响主要的功能和业务
    • 如果影响了主要功能和业务,系统可以尽快定位并恢复
  • 易用性:易懂、易学、易用、漂亮好看(用户体验好)
  • 效率:软件产品可提供适当的性能的能力,也就是产品的性能(单选、多选、全选)
  • 可维护性:产品可以被修改的能力。可以增加功能,可以更新。
  • 可移植性:跨越不同系统平台

    对一支笔从软件质量的体系进行分析要测哪些?

  • 功能: 是否可以写出字,字的颜色,字的粗细,笔的重量,笔的材质,笔的尺寸

  • 性能: 一支笔能连续写多久,从高处掉落会不会坏
  • 易用性: 是否美观,是否好握,书写是否舒服
  • 安全: 材质是否符合安全规范,是否对人体产生危害
  • 可移植性: 是否可以通过换笔芯继续使用。

    你是怎样保证软件质量的,也就是说你觉得怎样才能最大限度地保证软件质量?

测试并不能够最大限度的保证软件的质量,软件的高质量是开发和设计出来的,而不是测试出来的,它不仅要通过对软件开发流程的监控,使得软件开发的各个阶段都要按照指定的规程进行,通过对各个阶段产物的评审,对功能及配置的审计来达到开发的最优化。当然测试也是保证软件质量的一个重要方式,是软件质量保证工程的一个重要组成部分。

基于目前中国的国情,大多数公司的软件项目进度紧张、人员较少、需求文档根本没有或者很不规范,你认为在这种情况下怎样保证软件的质量?(大多数公司最想知道的就是在这种困难面前你该怎么保证软件的质量,因为这些公司一般就是这种情况—–既不想投入过多又想保证质量 )

出现以上的情况,如果仅仅想通过测试来提高软件质量,那几乎是不可能,原因是没有足够的时间让你去测试,少而不规范的文档导致测试需求无法细化何谈足够且有针对性进行测试。所以,作为公司质量保证的你应该先和项目经理确定符合项目本身最适合的软件生命周期模型(比如RUP的剪裁,原型法),明确项目的开发流程并督促项目组按照此流程开展工作,所有项目组成员(项目经理更加重要)都要制定出合理的工作计划,加强代码的单元测试,在客户既定的产品交付日期范围之内,进行产品的持续集成等等,如果时间允许可以再配合客户进行必要的系统功能测试。

编写测试计划的目的是?

使测试工作顺利进行;使项目参与人员沟通更舒畅;使测试工作更加系统化。

测试计划编写的六要素?

  • why——为什么要进行这些测试
  • what—测试哪些方面,不同阶段的工作内容
  • when—测试不同阶段的起止时间
  • where—相应文档,缺陷的存放位置,测试环境等
  • who—项目有关人员组成,安排哪些测试人员进行测试
  • how—如何去做,使用哪些测试工具以及测试方法进行测试。

    Web 测试与 App 测试

    软件测试流程

我们会先进行需求评审,根据需求并书写测试用例,然后和其他测试人员交换用例,以达到用例评审的目的,修改遗漏和错误的测试用例,等待开发提测,如果期间接口设计完成,我们会先对接口进行测试,开发提测以后,根据测试用例对项目进行测试,如果出现 Bug,会将Bug 提交给对应开发人员,开发人员修复以后,需要对 Bug 再次进行测试,如果涉及到其他功能,也需要对它们进行测试,如果还是有问题,继续提交给对应开发人员,直到整个项目测试完成。另外在项目上线前,需要对项目的重要功能进行测试,确保项目可以正常上线,上线后,对重要功能再次进行测试确保用户可以正常使用,同时也需要持续关注项目的各个功能是否正常。

App 测试流程

我们会先进行需求评审,然后根据需求书写测试用例,然后和其他测试人员交换用例,以达到用例评审的目的,修改遗漏和错误的测试用例,等待开发提测,开发提测后,我们会先进行冒烟测试,看一下项目的主流程是否可以走通,然后进行功能测试和接口测试,完成以后,对 App 的安装卸载进行测试包括 App 的覆盖安装和升级,再然后会对 App 在断网和弱网的环境下进行测试,最后对 App 的兼容性进行测试,全部测完以后对整个项目进行回归测试,以便项目可以正常上线。上线后,对重要功能再次进行测试确保用户可以正常使用,同时也需要持续关注项目的各个功能是否正常。

Web 测试与 App 测试的区别

  • 从功能测试的层面上来讲的话,App 测试、Web 测试 在流程和功能测试上是没有区别的。
  • 系统架构方面:
    • Web 项目,一般都是 b/s 架构,基于浏览器的
    • App 项目,则是 c/s 的,必须要有客户端,用户需要安装客户端。
    • Web 测试只要更新了服务器端,客户端就会同步会更新。App 项目则需要客户端和服务器都更新。
  • 性能方面:
    • Web 页面主要会关注响应时间
    • 而 App 则还需要关心流量、电量、CPU、GPU、Memory 这些。
    • 它们服务端的性能没区别,都是一台服务器。
  • 兼容方面:
    • Web 是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容 ,所以 Web 测试不必考虑安装卸载
    • App 测试是基于客户端的,则要看分辨率,屏幕尺寸,还要看设备系统。

所以 App 测试则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件
此外 App 还有一些专项测试:如网络、适配性。。。

App 测试特点

(除了按需求说明书外的 功能测试 之外还需要进行如下测试)

  • 适配性测试(也叫兼容性测试,不同的安卓版本,不同厂商,不同手机品牌)
  • 不同网络测试 (2G 网络/3G 网络/4G 网络/WIFI 网络)
  • 在线升级测试
  • 中断测试(电话、短中消息打扰)
  • 耗电量测试
  • 弱网测试(信号差,信号屏蔽实验室)
  • 安装卸载 (C/S)
  • 流量测试

系统测试是什么,有哪些测试方法。流程是什么?

[ 系统测试 ]

对项目进行全面的测试,其中包含单元测试和集成测试

[ 测试方法 ]

  • 功能测试
  • 异常测试
  • 性能测试
  • 易用性测试
  • 安全性测试
  • GUI 测试
  • 兼容性测试
  • 配置测试
  • 安装测试

[ 流程 ]

我们拿到需求以后,根据需求书写测试用例,然后和其他测试人员交换用例,以达到用例评审,然后修改遗漏和错误的测试用例,等待开发完成,然后测试项目,如果出现 Bug, Bug 用工具指向开发人员,开发人员修改后,对 Bug 进行测试,并对其关联的模块进行测试,如果没有问题继续测试,如果还有问题,继续指向开发人修改,如此往复直到么有问题为止。

测试用例的设计方法

  • 等价类划分法
  • 边界值分析法
  • 因果图/判定表法
  • 错误推断法
  • 正交实验法
  • 场景设计法/流程分析法

http 协议 和 https 协议

http 协议

  • HTTP 协议: 超文本传输协议

[ 请求方式 ]

  • GET
  • POST
  • PUT
  • DELETE

[ 状态码 ]

  • 200 成功
  • 204 请求成功,服务端没有内容
  • 301 永久重定向
  • 302 临时重定向
  • 304 走缓存
  • 400 参数错误
  • 401 权限不够
  • 403 服务器拒绝响应
  • 404 资源不存在
  • 500 服务器端错误,
  • 502 网关错误

http 协议 和 https 协议的区别

  • http 协议是超文本传输协议,信息是明文传输
  • https 是具有安全性的 ssl / tls 加密传输协议
  • http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443
  • http 的连接很简单,是无状态的; HTTPS 协议是由 SSL/TLS+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全

接口测试流程

  • 接口的功能测试(先保证接口是正确的)
  • 测试接口的数据(传递一些特殊的数据,保证接口没有问题)
  • 自动化测试脚本的编辑
  • 接口的性能、压力测试
  • HTTP: 超文本传输协议,浏览器和服务器之间通信的规则
  • URL: 统一资源定位符,协议://主机地址/路径
  • GET: 提交的数据显示在地址栏,不安全,提交的数据量有限制,不重要的数据使用 GET
  • POST: 隐式提交数据,更安全,没有数据量大小的限制,重要数据使用 POST

Fiddler 的原理

Fiddler 是位于客户端和服务器端的 HTTP 代理,能够记录客户端和服务器之间的所有 HTTP 请求,可以针对特定的 HTTP 请求,分析或修改请求数据,也可以修改服务器返回的数据。

你可以说说 jmeter 里的进程和线程吗?

你说说聚合报告是个什么东西?

对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量.

缺陷(Bug)管理

一个“缺陷”的记录都包含哪些内容

  • 所属产品、模块、项目、版本
  • Bug 指派
  • Bug 标题
  • 优先级
  • 严重程度
  • 操作步骤
  • 实际结果
  • 预期结果

怎么区分 Bug 是前端的还是后端的

  1. 如果项目崩溃,就是前端的 Bug
  2. 界面出现问题,前端 Bug
  3. 资源不能加载(根据状态码)
  • 500: 后端的问题
  • 404:

    • 查看前端有没有发出去请求
    • 查看前端请求接口是不是对的
    • 查看前端请求参数是否正确
  • 200:
    • 后端返回的数据是否正确
    • 前端读取数据的时候出错

优先级与严重程度

Bug 优先级(Bug 修复的先后顺序,针对于测试人员)

  • 一级: 严重影响到后面功能模块的测试工作
  • 二级: Bug 会制约开发和测试的活动进行,需要在发布前修复
  • 三级: 不影响其他工作,文字,话术、图片等出现错误

Bug 严重程度(从用户角度考虑)

  • 一级:致命问题,App 崩溃
  • 二级:功能出现错误,
  • 三级:UI 界面出现错误(文字,话术、图片等)

测试用例优先级

  • 一级:正向的流程,主功能
  • 二级:反向的流程
  • 三级:检查 UI 界面的文本、图片等

冒烟测试和回归测试的区别

  • 测试目的不同
    • 冒烟测试:用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。
    • 回归测试:以确认修改没有引入新的错误或导致其他代码产生错误。
  • 测试过程不同
    • 冒烟测试:是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。
    • 回归测试:是指漏洞由开发人员修改之后再次测试的过程。
  • 问题解决方式不同
    • 冒烟测试:冒烟测试中是发现问题然后反馈给开发人员进行修改。
    • 回归测试:回归测试是修改完之后进行验证再进行的工程。
  • 测试周期不同
    • 冒烟测试:冒烟测试只集中考虑了一开始的那个问题,而忽略其它的问题,这就可能引起了新的 Bug,SmokeTest 优点是节省测试时间。
    • 回归测试:回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。
  • 测试意义不同
    • 冒烟测试:冒烟测试是对软件质量的总体检验,是测试人员对测试流程的熟悉,是软件测试过程中一个不可或缺的节点,一个好的冒烟测试过程,对于软件测试效率的提升具有重要意义。
    • 回归测试:回归测试是软件测试中的一个十分重要且成本昂贵的过程。对针对如何减少回归测试成本,提高回归测试效率的研究将具有十分重要的意义。

      比如你一个 OA 系统里面功能比较多,你是通过手工快速去点还是用什么方式去快速完成这个测试工作?

• 如果是新功能开发的测试阶段,肯定是需要点点点
• 如果是老功能做回归测试,则需要做自动化测试

git 是干嘛的?git 和 svn 有什么区别?

  • git 是分布式版本控制系统,SVN 是集中式版本控制系统,这两个都是管理代码的
  • svn 严重的依赖服务器端,当服务器端无法使用的时候,版本控制也就无法再使用了。
  • git 当这个系统的任何一个客户端出现问题的时候,都可以从另外的客户端(即使服务器挂了)获取所有的代码。

    说一下 cookies 和 session,token。服务器是怎么知道你这个登录的用户是哪个用户?

  • cookie 和 session 都是用来存储数据的,cookie 的数据存储在浏览器,session 的数据存储在服务器端,用户请求,服务器端生成 session 并返回 sessionid 给客户端,客户端把 sessionid 存储在 cookie 中,以后请求都会带上 sessionid

  • token 和 session 算是一类,都是用于服务器验证的。
  • 服务器会通过用户请求携带的 sessionid 来识别用户

敏捷开发的特点

敏捷开发多用于小的团队,以用户为核心,利用短迭代方法来交付软件,开发的过程中更注重的是人员的交流。

Selenium 中,等待方式有哪些,区别是什么?

  • sleep 休眠方法
  • 隐式等待,driver.implicitly_wait(10) 隐性等待,最长等 10 秒
  • 显示等待,WebDriverWait() 它是由 Webdirver 提供的等待方法

    功能测试在 beta 版本对外上线的标准是什么

测试用例全部跑完,并且 Bug 都已经关闭,然后业务验收后可以上线。

软件测试结束的标准

  • 测试用例全部跑完,并且 Bug 都已经关闭
  • 性能指标达到要求
  • 验收测试通过

    有没有用过 django 框架?


  • 你知道深拷贝和浅拷贝的区别吗?

如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别,如果拷贝的对象里的元素包含引用,浅拷贝保存的是引用地址,对新对象里的引用里的值进行修改,依然会改变原对象里的列表的值。而深拷贝则不同,它会将原对象里的引用也新创建一个。

一个测试需要具备什么素质?

  • 五心(细心,专心,耐心,信心,责任心)
  • 要相信任何软件都存在缺陷
  • 需要具备专业的软件测试技能
  • 具备一定的逻辑分析能力
  • 具备团队合作精神
  • 具备较好的沟通能力
  • 实事求是
  • 具备较好的学习能力
  • 具备一定的编程能力
  • 要有原则
  • 不断总结经验与教训
  • 无论缺陷大小都要上报
  • 遇到不可重现的bug也要报告

    保持怀疑

    对产品的质量持有一颗敢于怀疑的心,质量不是开发人员说”我做完了而且也测过了”就可以保证的。直到你测完最后一轮,最后一个用例之前,你都应该对产品的质量持怀疑态度。这个态度是混口饭吃的最基本技能。

    永不妥协

    不要对产品质量妥协,哪怕开发口口声声说这个问题不好改,改不了,一改就要延期之类的话。妥协意味着你成功的把质量不好这口黑锅华丽的背在了自己的身上。

    让用户满意

    产品或项目成功的标志之一是能够让用户满意,很显然用户是不会对一个bug频出的系统/产品满意的。

    从用户角度思考

    很多测试同学不知道测试用例应该怎么去写,不知道怎么写才能写得出比较健全的用例。当你在苦恼用例从哪里来的时候,不妨试试下面两个办法从用户角度去思考,如果你是一个特定的用户(年龄,身份,职业)你应该会怎么使用这个产品从场景的角度去思考,在哪些场景下会使用到这个产品写不出用例可能就意味着你对产品的功能不够熟悉,不如让熟悉这个产品的同事给你介绍一下主要功能

    分清主次

    要分清楚任务的优先级,优先级高的先做,依此类推。在没有分清优先级的情况下不要盲目的开始测试。

    从不承诺100%的覆盖率

    不要把话说满,这个中国人都很理解。不要保证太高的目标,给自己留点后路。

    倾听建议

    别人的建议有些是金玉良言,有些则可以忽略不计。做测试的时候你不是一个人在战斗,多听听别的的有效建议是没有坏处的。

    尽早开始

    尽早开始重要的模块的测试工作。因为问题发现的越早解决的成本就越低。另外早点开始测试重要的模块或功能可以尽可能多的增加测试时间,拿时间换质量一般来说是效果的。这个建议的另一个说法就是想办法让重要的模块可以尽早的开始测试。

    确定并管理风险

    在做项目测试的时候,一个好的测试同学需要有发现项目质量上可能出现的风险的能力。另外当发现了项目风险的时候,我们还需要能够将风险管理起来,让风险可以被控制,可以被解决。

    做市场调研

    看看友商的产品做的怎么样,有什么好的地方,有什么不好地方。好的地方我们的产品可以学习,不好的地方我们可以预防和改进。这是站在产品人员的角度去看待自己的项目或产品,因为好的测试在某些时候需要具备好的产品人员的素质。

    培养BA技能

    BA就是业务分析师的意思,在某些项目里,这类同学被称为产品狗。这要求测试人员有分析需求的能力,哪些需求是真需求,哪些需求是伪需求。真需求就玩命的测,伪需求在时间允许的情况下尽量的测。这也是产品视角,这也是为什么有很多测试同学转去做产品的原因。

    不要忘了异常情况

    只测试正常的流程往往是不太够的,一些异常的情况我们也需要进行测试。另外不出意外的话异常情况的测试用例数量是要多于正常情况的。测试异常情况有助于我们发现bug,也有助于我们换个角度看待产品和项目的业务行为。

    Be a Good Judge of Your Product

    做那个对项目/产品最有发言权的人。

    学会交涉

    在保证项目质量的前提下我们要尽可能多的通过交涉和协商保障自己的利益。交涉意味着在某些情况下我们需要做出让步,退一步海阔天空,但前提是,退的这一步不影响项目或产品的质量。

    停止指责

    出问题的时候第一要务是先把问题解决掉,而不是指责相关责任人。

    做一个好的观察者

    观察项目,观察开发的流程,观察测试的流程,发现问题,提出问题,引导团队去解决问题。

    python 主要数据类型有哪些?

  • 数字:int、float、bool、complex

  • 字符串:str
  • 列表:list,用[]
  • 元组:tuple,用(),就相当于不可修改的list
  • 集合:set,用{}
  • 字典:dict,用{key: value}

    Linux 面试

    你说一些 linux 命令,chmod 命令是干嘛的?怎么查看端口被占用?

  • chmod 修改文件权限

  • 查看某个进程的pid
  1. ps -ef | grep xxx(某个进程)
  • 查找被占用的端口

    1. netstat -tln
    2. netstat -tln | grep 8083
    3. netstat -lnp | grep 8083
  • 查看端口属于哪个程序?端口被哪个进程占用

  1. lsof -i :8083
  • 杀掉占用端口的进程
  1. kill -9 进程id

测试用例书写

qq⽂件传输测试⽤例

  • 传输成功
  1. ⽂件直接拖到对话框,点击发送
  2. 点击传送⽂件按钮,选择⽂件,点击发送
  3. 传送汇总显示进度条
  4. 传送显示⽂件名字,以及⽂件⼤⼩
  5. 给⼀个⽤户传输多个⽂件
  6. 同时给不同⽤户传输⽂件(相同⽂件和不同⽂件)
  7. 本地打开的时候,可以传送⽂件
  8. 接收成功的默认路径
  9. ⽂件接收后,是否正常
  10. 是否可以更改保存路径
  11. ⽂件传输时,不影响其他功能
  12. 接收⽅在线,不在线,离线⽂件,好友,⾮好友(临时会话)
  • 传输失败
  1. 点击取消,可以取消⽂件发送
  2. 接收⽅,拒绝接收
  3. 直接关闭对话框,有提示,有⽂件在传输
  4. ⽂件-⽂件夹,⽂件夹多层,空⽂件
  5. ⽂件⼤⼩的边界值
  • ⽂件名称
  1. 普通⽂件
  2. 含有特殊符号的⽂件
  3. ⽂件名空,空格,纯中⽂,中英混合,纯英⽂,含有标点符号
  • ⽂件格式
  1. exe⽂件,txt,doc,pdf等
  2. 图⽚、视频、⾳频、压缩⽂件、⽂件夹、病毒⽂件
  • 界⾯测试
  1. 界⾯美观、易⽤
  2. 按钮位置符合规范以及正确
  3. 提示语是否正确
  • 其他测试
  1. 弱⽹情况传输
  2. 上传中断⽹
  3. 上传⽂件,把源⽂件删除