软件测试 订阅
软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 展开全文
软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
信息
方    式
人工操作或者软件自动运行
领    域
IT行业、有信息化管理的各行业
工作内容
验证和确认
中文名
软件测试
目    的
鉴定、审核软件
外文名
software testing
软件测试概述
软件测试是伴随着软件的产生而产生的。早期的软件开发过程中软件规模都很小、复杂程度低,软件开发的过程混乱无序、相当随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。到了上世纪80年代初期,软件和IT行业进入了大发展,软件趋向大型化、高复杂度,软件的质量越来越重要。这个时候,一些软件测试的基础理论和实用技术开始形成,并且人们开始为软件开发设计了各种流程和管理方法,软件开发的方式也逐渐由混乱无序的开发过程过渡到结构化的开发过程,以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征。人们还将“质量”的概念融入其中,软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且将测试作为软件质量保证(SQA)的主要职能,包含软件质量评价的内容,Bill Hetzel在《软件测试完全指南》(Complete Guide of Software Testing)一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。”这个定义至今仍被引用。软件开发人员和测试人员开始坐在一起探讨软件工程和测试问题。软件测试已有了行业标准(IEEE/ANSI ),1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。它再也不是一个一次性的,而且只是开发后期的活动,而是与整个开发流程融合成一体。软件测试已成为一个专业,需要运用专门的方法和手段,需要专门人才和专家来承担。
收起全文
精华内容
参与话题
问答
  • 软件测试_笔记(完整版)

    万次阅读 多人点赞 2018-07-02 08:51:28
    软件测试复习(部分) 概述 程序+文档+数据=软件 狭义的软件测试定义:为发现软件缺陷而执行程序或系统的过程 广义的软件测试定义:人工或自动地运行或测定某系统的过程,目的在于检验它是否满足规定的需求或...

    软件测试

    概述

    程序+文档+数据=软件

    狭义的软件测试定义:为发现软件缺陷而执行程序或系统的过程

    广义的软件测试定义:人工或自动地运行或测定某系统的过程,目的在于检验它是否满足规定的需求或弄清预期结果和实际结果间的差别

    为什么要做软件测试

    • 发现软件缺陷
      • 功能错
      • 功能遗漏
      • 超出需求部分(画蛇添足)
      • 性能不符合要求
    • 软件质量高低:是否符合用户习惯、符合用户需求

    测试的任务

    • 找出
    • 定位
    • 修改
    • 修改后要做回归测试,对已修改的部分进行再次的测试,避免引入新的错误

    测试用例的定义和组成部分

    • 测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。测试用例是执行的最小实体。简单地说,测试用例就是设计一个场景,使软件程序在这种场景下,必须能够正常运行并且达到程序所设计的执行结果。
    • 包含
      • 用例ID
      • 用例名称
      • 测试目的
      • 测试环境
      • 前提条件
      • 测试步骤
      • 预期结果
      • 其他信息

    一个好的高质量的测试用例在于能发现至今未发现的错误,一个成功的测试是发现了至今未发现的错误的测试(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

    两个方向

    • 找错误,反向思维。
    • 证明能正常工作,正向思维。
    • 目前的方法出发点一般是“找错误”,因为没法证明软件是正确的。

    用户需求

    要求(用户想要) 需求(用户目的) 需要(用户内在欲望)
    牙膏 清洁牙齿 个人魅力(个人外表整洁)

    什么时候停止测试

    • 继续测试没有产生新的失效
    • 继续测试没有发现新缺陷
    • 回报很小
    • 以达到要求的覆盖
    • 无法考虑新的测试用例(若已遵循测试规则和指导方针,则可以选择)

    测试过程模型

    缺陷具有放大的特点,随着阶段的推进发现bug的成本会指数型上升,所以并不是代码级的测试才叫测试,而是开发过程各个阶段越早开始测试越好。

    • 瀑布模型:需求分析->设计(概要、详细)->编程->测试(单元、集成、系统)->维护
    • V模型(瀑布-改):在软件开发的生存期,开发活动和测试活动几乎同时的开始,如概要设计阶段结束后集成测试的测试用例就出来了、详细设计阶段结束后单元测试的测试用例也就出来了等
    • W模型(V模型更加细化、每步都加测试,边造软件边进行测试):需求分析加了需求测试、概要设计加了功能测试、详细设计加了设计测试、编码加了单元测试、集成加了集成测试、确认加了确认测试、验收加了系统测试
    • H模型:无实际意义,仅说明可以独立测试

    软件测试的原则

    • 所有的测试都应追溯到用户的需求
    • 尽早地和不断地进行软件测试(缺陷具有放大的特点,测试成本随阶段深入而上升)
    • 8-2原则
      • 测试中发现的错误80%很可能起源于程序中的20%
      • 提前测试可发现80%,系统测试找出剩余bug的80%(总体的16%),最后的4%可能只有用户大范围长时间使用后才暴露出来
      • 80%的工程用在20%的需求上(即关键需求)
    • 软件缺陷的寄生虫性:找到的缺陷越多说明软件遗留的缺陷越多
    • 避免自己测试自己的程序
    • 回归测试:避免引入新的错误

    软件测试流程

    制定测试计划->测试设计->测试开发->测试执行->评估测试

    注意

    • 测试不是开发后期的一个阶段
    • 测试入门其实稍容易,但要求技术一样高
    • 测试多数情况下不能覆盖所有输入
    • 不要“有时间多测,没时间少测”
    • 软件测试不止是测试人员的事,也是开发人员的事
    • 调试和测试不一样
    • 测试绝非只运行一下软件看结果对不对

    L10N:本地化测试

    I18N:国际化测试

    黑盒测试

    等价类划分与边界值分析

    如何划分有效和无效等价类(一些常用原则)

    • 如果一个变量在某一个范围内,给它一个有效等价类两个无效等价类
    • 如果一个变量取值在某一个集合范围内,可在集合内取一个有效等价类在集合外取一个无效等价类
    • 如果一个变量的条件是“必须怎样”、“一定会是怎样”则去一个值满足“必须要”的条件再取多个不满足的从多个角度去违背这个条件
    • 如果一个变量是布尔类型,则取一个对的一个错的

    在找到有效等价类和无效等价类后如何找测试数据

    • 有效等价类:要尽可能多的覆盖有效等价类
    • 无效等价类:每找到一组数据要至少覆盖一组无效等价类

    如果功能模块的输入是多个,多个自变量放在一起如何找有效等价类、无效等价类、测试数据,4钟方法:

    以一个具有自变量X1、X2的函数F为例,X1取值范围为[a, b)、[b, c)、[c, d];X2取值范围为[e, f)、[f, g]。仅考虑有标记的方块内为一般等价类测试(不处理无效数据的测试)、所有方块都考虑为健壮等价类测试(进行无效数据处理的测试)

    g |_______|_______|_______|_______|_______|
    f |_______|///|///|///|_______|
    e |_______|///|///|///|_______|
      |_______|_______|_______|_______|_______|
              a       b       c       d
    • 弱一般等价类
      • 有假设前提:是单缺陷的,即假设系统出现的缺陷很少是由两个及以上的输入变量共同出现缺陷而引起的。
      • 选取的测试用例覆盖所有的有效等价类
        • 对于X1(横轴):[a, b)、[b, c)、[c, d]都需要覆盖到;对于X2(纵轴):[e, f)、[f, g]都需要覆盖到。保证了这两点的情况下,就可以任意取点了
    g |_______|_______|_______|_______|_______|
    f |_______|_______|____x__|_______|_______|
    e |_______|___x___|_______|___x___|_______|
      |_______|_______|_______|_______|_______|
              a       b       c       d
    • 强一般等价类
      • 基于多缺陷假设
      • 选取的测试用例覆盖所有的有效等价类的笛卡尔积(集合A{a1,a2,a3} 集合B{b1,b2} 他们的 笛卡尔积 是 A*B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)} )
        • 对于X1(横轴):[a, b)、[b, c)、[c, d];X2(纵轴):[e, f)、[f, g],笛卡尔积的结果就是所有的格子,所以必须所有格子都取点
    g |_______|_______|_______|_______|_______|
    f |_______|___x___|___x___|___x___|_______|
    e |_______|___x___|___x___|___x___|_______|
      |_______|_______|_______|_______|_______|
              a       b       c       d
    • 弱健壮等价类
      • 有假设前提:是单缺陷的,即假设系统出现的缺陷很少是由两个及以上的输入变量共同出现缺陷而引起的。
      • 考虑无效值,对有效输入,测试用例的设计等同于弱一般等价类;对无效输入,测试用例需要保证拥有一个无效值(比如某一变量的有效类的取值范围为x、y、z,则无效类为x-和z+,加起来取值范围一共:x-、x、y、z、z+),并保持其余的值都是有效的。

    所以如下图,在保证弱一般等价类的取点后,还需要分别保证X1、X2中有1个属于无效输入的两个额外的取值范围,另一个属于有效输入的原本取值范围(如X1取无效X2取有效或X1取有效X2取无效,并全部覆盖无效范围)

    g |_______|_______|_______|___O___|_______|
    f |_______|_______|___x___|_______|___O___|
    e |___O___|___x___|_______|___x___|_______|
      |_______|___O___|_______|_______|_______|
              a       b       c       d
    • 强健壮等价类
      • 基于多缺陷假设
      • 所有的取值范围取笛卡尔积(比如某一变量的有效类的取值范围为x、y、z,则无效类为x-和z+,加起来取值范围一共:x-、x、y、z、z+,再与另一变量的取值范围取笛卡尔积)
    g |___O___|___O___|___O___|___O___|___O___|
    f |___O___|___x___|___x___|___x___|___O___|
    e |___O___|___x___|___x___|___x___|___O___|
      |___O___|___O___|___O___|___O___|___O___|
              a       b       c       d

    在找测试数据时(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

    • 对于单缺陷的,即只有一个输入变量是处于无效等价类,其他所有输入变量都处在有效等价类中。包含:
      • 单缺陷有效值
      • 单缺陷无效值
    • 对于多缺陷的,即多个输入变量同时出现错误引起的。包含:
      • 有效值
      • 无效值

    与等价类划分密切相关的就是边界值分析。先划分等价类,再结合边界值产生测试用例。边界值分析中也有假设前提:单缺陷。包含4种设计测试用例的方法:

    • 一般的边界值分析
      • 有效范围:最小的、比最小大一点的、正常值、比最大小一点、最大值
      • 无效范围:比最小更小、比最大更大
      • 共7个,再分单缺陷和多缺陷,这样设计测试用例的个数就会指数上升
    - 单变量假设 多变量假设
    有效值 **一般边界值**5n-(n-1)【n-1个变量取正常值】=4n+1【仅考虑有效区间单个变量边界值(一般边界值):用最小值、略高于最小值、正常值、略低于最大值和最大值。】 **一般最坏情况边界值**5^n【仅考虑有效区间多个变量边界值同时作用(一般最坏情况边界值):用各个变量最小值、略高于最小值、正常值、略低于最大值和最大值的笛卡尔积。】
    无效值 **健壮性边界值**7n-(n-1)=6n+1【 同时考虑有效区间和无效区间单个变量边界值(健壮边界值):除了最小值、略高于最小值、正常值、略低于最大值、最大值,还要有略超过最大值和略小于最小值的值。】 **健壮最坏情况边界值**7^n【同时考虑有效区间和无效区间多个变量边界值同时作用(健壮最坏情况边界值):用各个变量最小值、略高于最小值、正常值、略低于最大值、最大值、略超过最大值和略小于最小值的笛卡尔积。】

    常见的边界值

    • 16bit整数32767~-32768
    • 报表第一行和最后一行
    • 屏幕光标最左上和最右下
    • 数组的第一个和最后一个
    • 循环的第0、1、倒数第一、倒数第二次

    决策表

    适合于问题有多个条件,条件有多种组合执行不同操作(有很多if、else if、else),不能表达循环结构

    最严格、最具有逻辑性

    判定表
    | 条件桩 | 条件项 | ... | 动作项 |
    | 动作桩 | 动作项 | ... | 动作项 |

    规则:条件的任意组合,判定表中的一列(贯穿条件项和动作项)。判定表有多少列就代表有多少条规则。

    规则的化简:有的规则相互包含,可以化简

    因果图

    找出所有的原因,找出结果,可能还有中间结果的产生,在画因果图时注意。

    • 从输入考虑
      • I:连虚线出去,如连到ab,表示ab中至少有一个必须成立
      • E:连虚线出去,如连到ab,表示ab不能同时成立
      • R:如处于a指向b的虚线三角箭头上,表示a出现时b也必须出现,不可能一个出现一个不出现
    • 从输出考虑
      • M:如处于a指向b的虚线三角箭头上,表示a为1时b必须为0,a为0时b值不定
    • 连线:恒等
    • ~:非
    • ∨:或
    • ∧:且
    • ci:原因
    • ei:结果

    画出因果图后,根据图得到决策表从而得到相应的测试数据:原因节点+中间节点为条件桩,结果结点为动作桩

    白盒测试

    逻辑覆盖

    语句覆盖->判定覆盖->判定/条件覆盖->条件组合覆盖->路径覆盖
          \_条件覆盖/
    • 语句覆盖:每条语句执行一次
    • 判定覆盖:每个判定分支至少执行一次
    • 条件覆盖:每个判定条件应取到各种可能的值
    • 判定/条件覆盖:同时满足判定和条件
    • 条件组合覆盖:每个判定条件的每一种组合各出现一次
    • 路径覆盖:每一条可能的路径至少执行一次

    关系:

    • 条件组合覆盖>判定覆盖>语句覆盖(即如果达到条件组合覆盖,就达到判定覆盖和语句覆盖:如果达到判定覆盖,就达到语句覆盖,下面类似理解)。
    • 条件组合覆盖>条件覆盖。
    • 条件覆盖不一定包含判定覆盖、语句覆盖。
    • 判定覆盖不一定包含条件覆盖。
    • 路径覆盖,判定覆盖>语句覆盖。

    基本路径测试

    基于程序圈复杂度产生的测试方法,画出控制流程图,算圈复杂度,找到独立路径并压缩为基本路径集合,根据集合中每条路径设计用例。把复合逻辑表达式拆成单个表达式

    圈复杂度用于计算程序的基本的独立路径数目(每条新的独立路径都必须包含一条新的有向边,从入口到出口互不相同的路径数)

    • 圈复杂的V(G) = e - n + 2p【边-节点+2*连接区域数,连接区域p通常为1】=P+1【判定节点数+1】
    • 一般来说,一个单元模块的最大复杂度V(G)<10

    如果把覆盖的路径数压缩到一定限度内,例如程序中的循环体只执行0次和1次,就成为基本路径测试,通过导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次

    基于数据流的测试

    基于真的数据定义到数据的使用来进行测试,需要找到定义的节点(包括赋值的和比较的)和使用的节点(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

    • 定义节点DEF:输入语句、赋值语句、循环语句和过程调用;变量的值会发生变化的语句
    • 使用节点USE:数出语句、赋值语句、条件语句、循环控制语句、过程调用

    需要找到所有这段功能代码从哪里开始定义,到哪里开始执行,把路径找出来。什么是定义使用路径(某一变量在最初节点定义到最终节点被使用)、定义清除路径(某一个变量从它的定义节点到使用节点这个过程中没有对这个变量进行二次定义)

    循环测试

    前提是程序是结构化的。

    简单循环测试

    • 0次通过循环
    • 1次通过循环
    • 2次通过循环
    • m次通过循环(m<=循环最大次数)
    • m-1,m,m+1次通过循环

    测试的过程

    单元测试

    单元测试的内容:5点(简答题)

    • 模块接口的测试
    • 局部数据结构的测试
    • 独立路径测试
    • 错误处理测试
    • 边界测试

    单元测试的模块

    • 被测模块:被测试的程序的模块
    • 驱动模块:用来模拟测试模块的上一级模块,相当于被测模块的主程序
    • 桩模块:用来模拟被测模块工作过程中所调用的模块

    单元测试的工具:Junit相关的概念:以插入断言的方式进行测试(类似黑盒测试)

    • 针对被测代码或者被测的功能点先创建测试类,然后在类里面创建一个个测试方法。通过实例化对象调用被测方法,用断言进行实际值预期值比较。

    单元测试的方法

    • 以白盒测试法为主(覆盖),先静态检查代码是否符合规范,再动态运行代码,检查结果。除了需要验证结果是否正确,还需要检查程序的容错能力、边界值处理等问题。

    集成测试

    • 一次性的集成big-bang:把所有通过了单元测试的模块按设计要求一次全部组装起来,然后进行整体测试。时间随变短了但急于求成。
    • 渐进地集成
      • 自上而下:从主程序模块开始按深度或广度优先策略边组装边测试
      • 自下而上:从最底层模块开始组装和集成测试
      • 汉堡包:两者进行结合,树状图每层画线,顶层采用自顶向下,底层采用自底向上
        相邻的集成:上下三层进行集成
        成对集成:先成对再相邻
        基于MM路径的集成:MM路径不是可执行路径,描述单元之间的控制转移。

    最终得到调用图,然后就会到基本路径测试,找复杂度,找路径,得到测试用例的套路

    系统测试

    黑盒为主(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

    对哪些内容进行系统测试(9个):易用性、国际化本地化、性能、功能、界面、兼容性、安全性、文档、安装

    Web系统测试

    具体到如Web系统测试中的功能测试包含哪些内容、对cookies里面的内容进行测试属于Web系统测试里面的哪一项的测试(属于功能测试)

    • 功能测试
      • 页面内容测试
      • 页面链接测试
      • 表单测试
      • Cookies测试、Session测试
      • 设计语言测试
      • 数据库测试
    • 性能测试(负载/压力)
      • 连接速度测试
      • 测试工具 LoadRunner
        • 负载测试
        • 压力测试
      • 网页性能Firefox插件:Yslow,Findbug,PageSpeed
      • Dynatrace检查网页性能
    • 可靠性测试:不间断测试,看多久不出错
    • 用户界面测试/易用性测试
      • 导航测试
      • 图形测试
      • 内容测试
      • 整体界面测试
    • 安全性测试
    • 兼容性测试
    • 接口测试
      • 服务器接口
      • 外部接口
      • 错误处理

    主要讲了性能测试的含义和怎么做,如所涵盖的含义如压力测试怎么做、负载测试怎么做等

    • 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
      • 时间性能:软件的一个具体事务的响应时间
      • 空间性能:软件运行时所消耗的系统资源
      • 我让你背1袋米(轻松)
      • 我让你背1袋米,但让你去操场上跑圈,看多久累倒(吃力)
      • 我让你背3袋米去操场跑圈,看多久累倒(极限)
      • 我让你背1袋、2袋、3袋、4袋…发现最多背3袋
    • 负载测试让被测系统在其能忍受的压力的极限范围之内连续运行,来测试系统的可靠性。
      • 系统能否处理某个时刻同时访问Web系统/某个页面的用户数量
      • 超过了这个数量,会出现什么现象?
      • 在线数据处理的数量
    • 负载/压力测试关注什么?
      • 验证系统能否同一时间响应大量的用户,用户传送大量数据时能否响应,系统能否长时间运行。
        • 瞬间访问高峰
        • 每个用户传送大量数据
        • 长时间使用
    • LoadRunner性能测试工具原理:录制+回放模拟用户实际操作场景,监控并分析运行结果。

    自动化测试

    录制+回放+脚本 是主要的方式

    常用的自动化测试的工具,哪些种类,每种有什么工具

    • 功能测试工具:QTP
    • 性能测试工具:LoadRunner
      • 写脚本或者录制脚本
      • 使用用户自定义参数
      • 场景设计
      • 产生虚拟用户的机制:使用控制器,来控制模拟多少用户。
      • 使用监听器,查看测试结果

    (Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)


    visitor tracker
    访客追踪插件


    展开全文
  • 关于软件测试,你需要知道的一切都在这里了

    万次阅读 多人点赞 2018-08-01 19:31:54
    我曾今不止一次见过:对软件测试行业不甚了解的新人与已经在测试行业摸爬滚打几年的前辈之间的互相指责和争执。 新人因为不了解测试行业,也不了解提问的艺术,所以问的都是自己比较关注的问题和一些基础问题。前辈...

    测试行业小故事

    我曾今不止一次见过:对软件测试行业不甚了解的新人与已经在测试行业摸爬滚打几年的前辈之间的互相指责和争执。

    新人因为不了解测试行业,也不了解提问的艺术,所以问的都是自己比较关注的问题和一些基础问题。前辈因为对测试行业有一定的了解,掌握一定的知识技术,早就明白了有些问题是无解或者无用的。

    所以矛盾就产生了

    ——新人认为前辈都是很傲慢的,不屑回答问题还要冷嘲热讽。

    ——前辈认为新人只会坐享其成,不愿动手动脑也不会提问。

    究其原因,还是信息不对称。各自掌握的信息都是仅限于自己所了解的,所以很难做到相互理解,互帮互助。

    这篇文章的写作目的就是为了帮助测试新人和测试前辈更好地了解软件测试行业,以及它的发展前景。让新人不再对行业一无所知,让前辈对行业发展方向和新人的心理有一定的认识。

    新人的问题

    不管新人从哪里了解到软件测试行业,对它的了解都是不足的(包括这篇文章),所以新人才会问这些问题,看看我说的对不对。

    软件测试行业前景怎么样?软件测试工资高吗?测试是不是比开发简单?我快30了转测试可以吗?我学历不够,专业不对口,能做测试吗?我不会编程可以做测试吗?如果入职了我什么都不会怎么办......等等问题,问题太多了,上述是最常见的。

    这些暂且先放在这里,咱们继续往下看,希望你能找到答案!

    行业现状分析

    本文截取了《软件测试行业现状2018年度报告》中的数据,数据由PractiTest提供。《软件测试行业现状2018年度报告》是全球最大的软件测试行业调查报告。来自80多个国家的约1500名受访者参与了此次调研。调研旨在为测试行业和全球测试社区提供最准确的信息。

    测试人员地区和职位分布

    可以看到大部分软件测试人员的职位是测试工程师,其次是测试负责人,紧随其后的是测试人员和自动化测试人员。一部分软件测试员更愿意把自己定位成软件测试工程师或者质量保障工程师,而不仅仅只是单纯的测试人员。同时自动化测试是发展趋势,自动化测试工程师越来越受到青睐。

    测试人员的工作年限

    从上图中可以看到2个重要的趋势。第一个是新测试从业人员的流动性很强,但是越来越多的测试人员希望留在该行业,希望在此过程中获得专业素质并提高测试技能。第二个是大型公司往往需求经验丰富的测试人员,但小公司更加愿意接受经验较少的测试人员(这对新入行的测试人员或者希望获得第一份工作的人来说是一个好消息)。

    测试工作占工作内容的百分比

    可以看到有四分之三的测试人员至少花费了50%的时间在测试工作上,这说明了目前测试人员主要还是专注于测试本职工作,但是以后测试人员的工作职责会越来越模糊,因为测试人员需要掌握的技术广度大,以后的测试人员会更加偏向于“问题解决者”的角色。

    测试行业的入行途径

    可以看到有人从公司转岗测试,有人是其他行业转行测试,还有人是作为学生实习并留在公司从事测试。目前越来越多的人转行测试,这说明测试已经成为一个令人感兴趣的职业发展方向

    测试人员的薪资水平

    这里有两个需要注意的地方,第一,这里的单位是千美元。第二,中国<1年的测试人员样本不足,所以没有统计。从上表可以看到,中国1-5年从业经验的测试人员工资低于国际水平。中国测试行业的薪资可以在1-2年内达到一个相对较高水平。以我的经验来看,基本在15k左右。

    软件测试的职能定位

    从上表可以看出,国际趋势是测试团队规模正在缩减(国内会有几年的延迟),结合国内的情况来看,功能测试的岗位已经呈现饱和状态,自动化等高端测试岗位还有很多机会。另一个明显的趋势是,测试人员正在成为统一团队和敏捷团队的一部分

    测试人员的额外工作

    上图表明了测试人员的工作并不仅仅只限于测试应用程序,同时还要承担其他的工作任务,这也说明测试人员的工作更加多样化,正在从事软件测试或将要从事软件测试的人员需要注意:为了推进你的事业,你需要思考要做的额外工作

    测试人员的技能提升办法

    可以看到,大多数测试人员选择技能提升的方法是亲身实践,只有不断地在错误中汲取教训,从成功中总结经验,从而达到不断磨练自身的效果。有趣的是,也有不少人觉得看技术书籍和参加在线直播是不错的提升技能的方式。

    一名优秀的测试人员需要具备的技能

    沟通技巧是每个测试人员所必需的技能,其次是自动化脚本编写,第三是常规的测试手段和方法。同时测试人员应该尽量掌握更多的其他技能,这样不仅能提高核心竞争力也能提高薪资水平

    软件测试测什么?

    为了弄清楚技术趋势的变化,被测对象的变化,以及对于我们测试方法的影响。我们可以从上图中看出,web界面手机app桌面系统等测试对象占比非常高,相对应的工作机会也越多,工资水平也不低。相信你们会比较关注这个。

    自动化测试的现状

    从上图中可以看出,测试自动化应用的范围非常广:功能测试领域,持续集成领域,负载压力测试领域,单元测试领域都很大程度上依赖于自动化测试,因此,目前自动化测试是行业的“香饽饽”

    软件测试人员的未来发展方向

    大数据、区块链、人工智能等等方面相信大家已经听过很多次了,做为软件测试人员,也需要对这些领域具备一定的敏感性,可以尝试进行这些领域的了解和学习,为未来的主流技术做好技术储备

    如果我要面试,我应该准备哪些?

    很多时候,比起专业技术能力,软技能更为重要,特别是面试的时候,因为面试官也是人。同时,比起学历、专业、年龄,技术能力更重要,所以,转行者们不需要担心,这不会成为你们的绊脚石。

    在这里特别感谢一下PracticeTest的资料收集和报告出具,同时感谢中文版的翻译团队。

    参考链接:https://www.practitest.com/

    相信看到这里的,不管是新手还是前辈,都对测试行业有了一个大体的认知。希望这篇文章(实际上是报告文章)能帮助新人更好地了解软件测试行业(发展前景,技术要求,薪资水平等),希望这篇文章同样能帮助已经有几年测试经验的前辈们做好自己的职业定位,确定未来的发展方向以及做好技术沉淀。

    不管你是否选择软件测试行业,是否决定在测试行业继续发展,是否是软件测试人员,我都希望本文能够帮助到需要帮助的人,如果确实对你有帮助,我将感到非常开心。

    最后再打个广告:我创建了一个学习交流的社群,如果大家对测试行业刚兴趣,可以加入一起交流,里面也有大牛分享学习经验,这个是裙号:1007119548。谢谢大家~

     

     

     

    展开全文
  • 软件测试2小时入门

    万人学习 2018-10-10 16:14:16
    本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、...
  • 软件测试入门视频教程

    万人学习 2015-01-22 16:21:44
    软件测试入门视频培训教程:该课程将带你走进“软件测试”的大门,具体内容包括软件测试环境搭建、软件开发模型、产品模型、CMM模型、测试用例、等价类划分、边界值划分、白盒测试、单元测试、bugfree搭建、系统测试...
  • 软件测试需要具备的知识体系(个人总结)

    万次阅读 多人点赞 2018-09-04 13:44:01
    一、软件的生命周期(SDLC,Systems Development ...软件测试;运行与维护 生存周期划分  各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不 ...

    一、软件的生命周期(SDLC,Systems Development Life Cycle,SDLC)

    软件计划与可行性研究(问题定义、可行性研究);需求分析;软件设计(概要设计、详细设计);编码;软件测试;运行与维护

    • 生存周期划分

             各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不             同阶段之间的联系,有利于软件开发过程的组织管理。

    • 生存周期基线

           

           功能基线(functional baseline)

           功能基线是指在系统分析与软件定义阶段结束时,经过正式评审和批准的系统设计规格说明书中对待软件生命周期开发系统         的规格说明;或是指经过项目委托单位和项目承办单位双方签字同意的协议书或合同中所规定的对待开发软件系统         的           规格说明;或是由下级申请经上级同意或直接由上级下达的项目任务书中所规定的对待开发软件系统的规格说明。功能基             线是最初批准的功能配置标识。

           指派基线(allocated baseline)

           指派基线是指在软件需求分析阶段结束时,经过正式评审和批准的软件需求的规格说明。指派基线是最初批准的指派配置标         识。

           产品基线(product baseline)

           产品基线是指在软件组装与系统测试阶段结束时,经过正式评审的批准的有关所开发的软件产品的全部配置项的规格说明。         产品基线是最初批准的产品配置标识。

    • SDLC的六个阶段

           定义及规划

           此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。

           需求分析

           在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做         得好,将为整个软件开发项目的成功打下良好的基础。"唯一不变的是变化本身。",同样需求也是在整个软件开发过程中不         断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。

           软件设计

           此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设         计详细设计。好的软件设计将为软件程序编写打下良好的基础。

           程序编码

           此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证         程序的可读性,易维护性,提高程序的运行效率。

           软件测试

           在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程单元测试组         装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试黑盒测试两种。在测试过程中需要建立详细的测试计划并         严格按照测试计划进行测试,以减少测试的随意性。

           运行维护

           软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用         户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件软件生存周期的维护包括纠错性维护和改进性维护两个方         面。

    • 周期模型

           典型的几种生命周期模型包括瀑布模型快速原型模型迭代模型

    二、软件测试在软件生命周期(瀑布模型)中的对应关系

    三、软件测试过程

    第一步:对要执行测试的产品/项目进行分析,确定测试策略,制定测试计划。该计划被审核批准后转向第二步。测试工作启动前一定要确定正确的测试策略和指导方针,这些是后期开展工作的基础。只有将本次的测试目标和要求分析清楚,才能决定测试资源的投入。

    第二步:设计测试用例。设计测试用例要根据测试需求和测试策略来进行,进度压力不大时,应该设计的详细,如果进度、成本压力较大,则应该保证测试用例覆盖到关键性的测试需求。该用例被批准后转向第三步。

    第三步:如果满足“启动准则”(EntryCriteria),那么执行测试。执行测试主要是搭建测试环境,执行测试用例。执行测试时要进行进度控制、项目协调等工作。

    第四步:提交缺陷。这里要进行缺陷审核和验证等工作。

    第五步:消除软件缺陷。通常情况下,开发经理需要审核缺陷,并进行缺陷分配。程序员修改自己负责的缺陷。在程序员修改完成后,进入到回归测试阶段。如果满足“完成准则”(ExitCriteria),那么正常结束测试。

    第六步:撰写测试报告。对测试进行分析,总结本次的经验教训,在下一次的工作中改。

    软件测试过程管理,主要包括软件测试是什么样的过程,如何评价一个软件测试过程,如何进行配置管理和测试风险分析以及测试成本的管理。

    四、软件测试流程(与第三条对应)

    1、制定测试计划

    2、编辑测试用例

    3、执行测试用例

    4、发现并提交BUG

    5、开发组修正BUG

    6、对已修正BUG进行返测

    7、修正完成的BUG将状态置为已关闭,未正确修正的BUG重新激活

    五、测试用例

    测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。

    测试用例的要素为:版本号、模块名称、用例编号、用例名称、用例级别、预置条件、验证步骤、期望结果(含判断标准)、测试结果、测试时间、测试人员等。(其中核心要素为预置条件、验证步骤、期望结果)

    测试用例的设计方法:等价类划分、边界值分析、错误推测法、因果图法、场景设计法

    一份好的测试用例所要达到以下几点要求:测试用例必须完成对需求的完整覆盖(即用例和需求的双向可追溯性);测试用例必须是可执行的;测试用例的结果唯一性;测试用例必须简洁明了

    六、缺陷报告(提交bug)

    一份有效的缺陷报告要素通常包括:标题、前提、测试环境、操作步骤、实际结果、期望结果、出现的频率、优先级、严重等级、附件(一般是图片形式)。
    另外还会有一些附加信息,如测试人员、开发负责人等。

    • 标题:简明扼要,无歧义

    • 优先级 Priority(4个等级):软件被修复的紧急程度
      1--立即解决:缺陷导致系统几乎不能运行使用 或 严重妨碍测试的执行(需立即修改)
      2--高优先级:缺陷严重,影响到测试了(当天或第二天要及时解决的)
      3--正常:一般错误
      4--低优先级:可以在开发有时间的时候处理,如页面文本框对齐显示

    • 严重等级 Severity(4个等级):缺陷引起的故障对用户使用系统的影响
      1--致命的:主流程不通,导致系统功能缺失、用户数据被破坏、系统崩溃、死机
      2--严重的:影响流程的 比较严重的,比如系统主要功能部分未实现
      3--一般:系统的次要功能没有完全实现,但不影响用户的正常使用
      4--较小:操作不方便或遇到麻烦,但不影响功能的使用,如字体不美观、按钮大小不合适、文字排列对齐等(属于建议性或者美观方面的)

    一般来说,缺陷越严重,优先级越高,但也有例外:
    1)从用户角度看,缺陷不是很严重,但可能影响到测试执行了(优先级高严重等级低)
    2) 有些缺陷比较严重,但由于技术的限制,暂时没法修改。这时优先级就降低了

    • 附件
      有时候,用文字很难清楚描述缺陷,此时用图片(画笔指明问题)就很直观了

    如何有效的报告缺陷?

    • 单一准确:每个报告只针对一个缺陷,如果有多个缺陷,可能开发只修正了其中一个,其他的没有得到修改,加长了缺陷的生命周期

    • 可以再现:不能忽视或省略任何一项操作步骤,特别是关键性的操作,如描述的不够清楚,RD(Research and Development engineer)就会过来沟通怎么操作的,浪费了大家的时间

    • 完整统一:完整的描述信息

    • 短小简练:使用关键词

    • 特定条件:有些问题只在特定环境下存在

    七、测试报告

    测试报告是指把测试的过程和结果写成文档,对发现的问题和缺陷进行分析,为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础。

    一份详细的测试报告包含足够的信息,包括产品质量和测试过程的评价,测试报告基于测试中的数据采集以及对最终的测试结果分析。

    测试报告的主体框架为:

    1、首页

    ·· 报告名称(软件名称+版本号+用户端类型(android,iphone,后台管理等等)+测试范围(单元,集成,系统,模块等等)+测试报告)

    ·· 报告委托方,报告责任方,报告日期等

    ·· 版本变化历史

    ·· 密级

    2、引言

    2.1编写目的

    本测试报告的具体编写目的,指出预期的读者范围。

    2.2 项目背景

    对项目目标和目的进行简要说明。必要时包括简史,这部分不需要脑力劳动,直接从需求或者招标文件中拷贝即可。

    2.3 系统简介

    如果设计说明书有此部分,照抄。注意必要的框架图和网络拓扑图能吸引眼球。

    2.4 术语和缩略语

    列出设计本系统/项目的专用术语和缩写语约定。对于技术相关的名词和与多义词一定要注明清楚,以便阅读时不会产生歧义。

    2.5 参考资料

    3、测试概要

    测试的概要介绍,包括测试的一些声明、测试范围、测试目的等等,主要是测试情况简介。(其他测试经理和质量人员关注部分)

    3.1测试方法(和工具)

    简要介绍测试中采用的方法(和工具)。

    3.2测试范围

    介绍本次所测试的软件功能

    3.3测试环境与配置

    简要介绍测试环境及其配置。

    4、测试结果与缺陷分析

    整个测试报告中这是最激动人心的部分,这部分主要汇总各种数据并进行度量,度量包括对测试过程的度量和能力评估、对软件产品的质量度量和产品评估。对于不需要过程度量或者相对较小的项目,例如用于验收时提交用户的测试报告、小型项目的测试报告,可省略过程方面的度量部分;而采用了CMM/ISO或者其他工程标准过程的,需要提供过程改进建议和参考的测试报告-主要用于公司内部测试改进和缺陷预防机制-则过程度量需要列出。

    4.1测试执行情况与记录

    描述测试资源消耗情况,记录实际数据。(测试、项目经理关注部分)

    4.1.1测试组织

    可列出简单的测试组架构图

    4.1.2测试时间

    列出测试的跨度和工作量,最好区分测试文档和活动的时间。数据可供过程度量使用。

    4.1.3测试版本

    4.2覆盖分析

    4.2.1需求覆盖

    需求覆盖率是指经过测试的需求/功能和需求规格说明书中所有需求/功能的比值,通常情况下要达到100%的目标。

    4.2.2测试覆盖

    需求/功能(或编号) 用例个数 执行总数 未执行 未/漏测分析和原因

    测试覆盖率计算 执行数/用例总数 ×100%

    .3缺陷的统计与分析

    缺陷统计主要涉及到被测系统的质量,因此,这部分成为开发人员、质量人员重点关注的部分。

    4.3.1缺陷汇总

    被测系统 系统测试 回归测试 总计

    合计

    按严重程度

    严重 一般 微小

    按缺陷类型

    用户界面 一致性 功能 算法 接口 文档 用户界面 其他

    按功能分布

    功能一 功能二 功能三 功能四 功能五 功能六 功能七

    最好给出缺陷的饼状图和柱状图以便直观查看。俗话说一图胜千言,图标能够使阅读者迅速获得信息,尤其是各层面管理人员没有时间去逐项阅读文章。

    4.3.2缺陷分析

    本部分对上述缺陷和其他收集数据进行综合分析

    缺陷综合分析

    缺陷发现效率 = 缺陷总数/执行测试用时

    可到具体人员得出平均指标

    用例质量 = 缺陷总数/测试用例总数 ×100%

    缺陷密度 = 缺陷总数/功能点总数

    缺陷密度可以得出系统各功能或各需求的缺陷分布情况,开发人员可以在此分析基础上得出那部分功能/需求缺陷最多,从而在今后开发注意避免并注意在实施时予与关注,测试经验表明,测试缺陷越多的部分,其隐藏的缺陷也越多。

    4.3.3残留缺陷与未解决问题

    残留缺陷

    评价:对这些问题的看法,也就是这些问题如果发出去了会造成什么样的影响

    5、测试结论与建议

    5.1 测试结论

    1. 测试执行是否充分(可以增加对安全性、可靠性、可维护性和功能性描述)

    2. 对测试风险的控制措施和成效

    3. 测试目标是否完成

    4. 测试是否通过

    5. 是否可以进入下一阶段项目目标

    5.2 建议

    1.对系统存在问题的说明,描述测试所揭露的软件缺陷和不足,以及可能给软件实施和运行带来的影响

    2.可能存在的潜在缺陷和后续工作

    3.对缺陷修改和产品设计的建议

    4.对过程改进方面的建议

    6、附录

    · 缺陷列表

    · 缺陷等级定义标准

    · 测试通过标准

    八、测试策略

    策略,百度解释为:“策略”就是为了实现某一个目标,首先预先根据可能出现的问题制定的若干对应的方案,并且,在实现目标的过程中,根据形势的发展和变化来制定出新的方案,或者根据形势的发展和变化来选择相应的方案,最终实现目标。

    软件测试的目标是验证软件的功能,找出存在的问题,评估软件质量是否达到要求。软件测试策略要围绕这么目标去考虑和制定。测试策略描述了测试项目和测试任务之间的关系。它用来说明要测什么,如何测,如何协调测试资源和测试时间等。他的目的和作用是指导测试工程师进行测试工作的总体方向和侧重点。测试策略制定的是否合理高效会对测试项目的进度产生很大的影响。

    测试策略分为了一下几个模块:

    1. 测试安排、发布计划

        这个模块用来罗列测试项目本身重要的里程碑,每个里程碑都需要有明确的结束时间,这个时间可以指导我们后续的测试。如果测试时间安排不足,我们就可以在后续的测试范围中挑选优先级比较高的特性来执行测试,这样可以最大限度的保证产品的质量。

    2. 测试范围(按优先级排列)

         这一部分分为In Scope和Out Of Scope.这一部分需要说明哪些产品模块是在测试范围中的,哪些是本阶段测试不考虑的。对于在测试范围中的模块,需要给出优先级以便相应测试时间不足的情况;对于不在测试范围中的模块,需要给出原因(为什么在本测试阶段不考虑测)。

    3. 测试资源

         测试资源在测试策略中也是很重要的一环,它分为人力和工具两部分。人力资源主要说明参与测试的人员,当然可以包括很多的角色,如何专业测试人员,客户,产品经理等。工具主要是指可能用到其他软件(可能需要license)。

    4. 测试环境

         测试环境主要包括推荐环境解决方案,操作系统要求,软硬件要求。

    5. 测试方法

        测试方法的罗列主要是为了说明针对测试项目我们要开展哪些类型的测试,功能测试是必须的,非功能测试是可选的。测试方法的选择主要根据软件的所要达到的质量特性来决定。软件的6大质量特性为:功能性、可靠性、易用性、效率性、易用性、可维护性、可移植性

    6. 用例设计方法

    用例设计普遍的方法为等价类划分、边界值、因果图、判定表、场景之类。我想说的是,要提高用例的有效性和对验证点的覆盖度,设计用例时需要以软件所要具备的27个质量子特性为出发点功能性(适合性、正确性、互操作性、安全保密性、功能依从性);可靠性(成熟性、容错性、易恢复性、可靠性依从性);易用性(易操作性、易理解性、易学习性、吸引性、易用性依从性);效率性(时间特性、资源特性、效率性依从性);可维护性(易分析性、易修改性、稳定性、易测试性、可维护性依从性);可移植性(适应性、易安装性、易替换性、共存性、可移植性依从性)

    7. 文档管理

         对于一个完整的产品来说,文档是很重要的一环。它一般包括安装、升级文档,用户指南等。文档不单单是一个文件,它需要经过完整的测试才能发布给客户。差的文档很可能会误导用户,从而使他们对测试项目失去信心(虽然客户很少看文档……:))

    8. 风险管理

        风险管理模块需要罗列出来现在已知的可能会出现不确定性的因素,这些因素可能来自技术,资源或者其他方面的。

    9. 发布包验证

        这部分有一定的特殊性,并不适用于所有的产品。这部分主要是对测试项目安装包进行验证。

    九、测试方案(没搞清楚和测试策略的区别)

    十、测试计划(没搞清楚和测试策略的区别)

    十一、操作系统命令、数据库命令

    熟悉window和linux系统的基本操作命令、因为客户端基本使用的是window,服务器大多采用了linux。最起码得掌握这两个操作系统中:文件的新建、查找、修改、删除,压缩、解压缩;软件的安装、卸载;程序的启动、停止。

    对于数据库,很多人说我是测试,我只关心业务,我为啥要懂数据库的操作。其实业务的本质就是操作数据库中的存储的数据。数据是开展业务的基础,很多情况下,我们不能只关注页面的显示变化,而是要到数据库中查看数据是不是符合业务结果的预期。所以测试人员最起码要掌握sql server、mysql、Oracle这几种主流数据的增删改查操作命令。一般面试也就问这几种

    十二、UI自动化

    现在自动化测试已经成为测试人员提高薪资的一个必要技能,这里推荐几个我知道的UI自动化的方案:web页面的自动化Python+selenuim;移动端的自动化(ios+android)Python+appium。其他的方案还有很多,介于我没接触过也没了解过,所有就不瞎说了。要做UI自动化,还需要了解的知识有html、css、javascript。

    十三、接口测试(手工+自动化)

    同样的,提高薪资的技能包,这里我用过两个方案,一个是手动做接口测试,推荐postman,适用于对数量比较少的接口去做测试,比如集成其他系统时的技术验证。多接口的批跑测试我接触到的是ant+jmeter工具,jmeter可以批跑接口,在每个请求里加上检查点。ant是Java的一种文件打包集成工具,可以控制调用jmeter,生产html格式的结果报告,方便查看结果

    十四、性能测试

    同样的,提高薪资的技能包。性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。

    在实际工作中我们经常会对两种类型软件进行测试:bs和cs,这两方面的性能指标一般需要哪些内容呢?

    Bs结构程序一般会关注的通用指标如下(简):

    Web服务器指标指标:

    * Avg Rps: 平均每秒钟响应次数=总请求时间 / 秒数;

    * Avg time to last byte per terstion (mstes):平均每秒业务脚本的迭代次数,有人会把这两者混淆;

    * Successful Rounds:成功的请求;

    * Failed Rounds :失败的请求;

    * Successful Hits :成功的点击次数;

    * Failed Hits :失败的点击次数;

    * Hits Per Second :每秒点击次数;

    * Successful Hits Per Second :每秒成功的点击次数;

    * Failed Hits Per Second :每秒失败的点击次数;

    * Attempted Connections :尝试链接数;

    CS结构程序,由于一般软件后台通常为数据库,所以我们更注重数据库的测试指标:

    * User 0 Connections :用户连接数,也就是数据库的连接数量;

    * Number of deadlocks:数据库死锁

    * Buffer Cache hit :数据库Cache的命中情况

    性能测试我主要接触过两个工具 loadrunner、jmeter。jmeter比较适合公司自己内部做一个性能评估,他是免费的,轻量型的,安装和使用都很方便,就是在报表和结果分析上没有那么完善和漂亮。loadrunner,大名鼎鼎,很多对外提供的数据报告都是只认可loadrunner,能生成完善的数据分析和漂亮的报表。

    十五、团队管理

    具备团队管理能力,意味着你不止能自己独立工作,你还可以带领、指导其他人一起完成工作,是一个升职的必备能力。

    团队管理即是组建和管理一个测试团队,制定和落实一个有效的测试流程,计划、设计、执行并跟踪输出项目的测试报告,为项目质量提供有效保障。

    由于我本身没做过什么管理,看了一篇比较好的文章,这么转发一下:

    测试团队的管理划分为6个部分:人员管理、流程管理、团队管理、质量管理、风险管理、资源管理。

    1. 人员管理:
    • 人员招聘

    确定招聘需求和招聘要求,为团队招募合适的人才。

     

    刚刚走出校园的实习生,和社招的资深测试工程师的能力和经验自然是不一样的,所以对于社招和应届生的招聘要求需要分开。

    通常我在面试社招时,更多关注的是社招同学的项目经验,以及过往所承担的职责,自动化工具能力,软性素质上更看重协调能力和推动能力。

    而在实习生的面试时,不会过多去关注实习生的项目经验,更多关注的是实习生的学习能力和主观能动性,如果能有一些对软件测试岗位的基础知识学习和理解,那么是很加分的。

     

    • 人员培养

    制定学习目标和计划,因人而异施教,安排专业的导师,及时跟进新人学习进度并解疑。使招聘的人才在最短的时间内快速适应项目的流程,胜任项目的任务。

    对于新入职的人而言,一个类似于这样的明确的工作任务和目标非常重要。

    • 人员管理

    1、职能明确:各岗位职能职责区分清楚,避免团队成员之间职能混乱,出现工作交叉干预、重复劳动的现象,也避免出现踢皮球的场景。

    有的测试团队会按照测试技术、测试设计、测试执行的组织结构来管理,这样每个团队都术有专攻,管理上也会更容易

    有的测试团队会按照个人全方位能力培养,要求个人同时具备测试技术、测试设计和测试执行的能力,这样对每个人的长远发展更有利,但是会因为每个人的能力参差不齐,导致团队的成员能力不均衡,个人优势不够突出

    2、知人善任:依据各人的特质、能力层级、优势劣势进行任务分配,给团队成员充分展示优点的机会,避其缺点,合适的人做合适的事情。

    比如有的测试人员擅长测试设计,有的测试人员擅长挖掘工具自动化搭建,有的测试人员沟通协调能力比较强,根据每个人的意愿和长处来安排任务。

    3、善于倾听:尊重团队里的每个人,确保成员能够无所顾忌地表达个人观点,并能够及时觉察成员情绪上的波动,换位思考,及时建立疏通、宣泄的渠道,做好正面引导。

    4、敢于授权:在明确的目标要求下,适当的放手,让团队成员有能力与权力去承担并对结果负责,但是在过程中,管理者也需要随时去抽查,以便及时发现落实过程中的偏差或者问题

    5、激发潜能:不畏惧新人犯第一次错误,因为错误中的总结,才能令人印象更深刻,后续不再犯。而不断的尝试新事物,才能够挖掘团队成员的潜力。

    6、等级淡化:成为团队成员的朋友,在成员迷茫时能给出合适的建议,在困难时伸出援手,必要的时候需要言传身教,做成员的坚实后盾。

    这些主要讲的是向下管理,另外还有向上管理,如何处理自己与上级之间的关系,如何向上级述职,更好的展现自己和团队的工作成绩,也是管理的一门学问。

    测试团队管理

    • 团队建设

    1、共同目标:

    可以是时间、项目等,团队成员有着共同的目标,才能提高整个团队的凝聚力和斗志,从而取得1+1大于2的效果。

    2、团队规划:

    制定半年、一年,短期和长期的规划,让团队成员了解公司的远景,让大家对团队、个人的发展有信心。

    3、树立标杆:

    一个团队中各个成员都是不同的个体,素质和能力颇有差异,树立标杆,推广优秀成员的成绩和经验,才能提升团队的能力,使团队能力最大化。

    4、奖惩激励:

    团队成立阶段,多奖励,少惩治。及时的给予鼓励和奖励,会让团队成员的被尊重、被信任、被认同感提高,工作动力和积极性提高。但是,团队成长成熟阶段,要多规范,建立多种合理的制度来管理与约束。奖励是激扬人性,惩治是压抑个性。二者结合起来,合适的应用。

    5、绩效管理:

    有一套公开、公正的绩效激励体系。结合每个成员的自身特点和能力制定,制定合理的绩效。

    • 团队潜能

    通过团队活动、团队培训等方式,培养协作精神和团队精神,提升团队整体的能力,创造一种良好的氛围,提高团队的凝聚力。

    加强测试团队在整个项目中的地位和影响力,影响力越强,团队成员的成就感会更强,工作的动力和信心会更大,更积极正能量的心态面对工作。 

    • 团队提升

    通过各种各样的途径,培训分享,共享资源库,或者是团队图书馆也好,提升团队整理硬性软性能力。

    流程管理

    • 流程建立

    大到项目研发流程和职责分工,小到测试缺陷跟踪流程、案例评审流程,都有一个从无到有制定和完善的阶段。

    • 流程实施

    推动流程的落实

    • 流程优化

    流程的落实过程中,不断的总结经验,及时调整和完善流程。

    质量管理

    测试质量的保证,是测试团队的职责所需,也是首要标准。

    • 质量指标

    前期要确定一些项目中质量的指标,比如交付时间要求、BUG修复率的要求、用例通过率的要求等等。

    • 质量管控

     

    再通过不同的手段来管控,从而实现和达成目标。

    在达成的过程中需要研发、产品、测试、项目经理等多个角色的共同推动规范项目研发流程、代码管理流程、缺陷管理流程、测试案例评审流程等等。

    并且做好测试分层,从代码级、接口级和ui级别进行测试,从工具自动化和手工多层面进行考虑,从功能、性能、兼容安全性等多纬度进行覆盖。从某些方面来讲,流程的管理,是质量管理的前提。

    • 质量分析

    通过对质量的可视化数据分析,从而加强管控机制,改善测试流程,丰富质量指标。

    资源管理

    • 资源整合

    整合测试相关的技术、文档、工具、专利等,成为测试团队的知识资产;整合测试内部、外部的人力、物力、财力,成为测试团队的能量储备。并且对存档的资源进行维护和更新。

    • 资源共享

    建立统一的共享平台,将测试资源共享,管理测试用例、管理缺陷、管理测试方法、测试技术工具,减少团队成员的重复劳动。

    • 资源协调

    协调测试组内的各种资源,协调组外的各种资源,共同达成目标。

    在人力的协调上,一方面需要和团队内、团队外的人员建立良好的关系,取得他们的支持,另一方面,建立跨部门的利益相关性,成为利益共同体。

    风险管理

    通过对风险的识别和分析,选择有效的方式,主动地、有计划地处理风险,以最小成本获得最大的保证。

    • 风险识别

    项目运行的各个环节可能出现的风险都应关注,风险信息收集时需要注重全面性和多样性。

    l 比如需求上存在的缺失,开发实现上可能存在的漏洞,测试案例上可能存在的遗漏,都是项目中常见的风险。

    l 常见信息收集手段如现场访谈、会议研讨、问卷调查等。 

    • 风险评估

    通常可以用可能性、严重性,结合可控性、相关性几个指标来描述风险。

    比如当判断一个不能固定重现的BUG到底是否重要需要在上线前修复时,可以参考如下风险评测标准:

    这个BUG发生的概率有多高?

    这个BUG对用户的体验和使用影响有多大?

    这个BUG如果在生产上出现了,怎样可以解决和减少影响?

    这个BUG可能引发其他的问题吗? 

    • 风险应对

    采取各种措施减小风险事件发生的可能性,或者把可能的损失控制在一定的范围内,以避免在风险事件发生时带来的难以承担的损失。

    风险应对和控制的四种基本方法是:回避、控制、转移和自留。

    比如新增加了一个功能是展示列表,根据我对项目组产品和开发的了解,他们经常会忘记页面为空白时怎么显示。而这一次我相信如果不提前提出来他们仍会出现这个问题。那么我可以采取如下几种措施:

    我知道可能出现这种风险,但是不打算提出来,也不打算搭理他。准备直接带着这个问题上线。——这是回避。

    我把风险提出来,然后声明,这个问题一旦出现,需要开发承担责任。——这是转移。

    我默默的认为这个风险影响不大,仅保留给自己知悉。后续等问题暴露出来,再去处理——这是自留。

    我把这个可能出现的问题提出来,让产品完善需求,开发提前处理。避免提测后这个bug的出现。——这是控制。

    以上所有就是我认为一个测试人员应该具备的知识体系。其实还有好多我没接触过的,比如渗透测试、单元测试、安全测试之类的。接触的越多,越能感觉到自己会的太少,共勉。

    展开全文
  • 软件测试

    2016-12-28 10:53:39
     软件测试目的和作用  1.测试是程序的执行过程,目的在于发现错误;  2.一个好的测试用例在于能发现至今未发现的错误;  3.一个成功的测试是发现了至今未发现的错误的测试。    作用 1、测试是为了要找...

      

       软件测试目的和作用

            1.测试是程序的执行过程,目的在于发现错误;

            2.一个好的测试用例在于能发现至今未发现的错误;

            3.一个成功的测试是发现了至今未发现的错误的测试。

     

      作用

    1、测试是为了要找出缺陷,但同时,也可以通过对缺陷的度量和统计,分析缺陷产生的原因和缺陷的分布特征,分析产品的质量、工作效率、诊断开发过程中的问题,并通过改进各个开发过程提高过程能力,最终降低缺陷数量和缺陷密度。

    2、没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。 

    分类:

            黑盒测试是从用户观点出发的测试,它又称功能测试、数据驱动测试或基于规格说明书或用户手册的测试。它所依据的是程序的外部特性!

            基于需求规格说明书的测试(需求矩阵)

            A  需求列表

            B  设计列表:概要设计和详细设计

            B  测试用例与需求的对照表

     

            白盒测试又称结构测试、逻辑驱动测试或基于程序的测试

           

     白盒测试的覆盖准则

    语句覆盖

    -在测试时,设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少执行一次。分支覆盖-在测试时,设计若干测试用例,运行被测程序,使程序中的每个判断真假的分支至少遍历一次。

    条件覆盖

    -在测试时,设计若干测试用例,运行被测程序,使程序中的每个条件的可能取值至少满足一次。

    条件分支覆盖

    -在测试时,设计足够的测试用例,使得判断中每个条件的所有可能取值至少出现一次,并且每个判断本身的判定结果也至少出现一次。

    路径覆盖

    - 设计足够多的测试用例,要求覆盖程序中所有可能的路径。

     

    软件测试成果的衡量标准

       需求的覆盖

    需求追溯表/需求矩阵

    缺陷数量

    多、新

    缺陷重现率

    BUG能按照一定的测试过程稳定重现

    效率

    平均每人天发现的BUG数

    成本

    少。合理的测试人力和软、硬件资源安排

    重用价值

    测试的数据或者样例可以重用

     

     



     

     单元测试的内容:

    1、模块接口测试

    2、检查局部数据结构能否保持完整性

    3、模块边界条件测试

    4、模块执行路径测试

    5、检查模块内部错误处理是否有效

    单元测试方法:

    白盒测试为主

     

    对模块进行正确性检验的测试工作,测试用例以白盒测试为主、黑盒测试为辅.

    逻辑和算法:正确实现了逻辑和算法

    数据结构(全局和局部):使用了全局数据结构?哪些?如果有,作了哪些关于全局数据的假设?这些假设正确吗?使用了局部数据?在算法执行的所有步骤期间,保持局部数据的完整性了吗?

    接口:来自调用模块的数据匹配被调用的模块的期望接收的数据?被调用模块的数据匹配调用的模块提供的数据?

    独立路径:标识了所有穿过模块的独立路径?执行了吗?

    边界条件:了解边界条件吗?进行了测试确保该模块在其边界条件上的适当的操作了吗?

    出错处理:所有出错处理路径均执行到了吗?

     

     

    集成测试(Integration test):  将通过单元测试的多个模块组合成更大的模块或子系统或产品,然后进行测试。

    测试内容:各单元的接口是否吻合、代码是否符合规定的标准、界面标准是否统一等。

    人员安排:既要求参与的人熟悉单元的内部细节,又要求他们能够从足够高的层次上观察整个系统。一般由有经验的测试人员和主要的软件开发者来完成集成测试的计划。

     

    集成测试计划:集成测试计划由系统设计人员在设计阶段制定,它是和设计规格说明同时完成的。内容有:

    测试的描述和范围

    测试环境

    测试时间表

    集成次序

    测试用例以及测试的预期结果等

    测试方法:集成测试阶段是以黑盒法为主

     

    经过集成测试之后,分散开发的模块被联接起来,构成完整的程序,其中各模块间接口存在的种种问题都已基本消除。测试开始进入到系统测试的阶段。

    为了发现缺陷并度量产品质量,按照系统的功能和性能需求进行的测试

    一般使用黑盒测试技术

    一般由独立的测试人员完成

    系统测试(System test):  

    应该由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能正常工作并完成所赋予的任务。这里所谓的系统不仅仅包括软件本身,而且还包括计算机硬件及其相关的外围设备,数据及其收集传输机构,甚至掌握计算机运行的人员及其操作等。

    通常意义上的系统测试包括:功能测试、压力测试(Stress test)、性能测试(Performance test)、容量测试(Capacity test)、用户界面测试、兼容性测试等。

     

     

    压力测试:

    也称为强度测试。压力测试的目的就是在软件投入使用以前或软件负载达到极限以前,通过执行可重复的负载测试,预先分析出软件可承受的并发用户极限值和性能瓶颈,以帮助软件厂商或用户优化自己的程序。

    容量测试: 

    对软件容量的测试,能让用户明白到底此软件能一次性承担多大访问量。有了对软件负载的准确预测,不仅能让用户对软件在实际使用中的性能状况充满信心,同时也可以帮助用户最经济地规划自己的网络配置,避免无谓的硬件投入,还可以减少网络系统的宕机时间和因此带来的经济损失。

     

    性能测试:

    对于那些实时和嵌入式系统,软件部分即使满足功能要求,也未必能够满足性能要求,虽然从单元测试起,每一测试步骤都包含性能测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试运行性能,系统性能测试就是为了完成这一任务。

    压力测试、容量测试和性能测试的手段和方法很相似,有时可以交织在一起进行测试。压力测试的重点在于发现功能性测试所不易发现的系统方面的缺陷。容量测试和性能测试更着力于提供性能与容量方面的数据,以供制造者参考改进或进行广告宣传。

     

     

    其他还有一些关于测试的分类,例如:

    健壮性测试

    容灾测试

    内存泄漏测试

    并发性测试

    安全性测试

    配套产品测试。

    实际上,这些测试都是因为测试的目的不同,而在制定测试策略和测试设计的时候有不同的侧重点。

     

    必做的测试:

    安装测试

    功能测试

    值域测试

    界面测试

    可用性测试

    说明书测试

    配置测试

    加密问题测试

    裸机测试

     

    可选的测试:

    内存泄漏测试

    接口测试

    性能测试

    并发性测试

    安全性测试

    破坏性测试

    配套产品测试



     



     

    展开全文
  • 全程软件测试

    2018-07-19 15:20:53
    全程软件测试,系统的讲解了所有测试体系和测试流程,是了解测试工作的必选书籍!
  • 软件测试自学指南---从入门到精通

    万次阅读 多人点赞 2013-07-24 13:30:11
    越来越多的人加入了测试大军中,很多人也想通过自学来学习软件测试技术加入这个行业,但是现在软件测试的书籍越来越多,也良莠不齐,而且软件测试涉及的技术也越来越多。本文主要说明的是从事软件测试行业需要必备的...
  • 软件测试分类

    万次阅读 多人点赞 2018-08-06 16:06:56
    一、软件测试的分类 1、按开发阶段:单元测试、集成测试、系统测试、验收测试 2、按测试实施组织:α、β、第三方 3、按测试执行方式:静态测试、动态测试 4、按是否查看代码:黑盒测试、白盒测试、灰盒测试 5...
  • 软件测试的分类

    万次阅读 多人点赞 2018-08-03 12:51:01
    软件测试按照所做工作的不同,可以分为很多的方面,下面我们一起来看一下,一些常见的分类,如下图: 下面,我们就上面的分类进行详细的学习吧! 一、按开发阶段划分 1.单元测试(Unit Testing) 单元测试...
  • 软件测试全套教程,软件测试自学线路图

    万次阅读 多人点赞 2018-07-09 14:08:02
    软件测试软件测试是为了发现程序中的错误而执行程序的过程。 通俗的说,软件测试需要在发布软件之前,尽可能的找软件的错误,尽量避免在发布之后给用户带来不好的体验,并要满足用户使用的需求。 现在市面上...
  • 问:软件测试的原则? 答:https://blog.csdn.net/weixin_30363263/article/details/102986878 问:你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。 1、将问题提交到缺陷...
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友

    万次阅读 多人点赞 2018-03-29 11:16:09
    这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经...
  • 软件测试工程师经典面试题

    万次阅读 多人点赞 2018-10-27 23:55:52
      软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位,问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux...
  • 软件测试笔试面试题目完全汇总

    万次阅读 多人点赞 2019-03-06 13:29:37
    1、软件测试的流程 2、web测试和APP测试的区别 仅仅从功能测试的层面上来讲的话,在流程和功能测试上是没有区别的。那么区别在哪里呢? 由于载体不一样,所以系统测试和一些细节可能会不一样。 那么我们就要先...
  • 软件测试工作流程概括与总结

    万次阅读 多人点赞 2018-08-08 23:37:45
    最近在为面试新工作做准备,所以想想整理一下软件测试的基本工作流程,大致梳理一遍,这样也便于自己在面试过程中可以沉着的面对面试管的测试工作如何进行的问题。 首先,作为测试人员需要学习并了解业务,分析需求...
  • 软件测试菜鸟入门

    万次阅读 多人点赞 2018-04-08 09:01:26
    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说...软件测试流程... 3 提取测试点... 4 设计测试用例与用例评审... 4 测试类型选择... 5...
  • 2019年互联网企业软件测试面试题(常考)

    万次阅读 多人点赞 2019-04-22 09:32:26
    很多软件测试工程师在面试互联网企业的时候都会遇到考官给的几道面试题,这也反应了测试工程师对企业的重要性,今天传智播客整理了一份2019年的互联网企业软件测试面试题,希望能帮助到大家。 2019年互联网企业软件...
  • 软件测试】初级软件测试面试题汇总

    万次阅读 多人点赞 2018-11-02 16:15:55
    初级软件测试面试题 1.请描述如何划分缺陷与错误严重性和优先级别? 给软件缺陷与错误划分严重性和优先级的通用原则: (1)表示软件缺陷所造成饿危害和恶劣程度。 (2)优先级表示修复缺陷的重要程度和次序。 严重...
  • 软件测试前景和发展方向

    万次阅读 多人点赞 2018-06-15 15:08:12
    2019最热门的软件测试趋势 毛哥(译) 放眼全球,了解技术发展的边界和趋势,有助于组织和个人的发展及竞争力的提升,偶尔看到国外某网站的一篇文章,读来颇值得参考,简单翻译过来,分享一下。 也许这篇文章会给...
  • 软件测试面试题合集【乐搏TestPRO】

    万次阅读 多人点赞 2019-09-10 18:04:37
    又到了金九银十跳槽求职旺季。...以下是“大佬”本人从乐搏学院VIP学员面试经验中收集的,然后分门别类整理了这套面试题,很具备参考性,毕竟都是企业真实面试题目。 接下来,针对以下知识类型列出具体的面试点(其中...
  • 软件测试入门知识了解

    千次阅读 多人点赞 2018-09-05 14:59:58
    1.软件测试定义两面性 2.测试的生命周期 测试需求分析--&gt;测试设计--&gt;测试计划--&gt;测试执行--&gt;质量评估 3.软件测试过程: 需求评审和设计评审是验证软件产品的需求定义和设计...
  • 软件测试进阶(一)A/B测试终极指南

    万次阅读 2016-07-06 11:32:56
    A/B测试终极指南 A/B测试不是一个时髦名词。现在很多有经验的营销和设计工作者用它来获得访客行为信息,来提高转换率。然而,A/B测试与SEO不同的是,人们都不太知道如何进行网站分析和可用性分析。他们并不完全明白...
  • 软件测试面试题(面试前准备篇)

    万次阅读 多人点赞 2019-09-27 10:42:37
    是否了解软件测试需要掌握哪些知识(问到类似问题) 之前面试过,觉得自己需要补充哪些?做了哪些行动? 为什么做测试,觉得自己做测试有哪些优势?(有问到) 知道哪些Bug系统 9.测试用例的基本要素是? 二、...
  • 软件测试面试题汇总

    千次阅读 多人点赞 2018-09-27 12:31:09
    转载自: ... 软件测试面试题汇总 测试技术面试题 ...........................................................................................................
  • 软件测试流程五个阶段

    万次阅读 多人点赞 2018-11-07 17:28:59
    软件测试按照研发阶段一般分为5个部分:单元测试、集成测试、确认测试、系统测试、验收测试,下面将不同阶段需要的一些工作内容做一下梳理希望可以帮助到大家。   //No.1// 单元测试   单元测试又称为模块...
  • 软件测试常考面试题-软件测试面试宝典

    万次阅读 多人点赞 2016-09-06 16:43:51
    问:你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。 首先,将问题提交到缺陷管理库里面进行备案。 然后,要获取判断的依据和标准: 根据需求说明书、产品说明、设计文档等,确认...
  • 软件测试--用例编写

    万次阅读 多人点赞 2018-08-15 18:47:30
    测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。 在这里我们不讨论以上的...
  • 软件测试测试工具总结

    千次阅读 2019-06-14 17:52:48
    软件测试的过程中,多多少少都是会接触到一些测试工具,作为辅助测试用的,以提高测试工作的效率,使用好了测试工具,能对测试起到一个很好的作用,同时,有些公司,也会要求掌握一些测试工具,或者,是在面试时,...
  • 2019软件测试校招笔试题-软件测试基本理论

    万次阅读 多人点赞 2019-07-18 11:23:26
    软件测试面试题100道整理 1.什么是软件测试? 答:软件测试是为了发现错误而执行程序的过程。 2.软件测试的目的? 答;测试的目的是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正错误和缺陷...

空空如也

1 2 3 4 5 ... 20
收藏数 5,859,908
精华内容 2,343,963
关键字:

软件测试