【软件测试】概念篇 -- 详解(上)

简介: 【软件测试】概念篇 -- 详解(上)

一、什么是软件测试(重点)

最常见的理解是:软件测试就是找 BUG ,发现缺陷。

现实生活中在很多情况下我们都在默默进行测试:

  • 新买来一部手机后,我们需要干什么?
  • 在考试时,做完一遍题目之后进行一遍检查,就是在 “测试”
  • 买一台电视安装好之后,打开试试看能不能正常使用,也是在 “测试”

软件测试就是 验证 软件产品 特性 是否 满足用户的需求

软件测试需要保证软件质量,有很多公司将测试部门叫作 “质量保障部”


早期,人们更多的将测试看成是对软件产品 “检验,检查软件的每个功能是否运行正常。

1983 年,Bill Hetzel 将软件测试定义为:软件测试就是一系列活动,这些活动是为了评估一个程序或者软件系统的特性或能力,并确定是否达到了其预期的效果。

从这里我们可以看出以下两点:

  1. 测试试图验证软件是 工作的,也就是验证软件功能执行的正确性。
  2. 测试的活动是以测试人员 预期的结果为依据,这里的 预期结果指的是需求定义。

1、举例 —— 软件系统登陆功能如何测试?


2、软件测试的特点

在下面各种场景(不同测试点)下进行登录,能否登陆成功:

账号和密码都正确,则登录成功。

输入错误的账号或错误的密码,则登录失败。

没有任何输入,直接点击登录,则登录失败。

网络发生异常,则登陆失败。

一名用户在多台设备进行登录,能否登陆成功成功。

... ...

软件测试只是一个样本试验,具有 不可穷尽性


二、软件测试和开发的区别(重点)

1、软件测试与调试的区别

(1)工作内容不同

  • 测试:写测试用例、执行、发送测试报告;编写自动化测试用例,掌握开发相关的测试工具。
  • 开发:通过不同的编程语言 coding,最终做出软件。

(2)技能区别

  • 测试:技能广度的掌握(外观是否好看、WEB 的 UI 自动化测试、APP 的 UI 自动化、对后端的接口进行测试、性能、安全 ... ...)。
  • 开发:技能深度的掌握(要写出高效的代码)。

(3)目的不同

  • 调试(Debug):发现问题,解决问题,确保程序做了程序员想它做的事情。
  • 测试(Testing):发现问题,提供解决方案,确保程序解决了它该解决的问题。

(4)参与角色不同

  • 测试:由测试人员和开发人员来执行,黑盒测试主要由测试人员完成、部分白盒测试、系统测试(单元 / 集成测试)是由开发人员执行。
  • 调试:由开发人员完成。

(5)执行的阶段不同

  • 测试:贯穿整个软件开发的生命周期(测试介入的时间比调试早)。
  • 调试:一般在开发阶段,开发时才调试。

(6)手段不同

  • 调试:Debug,分析代码逻辑。
  • 测试:等价类划分法、边界值法... ...

三、软件测试的发展史(了解)

  1. 软件调试为主,发生在 20 世界 50 年代。
  2. 1957 年 Charles Baker 对调试和测试进行了区分。这是软件测试史上一个重要的里程碑,标志已经有独立的软件测试了。
  3. 1979年,《软件测试的艺术》中给出了软件测试的定义:测试是为发现错误而执行程序的过程。它意味着软件测试不仅要证明软件做了该做的事情,也要保证它没做不该做的事情。
  4. 1983 年,美国国家标准局(National Bureau of Standards)发布了 VV&T,VV&T 提出了测试界很有名的两个名词:验证(Verification)和确认(Validation)。这些意味着软件测试正作为一门独立的、专业的,具有影响力的工程学发展起来了。
  5. 预防为主是当下软件测试的主流思想之一,软件测试已经贯穿到了整个软件开发的生命周期当中了。

四、软件测试有哪些岗位

1、软件测试工程师

工程师的主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪 BUG 、编写测试报告等。

功能测试比较多,设计测试用例、执行测试用例,涉及到的开发工作内容较少。

软件工程师开发出来的软件面向的对象是内部工作人员。


2、测试开发工程师

根据项目的特点来开发一些自动化测试的脚本或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具等,从而能够更有效地进行测试,提高软件产品的质量。

测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作;测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。

在软件测试工程师的工作内容基础上加了一些开发工作(开发测试用例、开发测试工具,开发出来的测试工具给测试人员使用,提高测试效率)

测试开发工程师开发出来的软件面向的对象是外部用户。


3、自动化测试工程师

设计自动化测试用例,开发自动化测试框架。


4、性能测试工程师

针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本。


5、安全测试工程师

主要分析产品可能会出现的安全问题,做各个方面的渗透测试,提高产品的安全性。


6、其它

游戏测试工程师、系统测试工程师、嵌入式测试工程师、硬件测试工程师。


五、软件测试在不同类型公司的定位(了解)

1、无组织性

       最简单的软件测试组织形式就是没有任何组织的测试,几个人就把所有软件测试工作做完,这样做没有任何分工、没有任何层次结构。

       简单的软件测试组织带来的问题是:软件测试依附在软件开发的组织下,不能真正发挥软件测试的威力。

       一两个人的软件测试缺乏交流和思维的碰撞,导致测试人员的进步非常有限。缺乏测试的组织,导致测试无计划进行,测试人员疲于应付各项突如其来的测试任务,测试经验也得不到很好的总结。


2、专职 VS 兼职

       按照测试人员的职责明确程度,可以划分成兼职测试和专职测试两大类。目前在很多软件企业,尤其是小规模的软件企业,往往没有专职的测试人员。在做测试工作的同时还要兼顾软件幵发、配置管理、技术文档编写、用户教育、系统部署实施等工作。

       即使是在一些比较大规模的软件企业,拥有专门的质量部门,也会有兼职的情况,最常见的兼职工作是测试 + 配置管理,或者测试 + QA。这种方式的好处是节省成本,可以充分利用资源。但是这样测试人员缺乏专门的独立的发展空间,不利于测试的纵深方向的发展,很难把测试做得精细,也不利于测试经验的积累和测试知识的传播。

       当然,由于目前软件企业的现状,很多企业还是使用这种方式。新入行的测试人员来说,可以认为这是对自己很好的锻炼机会。

       测试本身的要求就是知识面要广,而这些工作有助于从不同层面、不同角度、不同角色的位置考虑软件的相关问题。


3、项目性 VS 职能性

       按测试人员参与项目的形式来划分,可分成项目型和职能型。

       项目型的测试组织是指测试人员作为项目组成员之一紧密地结合到项目中,与项目组其他人员紧密协作,一般是从头到尾跟着项目走。当然,也有些项目是到了中后期才考虑把测试人员加入到项目中。这种类型的测试组织一般不会有测试组长,测试的管理由项目的主管或项目经理负责。当然,在一些大的项目中,会划分出幵发组长、也会划分出测试组长,但是最终报告的对象都是项目经理。因此项目经理是负责测试资源调配和测试计划的主要人员。

       而职能型的测试组织是指测试人员参与到项目中是以独立的测试部门委派的方式进入的。

       在这种结构中,一个测试人员有可能不仅仅测试一个项目的产品,可能会同时测试多个项目的产品。测试人员也可能不是长期稳定地从头到尾参与一个项目。

       测试人员不向项目主管或项目经理报告工作,而是向自己所在的部门经理报告工作。并且这种结构的项目经理也可能是虚拟的,或者由多个部门经理共同担当。

       这两种方式各有利弊。项目型的好处是测试人员参与的力度很强,能深入了解项目方方面面的信息,有利于稳定持续有效地测试出更多细节问题;但是同时也有弊端,就是测试人员受项目负责人的管理,在对待 Bug 的处理意见上往往受到约束,同时由于过于亲密,很可能出现 网开一面 ,不能严格要求的惜况。并且由于缺乏独立的组织,测试人员的知识可能局限在项目组内传播,不利于测试经验在不同项目组之间的传播。某些测试人员在这种组织中可能会感到孤独和无助。

       而职能型的好处是能避免项目型的部分问题,并且能节省部分测试资源,充分利用各个项目阶段之间的时间差来合理利用测试资源;但是也不可避免地存在一些问题。例如,深入程度不够,尤其是对项目涉及的领域知识和业务知识理解可能不够深入,导致测试的问题比较表面。


(1)项目性


(2)职能性


4、综合性

       尽管独立的测试部门会有一些不可避免的问题,例如参与项目的深入程度,容易导致 “ 扔过墙 的测试。但是很多软件企业还是倾向于建立一个相对独立的软件测试组织。一个理想的软件测试组织可以是综合和兼容了几种结构方式的组织。

       例如,可以将项目型结构和职能型结构组合并加以改造。测试部门是独立的部门,测试部门经理根据各项目组中项目经理的请求,结合公司对项目的投入和重点方向,决定委派哪些测试人员加入到项目组,并且长期稳定、持续地跟进项目,在项目的各个阶段都参与并做测试的相关工作内容。测试人员作为一种服务资源供项目组调用,测试的结果和报告作为评估软件产品质量的必要参考信息,为项目经理做出产品发布的决定提供参考价值。


六、一个优秀的软件测试人员具备的素质(重点)


1、综合能力

(1)沟通能力

测试工程师的沟通能力会直接影响事务开展的效率。良好清晰的沟通能力,是一个技术优秀的测是工程师是否可以获得更好发展的 “ 敲门砖


(2)快速学习的能力

对不同业务需求和功能的快速学习与理解能力

对于测试新技术和新方法的学习能力。


(3)开发能力


(4)文字能力

测试用例是用文字写出来的,测试工作人员还需要编写测试文档,提炼 Bug。


2、掌握自动化测试技术

掌握自动化测试技术可以把你从大量重复性的手工劳动中解放出来,这样可以把更多的精力花在更多类型的测试上。


3、优秀的测试用例设计能力

测试用例设计能力是指,无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例。

如何提高测试用例设计的能力?
  1. 掌握设计测试用例的方法。
  2. 积累,总结。
  3. 阅读好的测试用例设计案例。

4、探索性思维

探索性思维是指,测试工程师在执行测试的过程中不断学习被测系统,结合自己的经验,知识,直觉,进行系统的错误猜测和逻辑推理,整理和分析出更多有针对性的的测试关注点。


5、兴趣


6、有责任感和一定的压力

责任感是任何工作的都需要的,对于测试工作者而言:

测试往往是产品质量的最后个把关者;由于测试工作成效很难衡量,测试用例执行、 bug 数目的多少都无法说明产品的质量是否合格;所以,责任感是最重要的测试必备素质之一。

压力,测试工作者,特别是属于互联网行业需要能够抗住各种压力。

【软件测试】概念篇 -- 详解(下)https://developer.aliyun.com/article/1515623?spm=a2c6h.13148508.setting.33.11104f0e63xoTy

相关文章
|
6月前
|
Java 测试技术 Maven
JAVA单元测试概念与实战
单元测试是软件开发中的一个测试方法,用于验证软件代码中最小的、独立的单元是否按照预期工作。在Java中,这通常指的是单个的方法或者一个类的个别功能。单元测试的目的是隔离代码的每个部分,并确保各个部分是正确的。
113 4
|
6月前
|
jenkins 测试技术 持续交付
软件测试:基础概念
软件测试:基础概念
113 0
|
6月前
|
测试技术 UED
软件测试/测试开发|软件测试基础概念
软件测试/测试开发|软件测试基础概念
|
1月前
|
消息中间件 分布式计算 大数据
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
107 0
|
4月前
|
测试技术 API 数据库
性能测试概念
**性能测试评估系统在负载下的表现,关注响应时间、吞吐量、并发用户数和资源利用率。关键指标包括RT、HPS、TPS、QPS、RPS等。并发数可由QPS和平均响应时间计算。提升压力的技术手段涉及多进程、多线程,各有优劣。P90、P95、P99等分位数用于描述数据分布,揭示不同负载场景下的系统性能。**
|
1月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
178 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
1月前
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
41 1
|
1月前
|
前端开发 测试技术 程序员
在工作中会涉及到的几个环境(概念补充) 办公环境、开发环境、测试环境、线下环境、线上环境/生产环境都是什么,他们之间的关系?
本文解释了在职场中可能会接触到的不同环境,包括办公环境、开发环境、测试环境和生产环境(线上环境),以及它们之间的关系和重要性。
66 1
|
3月前
|
Kubernetes 监控 Java
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
402 0
|
6月前
|
测试技术
软件测试概念与基础
软件测试概念与基础