软件测试菜鸟入门攻略

北京中科白殿疯病医院 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/jzpj/

我是做了7年软件测试,目前在慧乐课堂做技术老师,我教过的学员有上千人,平常也上软件测试论坛、贴吧、博客等等了解软件测试的行情。

我不止一次见过:对软件测试行业不甚了解的新人经常问一些无关紧要的问题,作为软件测试行业从业者,因为对测试行业有一定的了解,掌握一定的知识技术,早就明白了有些问题是无解或者无用的。

这篇文章的写作目的就是为了帮助测试新人更好地了解软件测试行业,以及它的发展前景。让新人不再对行业一无所知,轻松进入软件测试行业当中。

一、软件测试工程师的职责

随着技术的发展,各种应用程序、各种App应运而生!在早期,这些应用程序只是通过开发人员、产品以及部分用户使用之后,给出相应的修改意见,感觉都OK后就进行上线,在网上或一些app下载平台上就可以直接使用,没有进行过规范的软件测试!这些软件或多或少会存在一些bug,这些bug有可能是功能上、兼容性、性能等各方面的问题!

为了改善软件质量不高的问题,软件测试这门行业才开始受到重视!软件测试的目的就是为了提高软件质量,给用户更好的体验感!

软件测试工程师就是理解产品的功能要求,并对其进行测试,检查软件有没有缺陷(Bug),测试软件是否具有稳定性(Robustness)、安全性、易操作性等性能,写出相应的测试规范和测试用例的专门工作人员。

软件测试工程师的职责:

1、依据需求文档及设计文档,编写测试用例;

2、完成产品的集成测试与系统测试;

3、根据测试计划,搭建测试环境;

4、依据测试用例执行手工测试,反馈跟踪产品BUG及用例缺陷;

5、测试工具/系统的研究和应用;

二、软件测试行业的特点

我身边有很多转行做软件测试的同学,我也经常问身边同学为什么做软件测试工程师?我面试的时候也会经常问这个问题,梳理回答大约可以归为两类:

喜欢测试这个工作;IT工资高,想搞IT,但不会编程,测试门槛较低。非常倾佩喜欢测试工作的同行们,我也是因为喜欢计算机,测试门槛低才加入测试大家庭。后面喜欢上享受测试带来的成就感,享受独自定位问题时那种喜悦的心情。

我简单梳理了几个软件测试职业的特点,以供大家参考。

入门快,薪酬高学历门槛相对较低市场需求大,就业竞争小职业生涯寿命长,发展空间广阔三、软件测试的发展

从广义上来划分测试人员的发展,即不仅仅局限于测试本职工作,大致有6大类的方向。决定不同发展方向的核心技能要素有三个,即:

三个核心要素:业务发展、管理发展、测试发展。

业务发展

业务发展带来了对质量和速度的追求,这是整个行业发展的主线。业务发展的需求影响到了产品研发和测试,它和资本家一样是贪婪的,无时无刻不在追求着突破瓶颈.追求更快更好的发展。它决定着很多公司的生死和很多行业工程师的前途,研发、产品,、QA都是要为业务服务的。

技术发展

技术是生产力的重要组成部分,技术的发展是加速度的。每次质变都会带来一些重大的变更,技术的成熟度决定了测试行业的成就能做多大。作为测试工程师要善于利用当前的技术栈打造符合当前需求的解决方案。

管理发展

公司主体在追求简单高效的管理上是永不止步的,技术和工具的每前进一步,就意味着组织沟通的能力在增强。管理这个方向会逐渐地扁平化,高层管理会越来越少,一线管理会越来越多。作为测试行业比较尴尬的一点是大质量部模式模式的消失,让测试行业的发展开始遭遇天花板.如果hold不住研发和产品,测试行业发展的人是没法往上很好地晋升的

根据三种核心的技能的掌握情况和互相之间的交集点,大致分为6个大类方向:

管理方向:测试主管、测试经理、项目经理、质量经理、技术支持经理、售前测试经理测试技术方向:高级测试工程师、测试技术专家、测试咨询、外包测试、职业教育培训业务技术方向:开发人员、系统分析工程师、需求分析工程师、解决方案专家、市场调研和产品规划、行业测试专家技术支持方向:售前支持、技术支持、客户服务、客户培训、外部问题解决质量保证方向:QA、质量审核员、质量改进人员、风险分析人员其他方向:文档开发、销售人员、售前测试、市场人员、项目维护人员只代表各大方向的具体方向,各方向/岗位之间未标识上下级,平级层次关系

四、软件测试的流程

不管开发还是测试都有需求方,通过与需求方进行沟通交流,整合信息,制定成需求说明书!需求说明书:是指用户对于软件的功能、性能、兼容性、UI等各方的需求文本!开发根据需求说明书进行开发和设计程序!但有的公司不会提供需求说明书,大多数公司在这部分是不规范的通过会议的形式以及设计模型作为需求,这样做的目的就是需求不明确,沟通成本太高!

下面给出个人认为比较严谨或者规范的测试流程图:

五、软件测试分类

按照方法分类:

黑盒测试:理解为看不见内部结构,通常为检查其功能。白盒测试:看的见内部结构,检测内部代码。灰盒测试:结合黑盒和白盒测试两种测试。按照方向分类:

功能测试:对软件的功能进行测试。性能测试:压力测试,负载测试,并发测试等。安全测试:对软件的安全进行测试。按照阶段分类:

单元测试:方法,函数,类集成测试:接口系统测试:功能,性能,安全,兼容性,易用性,稳定性,UI等。验收测试:验收按照对象分类:

App测试web测试物联网测试。。。按照状态分类:

静态测试:按照白盒测试去测试代码动态测试:按照黑盒或者灰盒测试其他:

冒烟测试:测试前的测试,大概检测软件具不具备可测试性(可以理解为随便测试就有问题)回归测试:将测试出现的问题反馈之后,对该问题进行重新测试。α测试:内测β测试:公测六、软件测试入门

1、软件测试的生命周期

测试需求分析--测试设计--测试计划--测试执行--质量评估

2、软件测试基础

测试基础是软件测试最重要的部分,只要你是做测试,不管是什么测试,测试的基础、理论知识都是必须学会的。

软件测试的定义:描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。

软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

测试的方法:软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。

从是否关心软件内部结构和具体实现的角度划分,测试方法主要有白盒测试和黑盒测试。白盒测试方法主要有代码检査法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。黑盒测试方法主要包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法等。

从是否执行程序的角度划分,测试方法又可分为静态测试和动态测试。静态测试包括代码检査、静态结构分析、代码质量度量等。动态测试由3部分组成:构造测试实例、执行程序和分析程序的输出结果。

软件测试计划:软件项目的测试计划是描述测试目的、范围、方法和软件测试的重点等的文档。对于验证软件产品的可接受程度编写测试计划文档是一种有用的方式。

一个好的测试计划可以起到如下作用:

使测试工作和整个开发工作融合起来;资源和变更事先作为一个可控制的风险。测试方案:测试策略是测试方案的其中一部分。

测试方案是从测试的角度去分析或者说分解需求,在方向上明确要怎么测,分析结果就是测试点和测试方法。

测试方案包含:

引言(含a、编写目的;b、预期读者;c、参考资料);测试范围;测试策略(根据不同的测试类型考虑不同的测试方法)测试用例的编写总体编写思路:黑盒测试用例(优先)+白盒测试用例(补充)=完整测试用例

总体编写策略:对于测试用例编写来说,常用的四种方法基本就够用了,等价类、边界值、正交实验法、错误推断法,辅以场景测试法、需求/设计转换法、探索式测试思想,可以应付绝大多数产品的测试。个别的产品还需要在某一点细化和扩充,需要就事论事。

BUG的定义:产品说明书中规定要做的事情,而软件没有实现,例如:产品说明书要求计算器要实现加,减,乘和除功能,做出来的计算器不能进行除运算,这就是一个BUG。产品说明书中规定不要做的事情,而软件却实现了,例如:产品说明书要求计算器除加,减,乘和除功能外其它的功能不要实现,做出来的计算器不仅能进行加减乘除运算,还能进行乘方或三角函数运算,这也是一个BUG。产品说明书没有提到的事情,,而软件却实现了,例如:产品说明书要求计算器要实现加,减,乘和除功能,做出来的计算器还能进行乘方运算,这也是一个BUG。产品说明书中没有提到但是是必须要做的事情,软件却没有实现,产品说明书要求计算器要实现加,减,乘和除功能,但是没有提到在电量很低情况下也能正常使用,而做出来的计算器在电量很低的时候计算错误,这也是一个BUG。软件很难理解,很难去使用,速度超慢,测试人员站在最终用户的角度看到的问题是平常的但不是正确的,产品说明书要求计算器要实现加,减,乘和除功能,但是按键使用的文字或标识不清楚,如:加按键用和表示,或者计算1+1需要1分钟或者更长时间,这也是一个BUG。BUG的分类:致命bug:不能完全满足系统要求,系统停止运行,系统的重要部件无法运行,系统崩溃或者挂起等导致系统不能正常运行。

严重bug:严重地影响系统要求或基本功能的实现,且没有更正办法(重新安装或重新启动该软件不属于更正办法)。使系统不稳定、或破坏数据、或产生错误结果,或部分功能无法执行,而且是常规操作中经常发生或非常规操作中不可避免的主要问题,系统无法满足主要的业务要求,性能、功能或可用性严重降低。

一般bug:系统可以满足业务要求,系统性能或响应时间变慢、产生错误的中间结果但不影响最终结果等影响有限的问题。

低级bug:使操作者不方便或操作麻烦,但它不影响执行工作功能或重要功能。界面拼写错误或用户使用不方便等小问题或需要完善的问题

BUG的八要素:缺陷编号:缺陷的唯一标识符缺陷状态:缺陷跟踪过程的进展情况缺陷标题:缺陷的概述,描述问题的本质重现步骤:一步一步描述再现缺陷的操作步骤严重程度:缺陷对软件系统的影响程度优先级:修复缺陷的重要性或紧迫性缺陷类型:根据缺陷产生的来源和根据划分出的种类测试环境:测试环境配置,包括操作系统和浏览器BUG的生命周期提交bug—分配bug—处理bug—验证bug—关闭bug

新建,确认,解决,重新验证,关闭,重新打开

测试和开发流程的关系

瀑布流:按照线性方式进行,当前活动接受上一项活动的工作结果。工作结果需要验证,从上到下不可逆转,所以效率较低,并且如果发现错误要全部打翻重新弄

计划-→需求分析→设计→编码→测试→运行维护

作用:瀑布模型是所有其他模型的基础框架,在软件工程中占有重要地位。

瀑布模型是线性顺序进行的软件开发模式,因为瀑布模型的每一个阶段都只执行一次。

在瀑布模型中,测试阶段处于软件实现之后,也就是说代码完成后有足够的时间预留给测试活动,否则将导致测试不充分,从而把缺陷直接遗留给客户。

V字形:V模型是我们熟知的瀑布模型的一种改进,左边是开发组,右边是测试组,有了这么一个一一对应的关系

W字型(双V)W模型从V模型演化过来,实际上开发是V,测试是并行的V;相对于V模型,W模型增加了软件各开发阶段中应同步进行的验证和确认活动,W明确表示出了测试与开发的并行关系。

w模型是开发和测试一块进行,测试也在用户需求,就不用等开发做完再去做测试,所以测试在测试设计的时候不光可以参考开发的概要设计,还可以参考之前的需求分析等等。

螺旋型制定计划→风险分析→实施工程(需求确认、软件需求、软件产品设计、设计确认与认证、详细设计、开发、测试)→客户评估

特点:

螺旋模型是将瀑布模型与快速原型模型结合起来强调了其他模型所忽视的风险分析每一次螺旋包括4个步骤:制定计划、风险分析、实施工程、客户评估(相当于一个递进的过程,每一次的螺旋都包含这四个步骤)PDCA:PDCA循环的含义是将质量管理分为四个阶段,即Plan(计划)、Do(执行)、Check(检查)和Act(处理)。在质量管理活动中,要求把各项工作按照作出计划、计划实施、检查实施效果,然后将成功的纳入标准,不成功的留待下一循环去解决。这一工作方法是质量管理的基本方法,也是企业管理各项工作的一般规律。

