一.软件测试基础理论
1.0.软件测试的定义与意义是什么?
软件测试的定义:在规定的条件下对程序进行操作,以发现错误,对软件质量进行评估的一个过程;
软件测试的意义:提前发现潜在的安全隐患,避免出现损失,降低风险。为了发现软件存在的问题,为了保障软件的质量,还是为了给市场业务价值保障?作为软件测试从业者,我也经常问自己类似这样的问题,我们软件测试/软件质量保障做的一切工作活动,一定是为了保障业务交付。软件测试工程师要打造发现问题的能力,同样也需要有打造高稳定性的能力。我们需要对每次发现的问题都剖析如何能避免问题再次发生或更早阶段识别,同时对遗漏的问题都深入思考,以及剖析为什么没能提前发现,如何在下次避免此类问题的发生。
1.1.软件测试的基本原则有哪些?
- 基于用户角度去发现问题
- 测试左移:越早介入测试越好
- 不可能穷举测试
- 二八原则:出现BUG的模块,出现更多BUG的可能性更高
- 不仅要设计正向的用例,还需要设计反向的用例
- 测试依赖于上下文:测试不能只关注需求本身,还要考虑关联的上下游等诸多因素
1.2.软件测试的状态有哪些?
- 静态测试
不用运行程序的测试,就是静态测试。
主要是指代码走读:按照需求逻辑,阅读源代码,阅读SQL语句。
在测试人员经验充足的情况下,进行静态测试可以发现很深入的问题。 - 动态测试
需要运行程序时才能进行的测试就是动态测试。
1.3.软件测试一般要做哪些方面的测试?
- 功能测试
只需考虑需要测试的各个功能,不需要考虑整个软件的内部结构及代码.一般从软件产品的界面、架构出发,按照需求输入数据,然后对结果进行测试。功能测试也包括了对产品功能的稳定性、兼容性、可靠性测试等;
- 性能测试
通过自动化技术,对软件的各项性能指标进行测试评估的过程。一般必须功能稳定后才能进行性能测试。
- 安全测试
站在防御者的角度,尽可能的发现软件安全隐患的过程。安全测试的知识点很分散,互联网任何技术领域的问题,都有可能导致安全问题出现,所以安全测试是最难精通,也是最容易应用的。
1.4.自动化测试比例与优缺点是什么?
- 理论比例
10%UI自动化
20%接口自动化
70%单元测试 - 自动化测试优缺点
优点
- 可以解决难以测试的场景
- 可以快速回归测试
缺点
- 不能完全替代手工
- 脚本维护困难
- 技术要求高,难以推广
1.5.什么是白盒、黑盒、灰盒测试?
或者问“软件测试的类型有哪些?”
- 白盒测试
完全清楚代码逻辑,针对代码进行的测试。
测试方法主要包括:路径覆盖、语句覆盖、条件覆盖、判定覆盖(分支)
在软件测试中,白盒测试一般由开发自己完成,测试不介入。
- 黑盒测试
完全不清楚代码逻辑,只按照需求设计输入数据,然后对输出进行验证的过程。
- 灰盒测试
介于白盒和黑盒之间的测试。
1.6.白盒测试和黑盒测试有哪些区别?
答:1、白盒测试可以更早介入测试,而黑盒测试需要等系统开发完成才能进行测试;
2、黑盒测试对测试人员技术要求较低,甚至普通人也可以进行黑盒测试,但往往只能检查到系统功能使用层面的bug;而白盒测试需要的技术水平较高,对代码测试的更加全面、具体,能发现深入的隐藏问题;
3、黑盒测试从用户角度去测试系统,更加直接找到用户在使用时系统可能产生的问题;白盒测试不能从用户角度去寻找BUG,且无法穷举程序中所有可能的逻辑路径(特别是有循环的场景);
1.7.软件测试常用策略有哪些?
用尽可能少的时间,发现更多的BUG。
执行测试:
- 冒烟测试
- 探索性测试策略
- 回归测试重点针对新增功能和BUG进行测试
1.8.什么是流程化测试和精准化测试?
流程化测试是在路径覆盖的基础上提出的概念,主要是基于控制流来覆盖代码的测试方法;流程覆盖强调的是操作业务流程时,运行的代码流路径。这样,就能够把业务流程和代码中的路径流整合起来。流程化测试的度量标准是流程覆盖率=进行白盒测试时经过的路径 / 业务子集路径;
精准化测试是在流程覆盖的基础上,进一步升级的概念;精准化测试强调代码调用链与黑盒测试用例的关联;精准化测试通过记录执行用例时影响的代码,来标注出每一条测试用例,对应的代码;精准化测试的优点是可以统计代码覆盖率、缩减测试范围、指导探索性测试、利用线上数据推导有效测试用例;
1.9一个完整的测试流程会经历哪些过程或阶段?
开发提测
开发把代码写好,并且自测通过后,就会把发起提测
发起方式:QQ、微信、邮件、公司内部通讯公司和口头通知等方式来告知测试提测了,常见的是发邮件;
测试环境搭建
开发提测后,必须进行环境搭建才能执行测试。
测试环境的搭建方式根据公司的规模和流程,主要分为三种
- 开发或者运维帮助搭建,测试只需要按照要求执行测试即可;
- 开发提测时后,上传代码到指定位置,测试只需要使用公司提供的持续集成平台,点击部署即可;
- 开发提测时,以附属方式,附上环境搭建的核心代码,然后测试搭建;
(一般中大型公司都是第二种)
准入测试
环境搭建完成后,测试在执行正式的测试之前,需要进行一次“冒烟测试”,也就是准入测试。
主要目的是为了判断产品是不是处于“可测试”的状态。
准入测试时,主要是执行核心功能的测试,而不关注细节。
例如:电商中,能不能注册、登陆、下单、支付;物流中,能不能发货、取货、退货;
执行测试
- 执行方式
- 优先执行优先级高的用例
- 优先执行重要的功能模块
- 优先执行影响范围广的功能
- 执行过程
- 查看和收集执行过程中产生的日志,记录执行过程日志
- 执行用例时,每执行一条,都标记执行结果,记录执行过程用例
- 执行发现的问题,都需要提单记录,在测试过程中,记忆不靠谱
- 执行结果
- 高优先级BUG,大力推进修复,时刻关注。
- 中优先级BUG,周期性关注
- 低优先级BUG,如果事情很多,可以先存着,找空闲的时间一起提
缺陷跟踪和管理
执行测试时,或多或少都会发现一些问题,这时候就需要进行缺陷跟踪和管理了,
在这里,我们需要使用缺陷管理工具记录和管理缺陷,同时,也需要对缺陷的来源有一个初步的分析。
缺陷管理工具
- 禅道、Jira、TestLink等;
缺陷来源
缺陷来源有很多,一般可以分成这6个部分
- 开发新增功能的BUG
- 开发修复BUG引发的BUG
- 需求变更引发的BUG
- 第三方模块的BUG
- 历史遗留BUG
- 兼容性BUG
执行测试过程的经验总结
- 测试人员一般都是一边熟悉项目需求、一边进行测试,在此过程中,为了保证效率,主要进行探索性测试。项目没有完全了解透彻时就开展测试是“测试工作日常”。
- 执行时,发现BUG后一定要记录
结果阶段
执行完成后,一般就需要输出测试报告了
输出测试报告的前提条件 :
测试用例执行率达到100%,没有普通级别以上的BUG,剩余BUG经过项目组评估之后,确认可以遗留后,那么才能够发布测试通过的报告
- 测试输出测试报告
- 运维根据输出的测试报告准备发布上线
- 发布上线
二.项目管理相关
2.1.描述项目流程包含哪些阶段?
答:项目流程包含立项阶段、需求阶段、开发阶段、测试阶段、项目发布阶段;
①立项阶段,可分为有用户时的立项和没有用户时的立项:有用户的立项是用户指定要开发某某产品,有明确的功能;无用户的立项, 一般基于人类自身兴趣、市场分析等来源进行立项;
②立项后,到了需求阶段,由产品经理角色来分析用户需求,设计产品内容;
③需求确定后,进入开发阶段,首先进行项目排期,包括开发、测试、上线排期;接着开发在开发排期内完成编码与单元测试,测试撰写测试用例并召开测试用例评审会议;
④进入测试阶段,测试根据测试用例执行测试,发现并跟踪回归测试bug,测试完成后输出测试报告;
⑤项目上线前开发封版,测试进行整体回归测试,开发发布与执行上线流程,产品经理进行线上效果验证;
2.2.软件测试左移/右移定义、作用及实施方法;
答:测试左移的定义是:向开发移动;作用是可以让提测的代码质量更高;实施方法是测试进行单元测试,代码走读,代码审计;
测试右移的定义是向运维移动;作用是可以监控代码质量,为快速发现问题,解决问题进行保障;测试右移的实施方法是利用自动化技术,部署监控环境稳定性的脚本;
2.3.软件开发模型有哪些?
传统的软件开发模型有:边做边改型、瀑布模型、快速原型、螺旋模型;还有 近些年流行的敏捷开发模型、DevOps;
2.3.1.你了解什么是敏捷开发模型吗?
敏捷模型是现在非常流行的开发模型,主要是因为现在项目的度量方式是用产品数量来度量,所以管理人员偏向于“先有产品,再优化迭代”的开发思想。
而敏捷开发具备快速开发、快速迭代的特点,所以目前市场上敏捷开发特别火;
2.3.2.敏捷开发开展方式是怎样的?
1、首先确定一个产品需求列表;
2、然后根据产品需求列表,通过冲刺任务计划会议,来从中挑选出一个故事作为本次迭代完成的目标,这个目标的时间周期是1~4个星期,然后把这个故事进行细化,形成一个冲刺任务列表
3、冲刺任务列表是由敏捷管理团队去完成的,每个成员根据冲刺任务列表再细化成更小的任务(细到每个任务的工作量在2天内能完成);
4、敏捷管理团队完成计划会议上选出的冲刺任务列表过程中,需要进行每日站立会议,每次会议控制在15分钟左右,每个人都必须发言,并且要向所有成员当面汇报你昨天完成了什么,并且向所有成员承诺你今天要完成什么,同时遇到不能解决的问题也可以提出,每个人回答完成后,在看板前更新自己的 燃尽图(任务完成情况图)
5、做到每日集成,也就是每天都要有一个可以成功编译、并且可以演示的版本。
6、当一个故事完成,也就是冲刺任务被完成,也就表示一次冲刺完成,这时,我们要进行演示会议,也称为评审会议,产品负责人和客户都要参加(最好本公司老板也参加),每一个敏捷管理团队的成员都要向他们演示自己完成的软件产品。
7、最后就是回顾会议,也称为总结会议,以轮流发言方式进行,每个人都要发言,总结并讨论改进的地方,放入下一轮冲刺的产品需求中;
2.3.3.你知道什么是DevOps吗?有什么优点?
DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集;
DevOps在项目流程中的位置:
DevOps实施过程:
- 持续开发
通过敏捷模型来推动持续开发 - 持续测试
通过持续集成的技术,通过自动化的技术进行自动持续的测试 - 持续集成
每天周期性的提交代码到平台,并自动构建,打包,单元测试,还反馈测试结果 - 持续交付
自动搭建测试环境,自动运行自动化测试代码,自动发布 - 持续监控
部署持续监控服务器相关资源的工具,来监控软件运行是否稳定。
优点:
- 减少变更范围
- 加强协调
有的开发模型中,有项目经理来协调运维、测试、开发角色来管理发布 - 自动化
2.4.软件测试模型有哪些,分别有什么优缺点?
V模型、W模型、H模型;
V模型的优点:测试过程非常清楚;缺点:测试最后才介入;
W模型的优点:能够让测试更早的介入;缺点:因为实用W模型时,会产生更多的文档,所以会带来维护困难的问题;
H模型的优点:
- 软件测试完全独立
- 软件测试活动可以尽可能早的准备,灵活性很强
H模型的缺点:
- 测试就绪点很难分析
- 对项目组人员技术要求较高
2.5.软件质量模型有哪些?
国际标准:ISO9126
国标标准:GBT25000.10-2016;
2.5.1.软件质量是什么?
软件质量是指在特定的使用条件下产品满足明示的和隐含的需求所明确具备能力的全部固有特性(内在特性),体现了产品满足产品要求的程度(外部表现),是产品的质量属性。从概念分析对应到我们实际的测试工作,包括了三个要素:产品(我们的被测对象)、特性集合(需要采用哪些测试类型)、需求(覆盖的测试场景)。
2.5.2说说你了解的 ISO9126
ISO9126主要从6个特性和27个子特性去测试和评价软件的功能:
①功能性:
1、适合性:提供了相应的功能
2、准确性:正确(用户需要的)
3、互操作性:产品与产品之间交互数据的能力
4、保密安全性:允许经过授权的用户和系统能够正常的访问相应的数据和信息,禁止未授权的用户访问.......
5、功能性的依从性:国际/国家/行业/企业 标准规范一致性
②可靠性:
产品在规定的条件下,在规定的时间内完成规定功能的能力
1、成熟性:防止内部错误导致软件失效的能力
2、容错性:软件出现故障,自我处理能力
3、易恢复性:失效情况下的恢复能力
4、可靠性的依从性
③易用性:
在指定使用条件下,产品被理解、 学习、使用和吸引用户的能力
1、易理解性:
2、易学性:
3、易操作性:
4、吸引性:
5、易用性的依从性:
④效率性:
在规定台条件下,相对于所用资源的数量,软件产品可提供适当性能的能力
1、时间特性:平均事务响应时间,吞吐率,TPS(每秒事务数)
2、资源利用性:CPU 内存 磁盘 IO 网络带宽 队列 共享内存
3、效率依从性:
⑤软件维护性:"四规",
在规定条件下,规定的时间内,使用规定的工具或方法修复规定功能的能力
1、易分析性:分析定位问题的难易程度
2、易改变性:软件产品使指定的修改可以被实现的能力
3、稳定性:防止意外修改导致程序失效
4、易用测试性:使已修改软件能被确认的能力
5、维护性的依从性
⑥软件可移植性:
从一种环境迁移到另一种环境的能力
1、适应性:适应不同平台
2、易安装性:被安装的能力
3、共存性:
4、易替换性
5、可移植性的依从性: