1.测试 —— 答疑篇

什么是软件测试:

软件测试是不是就是找 bug
软件测试就是证明软件不存在错误的过程
软件测试就是为了证明程序能够正确运行

刚新买来一部手机,我们要干什么?
一场考试 , 做完一遍题目之后 , 进行一遍检查 , 就是在 " 测试 "
买一台电视 , 安装好之后打开试试看能不能正常使用 , 也是在 " 测试 "
概念:验证软件功能是否满足用户的需求。

  • 1979年,Glenford Myers(美 梅尔斯),<软件测试艺术>[The Art of Software Testing]:为了发现错误而 执行程序或者系统的过程
  • 1983年,Bill Hetzel在《软件测试完全指南》(Complete Guide of Software Testing)一书中指出:测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。
  • 1983年,IEEE软件工程标准术语:使用人工或自动手段,来运行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。软件测试的定义随着发展而不断扩展,但是不可否认的是软件测试最基本的活动就是找bug。而不同的定义只 是说明了测试的目的以及如何来衡量测试是否成功。

软件测试的发展:

  1. 软件调试
  2. 独立的软件测试( 1950~ )
  3. 软件测试的第一次定义( 1973~Bill Hetzel ),软件测试就是对程序能够按预期的要求运行建立起一种信心
  4. 软件成为专门的学科( 1980~ )
  5. 开发与测试的融合( 2000~ )

测试与调试的区别:

目的不同
-- 测试的任务是发现程序中的缺陷;调试的任务是定位并且解决程序中的问题。
参与角色不同
-- 测试主要是由测试人员和开发人员来执行,黑盒测试主要由测试人员完成、单元 / 集成测试主要是由开发人员执行。调试由开发人员完成。
执行的阶段不同
-- 测试贯穿整个软件开发生命周期,调试一般在开发阶段。

软件测试岗位有哪些

  1. 软件测试开发工程师( SET ), software engineer in test 。 google 的角色划分
    开发角色,工作重心为可测试性以及通用测试基础框架。编写单元测试框架和自动化测试框架。 SET 关注质量提升和测试覆盖率。
  2. 测试工程师( TE ), test engineer 。 google 的角色划分
    与 SET 关系密切,但把用户放在第一位来思考。 TE 组织整体测试实践,并进行分析总结,驱动测试执行,构建端到端的自动化测试。
  3. 软件开发测试工程师( SDET ), software development engineer in test ,微软的角色划分
    通常称为测试人员( Tester ),负责高标准的测试和质量保证,需要编程能力
  4. 按测试对象划分: WEB 测试工程师、 APP 测试工程师、游戏测试工程师 、嵌入式测试工程师
  5. 按是否手工:手工测试、自动化测试
  6. 按测试分类:功能测试、性能测试、安全测试等
  7. 按级别:初级、中级、高级、资深、组长、主管、经理、总监等

软件测试在不同类型公司的定位

  • 无组织性
  • 专职VS.兼职
  • 项目性VS.职能性
  • 综合性
  1. 无组织性

最简单的软件测试组织形式就是没有任何组织的测试,几个人就把所有软件测试工作做完,这样做没有任何分工、没有任何层次结构。
简单的软件测试组织带来的问题是:软件测试依附在软件开发的组织下,不能真正发挥软件测试的威力。
一两个人的软件测试缺乏交流和思维的碰撞,导致测试人员的进步非常有限。缺乏测试的组织,导致测试无计划进行,测试人员疲于应付各项突如其来的测试任务,测试经验也得不到很好的总结。

  1. 专职 VS. 兼职

按照测试人员的职责明确程度,可以划分成兼职测试和专职测试两大类。目前在很多软件企业,尤其是小规模的软件企业,往往没有专职的测试人员。在做测试工作的同时还要兼顾软件幵发、配置管理、技术文档编写、用户教育、系统部署实施等工作。
即使是在一些比较大规模的软件企业,拥有专门的质量部门,也会有兼职的情况,最常见的兼职工作是测试+配置管理,或者测试 +QA 。这种方式的好处是节省成本,可以充分利用资源。但是这样测试人员缺乏专门的独立的发展空间,不利于测试的纵深方向的发展,很难把测试做得精细,也不利于测试经验的积累和测试知识的传播。
当然,由于目前软件企业的现状,很多企业还是使用这种方式。新入行的测试人员来说,可以认为这是对自己很好的锻炼机会。
测试本身的要求就是知识面要广,而这些工作有助于从不同层面、不同角度、不同角色的位置考虑软件的相关问题。

  1. 项目性 VS. 职能性