1、P(Plan)计划,包括方针和目标的确定,以及活动规划的制定。

2、D(Do)执行,根据已知的信息,设计具体的方法、方案和计划布局;再根据设计和布局,进行具体运作,实现计划中的内容。

3、C(Check)检查,总结执行计划的结果,分清哪些对了,哪些错了,明确效果,找出问题。

4、A(Act)处理,对总结检查的结果进行处理,对成功的经验加以肯定,并予以标准化;对于失败的教训也要总结,引起重视。对于没有解决的问题,应提交给下一个PDCA循环中去解决。

以上四个过程不是运行一次就结束,而是周而复始的进行,一个循环完了,解决一些问题,未解决的问题进入下一个循环,这样阶梯式上升的。

5W2H:五个以W开头的英语单词和两个以H开头的英语单词进行设问,发现解决问题的线索,寻找发明思路,进行设计构思,从而搞出新的发明项目,这就叫做5W2H法。

(1)WHAT——是什么?目的是什么?做什么工作?

(2)WHY——为什么要做?可不可以不做?有没有替代方案?

(3)WHO——谁?由谁来做?

(4)WHEN——何时?什么时间做?什么时机最适宜?

(5)WHERE——何处?在哪里做?

(6)HOW——怎么做?如何提高效率?如何实施?方法是什么?

(7)HOWMUCH——多少?做到什么程度?数量如何?质量水平如何?费用产出如何?

3、工具学习

测试管理工具:TestDirector(大而全)、jira(简单好用)、QualityCenter(复杂,收费)、禅道(简单好用)、bugzilla(功能简单)、svn(代码和文档管理工具)、vss类似svn、git,同svn,但是多分支管理比svn好、Note(大而全,费用太贵)、CQ(ClearQuest-IBM产品-大而全);

接口测试工具:Jmeter(开源)、postman、SoapUI

性能测试工具:loadrunner,大而全,要学精通还是有点难度,重量级工具

C/S自动化工具:qtp(录制回放和脚本编辑),用的是vb语言、winrunnerIBM产品类似qtp、autoit在窗口定位上做到很不错;

白盒测试工具:jtestjava语言的单元测试框架、JUnit验证java的工具、cppunit跨平台的c++单元测试框架、gtest跨平台的c++单元测试框架、PhpUnitPhp,BoundsCheckerC++,DelphiAPI和OLE错误检查,指针和泄露错误检查、内存错误检查、TrueTimeC++,Java,VisualBasic代码运行效率检查,组件性能的分析

持续集成工具:jenkins、Hudson

app自动化工具:appium这个应该算是目前最流行的基于app的自动化测试框架了、instrumentsios平台下的自动化测试框架,用java语言写的、uiautomator安卓自动化测试框架,基本上支持安卓的所有事件操作、Monkey安卓自带的测试工具、MonkeyRunnerMonkey改进版,支持自己编写脚本测试,用Python语言,Robotium一款国外的Android自动化测试框架,用法比较简单;

web安全测试工具:appscan,算是用的非常多的一款工具了

只是入门的话需要学习的工具和知识点,按顺序学习就好。

简单的网络协议:TCP/UDP,HTTP/HTTPSLinux的基本操作和常用指令。MySQL数据库的基本操作和常用sql语句。fiddle抓包工具的使用。postman接口测试工具的使用。jmeter和loadrunner性能测试工具的使用。4、代码学习

关于编程语言的选择,我推荐Java或者python。还有数据库也是必须掌握的!

学习编程语言,不过不用像开发那样,学的那么深入。比如Java,只需要学完JavaSE的部分就够你用了。python的话也是一样的,把基础的部分学完就行了。

以上是软件测试小白入门需要掌握的知识和技能工具,初级测试肯定没有问题。




转载请注明:http://www.aierlanlan.com/rzfs/5619.html