本文主要是介绍面试京东T5,被按在地上摩擦,鬼知道我经历了什么?【好文分享】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一转眼间,光阴飞快,各大企业都开始招人,各大学校也开始准备陆续入学。金三银四已经快结束了,有的朋友发来喜报,面试上了一线大厂,也有没有面试上的朋友跑来跟我说,被虐惨了,几天给大家分享下我一个面试京东的朋友的经历,希望给正在面试的朋友共勉。
面试京东被问到的问题:
测试理论基础
什么是软件测试?
答:软件测试是在规定的条件下对程序进行操作,以发现错误,对软件质量进行
评估。 软件测试的目的是什么?
答:软件测试的目的在于(1)发现软件的缺陷和错误(2)保证软件的质量,
确保能够满足用户以及产品的需求。
(标重点)软件测试的目的是为了找 bug,并不是验证软件没有 bug。 白盒测试用例设计常用方法
答:
静态测试:不用运行程序的测试,如文档测试、代码检查等
动态测试:需要执行代码,接口测试、覆盖率分析、性能分析、内存分析等。
逻辑覆盖法:主要包括语句覆盖,判断覆盖,条件覆盖,判断/条件覆盖,条件
组合覆盖,路径覆盖等。
六种覆盖标准发现错误的能力由弱到强的变化:
- 语句覆盖,每条语句至少执行一次。
- 判断覆盖,每个判断的每个分支至少执行一次。
- 条件覆盖,每个判段的每个条件应取到的各种可能的值。
- 判断/条件覆盖,同时满足判断覆盖条件覆盖。
⑥
⑥
5. 条件组合覆盖,每个判定中各条件的每一种组合至少出现一次。
6. 路径覆盖,使程序中每一条可能的路径至少执行一次。 黑盒测试用例设计常用方法
答:等价划分类,边界值分析,错误推测法、因果图法、场景法、正交试验设
计法、判定表驱动分析法、功能图分析法等。 什么是灰盒测试?
答:灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集
成测试阶段。目前互联网的测试大多数都是灰盒测试。 列举出你所了解的软件测试方式
答:
按照软件的生命周期划分:单元测试、集成测试、系统测试、回归测试、验收测
试。
按照测试关注点划分:功能测试、性能测试、稳定性测试、易用性测试、安全
性测试。
按照测试实施者划分:开发方测试(α测试)、用户测试(β测试)、第三方测
试。
按照技术/测试用例设计划分:白盒测试、黑盒测试、灰盒测试。
按照分析方法划分:静态测试、动态测试。
按照测试执行方式划分:手工测试、自动化测试。
⑦
⑦
按照测试对象划分:程序测试、文档测试。 什么是单元测试
答:完成最小的软件设计单元(模块)的验证工作,确保模块被正确编码。通常
情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测
试,及早发现和解决不易显现的错误。 单元测试、集成测试、系统测试、验收测试、回归测试这几步最重要的是
哪一步?
答:这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完
整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,系统
测试能够对软件所有功能进行功能测试,能够覆盖系统所有联合的部件,是针
对整个产品系统进行的测试,能够验证系统是否满足需求规格的定义,因此,我
认为系统测试很重要。 集成测试和系统测试的区别,以及应用场景分别是什么?
答:
区别:
执行顺序:先执行集成测试,待集成测试问题修复后,再做系统测试。
用例粒度:集成测试比系统测试用例更详细,集成测试对于接口部分也要
重点写,而系统测试的用例更接近用户接受的测试用例。
应用场景:
集成测试:一般包含接口测试,对程序的提测部分进行测试。测试方法一
般选用黑盒测试和白盒测试相结合。
⑧
⑧
系统测试:针对整个产品的全面测试,既包含各模块的验证性测试和功能
性测试,又包含对整个产品的健壮性、安全性、可维护性及各种性能参数
的测试。测试方法一般采用黑盒测试法。 测试开发需要哪些知识?具备哪些能力?
答:
需要的知识:
软件测试基础理论知识,如黑盒测试、白盒测试等;
编程语言基础,如 C/C++、java、python 等;
自动化测试工具,如 Selenium、Appium 等;
计算机基础知识,如数据库、Linux、计算机网络等;
测试卡框架,如 JUnit、Pytest、Unittest 等。
具备的能力:
业务分析能力、缺陷洞察能力、团队协作能力、专业技术能力、逻辑思考能力、
问题解决能力、沟通表达能力和宏观把控能力。 请说一下手动测试与自动化测试的优缺点
答:
手工测试缺点:
- 重复的手工回归测试,代价昂贵、容易出错。
- 依赖于软件测试人员的能力。
⑨
⑨
手工测试的优点:
- 测试人员具有经验和对错误的猜测能力。
- 测试人员具有审美能力和心理体验。
- 测试人员具有是非判断和逻辑推理能力。
自动化测试的缺点: - 不能取代手工测试。
- 无法运用在测试复杂的场景
- 手工测试比自动化测试发现的缺陷更多。
- 对测试质量的依赖性极大。
- 自动化测试不能提高有效性。
- 比手动测试脆弱,需要维护成本。
- 工具本身并无想象力。
自动化测试的优点: - 对程序的回归测试更方便。
- 可以运行更多更繁琐的测试。
- 可以执行一些手工测试困难或不可能进行的测试。
- 更好地利用资源。
- 测试具有一致性和可重复性。
- 测试的复用性。
- 增加软件的信任度。 自动化测试的运用场景举例
答: - 线上巡检(UI+接口)
- 简单场景监控
- 稳定性测试(monkey+遍历测试)
⑩
⑩
软件测试的核心竞争力是什么?
答:早发现问题和发现别人无法发现的问题。
测试和开发要怎么结合才能使软件的质量得到更好的保障
答:测试和开发可以按照 V 模型或 W 模型的方式进行结合。但应该按照 W 模型
的方式进行结合比较合理。
V 模型:
测试过程加在开发过程的后半段,比较被动。
W 模型:
⑪
⑪
测试提前,甚至和开发是同步进行,测试不仅是程序,还包括需求和设计。W 模
型有利于尽早地全面的发现问题,降低软件开发的成本,风险前置。 怎么实施自动化测试
答:
- 首先判断项目适不适合进行自动化测试。
- 对项目做需求分析。
- 制定测试计划和测试方案。
- 搭建自动化测试框架。
- 设计或编写测试用例。
- 执行自动化测试。
- 评估。 测试的相关流程
⑫
⑫
答:
按 W 模型:
需求测试 -> 概要设计测试 -> 详细设计测试 -> 单元测试 -> 集成测试 ->
系统测试 -> 验收测试
我工作中实际测试流程:
需求评审 -> 技术评审 -> case 评审 -> 开发自测以及冒烟测试 -> 整体提测
(集成测试) -> 回归测试 -> 系统测试 -> 验收测试
测试项目具体工作是什么
答:
- 搭建测试环境
- 撰写测试用例
- 执行测试用例
- 写测试计划、测试报告
- 测试并提交 BUG
- 跟踪 BUG 修改情况
- 自动化测试
- 性能测试、压力测试、安全测试等其他测试
BUG 分级
答:两个维度去划分
⑬
⑬
- 按 BUG 严重程度划分等级:
o blocker:系统无法执行,崩溃,或严重资源不足,应用模块无法
启动或异常退出,无法测试,系统不稳定。常见的:严重花屏、内
存泄漏、用户数据丢失或破坏、系统崩溃/死机/冻结、模块无法启
动或异常退出、严重的数值计算错误、功能设计与需求严重不符、
服务器 500 等。
o critical:影响系统功能或操作,主要功能存在严重缺陷,但不会影
响到系统的稳定性。常见的有:功能未实现,功能错误、系统刷新
错误、数据通讯错误、轻微的数值计算错误、影响功能及洁面的错
别字或拼写错误。
o major:界面、性能缺陷、兼容性。常见的有:操作界面错误、边
界条件错误、提示信息错误,长时间操作无法提示、系统未优化、
兼容性问题。
o minor/trivial:易用性及建议性的问题。 - 按 BUG 处理优先级划分:
o immediate:马上解决
o urgent:急需解决
o high:高度重视,有时间马上解决
o low:在系统发布前解决或确认可以不用解决
APP 性能指标有哪些?
⑭
⑭
答:内存、CPU、流量、电量、启动速度、滑动速度、界面切换速度、与服务器
交互的网络速度。
APP 测试工具有哪些?
接口测试:postman
性能测试:jmeter
抓包工具:chales、fiddler
UI 自动化:uiautomator2、appium、atx
稳定性测试:monkey、maxim、uicrawler、appcrawler
兼容性测试:wetest、testin
内存、cpu、电量测试:GT、soloPi
弱网测试:chales
BUG 的生命周期
答:
复杂版:
- New(新的)
微信公众号:程序员阿沐/技术交流群:810119819
⑮
⑮
2. Assigned(已指派)
3. Open(打开的)
4. Fixed(已修复)
5. Pending Reset(待测试)
6. Reset(再测试)
7. Closed(已关闭)
8. Reopen(再次打开)
9. Pending Reject(拒绝中)
10. Rejected(被拒绝的)
11. Postponed(延期)
简单版:
- 创建 bug
- 分配 bug
- 修复完待测试
- 关闭
- 重新开启
- 无效
什么是α测试和β 测试?
答:
微信公众号:程序员阿沐/技术交流群:810119819
⑯
⑯
α测试:在受控的环境下进行,由用户在开发着的场所进行,开发者指导用户测
试,开发者负责记录发现的错误和使用中遇到的问题。
β 测试:在开发者不可控的环境下进行,由软件最终用户在一个或多个客户场所
下进行,用户记录测试中遇到的问题,并定期上报给开发者。 谈谈对敏捷的理解
答:
提到敏捷,不得不联想到瀑布开发,瀑布开发按项目为核心,一般都会有一
个相对较长的项目周期,一开始把项目设计得大而全,完成项目并交付后,工作
重心就会转移到另一个项目去。而敏捷开发是以需求为核心,一开始不会把产品
设计得大而全,而是通过快速迭代的方式,不断采集需求,不断更新迭代。敏捷
开发的开发周期更短,能够快速试错,快速迭代,敏捷开发比瀑布开发更顺应目
前的软件开发趋势。
敏捷开发也对应着有敏捷测试,测试环节贯穿整个迭代周期,从需求评审到
发布上线,都离不开测试快速跟进。测试左移:需求评审、用例设计、自测工具、
静态代码扫描等;测试中:业务测试,接口测试,性能测试等;测试右移:稳定
性测试,回归测试,灰度测试等
什么是压力测试?压力测试需要考虑哪些因素?
答:
压力测试是在高负载情况下,对系统稳定性进行测试。在高负载的情况下,
系统出现异常的概率要比正常负载时要高。高负载包含长时间运行、大数据、高
并发等情况。
在做压力测试时,一般要考虑环境因素、性能指标、运行时间等要素。
⑰
⑰
压测环境最好和生产环境一致,假如要在生产环境进行压测,需要在凌晨等在线
用户量极少的情况下进行。在生产环境测试时要做好数据隔离,生产环境需提供
虚拟数据,采用虚拟账号,避免对真实线上用户造成影响。
性能指标包括,内存、CPU、TPS、QPS、网络流量、错误统计等,这些指标
需要监控。
压测一般需要运行长时间,最好能够通过长时间的压测,绘制出曲线图,这样更
容易观察到性能瓶颈。 软件测试扫盲
按测试技术划分
黑盒测试、白盒测试、灰盒测试
被测试对象是否运行
动态测试、静态测试 (文档检查、代码走查)
按不同的测试手段划分
手工测试(点工) 、自动化测试(工具+代码)
按测试包含的内容划分
功能测试、界面测试、安全测试、兼容性测试、易用性测试
o 功能测试:测试业务逻辑(手工、自动化)–核心重要
o 界面测试:UI(user interface)–外观美好、设计合理、友好、—主观
性强=需求文档 (原型图 UI 切图)–优先级会低
o 安全测试:高级类型-工具 (扫描–appsan) 代码(脚本-sql 注入) --漏洞,
薄弱
⑱
⑱
o 性能测试: 高级类型-双十一(访问人数多)–并发 (10000) —资源 内存
–正常处理
o 易用性测试: --人性化 ,舒适,用户体验提 bug =站在用户角度
考虑,考虑成熟产品
o 兼容性测试:软件+硬件(windows,Linux,MacOS,Android,Ios); 软件+
软件–调用; 软件不同版本之前 App(老功能,数据)
按测试阶段划分
单元测试、集成测试、系统测试、验收测试、a 测试、b 测试
其他测试
回归测试、冒烟测试、探索性测试/自由测试(测试思维) 回归测试: regression test : 测试-bug ,开发修复 bug(修改代码) 验证 bug 其他没被修改的代码模块测试,影响:上线之前-很多轮 (2-4 轮) 的回归冒烟测试(重
复) ==自动化测试
冒烟测试:来源–硬件测试 : 电路板-冒烟-短路被烧了=打回开发重做–软件测
试:软件提测-核心业务功能
主流程 ,提高测试效率
探索性测试: 发散测试 -能力要求非常的高 ,没有依据,方法 ,只能靠 经验、
积累、直觉
需求评审:
什么是需求评审:
项目相关人员就产品需要进行确认和评估的相关活动
为什么要需求评审:
项目组成员理解需求,以便后期高效的进行、开发、设计工作
测试人员参与需求评审的职责
1.确保主机的理解与产品设计理念一直
⑲
⑲
- 明确实现的需求范围
- 提出主机对产品需求不合理或遗漏
产品需求评审案例 : 只看功能是否正常 ,看控件位置 ,对流程的控制
有需求提需求,让产品更加完美
测试计划,就是一个 word 文档
测试用例测试思路
用例设计思路:帮助测试人员构建清晰的测试思维,指导测试思路
个人头像功能测试需求分析
⑳
⑳
分析显性,和隐性
显性:正常文章描述的东西
隐性: 那边边边角角没有显示出来的细节
测试用例的编写
21
21
使用 Xmind 列出要测试的点,根据测试的需求来定,简单一句,就是找测试点
最后使用 Excel 进行功能测试
就是这么玩的
需求
22
22
测试用例
弱网测试
23
23
使用 Fiddler 模拟 3G ,4G 的访问速度,也就是 具体时间
总结:
大厂的面试从来不是一成不变的,需要有扎实的基础,对底层原理的深入理解,还有丰富的项目实战经验,所以面试大厂前一定要做好充足的准备。今天给大家分析的这几道面试真题,希望能够给大家一定的帮助。
加油吧,测试员!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。
未来的你肯定会感谢现在拼命的自己!
深有感触的朋友欢迎赞同,评论,关注~礼貌三连罒ω罒
这篇关于面试京东T5,被按在地上摩擦,鬼知道我经历了什么?【好文分享】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!