目录
1.什么是软件测试?
1.1.生活中测试场景
1.2.软件测试定义
1.3.为什么要有软件测试?/重要性
1.4.练习:软件系统登录功能如何测试?
1.5.软件测试的特点
2.软件测试和开发的区别
2.1.工作内容
2.2.技能要求
2.3.难易程度
2.4.工作环境
2.5.薪水
2.6.发展前景
2.7.繁忙程度
3.软件测试与调试的区别
3.1.角色
3.2.阶段
3.3.目的
3.4.手段
4.软件测试的发展
5.软件测试岗位
6.软件测试在不同类型公司的定位
6.1.无组织性
6.2.专职VS兼职
6.3.项目性VS职能性
6.4.综合性
7.一个优秀的软件测试人员具备的素质
7.1.技能相关
7.2.非技能相关
PS:如何提高测试用例设计的能力?
8.软件测试的学习方式及内容
1.什么是软件测试?
1.1.生活中测试场景
- 刚新买来一部手机,我们要干什么?
- 一场考试,做完一遍题目之后,进行一遍检查,就是在 "测试"。
- 买一台电视,安装好之后打开试试看能不能正常使用,就是在 "测试"。
- 货架上选了一件衣服,看衣服是否好看(衬托肤色、气质),看是否凸显身材?【外观测试】,看衣服的材质(丝绸)【材质测试】价钱是否合适?【价格测试】......就是在"测试"。
1.2.软件测试定义
最常见的理解是:软件测试就是找BUG,发现缺陷。
软件测试就是验证软件产品特性是否满足用户的需求。
最终交付的产品是否和用户本来的需求一致,如果不一致,则需要找出不一致的点,交给开发修改,直到满足用户需求。
早期,人们更多的将测试看成是对软件产品“检验”,检查软件的每个功能是否运行正常。
1983年,Bill Hetzel将软件测试定义为:软件测试就是一系列活动,这些活动是为了评估一个程序或者软件系统的特性或能力,并确定是否达到了其预期的效果。
从这段话可以看出以下两点:
- 测试试图验证软件是“工作的”,也就是验证软件功能执行的正确性。
- 测试的活动是以测试人员“预期的结果”为依据,这里的“预期结果”指的是需求定义,是否满足用户需求。
注:测试时要测试满足需求的数据和不满足需求的数据,测试人员要从正、反两方面来进行测试。
1.3.为什么要有软件测试?/重要性
若软件代码写完后,不进行测试,直接上线,会报警,出现各种问题。
但若在代码写完后,交给测试,测试通过后,再上线,会避免刚才出现的问题。
测试就是保障软件质量的。
许多公司,把测试部门叫做"质量保障部"。
1.4.练习:软件系统登录功能如何测试?
- 不限登录方式:短信验证码、账户登录、面部识别、指纹识别、声控、第三方登录(QQ、微信)
- 限定登录方式:账户、密码:账号正确,密码错误,登录失败;账号错误,密码正确,登录失败。
- 一个用户在多台电脑登录。
- 网络异常情况登录。
- SQL注入。
- ......
1.5.软件测试的特点
软件测试只是一个样本试验,具有不可穷尽性。
2.软件测试和开发的区别
2.1.工作内容
- 开发:通过不同的编程语言编码做出软件(coding)。
- 测试:写测试用例,执行测试用例,发送测试报告,编写自动化测试用例、开发相关测试工具。看软件是否满足用户需求。
2.2.技能要求
- 开发:技能深度的掌握,因为要写出高效的代码。
- 测试:技能广度的掌握,因为要对产品进行全方位测试:外观是否好看,web的UI自动化测试,APP的UI自动化测试,后端接口进行测试,性能,安全相关......业务能力,设计和架构分析能力,测试手段和工具使用,用户模型分析和理解,编程能力。
2.3.难易程度
- 开发广度小,专业度高。
- 测试广度大,专业度低。
测试:
- appium:测试app的
- 抓包工具:Charles,fiddler
- 测试接口:soupUI,postman,jmeter
- 性能测试:loadrunner,jmeter
- 自动化测试脚本:Python,java,unittest,TestMg(框架)
2.4.工作环境
- 基本类似。
2.5.薪水
- 中小企业测试总体比研发略低;大厂研发测试基本无差别。
- 自动化等专业测试领域和研发基本无差距。
- 甚至测试/开的薪资高于研发。
2.6.发展前景
- 开发:初级开发工程师->中级开发工程师->高级开发工程师->架构师->CTO
- 测试:初级测试工程师->中级测试工程师->高级测试工程师->架构师->项目经理
- 自动化测试、安全测试等领域测试发展前景和研发基本一致。
2.7.繁忙程度
- 敏捷模式下差距不大,产品发布前测试压力比较大。
3.软件测试与调试的区别
3.1.角色
- 测试由测试人员和开发人员来执行,黑盒测试主要由测试人员完成、部分白盒测试/部分系统测试/单元/集成测试主要是由开发人员执行。
- 调试由开发人员完成。
3.2.阶段
- 测试贯穿整个软件开发生命周期(需求->计划->设计->编码->测试->运维)。测试介入的时间比调试要早。
- 调试一般在开发阶段。
3.3.目的
- 测试(Testing):确保程序解决了它该解决的问题,验证软件是否实现了用户需求的功能。发现问题,提供解决方案,由开发解决问题。
- 调试(Debug):确保程序做了程序员想它做的事情。发现问题,解决问题。
3.4.手段
- 测试:黑盒测试:等价类划分法、边界值法...;白盒测试:语句覆盖、条件覆盖...。
- 调试:debug,分析代码逻辑。
4.软件测试的发展
- 软件调试为主,发生在20世界50年代。
- 1957年Charles Baker对调试和测试进行了区分。 这是软件测试史上一个重要的里程碑,标志已经有独立的软件测试了。
- 1979年,《软件测试的艺术》(经典!值得一读!)中给出了软件测试的定义:测试是为发现错误而执行程序的过 程。 它意味着软件测试不仅要证明软件做了该做的事情,也要保证它没做不该做的事情。
- 1983年,美国国家标准局(National Bureau of Standards)发布了VV&T,VV&T提出了测试界很有名的两个名词:验证(Verification)和确认(Validation)。 这些意味着软件测试正作为一门独立的,专业的,具有影响力的工程学发展起来了。
- 预防为主是当下软件测试的主流思想之一。软件测试已经贯穿到了整个软件开发的生命周期当中了。
5.软件测试岗位
- 软件测试工程师:工程师的主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪BUG、编写测试报告等。涉及到开发的工作内容较少。
- 测试开发工程师:在测试工程师的工作内容上,增加了开发的工作。根据项目的特点来开发一些自动化测试的脚本,或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具什么的,从而能够更有效地进行测试,提高软件产品的质量。 测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作。测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。 开发工程师开发出来的软件面向的对象是外部用户,测开工程师开发出来的软件面向的对象是公司内部测试人员。
- 性能测试工程师:针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本。
- 安全测试工程师:主要分析产品可能会出现的安全问题,SQL注入、黑客攻击等做各个方面的渗透测试,提高产品的安全性。
- 其它:系统测试工程师,嵌入式测试工程师,硬件测试工程师,游戏测试工程师,自动化测试工程师(设计自动化测试用例,开发自动化测试框架)。
6.软件测试在不同类型公司的定位
6.1.无组织性
最简单的软件测试组织形式就是没有任何组织的测试,几个人就把所有软件测试工作做完,这样做没有任何分工、没有任何层次结构。
简单的软件测试组织带来的问题是:软件测试依附在软件开发的组织下,不能真正发挥软件测试的威力。
一两个人的软件测试缺乏交流和思维的碰撞,导致测试人员的进步非常有限。缺乏测试的组织,导 致测试无计划进行,测试人员疲于应付各项突如其来的测试任务,测试经验也得不到很好的总结。
6.2.专职VS兼职
按照测试人员的职责明确程度,可以划分成兼职测试和专职测试两大类。目前在很多软件企业,尤 其是小规模的软件企业,往往没有专职的测试人员。在做测试工作的同时还要兼顾软件开发、配置管理、技术文档编写、用户教育、系统部署实施等工作。
即使是在一些比较大规模的软件企业,拥有专门的质量部门,也会有兼职的情况,最常见的兼职工作是测试+配置管理,或者测试+QA。这种方式的好处是节省成本,可以充分利用资源。但是这样测试人员缺乏专门的独立的发展空间,不利于测试的纵深方向的发展,很难把测试做得精细,也不利于测试经 验的积累和测试知识的传播。
当然,由于目前软件企业的现状,很多企业还是使用这种方式。新入行的测试人员来说,可以认为这是对自己很好的锻炼机会。
测试本身的要求就是知识面要广,而这些工作有助于从不同层面、不同角度、不同角色的位置考虑软件的相关问题。
6.3.项目性VS职能性
按测试人员参与项目的形式来划分,可分成项目型和职能型。
项目型的测试组织是指测试人员作为项目组成员之一紧密地结合到项目中,与项目组其他人员紧密协作,一般是从头到尾跟着项目走。当然,也有些项目是到了中后期才考虑把测试人员加入到项目中。 这种类型的测试组织一般不会有测试组长,测试的管理由项目的主管或项目经理负责。当然,在一些大的项目中,会划分出开发组长、也会划分出测试组长,但是最终报告的对象都是项目经理。因此项目经理是负责测试资源调配和测试计划的主要人员。
而职能型的测试组织是指测试人员参与到项目中是以独立的测试部门委派的方式进入的。 在这种结构中,一个测试人员有可能不仅仅测试一个项目的产品,可能会同时测试多个项目的产品。测试人员也可能不是长期稳定地从头到尾参与一个项目。 测试人员不向项目主管或项目经理报告工作,而是向自己所在的部门经理报告工作。并且这种结构的项目经理也可能是虚拟的,或者由多个部门经理共同担当。
这两种方式各有利弊。项目型的好处是测试人员参与的力度很强,能深入了解项目方方面面的信息,有利于稳定持续有效地测试出更多细节问题;但是同时也有弊端,就是测试人员受项目负责人的管理,在对待Bug的处理意见上往往受到约束,同时由于过于亲密,很可能出现“网开一面”,不能严格要求的惜况。并且由于缺乏独立的组织,测试人员的知识可能局限在项目组内传播,不利于测试经验在不同项目组之间的传播。某些测试人员在这种组织中可能会感到孤独和无助。
而职能型的好处是能避免项目型的部分问题,并且能节省部分测试资源,充分利用各个项目阶段之间的时间差来合理利用测试资源;但是也不可避免地存在一些问题。例如,深入程度不够,尤其是对项 目涉及的领域知识和业务知识理解可能不够深入,导致测试的问题比较表面。
项目性:
职能性:
6.4.综合性
尽管独立的测试部门会有一些不可避免的问题,例如参与项目的深入程度,容易导致“扔过墙”的测试。 但是很多软件企业还是倾向于建立一个相对独立的软件测试组织。一个理想的软件测试组织可以是综合和兼容了几种结构方式的组织。
例如,可以将项目型结构和职能型结构组合并加以改造。测试部门是独立的部门,测试部门经理根据各 项目组中项目经理的请求,结合公司对项目的投入和重点方向,决定委派哪些测试人员加入到项目组, 并且长期稳定、持续地跟进项目,在项目的各个阶段都参与并做测试的相关工作内容。测试人员作为一 种服务资源供项目组调用,测试的结果和报告作为评估软件产品质量的必要参考信息,为项目经理做出 产品发布的决定提供参考价值。
7.一个优秀的软件测试人员具备的素质
7.1.技能相关
- 编程能力。
- 掌握自动化测试技术:可以把你从大量重复性的手工劳动中解放出来,这样可以把更多的精力花在更多类型的测试上。
- 优秀的测试用例设计能力:测试用例设计能力是指,无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例。
- 快速学习的能力:对不同业务需求和功能的快速学习与理解能力。 对于测试新技术和新方法的学习能力。
7.2.非技能相关
- 沟通能力:测试工程师的沟通能力会直接影响事务开展的效率。良好清晰的沟通能力,是一个技术优秀的测是 工程师是否可以获得更好发展的“敲门砖”。
- 文字表达能力:编写测试用例,编写测试文档,描述bug。
- 探索性思维:探索性思维是指,测试工程师在执行测试的过程中不断学习被测系统,结合自己的经验,知识,直觉, 进行系统的错误猜测和逻辑推理,整理和分析出更多有针对性的的测试关注点。案例:测试一台自动售票机。 正向,逆向,边界,压力,性能,耗电量,断电,外观,没零钱.....
- 兴趣。为啥选软件测试?是因为它简单吗?不是,因为自身对软件测试感兴趣,业余时间学习了开发相关知识,是为自动化开发测试脚本和工具储备知识,更好与开发人员沟通。
- 有责任感和一定的抗压力:责任感是任何工作的都需要的,对于测试工作者而言,测试往往是产品质量的最后个把关者。由于测试工作成效很难衡量,测试用例执行、bug数目的多少都无法说明产品的质量是否合格。所以,责任感是最重要的测试必备素质之一。压力,测试工作者,特别是属于互联网行业需要能够抗住各种压力。担任班委。
PS:如何提高测试用例设计的能力?
- 掌握设计测试用例的方法。
- 积累,总结。
- 阅读好的测试用例设计案例。
8.软件测试的学习方式及内容
- 学习方法: 以实践为主,理论为辅。
- 学习内容: 概念--基础-用例-进阶-管理-项目实践-工具(禅道-持续集成-功能自动化-性能自动化)