(一)测试基础知识篇

1.如何高效填写软件缺陷报告?

缺陷报告是测试工程师与开发工程师交流沟通的重要桥梁,也是测试工程师日常工作的重要输出。(把发现的缺陷准确无歧义地表达清楚。)

好的缺陷报告绝对不是大量信息的堆叠,而是以高效的方式提供准确有用的信息。

一份高效的缺陷报告的组成部分:
(1)缺陷标题:常采用“在什么情况下发生了什么问题”的模式。
首先,对“什么问题”的描述不仅要做到清晰简洁,最关键是要足够具体,切忌不能采用过于笼统的描述。描述“什么问题”的同时还必须清楚地表述发生问题时的上下文,也就是问题出现的场景。
其次,标题应该尽可能描述问题本质,而避免只停留在问题的表面。
最后,缺陷标题不易过长,对缺陷更详细的描述应该放在“缺陷概述”里。

(2)缺陷概述:常会提供更多概括性的缺陷本质与现象的描述,是缺陷标题的细化。
缺陷概述的目的是,清晰简洁地描述缺陷,使开发工程师能够聚焦缺陷的本质。

(3)缺陷影响:缺陷引起的问题对用户或者对业务的影响范围以及严重程度。
测试工程师准确描述缺陷影响的前提是,必须对软件的应用场景以及需求有深入的理解,这也是对测试工程师业务基本功的考验。

(4)环境配置:用以详细描述测试环境的配置细节,为缺陷的重现提供必要的环境信息。
需要注意的是,环境配置的内容通常是按需描述,也就是说通常只描述那些重现缺陷的环境敏感信息。

(5)前置条件:指测试步骤开始前系统应该处在的状态,其目的是减少缺陷重现步骤的描述。合理地使用前置条件可以在描述缺陷重现步骤时排除不必要的干扰,使其更有针对性。

(6)缺陷重现步骤:整个缺陷报告中最核心的内容,其目的在于用简洁的语言向开发工程师展示缺陷重现的具体操作步骤。
操作步骤通常是从用户角度出发来描述的,每个步骤都应该是可操作并且是连贯的,所以往往会采用步骤列表的表现形式。
通常测试工程师在写缺陷重现步骤前,需要反复执行这些步骤 3 次以上:一是,确保缺陷的可重现性;二是,找到最短的重现路径,过滤掉那些非必要的步骤。

(7)期望结果和实际结果:通常和缺陷重现步骤绑定在一起,在描述重现步骤的过程中,需要明确说明期待结果和实际结果。期待结果来自于对需求的理解,而实际结果来自于测试执行的结果。
当你描述期望结果时,需要说明应该发生什么,而不是什么不应该发生;而描述实际结果时,你应该说明发生了什么,而不是什么没有发生。

(8)优先级(Priority)和严重程度(Severity):缺陷优先级是指缺陷必须被修复的紧急程度,而缺陷严重程度是指因缺陷引起的故障对软件产品的影响程度。
严重程度是缺陷本身的属性,通常确定后就不再变化,而优先级是缺陷的工程属性,会随着项目进度、解决缺陷的成本等因素而变动。
缺陷的优先级和严重程度又有什么关系呢?(1)缺陷越严重,优先级就越高;(2)缺陷影响的范围越大,优先级也会越高;(3)有些缺陷虽然从用户影响角度来说不算严重,但是会妨碍测试或者是自动化测试的执行,这类缺陷属于典型的严重程度低,但是优先级高;(4)有些缺陷虽然严重程度比较高,但是考虑到修复成本以及技术难度,也会出现优先级较低的情况。

(9)变通方案(Workaround):是提供一种临时绕开当前缺陷而不影响产品功能的方式,通常由测试工程师或者开发工程师完成,或者他们一同决定。

(10)根原因分析(Root Cause Analysis):可以做好根原因分析的测试工程师,通常都具有开发背景,或者至少有较好的代码阅读以及代码调试的能力。所以做为测试工程师,你很有必要去深入学习一门高级语言,这将帮助你体系化地建立起编程思想和方法,这样在之后的工作中,无论你是面对开发的代码,还是自动化测试代码和脚本都能做到得心应手,应对自如。

(11)附件(Attachment):附件通常是为缺陷的存在提供必要的证据支持,常见的附件有界面截图、测试用例日志、服务器端日志、GUI 测试的执行视频等。

