面试指导
- 软件测试理论刷题篇
- mysql数据库刷题库
- linux操作系统刷题篇
- 软件测试工程师面试篇
一. 软件测试理论刷题篇
1.软件测试的意义是什么?
思路:什么是软件测试→软件测试的含义
什么是软件测试:在规定的条件下对程序进行操作,以发现错误对软件质量进行评估的一个过程。
软件测试的意义:提前发现潜在的安全隐患,避免出现损失,降低风险。
扩展回答
要做好软件测试工作还要从以下方面着手
①一方面打造提前发现问题的能力
- 对业务知识的熟练掌握
- 提前介入测试
- 推进更完善的质量把控制度
- 不断的提升自身的技术能力 ②另一方面提前规避同类问题的发生,提高软件的稳定性
- 文档沉淀
- 流程沉淀
- 业务沉淀
- 技术沉淀
2.软件测试的基本原则是什么?
核心原则:基于用户的角度考虑问题,发现问题,提升用户使用系统的体验感。
更多原则
- 更早的介入测试
- 遵守二八原则,重点覆盖出现更多bug的模块
- 提升用例设计的覆盖度,正向,反向,异常等都需要覆盖到
- 更多考虑到上下游等未在需求中表现出来的因素
3.软件测试一般要做哪些测试?
软件测试的类型
①. 功能测试
- 功能逻辑实现准确性测试
- 界面测试
- 兼容性测试
- 易用性测试
②. 自动化测试
- web自动化测试
- 接口自动化测试
③. 性能测试
- 高并发性能测试
- 稳定(可靠性)测试
- 疲劳测试
4.软件测试有哪些类型?
软件测试的类型
- 黑盒测试:完全不清楚代码逻辑,只按照需要设计输入数据,然后对输出进行验证的过程。
- 白盒测试:完全清楚代码逻辑,针对代码进行的测试。
- 灰盒测试:介于白盒和黑盒之间的一种测试类型,偏向于接口测试的感觉,即了解逻辑但又不完全针对代码实现逻辑进行测试。
5.软件测试有哪些类型?
缺陷的来源分类
- 新增功能bug
- 修复bug引起的关联bug
- 需求变更引发的bug
- 模块对接的bug
- 兼容性bug
6.请阐述完整的测试流程?
开发提测→准入测试(冒烟测试)→功能测试(系统测试)→bug跟踪和管理→集成测试→验收测试→上线→线上回归测试
考虑角度
- 功能性:装水漏不漏,容量有多大
- 可靠性:水杯扔到地上会不会碎了
- 易用性:容不容易使用,有没有把手
- 兼容性:可不可以装饮料,沸水,冰水等
- 可维护性:是否容易清洗
- 安全性:是不是会伤到手,是否有毒等
8.如何得到4升水?
给你一个3升的杯子和一个5升,怎么得到4升水
- 装满3升的杯,然后倒入5升杯中
- 再装满3升的杯,然后再倒入5升杯中
- 5升杯中倒掉,3升杯中剩余的1升水倒入5升杯中
- 装满3升的杯,然后倒入5升杯中,共计4升
9.测试用例包含的要素有哪些?
- 用例编号
- 用例名称
- 优先级
- 测试模块
- 前置条件
- 测试输入
- 操作步骤
- 预期结果
- 实际结果
10.bug的生命周期?
11.bug生命周期中的状态管理?
12.黑盒测试用例设计方法有哪些?
黑盒测试用例设计方法有等价类划分法,判定表驱动法,场景分析法,边界值分析法,因果图,正交实验法,错误猜测法。
13.软件测试流程
系统测试相关规范和标准的流程:熟悉产品/项目,需求评审,测试需求,测试计划,测试方案,测试用例,预测试,第一轮正式测试、第二轮回归测试、第三轮测试,测试报告,测试总结,测试指南。
14. 如果你提的BUG开发不认为是BUG怎么办?
参考答案:
(1)首先测试人员要确保这确实是个bug(如果是误测,那只能测试人员自己背锅了);
(2)在测试环境将BUG复现出来,保存好截图、相关测试数据,发给开发人员,或直接给开发人员演示一遍;
(3)如果开发人员还认为不是BUG,或者是由于技术问题很难修改的BUG,可以叫上产品经理、开发负责人,一起讨论一下;
(4)对于等级比较低的建议性BUG,可以先记录到BUG管理系统,暂时不用说服开发去修改,后续再进行跟进。
15. 你对测试最大的兴趣在哪里?为什么?
答:我对未知的事物充满好奇心和挑战性。
我觉得在找到一个bug会让我兴奋,能够完善一个项目,让项目不出问题也是我很开心的一个地方。
解析:多从性格入手,可以自由的增加自己的看法,多往好的方向去说。
16. 开发说这个不是bug的时候该怎么解决?
答:首先要把自己检验出来的证据提交给开发工程师,和开发工程师积极沟通,遇到不能复现的bug,就要自己在去利用抓包、截图等方式去存证。如果和开发工程师沟通无果后,要让产品经理来确定是否属于bug。
- 解析:
- 和开发沟通
- 留存好bug的理由
- 如果无法解决,很多事情去找产品经理去解决
17. 从什么时候介入测试最好?
答:从项目需求阶段就开始介入最好,当我们介入测试越早,那么遇到的问题越少,我们在需求阶段就开始编写计划,方案,然后根据计划,方案进行测试用例编写,越能及时找出bug。
解析:越早越好,并编写相对应的文档。
18. 说下你测试之后的发展规划?
-
我要把功能测试这块熟悉好,然后不断的提升自己,能够独立负责一个项目的整体功能测试。
-
学会自动化测试,能够对项目进行自动化测试,节省回归测试的时间。
-
学会带领一个测试团队,分工,能够解决一个大型项目的测试工作…等等
解析:重点是思路要清晰,要清晰自己需要学什么,每一个阶段要去学什么东西。
19. 为什么进入测试行业?
答:因为测试行业是一个新兴行业,现在测试在互联网行业的比重越来越高,并且它需要很多样的技能,需要专心,耐心,与人沟通的技巧,也需要编程能力,相对开发要更加全面性。
解析:按自己的想法去打,前面说这个行业前景,后面就说自己的性格或者这个测试所需要的能力很多样。
20. 怎么才能够全面的测试到每一个点?
答:在项目伊始阶段,就要开始进行测试工作,测试计划一定要多方位,全面性的去考虑测试的策略,测试用例的编写等。
解析:及早介入项目测试,文档要编写的全面。
21. 你都用什么测试方法?
答:根据模块细分的功能不同,使用不同的测试方法,大方面是黑盒和白盒,然后我们黑盒测试的时候,设计测试用例根据不同的功能使用不同的设计方法(等价类划分、正交等),要保证测试的覆盖性。
解析:大部分测试都是在用黑盒测试,那么一般就要包括测试用例,而测试用例里几大设计方法要注意。
22. 测试用例通常包括哪些内容?
答:用例编号、用例名称、优先级、测试步骤、测试数据、预期结果、最终结果等。
解析:这个根据公司项目来定义,一般只需要有这几块就足够。
23. 如何定位前后端BUG?
答:可以通过以下几种方式
-
简单的去看请求响应定位
-
通过查询日志,如果日志无内容,说明前端问题,反之后端。
-
抓包工具去定位接口,查找数据。
解析:面试官问这个问题主要是看你怎么解决一个问题的思路,实际工作中很少会遇到这种情况,并且遇到也是很好去定位的。
24. 账号注册成功,但是登录的时候失败,怎么定位bug?
答: 调用登录的接口,看输入正确的账号是否成功,如果成功,登录接口无问题。那么注册接口,可能注册数据未存入数据库,或者注册接口验证等等都有问题。提交bug即可。
解析:简单的去测试一个功能点怎么定位bug,讲出自己的思路即可。
25. 软件质量是什么?
答:软件产品可以符合用户的需求,功能实现即可。
解析:满足用户的需求、功能是最重要的。
26. 测试用例的设计方法?
答:分为黑盒测试和白盒测试
黑盒测试:等价类划分法、边界值分析法、 因果图分析法、正交实验法、判定表法、场景法、功能图法、错误推测法
白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖
解析:正常答出这些点即可。
27. 所有的bug都能够修复吗、都需要修复吗?
答:理论上所有的bug都是能够去进行修复的,但是有一些bug并不需要修复。有一些细微,并不影响程序运行,功能的bug可以不修复,先把大型bug,重要的bug去进行修复,然后最后再进行修复。
解析:重点是先修复大bug,再修复小bug。
28. 软件的完全测试有可能吗?
答:不可能的。测试工作主要是找出bug,但是不能保证没有bug,因为在测试过程中,完全测试需要的测试数据量特别大,人力物力是要消耗特别多的。所以我们会见到不同的软件有内测,公测,需要很多人来完成这个测试。
解析:做什么事都没有完美的,测试也是。
29. 测试过程中发现需求文档不完善怎么处理?
答:找产品经理及时沟通,要找到不完善的地方,然后准确的提交给产品经理,这样才有说服力。
解析:核心就是标注出不完善的地方。
30. 开发修复bug后,如何保证不影响其他功能?
答:追加场景法设计测试用例,对一些功能进行场景测试,业务测试。
解析:用多种方法进行追加测试。
31. 什么时候功能测试?
答:从测试介入一开始,就可以进行功能测试了,功能测试是软件测试的核心,保证在一段时间内运行所有的功能,并找出bug。
解析:功能测试是整个软件测试的核心,最早进行介入。
二. mysql数据库刷题库
最基本的要求是数据库记录的增删改查(insert、delete、update、select),表结构的增删改查(create、drop、alter、describe)、存储过程、触发器等。
1. 查询数学成绩与语文成绩高的同学
select s.student_id,student_name,
s.course_id,c.course_name,s.score
from student st
join score s
on st.id = s.student_id
join course_id = c.id
on s.course_id = c.id
where c.course_name ="数学"
2. 查询平均成绩大于80分的学生
select student_name from student
where id in
select student_id
from score
group by student_id
having avg(score) > 80
)
3. 学过体育课程的学生的年龄
select s.student_name,
datediff(curdate(),student_birthday)/365
from course c join grade g
on c.grade_id =g.id
join class cl on cl.grade_id =g.id
join student s on s.class_id =cl.id
where c. course_name = "体育"
4. 主键、外键作用,索引的优点与不足
主键
- 表中的唯一标示键
- 作用:保证实体的完整性,加快数据库的操作速度。
外键:
- 主键的从属,表示两个表之间的联系
- 作用:作用外键可以建立数据之间的关联,避免冗余
索引:
优点
- 通过创建唯一性的索引,保证表中数据唯一性
- 加速数据的检索速度
- 加快表与表之间的连接
- 使用优化隐藏器,提供系统性能
缺点:
- 创建索引需要时间,
- 索引需要占用物理空间
- 当对表中数据进行修改时,索引也要动态维护,减低数据的维护速度。
5. 表的创建语法
create table 表名(
属性名1 数据类型 [约束条件],
属性名2 数据类型 [约束条件],
属性名3 数据类型 [约束条件]
);
6. 删除表
drop table 表名;
7. 删除多个表
drop table 表名 1,表名 2 ...
8. 修改表结构
8.1. 添加列(属性)
alter table 表名 add 属性名 数据类型;
8.2. 删除表(属性)
alter table 表名 drop 属性名;
8.3. 修改属性:数据类型
alter table 表名 modify 属性名 数据类型;
8.4. 修改字段名
alter table 表名 change 旧字段名 新字段名 数据类型;
3.3数据库增删改查
create alter drop desc主要针对表结构来说的
insert delete update select 主要针对表中的数据来进行操作的
9. DML-INSERT
9.1.insert 插入 值和列一一对应关系
格式 1:
insert into 表名(列名 1,列名 2 ...) values(值 1,值 2 ...);
格式 2:
insert into 表名 values(值 1,值 2 ...);
格式 3:
insert into 表名 values(值 1,值 2,值 3 ...),(值 1,值 2,值 3 ...);
9.2.删除 delete
格式 1:代表清空表内的数据
delete from 表名;
格式 2:
有条件的进行删除:delete from 表名 where 条件;
9.3.DML–UPDATE 更新
格式 1
update table_name set 字段=值;
格式 2
update table_name set 字段=值,字段=值;
格式 3
update table_name set 字段=值,字段=值 where 条件;
9.4.select 查询
9.4.1.基本格式:
select 列名 from 表名;
select 列名 1,列名 2,列名 3 ... form 表名;
9.4.2. 使用关键字 distinct 查询
在查询返回结果中删除重复行
语法:select distinct 列名称 from 表名称;
只针对一个列去重
9.4.3.使用别名查询
根据需要对数据显示的标题进行修改
格式:select 列名1 '别名',列名2 '别名',... from 表名;
AS 关键字连接列表达式和指定的别名
select 列名 as '别名' from 表名;
9.4.4.条件查询
格式:select 列名 from 表名 where 条件;
如果在查询过程中,有多个条件,可以使用 and 或 or 进行连接
and 连接 —》同时满足; or 连接 ------只满足其一
9.4.5.范围搜索范围
在范围之内
select 列名 from where 列名 between 开始值 and 结束值
不在范围之内
select 列名 from 表名 where 列名 not between 开始值 and 结束值;
9.4.6.列表搜索条件
in: 只要匹配到括号里任意一个值就会有查询结果;
格式:select 列名 from 表名 where 列名 in (值 1,值 2,值 3 ...)
not in:
格式: select 列名 from 表名 where 列名 not in(值 1,值 2,值 3);
10. 数据库表连接查询:子查询、内连接、外连接
10.1. 多表查询
去重
- 显式
select [distinct] A.列名,B.列名,C.列名,... from C
oin A on A.key=C.FKeyA
oin B on B.key=C.FKeyA and B.key=A.key
[GROUP BY 字段名]
- 隐式
select [distinct] A.列名,B.列名,C.列名,... from 表A,
表B,
表C
where 表A.字段1 = 表B.字段1 and
表B.字段2 = 表C.字段2 and ....
[GROUP BY 表名.字段名]
排序
select A.列名,B.列名,C.列名,... from C
join A on A.key=C.FKeyA
join B on B.key=C.FKeyA and B.key=A.key
[ORDER BY 表名.字段名]
10.2. 子查询
-
子查询只返回一个值
-
子查询首选使用in做匹配
-
子查询在其他查询结果的基础上提供了一种有效的方式来表示where字句的条件 。
-
子查询的selec查询总是使用圆括号括起来。
-
对于子查询来说,外查询条件要什么,子查询就查什么。 一一对应的关系。
-
子查询结果分类:
①.标量子查询(子查询结果为单个值):
-
子查询返回的结果是单个值〔数字、字符串、日期等)
-
常用操作符:= <> > >= <= < ②.列子查询(子查询结果为一列):子查询返回的结果是一列
-
常用操作符:in、not in、any、some、all
select 列表名 from 表名 where 字段名 > all (子查询语句); select 列表名 from 表名 where 字段名 > any (子查询语句);
③.行子查询(子查询结果为一行):
- 常用操作符:=、<>、 in、not in
select 字段名,... from 表名A where (字段名1,字段名2,...) = (select 字段名1值,字段名2值,... from 表名B where 条件)
④.表子查询(子查询结果为多行多列):in
select 字段名,... from 表名A where (字段名1,字段名2,...) in (select 字段名1值,字段名2值,... from 表名B where 条件)
10.3. 内连接:只有匹配到的情况下才会返回结果值
格式一(隐式):
from 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2...
form 表名1,表名2
where 表名1.列=表名2.列; //列为相同的列
格式二(显式):
select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2...
from 表名1 inner join 表名2
on 表名1.列=表名2.列
10.4. 外连接
- 外部连接会返回from字句中提到的至少一个表或视图中的所有行
- 左连接:显示左边所有行。如果左表的某行在右表中没有找到匹配的行,则结果集中的右表相对应位置为null。
select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2
from 表名1 left outer join 表名2
on 表名1.列=表名2.列; //列为大家共有的列
- 右连接:显示右边所有行
right outer join
select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2
from 表名1 right outer join 表名2
on 表名1.列=表名2.列;
- 区分是左连接还是右连接:左连接以坐标为参考,左表没有则返回null,右连接以右表为参考,右表没有则返回null
10.4.5.联合查询
- 把多次查询的结果合并起来,形成一个新的查询结果集
- 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
- union all会将全部的数据直接合并在一起,union 会对合并之后的数据去重。
select 字段名 from 表A ....
UNION [ALL]
select 字段名 from 表B ...;
三. linux操作系统刷题篇
最基本的目标是熟悉常见的50个命令,比如find命令(-name、-type、-perm、-user、-group、-ctime、-atime)等,熟悉vi、熟悉linux搭建测试环境。比如LAMP环境搭建。
1. 进程与线程的理解
- 进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
- 线程是进程的一部分
- 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
2. 进程监控与内存监控
- 基础概念
指令: ps 作用: 主要是查看服务器的进程信息 选项含义: -e:等价于 ‘-A’ ,表示列出全部的进程 -f:显示全部的列(显示全字段)
- 执行结果
列的含义说明:
UID: 该进程执行的用户id
PID: 进程id
PPID: 该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程被称为僵尸进程
C: cpu的占用率,形式是百分数(%)
STIME: 进程的启动时间
TTY: 终端设备,发起该进程的设备识别符号,如果显示‘ ?’表示该进程并不是由终端发起
TIME: 进程的执行时间
CMD: 该进程的名称或对应的路径
- 常用组合命令
命令:ps -ef | grep 进程名称
注意:执行该命令至少有一个进程(搜索该命令的进程)
例如:查看火狐浏览器的进程
例: 执行进程:ps -ef | grep mariadb 杀掉进程:kill -9 123
3. linux常见命令有哪些
目录相关命令
- cd
- mkdir
- pwd
- ls
- ll
文件相关命令
- touch
- cat
- more
- less
- head
- tail
- find
- vim
- rm
其他命令
- ip addr
- chmod
- useradd
- reboot
- top
- ps
- kill
- tar
- unzip
4. 修改文件权限
- 文件权限改为所有者读,所在的组写,其他用户执行
5. 动态查看日志
tail -f 文件名 动态查看日志
在运行大型EDA软件时候经常需要查看日志了解当前运行状态.
假设日志还是在实时更新ing
tail filename.txt
查看日志最后十行(默认是10行)会退出查看,回到命令行
tail -n 26 filename.txt
效果同第一条,也会推出,这里只是通过-n 后边的数字指定显示最后多少行,这里是显示了26行(默认只显示10行)
tail -f filename.txt
这条命令的-f选项可以支持动态实时显示,查看后不退出到命令行,一直等待日志更新(当然也是默认只显示最后十行)
tail -f -n 25 filename.txt
这一条比上一条指定的行数,动态显示最后25行
具体步骤
1 先cd到我们需要监控的日志目录。
2 tail -f -n 20 文件名 //默认显示最后10行。
3查看完日志了需要退出,Ctrl + c
6. adb常用命令
adb 帮助:adb --help
启动adb 服务:adb start-server
关闭adb 服务:adb kill-server
获取设备号:adb devices
获取系统版本:adb shell getprop ro.build.version.release
发送文件到手机:adb push 电脑端⽂件路径/需要发送的文件,手机端存储的路径
adb push C:\Users\win\Desktop\xx.png /sdcard
从手机拉取文件: adb pull 手机端的路径/拉取文件名 电脑端存储文件路径
adb pull /sdcard/xx.png C:\Users\win\Desktop
查看手机运行日志: adb logcat
进入到手机终端: adb shell
安装app到手机: adb install 路径/xxx.apk
卸载手机app : adb uninstall app
获取app启动包名和启动名(⚠手机需要先打开对应app)
Mac/Linux: adb shell dumpsys window windows | grep mFocusedApp
在 Windows 终端运⾏: adb shell dumpsys window w | findstr mCurrent
获取app启动时间: adb shell am start -W 包名/.启动名
查看设备ip地址:
adb shell ifconfig wlan0
adb shell netcfg
查看设备cpu信息: adb shell cat /proc/cpuinfo
查看设备内存信息: adb shell cat /proc/meminfo
点亮屏幕: adb shell input keyevent 224
熄灭屏幕: adb shell input keyevent 223
四. 面试
1. 好工作从好简历开始
- 如何编写一份获得更多面试机会的简历
简历包含的要素:基本信息,求职意向,教育背景,专业技能,工作经历,项目经验,自我评价,学生(在校荣誉)
- 不打无把握之仗-面试赴约准备
2. 面试经验技巧
如何介绍自我介绍
自我介绍最重要的是能够在面试官心目中留下一个好的第一感觉。说得更直白一点是让面试官舒服。但是我发现很多人就是直接简单的介绍了一下过去的经历,但是实际上一方面过去的经历没有很好的让人发现优点。其实面试好比相亲,你想说什么不重要,重要地是人家想听什么。比较好的自我介绍套路是这样:“您好,我叫XXX,很高兴能获得这次面试机会,今天来面试是想证明自己是最合适的人选,另一个方面是获得您的认可,结合我过去的工作和学习经历,我自信我能符合咱们公司的认可,接下来您看是我继续介绍我做过的项目,还是您问您关心的问题?”
你的职业规划是什么?
一、走技术发展路线
1、测试专家,比如 “测试架构师”(关键词:技术难题攻关、关键业务评审、基础设施搭建、解决一线实际问题、规划团队技术发展)
2、专项测试工程师,比如 “自动化测试技术专家”、“性能测试技术专家”(关键词:软件测试某领域、技术专家)
区别:前者关注具体的某一个产品,综合考量选取更合适的技术;后者不关注具体的产品,而是研究某一专项技术的共性。
二、走管理发展路线
1、测试组长(关键词:产品重点难点测试、辅导新人、任务分配、任务跟进)
2、测试经理(关键词:项目管理、沟通协调、团队成长)
3、测试总监(关键词:理解产品商业目标、部门发展)
最后一个问题,面试官一般会问,您还有什么想问的吗?还有什么想了解的吗?
总体上来说最重要的是留下一个好的近因效应,就好比相亲的时候,分手离开的时候,留下好的最后的印象,基本的思路应该分三种情况,
第一种是面试官对你满意,自己也感觉不错的情况下,先表示感谢,然后积极主动的问题,比如,非常感谢您给的这次机会,但是我还是想问,如果我有下一轮面试,我想知道知道是什么时候,我应该再做哪些方面的准备。
第二种情况是面试官和自己感觉都一般般,感觉自己是鸡肋,这个时候说不说很重要,基本的套路是,非常感谢面试官给的这个机会,坦白地说我对自己今天的面试表现不是非常满意,还可以表现得更好,但是如果我还是非常想得到这个机会,您能否给我一些建议。
第三种情况是面试情况非常糟糕,这种情况下,很少有人能说出感谢,但这恰恰体现一个人的风度。基本的思路是,不管怎么样,还是得感谢您给的机会,让我自己认识到自己的不足,坦白地说我离这个岗位的要求还有些距离,但是我还是想知道,如果将来我还想来咱们公司面试,您能否给点具体建议。
总结,面试是一个相亲的过程,相亲的成败取决于很多要素,但是好的、充分地准备,能够让我们更加从容地和主动的去面对压力与挑战,而不是简单地把自己变成超市里面的菜,供人挑选。
3. 面试后的总结
面试前的准备: 笔,本
一般的面试流程: 笔试,技术面试, HR面试
一定要记住的: 无论在面试过程中的问题没有回答上了,要记到笔记本上再去查找答案,预防下一次会出现
结尾:
对于软件测试来说,其实没有严格的 “技术” 或者 “管理” 一说,管理不可能是纯粹的管理,技术也不可能是纯粹的技术。
软件测试是一门需要不断实践和总结的学科,身为测试经理却不去关注技术的发展,是做不好测试管理的;身为测试专家不去关注产品价值和目标,只懂技术不会管理,也是做不好测试策略的。
阿常作为测试管理者,实际工作中所做的也不是纯管理事务,平时也会经常参与实际的测试任务,只有在测试实践中不断总结测试经验、学习新的测试技术,管理水平才能有提升。