按测试人员参与项目的形式来划分,可分成项目型和职能型。
项目型的测试组织是指测试人员作为项目组成员之一紧密地结合到项目中,与项目组其他人员紧密协作,一般是从头到尾跟着项目走。当然,也有些项目是到了中后期才考虑把测试人员加入到项目中。这种类型的测试组织一般不会有测试组长,测试的管理由项目的主管或项目经理负责。当然,在一些大的项目中,会划分出幵发组长、也会划分出测试组长,但是最终报告的对象都是项目经理。因此项目经理是负责测试资源调配和测试计划的主要人员。
而职能型的测试组织是指测试人员参与到项目中是以独立的测试部门委派的方式进入的。
在这种结构中,一个测试人员有可能不仅仅测试一个项目的产品,可能会同时测试多个项目的产品。测试人员也可能不是长期稳定地从头到尾参与一个项目。
测试人员不向项目主管或项目经理报告工作,而是向自己所在的部门经理报告工作。并且这种结构的项目经理也可能是虚拟的,或者由多个部门经理共同担当。
这两种方式各有利弊。项目型的好处是测试人员参与的力度很强,能深入了解项目方方面面的信息,有利于稳定持续有效地测试出更多细节问题;但是同时也有弊端,就是测试人员受项目负责人的管理,在对待Bug 的处理意见上往往受到约束,同时由于过于亲密,很可能出现" 网开一面 " ,不能严格要求的惜况。并且由于缺乏独立的组织,测试人员的知识可能局限在项目组内传播,不利于测试经验在不同项目组之间的传播。某些测试人员在这种组织中可能会感到孤独和无助。
而职能型的好处是能避免项目型的部分问题,并且能节省部分测试资源,充分利用各个项目阶段之间的时间差来合理利用测试资源;但是也不可避免地存在一些问题。例如,深入程度不够,尤其是对项目涉及的领域知识和业务知识理解可能不够深入,导致测试的问题比较表面。
项目性:

职能性:

4. 综合性

尽管独立的测试部门会有一些不可避免的问题,例如参与项目的深入程度,容易导致 " 扔过墙 " 的测试。但是很多软件企业还是倾向于建立一个相对独立的软件测试组织。一个理想的软件测试组织可以是综合和兼容了几种结构方式的组织。
例如,可以将项目型结构和职能型结构组合并加以改造。测试部门是独立的部门,测试部门经理根据各项目组中项目经理的请求,结合公司对项目的投入和重点方向,决定委派哪些测试人员加入到项目组,并且长期稳定、持续地跟进项目,在项目的各个阶段都参与并做测试的相关工作内容。测试人员作为一种服务资源供项目组调用,测试的结果和报告作为评估软件产品质量的必要参考信息,为项目经理做出产品发布的决定提供参考价值。

一个优秀的测试人员所具体的素质

  1. 思维模式
    逆向思维:开发盖房子,测试拆房子。不走寻常路。
    案例:手机中有两条通话记录,进行删除。删除为 0 后,继续删除。
    发散性思维:探求多项答案
    案例:测试一台自动售票机。正向,逆向,边界,压力,性能,耗电量,断电,外观,没零钱 .....
  2. 兴趣
    真的有兴趣么?而不是开发加班多,不想编码?
  3. 性格特征
    好奇心
    成就感
    敏感
    不浮躁
    善于怀疑
    批判性思维:清楚 -- 准确、切题 -- 深刻,有意义,有逻辑性 -- 公正、全面
  4. 能力
    快速学习能力
    沟通能力
    文字能力
    开发能力
  5. 责任感和压力
    责任感:测试往往是产品的最后一个检验者;测试的工作成效很难衡量,测试用例执行、 bug 数目的多少都无法说明产品是否能够交给用户使用。所以,责任感是最重要的测试必备素质之一。
    压力:来自开发人员、用户、上级、自己的压力。测试人员的压力比想象中的要大。

软件测试的学习方式及内容

学习方法:
以实践为主,理论为辅。
学习内容:
概念 -- 基础 - 用例 - 进阶 - 管理 - 项目实践 - 工具(禅道 - 持续集成 - 功能自动化 - 性能自动化)

相关推荐
代码小鑫11 分钟前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
赛丽曼16 分钟前
Python中的TCP
python
小白~小黑17 分钟前
软件测试基础二十(接口测试 Postman)
python·自动化·postman
codists17 分钟前
《Django 5 By Example》阅读笔记:p76-p104
python·django·编程人
五味香19 分钟前
Linux学习,ip 命令
linux·服务器·c语言·开发语言·git·学习·tcp/ip
欧阳枫落25 分钟前
python 2小时学会八股文-数据结构
开发语言·数据结构·python
天天要nx29 分钟前
D64【python 接口自动化学习】- python基础之数据库
数据库·python
何曾参静谧32 分钟前
「QT」文件类 之 QTextStream 文本流类
开发语言·qt
monkey_meng36 分钟前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss44 分钟前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby