十一年软件测试点滴分享
马上就要告别软件测试这份职业,回忆十一年来的测试职业生涯,有硕果不算累累的收获,也有或多或少的遗憾,在投入新领域的前夕,是时候静下心来写点什么了,不仅仅是为了分享,更多的是为了自己,不辜负这十一年的光阴。
经验点滴分享
随着软件行业的高速发展,可以说近10年也是软件测试行业快速发展的10年,由于测试入门门槛相对较低,大量想从事IT行业的毕业生投身到这个行业,井喷式的发展虽然不断注入了新鲜力量,但是也导致了外行对其的误解:测试不就是点点看看再点点吗?如何消除外行的误解?这是值得每个测试人员深思的问题。幸运的是我们在华为这种非常重视测试的大公司工作,幸运的是公司的测试整体水平在国内算是首屈一指的并且有我们这么一大 波忠于这份职业的测试人。
如果选择了这份职业,如何更好的在公司发展下去?简单的从职业规划、测试硬实力、测试软实力方面谈谈个人的愚见,希望能对刚入行的你有所帮助。
职业规划
职业规划即你未来的发展方向,最好不要走一步看一步,我们不做南辕北辙的事情。方向对了即使路再难走,也总有达到终点的一天。软件测试职业向后走,一是测试技术岗,一是测试管理岗,不管是技术岗还是管理岗,在前期夯实基础非常重要,这个基础就是测试这份职业的基石,也即综合能力,需要懂点代码、系统架构,更要懂项目管理、沟通协调、问题跟踪、事后总结、结果呈现等等工作方法和技巧。
职业规划好了就是怎么实现的问题,《10000小时天才理论》这本书大家都应该耳熟能详了,如果我们算上工作时间平均每天10小时,1周5天计算的话(周末除外),也需要4年多,但是在华为研发这种高强度工作下,特别是在测试工作中重复性占比较大的前提下,平均每天如果按3小时计算的话,也差不多需要14年时间,这确实需要很大的毅力去坚持。去年看了一本书《刻意练习》,从理论到实践阐述了如何从新手到大师,工作中你注意到什么、采取什么行动、为何选择行动、犯了什么错、如何改正等等都可从中得到启发。其实个人认为10000小时理论在技工、乐器、体育方面更适合,刻意练习这种方式更适合IT这种需要大脑深度参与的工作。
上面讲了这么多,归根结底就是需要明确方向、然后按照正确的方法在实际工作中实践并长期坚持下去。
测试硬实力
这里定义的测试硬实力即产品的熟练掌握跟测试相关的各种技术,也是走技术路线必备能力。
了如指掌的被测系统
我们可能不需要知道系统具体是怎么实现的,但是一定要知道系统提供了哪些能力,并对这些能力,要能求真,同时也要证伪,测试的过程就是证明系统能按照预期工作,同时对于异常输入或极端测试,也能够保护自己不会崩溃。测的不够好,源于了解的不够深,测试做好作深的前提是需要我们深入了解系统的架构,明白各模块或服务器之间是如何交互工作、系统的输入输出及交互、数据流向、系统的压力点等。
如果想走的更远并开阔眼界,最好能够经常跟SE交流,从需求的真实用户场景、设计思路考虑产品的设计和演进。最好是能够直接跟产品提需求的人了解用户场景,从产品demo演示、showcase等环节收集真实用户的声音,测试前移是趋势,这也是TSE的工作方向。
不可或缺的理论知识
不管什么类型的测试都离不开测试设计,测试设计输出就是我们测试人员的“代码”,要做好测试设计,等价类、边界值、因果图、判定表、正交法等工程类方法要熟练运用,并能体现在测试方案、用例中。
能力体现的测试输出
一个团队中不同的测试人员负责不同特性或不同类别的测试工作,像我们所在的运营商领域,软件更是在发布后很长时间才能上线应用,测试质量的好坏在短时间内很难度量,再者不同类型的测试导致不同的交付件,也很难横向比较。测试很多时候体现在问题思考、前端深入等方面,要想脱颖而出,好的测试交付件非常有必要。这个版本中我们测什么、怎么测、发布时质量如何?有哪些遗留问题及风险等,所有这些都体现在测试策略、测试方案、测试报告中,这3份文档的质量好坏,很大程度上就是测试工程师能力的体现。熟悉产品的需求和特性、了解产品的整个测试过程、理清测试过程中的数据,再加用心打磨和真实发声,好的交付件不难输出。
各种必备的测试技能
必备技能就是测试工作真正的硬实力,也是成长为测试专家前需要了解或掌握的必杀技,简单罗列如下:
1) LINUX操作系统
Linux作为现在最流行的软件环境系统,需要熟练其常用的命令操作、软件及补丁安装、系统配置等。
推荐:《鸟哥的Linux私房菜》、《Linux系统管理技术手册》、《深入理解计算机系统》(需要一定的计算机基础才能看懂^_^)
2) 代码能力特别是脚本编程能力
测试能够读懂代码不强制要求,但无疑是个额外的加分项。对于经常使用的脚本语言,需要熟练掌握运用,特别是Shell和Python。Shell脚本不就是命令的罗列吗?No!其虽然是面向过程编程,但是如果能够根据自己产品特点,能够抽象出架构概念,做出公共函数、二进制bin、脚本或工具、日志打印、守护进程、代理等脚本测试框架实现软件自动化部署、后台功能测试相关的,说明你出师了。Python主要上手简单、跨平台、第三方库多,不在乎性能的话也是测试自动化的一大利器。
如果想在自动化领域长期发展,能够根据产品特点做自动化测试工具的开发,运用Java、C++高级语言编程能力必不可少。
推荐:《LINUX与UNIX Shell编程指南》、《Python基础教程》、《Python编程:从入门到实践》
3) 网络相关知识
尽管当前在云化虚拟化下已经不需要我们自己规划、配置网络,但是网络相关术语如MAC地址、IP地址及分类、掩码、网络地址、路由等基础知识及其常见网络协议及其分层都需要熟悉。
推荐:《TCP/IP详解·卷1:协议》、《用TCP/IP进行网际互连》
4) 测试类别及其测试工具
根据我之前所在产品,常见的有如下测试类别:功能、兼容性(含接口)、性能、可靠性(含稳定性)、安全、可服务性(含工程能力)、资料等,每类测试根据产品又有相关的测试工具,在我们公司一般是不同的测试人员负责某类或几类的测试,由于个人精力有限及测试范围太广及工具的庞杂,很少能够有人拍着胸脯说我全部都会,测试在这里就已经细分了。
基础的工具建议会用,对于业界测试TOP工具或开源工具最好能够精通,简单罗列如下(未包含操作系统本身的测试工具):
命令跟踪:strace
抓包:tcpdump、Wireshark(Windows)
接口测试:curl、Postman(Windows)
性能测试:Jmeter、LoadRunner(Windows)
DFX测试:DFX测试基线(公司针对DFX测试的checklist,含所有工具及其使用方法。checklist也是一把双刃剑,过多的依赖会让我们产生惰性而不去思考产品本质。)
5) 其它能力
其它能力还包含数据库相关、Web前后端、移动端app、基于大数据下的AI测试等,个人接触较少,想了解建议google。
测试软实力
这里定义的测试软实力即除技术之外的项目管理、沟通协调等能力,也是走管理路线必备能力。
责任心
有人说测试是个良心活,一点都不假,因为测试的本质就是打磨产品,打磨的好坏并无严格的评判标准,好的责任心则会驱使测试人员去跟开发较真、对问题有始有终、对风险及时通报,测试团队这种氛围很浓的话,产品测试质量肯定也不会差了。
沟通协调能力
在公司沟通无处不在,测试要往上走必定涉及到需要驱动周边的同事共同完成某项工作,说直白点就是达成你的目标,这其中就涉及到大量的沟通,如工作安排、问题推动处理,这需要在平时多倾听并保持良好的同事关系,同时遇到困难自己无法解决时也需要及时求助,求助前最好提前准备,现状困难风险等说到点子上。
持续学习能力
不管走技术还是管理,持续学习的能力和激情始终不能丢。技术的变化日新月异,虽然测试的工程方法那套很通用,但是产品的发展始终在跟随技术更替。从单体架构到微服务、从物理机到云化到Docker容器化、从大数据到人工智能、从传统互联网到物联网等等,任何时候学习都不能丢。
与优秀人为伍
我看得远是因为我站在巨人肩上,如果能够跟对人,周边聚集了一大群优秀的测试同事,时不时还能与测试专家交流,有机会参加国内外一些测试讲座,耳濡目染下你也变优秀了。
多总结多输出
任何时候总结都不会错。特别是走管理路线,工作中的一些质量方法如AAR、KMPlan等还是大有益处的,在公司绩效好的人也都是会总结高输出的人。之前我领导调侃似的说:13、14级把word写好,15、16级把excel写好,17、18级吧ppt写好,其实总结的很精辟。当前在我司,会总结会汇报就像高考加分一样,同样的分数别人就是清华北大,不服不行。扯远了,总结输出不为迎合,也是对自己能力的认知和肯定。
推荐:《赢在测试》(里面有几个之前在华为工作的测试牛人访谈录)、《软件测试的经验和教训》、《Google软件测试之道》
测试未来发展预测
“测试已死”的观点近几年争议比较多,作为一名测试人员,我是不赞成这个观点的,但是近几年开发测试比确实在逐步增大,纯测试人员占比也在减小,造成这个现象的原因,个人认为主要有以下几点:
1) 当前软件基本上是敏捷研发模式,越来越互联网化的版本节奏需要测试尽可能前移,在当前提倡工程师都“全栈”下(这里的全栈主要是针对测试来说,即测试也能编码做产品开发),开发、测试的界线也越来越模糊,纯测试岗只会越来越少;
2) 测试是一份越做越难的职业,入门简单快,到了一定阶段往后的路也确实更难走,这就导致了到一定阶段后很多测试人员尝试转型。
但是不管怎么发展,测试是产品的最后把关者,测试岗肯定不会消失,测试的未来在哪儿?测试前沿的东西我接触的很少,姑且大胆预测下,如有错误敬请谅解。
DFX
这里说的专业领域就是我们经常提到的DFX领域,主要是可靠性、性能、安全。这3个领域的测试都需要具备宽广的知识面以及该领域的深度,如性能这块,除了会使用性能测试工具进行压测外,还需要具备性能分析、性能评估、给出调优建议、风险评估等。
自动化
自动化测试是一个老生常谈的话题了,在软件越来越敏捷的模式下,自动化的方向有如下几个:
1) 自动化工具开发:一般会由全栈工程师负责,大公司还会有专门的自动化工具开发团队支撑。
2) 接口测试:传统自动化所达到的效果基本上是已有特性功能不丢失即老特性的保障,主要是在节凑上无法匹配软件开发进展导致了自动化普遍的滞后性。在软件由单体向微服务设计的趋势下,接口自动化如TestNG能够很好的保证自动化开发测试与版本开发的步调一致。
3) 基于真实用户场景的自动化集成测试。
4) Devops模式下的环境自动化,从开发打包、代码检查、版本构建、安装/升级、冒烟、全量测试等流水线下的自动化能力。
云化/容器化
云化、容器化下只是软件的运行环境和部署形态发生了改变,测试的类别和内容不会有太多改变,但是基于云化、容器化下如何开展自动化、DFX测试?与传统部署下的测试有什么区别?这是今后软件运行和发布的常态,测试也需要同步跟着转变。
基于大数据下的AI
这几年AI火到爆了,公司也顺应潮流成立了很多做AI的部门,这方面大家都看到了趋势,但是AI具体在测试领域的应用,可能还在研究实验阶段,离规模应用还较远。AI模型不是凭空想象出来了,需要基于大数据去不断学习修正自己已达到我们期望的效果。
AI应用于测试,其最终目的或效果就是能够解放测试人力以及能够在某些领域做测试人员无法通过手工做到的事情,如通过AI可以自动化生成测试用例和脚本、针对某个特性可以自动挑选相应或相关联的用例进行自动化测试、针对测试结果可以通过日志自动化提单并定位问题等等。
物联网
万物互联或许在今后的几年或几十年能够达到,这也是作为设备商的我们所期待的,因为物联网是一个庞大的系统,需要海量的硬件(基础设施、网络设备、传感器等)和软件去构建,这个硬件和软件如何更好的协同工作满足万物互联诉求,这其中当然少不了测试。其实物联网只是个业务方向,其中肯定包含了上面提到的各种类别的测试,当然也少不了大数据和AI。
转身:从0到1
对于测试来说,从0到1简单,从1到N就很难,不是每个人都能达到从量变到质变的飞跃。这两年也不断审视自己,清楚自己在这行往后走会异常艰难了,及早转身或许希望更大。从十一年的软件测试生涯转身其它方向,虽有点不舍,更多的是期待,期待自己能够在新领域更快的实现从0到1的突破。
作者|胡国胜
- 点赞
- 收藏
- 关注作者
评论(0)