mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-27 05:36:42 +08:00
285 lines
22 KiB
HTML
285 lines
22 KiB
HTML
<!DOCTYPE html>
|
||
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
|
||
<link rel="icon" href="/static/favicon.png">
|
||
<title>20 结束语 QA 如何打造自身的核心竞争力?.md.html</title>
|
||
<!-- Spectre.css framework -->
|
||
<link rel="stylesheet" href="/static/index.css">
|
||
<!-- theme css & js -->
|
||
<meta name="generator" content="Hexo 4.2.0">
|
||
</head>
|
||
<body>
|
||
<div class="book-container">
|
||
<div class="book-sidebar">
|
||
<div class="book-brand">
|
||
<a href="/">
|
||
<img src="/static/favicon.png">
|
||
<span>技术文章摘抄</span>
|
||
</a>
|
||
</div>
|
||
<div class="book-menu uncollapsible">
|
||
<ul class="uncollapsible">
|
||
<li><a href="/" class="current-tab">首页</a></li>
|
||
</ul>
|
||
<ul class="uncollapsible">
|
||
<li><a href="../">上一级</a></li>
|
||
</ul>
|
||
<ul class="uncollapsible">
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/00 开篇词 既往不恋,当下不杂,未来不迎.md.html">00 开篇词 既往不恋,当下不杂,未来不迎</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/01 微服务架构有哪些特点?.md.html">01 微服务架构有哪些特点?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/02 微服务架构下的质量挑战.md.html">02 微服务架构下的质量挑战</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/03 微服务架构下的测试策略.md.html">03 微服务架构下的测试策略</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/04 单元测试:怎样提升最小可测试单元的质量?.md.html">04 单元测试:怎样提升最小可测试单元的质量?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/05 集成测试:如何进行微服务的集成测试?.md.html">05 集成测试:如何进行微服务的集成测试?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/06 组件测试:如何保证单服务的质量?.md.html">06 组件测试:如何保证单服务的质量?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/07 契约测试:如何进行消费者驱动的契约测试?.md.html">07 契约测试:如何进行消费者驱动的契约测试?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/08 端到端测试:站在用户视角验证整个系统.md.html">08 端到端测试:站在用户视角验证整个系统</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/09 微服务架构下的质量保障体系全景概览.md.html">09 微服务架构下的质量保障体系全景概览</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/10 流程规范篇:高速迭代的研发过程需要怎样的规范?.md.html">10 流程规范篇:高速迭代的研发过程需要怎样的规范?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/11 测试技术篇:测试技术这么多,我该如何选型?.md.html">11 测试技术篇:测试技术这么多,我该如何选型?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/12 测试技术篇:如何提升测试效率?.md.html">12 测试技术篇:如何提升测试效率?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/13 测试技术篇:专项测试技术解决了哪些专项问题?.md.html">13 测试技术篇:专项测试技术解决了哪些专项问题?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/14 CICD 篇:如何更好地利用多个“测试”环境?.md.html">14 CICD 篇:如何更好地利用多个“测试”环境?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/15 CICD 篇:如何构建持续交付工具链?.md.html">15 CICD 篇:如何构建持续交付工具链?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/16 度量与运营篇:如何做好质量和效率的度量与运营?.md.html">16 度量与运营篇:如何做好质量和效率的度量与运营?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/17 度量与运营篇:如何度量与运营效率和价值?.md.html">17 度量与运营篇:如何度量与运营效率和价值?</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/18 组织保障篇:质量是设计出来的.md.html">18 组织保障篇:质量是设计出来的</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/微服务质量保障 20 讲-完/19 软件测试新趋势探讨.md.html">19 软件测试新趋势探讨</a>
|
||
</li>
|
||
<li>
|
||
<a class="current-tab" href="/专栏/微服务质量保障 20 讲-完/20 结束语 QA 如何打造自身的核心竞争力?.md.html">20 结束语 QA 如何打造自身的核心竞争力?</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
|
||
<div class="sidebar-toggle-inner"></div>
|
||
</div>
|
||
<script>
|
||
function add_inner() {
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
inner.classList.add('show')
|
||
}
|
||
function remove_inner() {
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
inner.classList.remove('show')
|
||
}
|
||
function sidebar_toggle() {
|
||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let content = document.querySelector('.off-canvas-content')
|
||
if (sidebar_toggle.classList.contains('extend')) { // show
|
||
sidebar_toggle.classList.remove('extend')
|
||
sidebar.classList.remove('hide')
|
||
content.classList.remove('extend')
|
||
} else { // hide
|
||
sidebar_toggle.classList.add('extend')
|
||
sidebar.classList.add('hide')
|
||
content.classList.add('extend')
|
||
}
|
||
}
|
||
function open_sidebar() {
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
sidebar.classList.add('show')
|
||
overlay.classList.add('show')
|
||
}
|
||
function hide_canvas() {
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
sidebar.classList.remove('show')
|
||
overlay.classList.remove('show')
|
||
}
|
||
</script>
|
||
<div class="off-canvas-content">
|
||
<div class="columns">
|
||
<div class="column col-12 col-lg-12">
|
||
<div class="book-navbar">
|
||
<!-- For Responsive Layout -->
|
||
<header class="navbar">
|
||
<section class="navbar-section">
|
||
<a onclick="open_sidebar()">
|
||
<i class="icon icon-menu"></i>
|
||
</a>
|
||
</section>
|
||
</header>
|
||
</div>
|
||
<div class="book-content" style="max-width: 960px; margin: 0 auto;
|
||
overflow-x: auto;
|
||
overflow-y: hidden;">
|
||
<div class="book-post">
|
||
<p id="tip" align="center"></p>
|
||
<div><h1>20 结束语 QA 如何打造自身的核心竞争力?</h1>
|
||
<p>经过了两个多月的课程更新,到此,本专栏课程的内容就要结束了,在这里我有一些话想告诉你。软件测试的趋势虽然多,但你也不必焦虑,按部就班地打造自身的核心竞争力,就可以顺应时代潮流,让自己时刻保持竞争优势。</p>
|
||
<h3>怎样理解“核心竞争力”?</h3>
|
||
<p>在讲解竞争力之前先看下什么是能力。能力是指一个人完成一个目标或者任务所体现出来的素质(如技能、知识、经验以及行为等)。解释中暗含了“能力是一个绝对值(正数)”的意思,显得比较学术,而在实际工作中,相对值才有意义:<strong>在某些方面,当你具备一些素质,而其他人并不具备时,说明你有着相应的竞争力</strong>。即,<strong>竞争力是参照于其他人高出的那部分能力</strong>,当然,这参照范围可以大到所有人、一个行业的从业人员,也可以小到一个公司的员工,甚至是几个人。</p>
|
||
<p>举例来说,无论是招聘网站职位描述还是简历上的描述,几乎不会出现“能熟练使用 Windows 操作系统、熟练使用 Android 系统、熟练使用 iOS 系统”等这样的要求和能力说明。因为,这些能力是底线,是基础中的基础,本就应该是测试人员都具备的,甚至都快成了网民大众的基本功。换句话说,具备了这些能力,在测试行业里没有任何优势。但 linux 则不同,它常常出现在测试职位的技能要求里。求职者也常常会把自己熟悉 linux 这一事实直白地体现在简历里,哪怕是不算太熟悉,也会表明自己有所了解。这意味着,熟练使用 linux 操作系统,甚至是简单地会用,在测试人员群体中,还算是稀缺的,是具备一定的竞争力的。</p>
|
||
<p>通过这个现象可以得出一个结论,学习任何知识和技能时,不要害怕门槛高,学习成本高,因为门槛高,也是切切实实的好事儿。倘若门槛低,别人也能轻易获取和学习,那你就没有什么竞争力了。门槛高了(其实大部分情况下只是看起来门槛高),意味着许多人都会被排除在门槛外,那你就获得了足够的竞争力。总结一句话,<strong>在培养核心的技能和能力时,应尽量选择有门槛的、稀缺的,这样才能让自己拥有持久的竞争优势,这就是核心竞争力。</strong></p>
|
||
<h3>核心竞争力的三个阶段</h3>
|
||
<p>我们知道,不同的工作和任务所需要的核心能力不同,因而核心竞争力也就不相同。QA 的入门门槛比较低,这也是 QA 这个群体产生恐慌和焦虑的主要原因。这个群体所涉及的技术面和技能栈非常广,所以整个职业生涯的路线比较丰富。可以走技术路线、管理路线,也可以转行到相近的岗位中。</p>
|
||
<ul>
|
||
<li>技术路线:有业务测试专家、敏捷测试专家、专项测试技术专家、测试开发专家、研发效能专家、测试架构师等方向。</li>
|
||
<li>管理路线:则可以从测试组长、测试经理、项目测试负责人,直至测试总监等职位。</li>
|
||
<li>转行,也可以向日常打交道比较多的方向,如项目经理、产品经理或研发工程师等。</li>
|
||
</ul>
|
||
<p>而无论从事哪个方向,职业发展总要经历入门、进阶、高阶三个阶段,我这里也将从这三个阶段来阐述 QA 的核心竞争力。</p>
|
||
<h4>(1)入门:扩大知识边界,夯实基本功</h4>
|
||
<p>这个阶段主要适用于刚入行的测试人员,一般测试经验在 3 年以下。该阶段,需要苦练测试基本功,并在知识广度上占据一定的优势。因为没有经验,所以正适合用<strong>好学的态度</strong>、<strong>主观能动性</strong>、<strong>学习能力</strong>等长处来弥补你的项目经验和测试经验。</p>
|
||
<p>在这个阶段,可以多学习计算机基础知识、测试理论知识等。实际的测试工作中,通过自己的主观能动性、学习能力等完成所承接的测试任务。计算机基础知识包含但不限于如下内容。</p>
|
||
<ul>
|
||
<li>操作系统:熟练掌握操作系统环境及其主要系统版本之间的差异,如Linux/Unix/Windows/iOS/Android 等系统。</li>
|
||
<li>网络协议:熟练掌握网络协议及其特性,如 TCP/IP、HTTP 等,能使用抓包工具(Fiddler/Wireshark/Tcpdump/Charles 等)。</li>
|
||
<li>数据库:包括关系型数据库技术(MySQL、Oracle 等)和非关系型数据库技术(NoSQL)。</li>
|
||
<li>开发语言及框架:熟练掌握开发语言及框架、编译打包发布等操作,如 Java 和 Jetty,Objective-C 和 Android 等。</li>
|
||
<li>熟练使用 CI/CD 流水线工具等。</li>
|
||
<li>对如下知识有基本了解:网站架构、微服务架构、容器技术、中间件、负载均衡、大数据、云计算等。</li>
|
||
</ul>
|
||
<p>测试基本知识包括但不限于:熟练掌握软件生命周期知识、软件开发模型、静态和动态测试方法等内容。</p>
|
||
<p>另外,作为新人,要充分发挥自己的“新手”优势,那就是在这个阶段,你对新事物敏感、好奇,善于提出质量或流程相关的问题,不容易思维定式。因此,反而能发现很多细节问题,无论是团队、研发流程还是业务方面。</p>
|
||
<h4>(2)进阶:扩大知识深度,把握核心价值</h4>
|
||
<p>当你有了一定的测试经验和项目经验后,你需要有针对性地扩大自己的知识深度,并打造基于自身职位的核心竞争力,使 QA 的价值得以更全面地体现。</p>
|
||
<p>拿最常见的两个测试职位(业务测试工程师和测试开发工程师)来说。</p>
|
||
<ul>
|
||
<li>业务测试工程师:测试策略总结能力、测试方案设计能力、测试用例设计能力、探索性测试思维、缺陷分析能力、自动化测试技术等是其核心竞争力。</li>
|
||
<li>测试开发工程师:测试系统需求分析能力、技术知识体系、平台设计、研发和落地能力是其核心竞争力。</li>
|
||
</ul>
|
||
<p>两者通用的软技能包括项目管理、学习能力、问题分析与定位等。通用的专业能力包括缺陷管理、流程改进、可用性测试、质量度量与运营等。</p>
|
||
<p>过了入门阶段后,QA 需要能够主导一个业务方向的测试工作,并协助建设质量保障体系,这也体现了 QA 团队的核心价值。</p>
|
||
<p>QA 的核心价值是全方位地保障业务质量,这里列出来进阶阶段需要重点改变的地方。</p>
|
||
<ul>
|
||
<li>预防问题,而不仅仅是发现问题</li>
|
||
</ul>
|
||
<p>测试执行只能尽可能地发现已经存在的问题,预防问题才是上上策。那就需要根据现有的各类数据进行质量分析。如缺陷总结和产生原因分析,以便形成机制避免问题的产生;引入各种工具,避免问题出现,比如静态代码检查、分支规范检查等;线上监控,快速发现问题,及时响应。</p>
|
||
<ul>
|
||
<li>提升交付质量,而不仅仅为了发现更多 Bug</li>
|
||
</ul>
|
||
<p>最高级的方式应该是提升自身能力,发现更多问题的同时,持续去提升过程质量;质量是整个团队的职责,QA 首先要做好自己,确保任何一名 QA 都在努力提升自身的测试质量,进而提升整个产研的过程质量,最终提升交付质量;</p>
|
||
<ul>
|
||
<li>关注效果的好坏,而不是仅仅关注逻辑的对错</li>
|
||
<li>做正确的事,而不仅仅正确地做事</li>
|
||
</ul>
|
||
<p>如何确保开发的产品符合用户的真实需求,这需要在过程中不断发问,我们到底在解决用户的什么痛点,是否是伪需求,等等。QA 首先需要在整个项目过程中不断询问所有成员上述问题,确保团队是在开发客户所需的产品,要有逻辑分析,而不是只是一拍脑袋决策出来的。</p>
|
||
<h4>(3)高阶:打造个人品牌</h4>
|
||
<p>职业生涯的高阶阶段,需要打造自己的个人品牌,也就是通常所说的职业标签。比如,梁山好汉的绰号就是一种标签。而在测试领域,当提到虫师你就知道他擅长 Selenium,提到思寒你就想到 TesterHome、移动互联网测试开发大会等,这就是个人品牌的体现。</p>
|
||
<p>打造个人品牌,建议通过如下途径。</p>
|
||
<ul>
|
||
<li>打造个人核心技能
|
||
<ul>
|
||
<li>向内看:测试人员作为技术工程师的一种,得有一项看家的核心技能,这是需要长时间积累和磨炼的技能,你在这上面付出的时间、脑力、精力,也正是这门技能的门槛。你需要做的是,要发现并聚焦到自己最擅长的领域,然后专注这个领域,不断精进和优化自己的能力,成为该领域的专家。</li>
|
||
<li>向外看:要不断地向外探索,看看行业内、知名公司内、其他大牛的实践是怎样的,吸收其中的精华,再找到自己的差距,取长补短,持续精进。</li>
|
||
</ul>
|
||
</li>
|
||
<li>沉淀、分享、交流
|
||
<ul>
|
||
<li>首先,在打磨自己的核心竞争力时一定要用文字沉淀下来。</li>
|
||
<li>其次,创造机会对外分享和交流,这样你才能理清楚自己在做的事情或所思所想,再根据别人的正负向反馈调整自己的思路和方法论。</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<h3>QA 打造核心竞争力的常见问题</h3>
|
||
<p>QA 在打造个人核心竞争力的路上,也有非常多的障碍和阻力,你可以提前识别并避免。</p>
|
||
<ul>
|
||
<li>QA 工作中充斥着大量的重复工作,因而始终无法把自己从繁忙的工作当中释放出来,一晃几年过去了,依然平庸着。因此,出现大量的重复工作时要十分警惕,应先投入自己的精力和时间打破恶性循环,用局部的小改善逐步替代掉重复工作,最终扭转局面。</li>
|
||
<li>QA 的职业领域方向太多,一个 QA 很容易出现同时有多项技能的积累且差异不大,对要重点发展的方向始终举棋不定,最终没有特别核心的竞争力。这种情况比较常见,建议通过如下方式权衡出最终方向:自己感兴趣、未来有发展前途。</li>
|
||
<li>核心竞争力跟所在公司或业务强绑定,一旦离开或变更,核心竞争力极大衰减。这种情况多是因为在成长的过程中对自身的经验和能力没有做好方法论的沉淀,因此,日常应养成记录、沉淀、对外分享的习惯,提升自身的抽象和总结能力。</li>
|
||
</ul>
|
||
<h3>结语</h3>
|
||
<p>本课时是本课程的最后一讲,以“打造核心竞争力”作为收尾篇。这个课程只是为你提供了一些思维的敲门砖,要想有真正的进步和成长,需要持续的学习。这里再强调下,对于测试人员来说,一定要尽早树立测试策略分析和构建质量保障体系的意识,从全局视角理解所在业务中的质量保障体系。 也只有这样才能补齐质量保障体系中的各种手段和技能,才能去体验不同的职业成长路径 。</p>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div style="float: left">
|
||
<a href="/专栏/微服务质量保障 20 讲-完/19 软件测试新趋势探讨.md.html">上一页</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||
</div>
|
||
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"709979013f2c3cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
|
||
</body>
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag() {
|
||
dataLayer.push(arguments);
|
||
}
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-NPSEEVD756');
|
||
var path = window.location.pathname
|
||
var cookie = getCookie("lastPath");
|
||
console.log(path)
|
||
if (path.replace("/", "") === "") {
|
||
if (cookie.replace("/", "") !== "") {
|
||
console.log(cookie)
|
||
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
|
||
}
|
||
} else {
|
||
setCookie("lastPath", path)
|
||
}
|
||
function setCookie(cname, cvalue) {
|
||
var d = new Date();
|
||
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
|
||
var expires = "expires=" + d.toGMTString();
|
||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||
}
|
||
function getCookie(cname) {
|
||
var name = cname + "=";
|
||
var ca = document.cookie.split(';');
|
||
for (var i = 0; i < ca.length; i++) {
|
||
var c = ca[i].trim();
|
||
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
|
||
}
|
||
return "";
|
||
}
|
||
</script>
|
||
</html>
|