理论:
问:什么是版本控制,常用的版本控制系统有哪些?
答:版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都
得到更新。
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为 了 帮 助 管 理 Linux 内 核 开 发 而 开 发 的 一 个 开 放 源 码 的 版 本 控 制 软 件 。
https://git-scm.com/doc
SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,
它 的 设 计 目 标 就 是 取 代 CVS 。 互 联 网 上 很 多 版 本 控 制 服 务 已 从 CVS 迁 移 到 Subversion
问:你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。
答:1、将问题提交到缺陷管理库里面进行备案。
2、要获取判断的依据和标准:
根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;
如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;
根据用户的一般使用习惯,来确认是否是缺陷;
3、与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;
4、合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪。
等待测试经理做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反映,并有上级做出决定
问:目前主要的测试用例设计方法是什么?
答:白盒测试:逻辑覆盖,循环覆盖,基本逻辑覆盖
黑盒测试:边界值分析法,等价类分析法,错误猜测法,因果图法,状态图法,随机测试法,场景法等等
问:软件测试划分为几个阶段
答:软件测试按阶段划分可以分为单元测试、集成测试、系统测试和验收测试几
个阶段
问:测试人员在软件开发过程中的任务是什么?
1.寻找bug
2.避免软件开发过程的缺陷
3.衡量软件的品质
4.关注用户的需求
5.确保软件的质量
问:黑盒测试和白盒测试的优缺点有哪些
答:黑盒测试的优点是比较简单,不需要了解程序内部的代码实现,从用户的角度出发,很容易的知道用户会用到哪些功能,会遇到哪些问题,基于软件开发文档,所以也知道软件实现了文档的那些功能
缺点是:不可能覆盖所有的代码,覆盖率比较低,大概只能达到总代码的百分之30,自动化的复用性比较低
白盒测试的优点:帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码隐藏的问题
缺点是:程序运行有很多不同的路径,不可能测试所有的路径,测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,比较容易漏掉一些功能需求,系统比较庞大时,测试开销会非常的大
问:如何测试一个 纸杯?
功能度:用水杯装水看漏不漏;水能不能被喝到
安全性:杯子有没有毒或细菌
可靠性:杯子从不同高度落下的损坏程度
可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用
兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等
易用性:杯子是否烫手、是否有防滑措施、是否方便饮用
用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述
疲劳测试:将杯子盛上水(案例一)放 24 小时检查泄漏时间和情况;盛上汽油(案例二)
放 24 小时检查泄漏时间和情况等
压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
问:测试计划编写的六要素?
答:why——为什么要进行这些测试
what—测试哪些方面,不同阶段的工作内容
when—测试不同阶段的起止时间
where—相应文档,缺陷的存放位置,测试环境等
who—项目有关人员组成,安排哪些测试人员进行测试
how—如何去做,使用哪些测试工具以及测试方法进行测试。
问:编写测试计划的目的是?
答:使测试工作顺利进行;使项目参与人员沟通更舒畅;使测试工作更加系统化。
问:项目版本执行过程中,测试人员如何把控测试进度?
答:在项目的系统测试过程中,测试负责人要及时了解测试进度,跟踪 BUG 提交、修复及验证情况以及系统的拷
机情况。
在开发初期阶段,测试组执行 BBFV 时,很多模块、功能点的开发完成进度和原计划会存在一定的偏差,就需
要测试负责人动态的刷新 WBS 计划,根据实际的开发进度调整测试计划。
在开发阶段,存在版本编译不出来导致无法测试,开发人员修复代码太随意导致版本稳定性反复,需求变更过
大导致后端测试开发变更严重等现象,会导致测试工作无法正常进行。就需要测试负责人及时反馈出来,根据项目
本身的特点进行对应的处理。
当测试进度出现延期时,要及时确认问题原因,如果是问题协查导致,则需及时与研发人员进行沟通协商,看
问题是否必须在测试环境进行排查,若为必现问题可与研发协商要求其在自己环境进行排查,若必须占用测试环境,
则需及时调整测试计划,若因此可能影响版本的发布,则应及时与 SE 确认
若发现有较多 BUG未解决,则应主动联系 SE 及研发人员召开 BUG会确定问题的解决时间。若发现有较多 BUG
未验证,则应提醒项目组的测试人员及时进行验证,对于一些拷机或非必现的 BUG,建议测试人员在此 BUG 上现
做拷机标记,连续拷机一周未再复现的做关闭处理,若再次复现则继续进行排查。
疑难问题的跟控:比较难复现的问题,怎么去尝试复现。比较难定位的问题,怎么驱动、反馈给 SE,协调开发
人员定位问题。比较难处理的问题,怎么跟控反馈进度等
每天下班前需确认拷机内容,每天上班第一件事需确认拷机结果,只有这样才能保证拷机的效果,实现拷机的
真正意义。
问:黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联
系?
答:黑盒测试:把测试对象当成一个黑盒子,测试人员完全不考虑逻辑结构和内部特性, 只依据程式的需求说明书
来检查程式的功能是否满足它的功能说明。
白盒测试:把测试对象当成一个透明的盒子,允许测试人员利用程序内部逻辑结构及 相关信息,设计或选择测
试用例,对程式所有逻辑路径进行测试。
单元测试:白盒测试的一种,对软件设计中的单元模块进行测试。
集成测试:在单元测试的基础上,对单元模块之间的连接和组装进行测试。
系统测试:在所有都考虑的情况下,对系统进行测试。
验收测试:第三方进行的确认软件满足需求的测试。
问:在没有产品说明书和需求文档的情况下能够进行黑盒测试的设计吗?
答:能,可以通过其他工作内容去替代产品说明书和需求文档根据客户的功能点整理测试需求追溯表,根据开发人员的 Software Specification List 整理功能测试点
开展项目跨部门讨论会,主要整理对功能点的理解和认识
测试人员整理用例需求疑问提交项目组或者产品
项目内部的用例品胜
邮件客户代表确认部分争议问题
项目的 Demo 和部分已经开发的系统
参考同行业和竞争对手的类似产品
交叉模块之间的测试
咨询客户或相关者
问:单元测试的策略有哪些,主要内容有哪些?
答:逻辑覆盖,循环覆盖,同行评审,桌前检查,代码走查,代码评审,静态数据流分析
问:白盒测试逻辑覆盖有哪几种覆盖标准,覆盖率最高的是什么
答:语句覆盖,分支覆盖,条件覆盖,路径覆盖,分支条件覆盖,覆盖率最高的是路径覆盖
问:测试结束的标准是什么?
答:第一类标准:测试超过了预定时间,则停止测试。
第二类标准:执行了所有的测试用例,但并没有发现故障,则停止测试。
第三类标准:使用特定的测试用例设计方案作为判断测试停止的基础
第四类标准:正面指出停止测试的具体要求,即停止测试的标准可定义为查出某一预订 数目的故障。
第五类标准:根据单位时间内查出故障的数量决定是否停止测试
问:什么是测试用例,测试用例的基本要素?
答:测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是
否满足某个特定需求。
测试用例的基本元素: 测试索引,测试环境,测试输入,测试操作,预期结果,评价标准。
问:一个身份证号码输入框,怎么设计用例?
答:校验身份证号规则的有效性(包括地址码、生日期码、顺序码和校验码
校验 15 位身份证号和 18 位身份正好都是可用的
校验末位是 X 的情况
校验不足 15 位、16-17 位和大于 18 位的情况
如果是必输项,校验不输入的时候会不会有正确的提示
如果不是必输项,则要校验不输入的时候流程能否正常进行
校验输入非数字的情况,是否会有正确提示信息(包括大小写字母、汉字、特殊字符和标点符号)
校验输入全角的数字的时候,系统是否会识别(这个得根据需求确定是否可以使用全角的数字)
Linux 基础:
问:查看某端口号?
答:netstat -anp | grep port_number
问:查看某进程号?
答:ps -ef | grep ps_name
问:如何查询出 tomcat 的进程并杀掉这个进程,写出 linux 命令?
答:ps -ef | grep tomcat
kill -9 tomcat_port
问:常用的10个linux命令
答:cd cd… find gred cp mv top mkdir touck cat rm
问:动态查看日志文件?
答:tail -f log_file
问:查看系统硬盘空间的命令?
答:df -aTh
问.查看当前机器 listen 的所有端口?
答:netstat -tlnp
MYSQL:
问:数据库怎么优化查询效率?
答:1.分表分库,主从
2.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
4.应尽量避免在 where 子句中使用!= 或<> 操作符,否则将引擎放弃使用索引而进行全表扫描
5.、Update 语句,如果只更改 1、2 个字段,不要 Update 全部字段,否则频繁调用会引起明显的性能消耗,
同时带来大量日志
问:数据库的优化?
答:1.优化索引、SQL 语句、分析慢查询;
2.使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能节约磁盘 IO
3.主从分离读写;采用主从复制把数据库的读操作和写入操作分离开来;
4.分库分表
5.不采用全文索引;
6.增加索引
WEB相关:
问: 描述用浏览器访问 www.baidu.com 的过程?
答:先要解析出 baidu.com 对应的 ip 地址:
要先使用 arp 获取默认网关的 mac 地址
组织数据发送给默认网关(ip 还是 dns 服务器的 ip,但是 mac 地址是默认网关的 mac 地址) 默认网关拥有转发数据的能力,把数据转发给路由器
路由器根据自己的路由协议,来选择一个合适的较快的路径转发数据给目的网关
目的网关(dns 服务器所在的网关),把数据转发给 dns 服务
dns 服务器查询解析出 baidu.com 对应的 ip 地址,并原路返回请求这个域名的 client
得到了 baidu.com 对应的 ip 地址之后,会发送 tcp 的 3 次握手,进行连接
使用 http 协议发送请求数据给 web 服务器
web 服务器收到数据请求之后,通过查询自己的服务器得到相应的结果,原路返回给浏览器
浏览器接收到数据之后通过浏览器自己的渲染功能来显示这个网页
浏览器关闭 tcp 连接,即 4 次挥手结束,完成整个访问过程
问:了解的常用浏览器有哪些?
答:IE,Chrome,Safari,Firefox,Opera
问:Http和Https的区别
答:1、https协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(原来网易官网是http,而网易邮箱是https。)
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
问:cookie和session的区别
答:1、Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
2、Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
3、Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
4、Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
APP相关
问:1. 简述 Android 四大组件?
答:Android 的四大组件包括:Activity、Service、BroadcasReceiver、ContentProvider
问: 当点击 APP 图标启动程序,说明将要发生那些过程?
答:1.点击桌面 app 图标,Launcher 进程采用 Binder IPC 向 system_server 进程发起 startActivity 请求;
2.system_server 进程收到请求后,向 zygote 进程发送创建进程的请求(zygote 进程是 Android 系统的第一个
进程,zygote 意为受精卵,所有进程都是由它孵化而来)
3.zygote 进程 fork 出新的子进程,即 App 进程;
4.App 进程,通过 Binder IPC 向 system_server 进程发起 attachApplication 请求
5.system_server 进程收到请求后,进行一系列的准备工作,通过 Binder IPC 向 App 进 程 发 送
scheduleLaunchActivity 请求
6.App 的 binder 线程(Application Thread)在收到请求后,通过 handler 向主线程发送 LAUNCH_ACTIVITY
消息
7.主线程收到 Message 后,通过发射机制创建目标 Activity,并回调 Activity.onCreate()方法
问:APP 测试的内容主要包括哪些,如何开展?
答:功能测试:
1.业务逻辑正确性测试:依据:产品文档->测试用例编写
兼容性测试:
1.系统版本:Android:官方版本,定制版本;IOS:官方提供版本
2.分辨率:720 * 1280 1080* 1920
3.网络情况:2g 3g 4g 5g Wi-Fi
异常测试
1.热启动应用:应用在后台长时间待机;应用在后台待机过程中,手机重启
2.网络切换和中断恢复:网络切换;中断恢复:
3.电话信息中断恢复
升级,安装,卸载测试
1.升级测试:临近版本升级(1.0->1.1);跨版本(1.0->…->2.2)
2.安装测试:首次安装;覆盖安装(同版本,不同版本覆盖);卸载后安装
3.卸载测试:首次卸载;卸载安装后在卸载
健壮性测试
1.手机资源消耗:cpu,内存
2.流量消耗:图片,数据,视频
3.电量测试
4.崩溃恢复
问:针对 App 的安装功能,写出测试点?
1.正常安装测试,检查是否安装成功。
2.APP 版本覆盖测试。例如:先安装一个 1.0 版本的 APP,再安装一个高版本(1.1 版本)的 APP,检查是否被覆
盖。
3.回退版本测试。例如:先装一个 2.0 版本的 APP,再安装一个 1.0 版本的 APP,正常情况下版本是可以回退的。
4.安装时内存不足,弹出提示。
5.根据安装手册操作,是否正确安装。
6.安装过程中的意外情况(强行断电、断网、来电话了、查看信息)等等,检查会发生的情况。
7.通过‘同步软件’,检查安装时是否同步安装了一些文件。
8.在不同型号、系统、屏幕大小、分辨率上的手机进行安装。
9.安装时是否识别有 SD 卡,并默认安装到 sd 卡中。
10.安装完成后,能否正常启动应用程序。
11.安装完成后,重启手机能否正常启动应用程序。
12.安装完成后,是否对其他应用程序造成影响。
13.安装完成后,能否添加快捷方式。
14.安装完成后,杀毒软件是否会对其当做病毒处理。
15.多进程进行安装,是否安装成功。
16.在安装过程中,所有的提示信息必须是英文或者中文,提示信息中不能出现代码、符号、乱码等。
17.安装之后,是否自动启动程序。
18.是否支持第三方安装。
19.在安装中点击取消。
卸载
1.用自己的卸载程序进行卸载,检查是否卸载干净。
2.用第三方工具,检查是否卸载干净。
3.在卸载过程中,点击取消按钮,看是否正常退出卸载程序,检查软件是否还能继续正常使用。
4.卸载过程中,出现意外(比如手机关机,没电,查看信息,接打电话),程序是否还能运行。
5.在卸载过程中,突然重启设备,再次访问程序,是否还能运行。
6.在没用使用程序时,删除目录文件,看程序是否能运行。
7.在使用过程中,直接删除目录文件,程序是否还能运行。
8.不同系统、硬件环境、网络环境下进行卸载。
9.卸载成功后,是否对其他程序有影响。
10.卸载后再次安装,是否正常使用。
11.在卸载过程中,所有的提示信息必须是英文或者中文,提示信息中不能出现代码、符号、乱码等。
更新
1.当客户端有新版本时,提示更新。
2.非强制更新,可以取消更新,旧版本正常使用,下次使用软件时,仍然会出现更新提示。
3.强制更新,强制更新而用户没有更新时,退出客户端,下次启动,依然提示更新。
4.不卸载更新,检查是否可以更新。
5.不卸载更新,检查资源同名文件如图片等是否更新成最新版本。
6.非 wifi 网络下,提示是否更新,取消就加入待下载,wifi 下自动更新。
问:常用的ADB命令?
答:adb --help / adb :看见帮助信息
adb start-server:启动 adb 服务
adb kill-server:关闭 adb 服务
adb devices:查看手机设备号
adb shell getprop ro.build.version.release:获取系统版本
adb push 电脑 手机
adb pull 手机 电脑
adb logcat | grep(unix) 包名
adb logcat | findstr(win) 包名
adb shell :进入 shell 命令行,可以操作 Linux 命令
adb shell dumpsys window windows | grep mFocusedApp:获取包名 启动名(win:adb shell dumpsys window
windows | findstr mFocusedApp)
adb install 路径/apk 文件:安装 apk 到手机上
adb uninstall 包名:卸载 app 从手机上
adb shell am start -W 包名/启动名:app 启动时间
问:在查看 logcat 命令日志时候怎么内容保存到本地文件?
答:输出重定向:logcat >> log_file_name
问:APP闪退,可能是什么原因导致的
答:缓存垃圾过多,安卓的特性,如果长时间不清理垃圾文件,会导致越来越卡,就会出现闪退的情况
运行的内存过多,导致内存不足
版本的兼容问题。版本过低的话会导致不兼容造成闪退