2.以终为始,如何才能做好测试计划?

一份成功的测试计划应该包含哪些内容,以及如何才能做好测试计划。

测试计划依旧存在,只是从原来的一次性集中制定测试计划,变成了以迭代的方式持续制定测试计划。 但是对于传统软件企业,或者是做非互联网软件产品的企业,它们通常还是会有非常正式的软件测试计划。

一份好的测试计划要包括:
(1)测试范围:描述的是被测对象以及主要的测试内容。
比如,对于用户登录模块,功能测试既需要测试浏览器端又需要测试移动端,同时还考虑登录的安全和并发性能相关的非功能性需求的测试等。同时,由于不可能进行穷尽测试,而且测试的时间和资源都是有限的,所以必须有所取舍,进行有针对性的测试。因此,测试范围中需要明确“测什么”和“不测什么”。

(2)测试策略:简单来讲就是需要明确“先测什么后测什么”和“如何来测”这两个问题。
测试策略会要求我们明确测试的重点,以及各项测试的先后顺序。测试策略还需要说明,采用什么样的测试类型和测试方法。
【1】功能测试:根据测试需求分析的思维导图来设计测试用例。
主线业务的功能测试由于经常需要执行回归测试,所以你需要考虑实施自动化测试,并且根据项目技术栈和测试团队成员的习惯与能力来选择合适的自动化测试框架。(通常应该先实现主干业务流程的测试自动化。)
【2】兼容性测试:
Web 测试需要确定覆盖的浏览器类型和版本,移动设备测试需要确定覆盖的设备类型和具体 iOS/Android 的版本等。
兼容性测试的实施,往往是在功能测试的后期,也就是说需要等功能基本都稳定了,才会开始兼容性测试。
【3】性能测试:
需要在明确了性能需求(并发用户数、响应时间、事务吞吐量等)的前提下,结合被测系统的特点,设计性能测试场景并确定性能测试框架。(比如,是直接在 API 级别发起压力测试,还是必须模拟终端用户行为进行基于协议的压力测试。再比如,是基于模块进行压力测试,还是发起全链路压测。)

(3)测试资源:通常包括测试人员和测试环境。(测试资源就是需要明确“谁来测”和“在哪里测”这两个问题。)
测试人员的资源通常有两个维度:一是,测试工程师的数量;二是,测试工程师的个人经验和能力。(测试工程师的经验和能力不足,很难通过测试人员的数量来弥补。相反地,测试工程师的经验和能力都非常强的情况下,测试人员的数量可以适当地减少。)

(4)测试进度:主要描述各类测试的开始时间,所需工作量,预计完成时间,并以此为依据来建议最终产品的上线发布时间。

(5)测试风险预估:通常需求变更、开发延期、发现重大缺陷和人员变动是引入项目测试风险的主要原因。
所以,在制定测试计划时,你就要预估整个测试过程中可能存在的潜在风险,以及当这些风险发生时的应对策略。

3.软件测试工程师的核心竞争力是什么?

只有当你真正明白了自己的核心竞争力,你才能理清“应该做什么”和“应该怎么做”这两个问题,才能朝着正确的方向前行。

如果抛开这个特定的业务领域,他对测试技术本身以及产品技术实现都缺乏系统的思考和理解。换言之,他的价值仅仅能够体现在这个特定的产品业务上,而一旦离开了这个业务领域,他的经验积累很难被有效重用,也就是说他很难快速适应并胜任我们的业务领域测试。所以,他最终没有得到我们的 offer。(作为测试人员,必须要深入理解业务,但是业务知识不能等同于测试能力。

测试开发岗位的核心其实是“测试”,“开发”的目的是更好地服务于测试,我们看重的是对测试的理解,以及在此基础上设计、开发帮助测试人员提高效率并解决实际问题的工具,而不是一个按部就班、纯粹意义上的开发人员。

目前的测试工程师分为两大类别,一类是做业务功能测试的,另一类是做测试开发的,二者的核心竞争力有很大差别。那么,接下来我就带你一起去看看,功能测试和测试开发工程师的核心竞争力分别是什么?

【1】业务功能测试工程师

测试工程师要具备的七项核心竞争力,包括:测试策略设计能力、测试用例设计能力、快速学习能力、探索性测试思维、缺陷分析能力、自动化测试技术和良好的沟通能力。(快速学习能力、沟通能力、测试用例设计能力。不断地学习、丰富自己的知识体系,具备更强的职场竞争力,不正是你在追求的吗?)

第一项核心竞争力,测试策略设计能力。测试策略设计能力是指,对于各种不同的被测软件,能够快速准确地理解需求,并在有限的时间和资源下,明确测试重点以及最适合的测试方法的能力
具备出色的测试策略设计能力,你可以非常明确地回答出测试过程中遇到的这些关键问题:(1)测试要具体执行到什么程度;(2)测试需要借助于什么工具;(3)如何运用自动化测试以及自动化测试框架,以及如何选型;(4)测试人员资源如何合理分配;(5)测试进度如何安排;(6)测试风险如何应对。培养出色的测试策略设计能力,不是一朝一夕的事情,通常需要经过大量项目的实际历练,并且你还要保持持续思考,主动去提炼共性的内容。不像测试技术,你可以通过培训或者网上资料的学习而有快速的提升,测试策略设计能力一定是需要你在大量实践的基础上潜移默化形成的。我认为,测试策略设计能力是功能测试工程师最核心的竞争力,也是最难培养的。

第二项核心竞争力,测试用例设计能力。测试用例设计能力是指,无论对于什么类型的测试,都能设计出高效地发现缺陷,保证产品质量的优秀测试用例。要做好测试用例设计,不仅需要深入理解被测软件的业务需求和目标用户的使用习惯,还要熟悉软件的具体设计和运行环境,包括技术架构、缓存机制、中间件技术、第三方服务集成等等。要想提高测试用例设计能力,你平时就要多积累,对常见的缺陷模式典型的错误类型以及遇到过的缺陷要不断地总结、归纳,才能逐渐形成体系化的用例设计思维。同时,你还可以阅读一些好的测试用例设计实例开阔思路,日后遇到类似的被测系统时,可以做到融会贯通和举一反三。

第三项核心竞争力,快速学习能力。快速学习能力,包含两个层面的含义:对不同业务需求和功能的快速学习与理解能力;对于测试新技术和新方法的学习与应用能力。快速学习能力,乍一看是比较难培养的,但其实也有一些小窍门。比如,当你学习一个新的开源工具时,建议你直接看官方文档:一来,这里的内容是最新而且是最权威的;二来,可以避免网上信息质量的参差不齐。知识输入源头是单一,而且权威的话,你的学习曲线也必然会比较平滑。另外,当学习新内容时,你一定要做到理解其原理,而不是只停留在表面的、简单的操作和使用,长期保持这种学习状态,可以在很大程度上提高逻辑思维和理解能力。这样,当你再面对其他新鲜事物时候,也会更容易理解,形成良性循环。

第四项核心竞争力,探索性测试思维。探索性测试是指,测试工程师在执行测试的过程中不断学习被测系统,同时结合基于自己经验的错误猜测和逻辑推理,整理和分析出更多的有针对性的测试关注点。本质上,探索性测试思维是“测试用例设计能力”和“快速学习能力”有机结合的必然结果。优秀的探索性测试思维可以帮助你实现低成本的“精准测试”,精准测试最通俗的理解可以概括为针对开发代码的变更,目标明确并且有针对性地对变更点以及变更关联点做测试,这也是目前敏捷测试主推的测试实践之一。

第五项核心竞争力,缺陷分析能力。缺陷分析能力,通常包含三个层面的含义:(1)对于已经发现的缺陷,结合发生错误的上下文以及后台日志,可以预测或者定位缺陷的发生原因,甚至可以明确指出具体出错的代码行,由此可以大幅缩短缺陷的修复周期,并提高开发工程师对于测试工程师的认可以及信任度;(2)根据已经发现的缺陷,结合探索性测试思维,推断同类缺陷存在的可能性,并由此找出所有相关的潜在缺陷;(3)可以对一段时间内所发生的缺陷类型和趋势进行合理分析,由点到面预估整体质量的健康状态,并能够对高频缺陷类型提供系统性的发现和预防措施,并以此来调整后续的测试策略。这三个层面是依次递进的关系,越往后越能体现出测试工程师的核心竞争力。

第六项核心竞争力,自动化测试技术。掌握自动化测试技术,可以把你从大量的重复性手工劳动中解放出来,这样你可以把更多的时间花在更多类型的测试上。一方面,自动化测试技术本身不绑定被测对象,比如说你掌握了 GUI 的自动化测试技术,那么你就可以基于这个技术去做任何 GUI 系统的界面功能测试了。另一方面,自动化测试技术需要测试工程师具备一定的写代码的能力,这通常与测试工程师职业发展的诉求不谋而合,所以你会看到很多测试工程师非常热衷做自动化测试。但是切记,自动化测试的核心价值还是“测试”本身,“自动化”仅仅是手段,实际工作中千万不要本末倒置,把大量的精力放在“自动化”上,一味追求自动化而把本质的“测试”弱化了。

第七项核心竞争力,良好的沟通能力。测试工程师在软件项目中作用,有点像“润滑剂”:一方面,你需要对接产品经理和项目经理,以确保需求的正确实现和项目整体质量的达标;另一方面,你还要和开发人员不断地沟通、协调,确保缺陷的及时修复与验证。所以,测试工程师的沟通能力会直接影响事务开展的效率。良好清晰的沟通能力,是一个技术优秀的测试工程师能否获得更大发展的“敲门砖”,也是资深测试工程师或者测试主管的核心竞争力

【2】测试开发工程师的核心竞争力
首先既然是测试开发工程师,那么代码开发能力是最基本的要求。可以说,一个合格的测试开发工程师一定可以成为一个合格的开发工程师,但是一个合格的开发工程师不一定可以成为合格的测试开发工程师。

第一项核心竞争力,测试系统需求分析能力。除了代码开发能力,测试开发工程师更要具备测试系统需求分析的能力。你要能够站在测试架构师的高度,识别出测试基础架构的需求和提高效率的应用场景。从这个角度说,你更像个产品经理,只不过你这个产品是为了软件测试服务的。

第二项核心竞争力,更宽广的知识体系。测试开发工程师需要具备非常宽广的知识体系,你不仅需要和传统的测试开发工程师打交道,因为他们是你构建的测试工具或者平台的用户;而且还要和 CI/CD、和运维工程师们有紧密的联系,因为你构建的测试工具或者平台,需要接入到 CI/CD 的流水线以及运维的监控系统中去。除此之外,你还要了解更高级别的测试架构部署和生产架构部署、你还必须对开发采用的各种技术非常熟悉。可见,对于测试开发工程师的核心竞争力要求是非常高的,这也就是为什么现今市场上资深的测试开发工程师的价格会高于资深的开发工程师的原因。

4.软件测试工程师需要掌握的非测试知识有哪些?

开发工程师通常是“深度遍历”,关注的是“点”;而测试工程师通常是“广度遍历”,关注的是“面”。
小到 Linux/Unix/Windows 操作系统的基础知识,Oracle/MySQL 等传统关系型数据库技术,NoSQL 非关系型数据库技术,中间件技术,Shell/Python 脚本开发,版本管理工具与策略,CI/CD 流水线设计,F5 负载均衡技术,Fiddler/Wireshark/Tcpdump 等抓包工具,浏览器 Developer Tool 等。
大到网站架构设计,容器技术,微服务架构,服务网格(Service Mesh),DevOps,云计算,大数据,人工智能和区块链技术等。

(1)网站架构的核心知识
想要做好互联网产品功能测试以外的其他测试,比如性能测试、稳定性测试、全链路压测、故障切换(Failover)测试、动态集群容量伸缩测试、服务降级测试和安全渗透测试等,就要掌握网站的架构知识。

(2)容器技术
很多中大型互联网企业都在推行容器化开发与运维,开发人员递交给测试工程师的软件版本通常就是一个 Docker Image,直接在容器上进行测试。有些公司还会把测试用例和执行框架也打包成 Docker Image,配合版本管理机制,实现用容器测试容器。

(3)云计算技术
一方面,很多企业,尤其是互联网企业都在尝试“上云”,显然,作为测试工程师,你必须理解服务在云端部署的技术细节才能更好的完成测试任务。
另一方面,测试基础服务作为提供测试服务的基础设施,比如测试执行环境服务(Test Execution Service)和测试数据准备服务(Test Data Service)等,也在逐渐走向云端。
侧重点应该是如何使用云提供的基础设施以及服务。参考你所采用的云方案的官方文档,再结合实际案例进行试用,学习效果会更好。

5.互联网产品的测试策略应该如何设计?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值