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

    千人学习 2020-07-17 14:09:37
    本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、...
  • 软件测试_笔记(完整版)

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

    软件测试

    概述

    程序+文档+数据=软件

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

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

    为什么要做软件测试

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

    测试的任务

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

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

    • 测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。测试用例是执行的最小实体。简单地说,测试用例就是设计一个场景,使软件程序在这种场景下,必须能够正常运行并且达到程序所设计的执行结果。
    • 包含
      • 用例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
    访客追踪插件


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

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

    测试行业小故事

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

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

    所以矛盾就产生了

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

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

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

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

    新人的问题

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

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

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

    行业现状分析

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

    测试人员地区和职位分布

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

    测试人员的工作年限

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

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

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

    测试行业的入行途径

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

    测试人员的薪资水平

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

    软件测试的职能定位

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

    测试人员的额外工作

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

    测试人员的技能提升办法

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

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

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

    软件测试测什么?

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

    自动化测试的现状

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

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

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

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

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

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

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

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

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

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

     

     

     

    展开全文
  • 软件测试入门视频教程

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

    万次阅读 多人点赞 2018-09-10 14:15:25
    一、软件的生命周期(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的出现。——这是控制。

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

    展开全文
  • 全程软件测试

    2020-07-29 14:20:13
    全程软件测试,系统的讲解了所有测试体系和测试流程,是了解测试工作的必选书籍!
  • 软件测试总结——常见的面试问题(一)

    万次阅读 多人点赞 2019-12-04 11:36:59
    1.软件测试级别? 单元测试:单元测试是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。Findyou又称为模块测试,一个单元测试是用于判断某个特定条件...

    1.软件测试级别?

    单元测试:单元测试是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。Findyou又称为模块测试一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。(测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试


    集成测试:集成测试也称联合测试、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。主要目的是检查软件单位之间的接口是否正确。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响


    系统测试:将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等


    验收测试:验收测试是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。总结验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务即软件的功能和性能如同用户所合理期待的那样。测试内容:同系统测试(功能...各类文档等)

     

     

    2.软件测试类型?

    功能测试:也叫黑盒测试,功能测试指测试软件各个功能模块是否正确,逻辑是否正确。对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接收、处理和检索是否正确,以及业务规则的实施是否恰当。此类测试基于黑盒技术,该技术通过图形用户界面(GUI) 与应用程序进行交互,并对交互的输出或结果进行分析,以此来核实应用程序及其内部进程。功能测试的主要参考为类似于功能说明书之类的文档。

    性能测试:指验证软件的性能可以满足系统规格给定的指定要求的性能指标。性能测试是一个比较大的范围,可以进一步衍生出负载测试、强度测试、压力测试、稳定性测试。通过自动化测试工具模拟多种正常、异常、峰值条件,对系统各项性能指标测试

    配置测试:用硬件来测试软件运行情况,1.软件在不同主机上运行的情况(Apple和Dell)2.在不同组件上运行情况(开发的拨号程序要测试不同厂商生产的Moden上运行情况)3.不同的外设、接口、内存的运行情况

    强度测试:强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。这类测试往往可以书写系统要求的软硬件水平要求。实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。

    负载测试通过在被测系统上不断加压,直到性能指标达到极限,例如“响应时间”超过预定指标或都某种资源已经达到饱和状态。负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。

    压力测试:压力测试方法测试系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。测试出系统所能承受的最大极限。是指系统在极限下的压力情况,系统在什么样的压力下会导致系统得到失效,无法正常运行。100个用户连续访问1小时可以看做是压力测试,连续访问10小时可以认为是负载测试

    稳定性测试:压力测试方法测试系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。一般是稍大于业务量的一个负载,对系统进行的一个持续的,长时间的测试,比如24*3,连续3天的施加压力,确定系统在较长运行时间的情况下,系统的稳定性情况

    网络测试:wifi、4G、3G、不同运营商网络测试、

    UI界面测试:UI测试指测试用户界面的风格是否满足客户要求,文字是否正确,页面美工是否好看,文字,图片组合是否完美,背景是否美观,操作是否友好等等。

    分辨率测试:测试在不同分辨率下,界面的美观程度,分为800*600,1024*768,1152*864,1280*768,1280*1024,1200*1600大小字体下测试。一个好的软件要有一个极佳的分辨率,而在其他分辨率下也都能可以运行。

    安装测试:安装测试有两个目的。第一个目的是确保该软件在正常情况和异常情况的不同条件下: 例如,进行首次安装、升级、完整的或自定义的安装_都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。第二个目的是核实软件在安装后可立即正常运行。这通常是指运行大量为功能测试制定的测试。

    内存测试:CPU测试、响应时间测试、唤醒率测试等,都属于性能测试。还有强度测试、容量测试、基准测试等。

    文档测试:文档测试是检验样品用户文档的完整性、正确性、一致性、易理解性、易浏览性。包括用户手册、使用说明、用户帮助文档等

    可靠性测试:这个主要是硬件方面的,比如高低温测试、防水防尘等测试

    安全测试:对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。可确保只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网管、关来访问。比如输入管理员账户,检查其密码是否容易猜取,或者可以从数据库中获得?

    兼容测试检查软件在不同软件、硬件平台是否可以正常运行。 主要查看在不同操作系统、浏览器、数据库、不同版本是否正常运行、向前兼容和向后兼容、、数据共享兼容

    浏览器兼容性测试:测试软件在不同产商的浏览器下是否能够正确显示与运行、比如测试IE,Natscape浏览器

    操作系统兼容性:测试软件在不同操作系统下是否能够正确显示与运行;比如测试WINDOWS98,WINDOWS 2000,WINDOWS XP,LINU, UNIX下是否可以运行这套软件?

    硬件兼容性

    测试与硬件密切相关的软件产品与其他硬件产品的兼容性,比如该软件是少在并口设备中的,测试同时使用其他并口设备,系统是否可以正确使用。比如在INTER,舒龙CPU芯片下系统是否能够正常运行?

    并发测试并发测试方法通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或其者他性能问题。也就是说,这种测试关注点是多个用户同时(并发)对一个模块或操作进行加压。

     

     

     

     

    3.测试方法:动态测试、静态测试;黑盒测试、白盒测试、灰盒测试。

    、黑盒测试方法:

    1>等价类划分:等价类划分是将系统的输入域划分为若干部分,然后从每个部分选取少量代表性数据进行测试。等价类可以划分为有效等价类和无效等价类,设计测试用例的时候要考虑这两种等价类。

    2>边界值分析法:边界值分析法是对等价类划分的一种补充,因为大多数错误都在输入输出的边界上。边界值分析就是假定大多数错误出现在输入条件的边界上,如果边界附件取值不会导致程序出错,

    那其他取值出错的可能性也就很小。

      边界值分析法是通过优先选择不同等价类间的边界值覆盖有效等价类和无效等价类来更有效的进行测试,因此该方法要和等价类划分法结合使用。

    3>错误猜测法:错误猜测法主要是针对系统对于错误操作时对于操作的处理法的猜测法,从而设计测试用例

    3、白盒测试方法:

    1>语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一个可执行语句至少执行一次。

    2>判定覆盖:使设计的测试用例保证程序中每个判断的每个取值分支至少经历一次。

    3>条件覆盖:条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支

    4>判定条件覆盖:判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行,即要求各个判断的所有可能的条件取值组合至少执行一次。

    5>条件组合覆盖:在白盒测试法中,选择足够的测试用例,使所有判定中各条件判断结果的所有组合至少出现一次,满足这种覆盖标准成为条件组合覆盖。

    6>路径覆盖:是每条可能执行到的路径至少执行一次

    灰盒测试
    定义:介于黑、白盒测试之间的,关注输出对于输入的正确性,同时也关注内部表现

    静态测试
    1,静态测试是指无需执行被测程序,而是通过评审软件文档或代码,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率


    动态测试
    1,动态测试是指通过运行被测程序,检查运行结果和预期结果的差异,并分析运行效率,正确性和健壮性等

    2,静态(看外观)和动态(发动车走一段路)可以用买车来说明


    手工测试
    由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。
    更适用针对深度的测试和强调主观判断的测试
    比如:众包测试和探索式测试

    自动化测试
    1.适用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查。

    2.手工测试和自动化测试的区别?

    手动测试:优点:易发现缺陷、容易实施、灵活性     缺点:覆盖量低、重复测试效率低、可靠性低、人力资源依赖

    自动化测试:优点:高效率,速度快、高复用性、覆盖率高、准确可靠、不知疲劳     缺点:机械发现缺陷率低、一次性投入大

     安全测试

    安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程 。

    Findyou觉现在对安全知识的普及,大家意识都提上来了。比如现在越来越多的不支持HTTP协议,转用HTTPS等。

    探索性测试

    探索性测试可以是一种测试思维技术。它没有很多实际的测试方法、技术和工具,但是却是所有测试人员都应该掌握的一种测试思维方式。探索性强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略

    随机测试

    随机测试主要是根据测试者的经验对软件进行功能和性能抽查。

    根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。

    随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例(TestCase)没有覆盖到的部分。

    冒烟测试

    关于冒烟测试,就是开发人员在个人版本的软件上执行目前的冒烟测试项目,确定新的程序代码不出故障。冒烟测试目的是确认软件基本功能正常,现基本执行对象为测试人员,在正规测试一个新版本之前,投入较少的人力和时间验证基本功能,通过则测试准入。

    α测试

    α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。

    大型通用软件,在正式发布前,通常需要执行Alpha和Beta测试。α测试不能由程序员或测试员完成。

    β测试

    Beta测试是一种验收测试。Beta测试由软件的最终用户们在一个或多个客房场所进行。

     

     

    4.alpha测试和beta测试的区别

    1、测试时间不同:

    Beta测试是软件产品完成了功能测试和系统测试之后,产品发布之前所进行的软件测试活动,它是技术测试的最后一个阶段。

    alpha测试简称“α测试”,可以从软件产品编码结束之时开始,或在模块(子系统)测试完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。

    2、测试的目的不同:

    α测试的目的是评价软件产品的(即功能、局域化、可用性、可靠性、性能和支持)。尤其注重产品的界面和特色。α测试即为非正式验收测试。

    Beta测试是一种验收测试,通过了验收测试,产品就会进入发布阶段。

    测试人员及场所不同:

    α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,α测试不能由程序员或测试员完成。α测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。

    Beta测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在Beta测试的现场,因Beta测试是软件在开发者不能控制的环境中的“真实”应用。

     

     

    5.测试设计方法:

    等价类划分、边界值、因果图划分、正交、场景、随机、错误推断、测试大纲

    等价类划分法: :  1:有效等价类:   2:无效等价类:

    案例:比如一个登陆输入框,规定只能输入中文,同时长度为6-10,

    通过等价类设计测试用例:

    测试用例中重要的三步: 输入 操作 预计结果 如果与预期结果不符合就是bug

    有效等价类: 输入:输入长度为6的中文,输入的为王小明,这就是有效等价类

    无效等价类:

    1: 输入长度为4的中文,输入位小名,点击登录,预计结果长度不符合要求

    2: 输入长度为6,但是是英文的,点击登录,预计结果 请输入中文

    3: 输入长度为4,而且不是中文的,是数字,1234,点击登录,预计结果请输入中文并且长度为6-10位

    4:输入长度为12而且不是中文的,比如qwertyuiopas,点击登录,预计结果请输入中文并且长度为6-10位

     

    二:边界值法:

    应用场景:边界值往往和等价类划分法一起使用,形成一套更为完善的测试方案,找到有效数据和无效数据的分界点,

    注解边界值一般和有效等价类划分法配合使用:

    案例:比如一个登陆输入框,规定只能输入中文,同时长度为6-10,

    上面输入框的边界的:如果固定大于等于6,并且小于等于10,

    那左边界就是 5和 6

    右边界是:10 和 11

    测试用例:

    1:输入的为王小明,这就是有效等价类和边界值的结合使用

    2:输入小名,这就是边界值为5,同时有效等价类

    3:输入欧阳致远家,这就是边界值10,同时等价类有效

    4:输入欧阳致远啦啦,这就是边界值为11,同时有效等价类

     

    三:因果图及判定表法:

     

    应用场景:在一个界面中有多个控件,如果控件之间有组合关系或者限制关系,不同的控件组合会产生不同的输入结果,为了弄清楚不同的输入组合会产生咋样的输出结果,可以使用因果图及判定表法:

    判断是儿童还是青年还是成年人:

    条件1:年龄 age

    条件2:身高height

    条件3:体重weight

    输入年龄5,体重80公斤,身高170,查无此人

    输入提高80,身高170,输入年龄20,成年人

    输入年龄5,体重30,身高60,小孩

     

    四:正交表:

    应用场景:在一个界面中有多个控件,每个控件有多个取值,测试时考虑不同的控件不同取值之间的多种组合,但组合数量巨大(>20种,20种以下一般考虑判定表因果图),没有必要全部测试,如何从所有的组合中挑选最少、最优的组合进行测试,可以使用正交排列法。

    正交表的测试思想特点:

    1)使用每个控件的每个取值参与组合的次数是基本相等的(均匀的)

    2)在所有的组合数据中,选取数据时,应该均匀的选取,而不能从局部选取。

    3)如果时间允许,尽可能的多测一些组合

    正交表:主要针对一个输入框里面可能有多个值,而且数量巨大

    年龄 体重 省 市 县

    比如:输入年龄 18,体重45,山西 大同 阳高

    五:测试大纲法

    适用场合:程序包含多个窗口,每个窗口中又有多个功能,这些功能之间又有一定的联系。为了梳理清楚窗口之间以及窗口不同功能之间的联系,使用测试大纲法。

    六:场景法

    适用场合:大多数的业务比较复杂的软件系统都适合使用场景法(便于将各个功能点串起来,便于形成完整的业务感觉)是一种基于软件业务的测试方法,把自己当成最终用户,尽可能的模拟用户在使用此软件的操作

    案例:

    场景一:比如买东西:输入袜子,点击查询,出现列表,点击七匹狼,点击进入详情,点击加入购物车,点击去购物车结算,点击收获地址,点击支付,支付成功

    场景二:比如买东西:输入袜子,点击查询,出现列表,点击七匹狼,点击进入详情,点击加入购物车,点击去购物车结算,点击收获地址,点击取消支付

    七: 错误推断法

    基于经验和直觉推测程序中所有可能存在的各种错误 , 从而有针对性的设 计测试用例的方法

    在进行灰盒测试的时候经常用到此方法

    八:随机测试

    随意测试,不考虑任何用例和需求,完全站在一个用户或者的角度对产品进行使用。

    适用场景:

    1) 所有之前设定的用例已经 执行完毕

    2)海量的条件组合无法一遍 历的时候

     

    6.软件测试风险:

    测试人员:业务不熟、人员变动、疲态、同化效应、定位效应

    测试材料:需求变更、质量标准不一样、测试用例或测试数据设计不充分

    测试环境:测试软件版本不统一、软件环境不统一、硬件环境不统一、硬件不到位

    测试时间:测试时间不足、测试时间延长

    测试方法:错误或缺失测试方法、场景缺失、测试用例实施不充分

     

     

    7.自动化测试软件作用(重点):

    一:jmeter: 纯java编写负载功能测试和性能测试开源工具, 支持接口自动化测试,录制、抓包、可进行压力测试(增加线程,考验服务器最大支持访问数)、弱网测试、添加请求、添加断言,查看断言、结果树,聚合报告,分析测试报告等

    聚合报告参数详解: 
    1. Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值 
    2. Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100 
    3. Average:平均响应时间——默认情况下是单个 Request 的平均响应时间
    4. Median:中位数,也就是 50% 用户的响应时间 
    5. 90% Line:90% 用户的响应时间 
    6. Min:最小响应时间 
    7. Max:最大响应时间 
    8. Error%:错误率——错误请求数/请求总数 
    9. Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)
    10. KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

     

    :ant: 将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,并生成测试报告并发送

     

    三:jenkins: Jenkins是一个开源CI服务器,基于Web访问,jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性,拥有大量的插件:这些插件极大的扩展了Jenkins的功能,持续集成工具,所有工作都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间和工作量;

     

    :monkey:它是Android SDK系统自带一个命令行工具,可以运行在模拟器里或者真是设备中运行。向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行稳定性测试。

     

    五:charles: 1.抓包(http、https):设置手机HTTP代理、https  charles也需要证书

    2.弱网测试:通过Throttle Settings(网络控制)、Enable Throttling(启用设置)、Throttle preset(通过预设网络值来拟定网络)、设置网络带宽值等

    3.网络请求的截取并动态修改:

    4.压力测试:通过右键点击链接,Repeat Advanced(重复),选择Iterations(重复次数)Concurrency(并发数)

    5.数据替换:通过链接右键点击Map Local(本地位置)进入设置,选择替换数据文件,替换即可

     

    :selenium :web自动化测试框架(测试浏览器兼容性的自动化)selenium不支持桌面软件自动化测试。软件测试报告,和用例管理只能依赖第三方插件unittest优点:兼容更多的平台( Windows、Linux 、 Macintosh等)以及浏览器(火狐,IE,谷歌等)

    定位元素方式:id、name、class_name、tagname、link_text、partial_link_text、xpath、css_selector

    强制等待:sleep()强制等待,不管你浏览器是否加载完,程序都得等待

    显示等待:WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了.它主要的意思就是:程序每隔多久查看一次,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

    隐式等待:implicitly_wait(),整个driver周期有效,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止

     

    :appium:开源测试自动化框架,可用于原生,混合和移动Web应用程序测试

    两大组件:

    一:Appium Server就是Appium的服务端——一个web接口服务,使用Node.js实现。

    二:Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,提供Appium自动化服务器的强大功能。

    Appium GUI是Appium desktop的前身。 也就是把Appium server封装成了一个图形界面,降低了使用门槛。

    因为Appium是一个C/S结构,有了服务端的肯定还有客户端,Appium Clients就是客户端,它会给服务端Appium Server发送请求会话来执行自动化任务。

    Appium-desktop主界面包含三个菜单:

    Simple

    • host:设置Appium server的ip地址,本地调试可以将ip地址修改为127.0.0.1
    • port:设置端口号,默认是4723不用修改
    • start server:启动 Appium server

    Advanced:高级参数配置修改,主要是Android和iOS设备,log路径等相关信息的配置。

    Presets:将Advanced中的一些配置信息作为预设配置。
     

     

    :pytest:pytest是一个全功能的Python测试框架,

    优点:

    • 1、简单灵活,容易上手,文档丰富;
    • 2、支持参数化,可以细粒度地控制要测试的测试用例;
    • 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
    • 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
    • 5、测试用例的skip和xfail处理;
    • 6、可以很好的和CI工具结合,例如jenkins

    编写规则:

    • 测试文件以test_开头(以_test结尾也可以)
    • 测试类以Test开头,并且不能带有 init 方法
    • 测试函数以test_开头
    • 断言使用基本的assert即可
    # -*- coding:utf-8 -*-
    import pytest
    
    @pytest.fixture(scope='function')
    def setup_function(request):
        def teardown_function():
            print("teardown_function called.")
        request.addfinalizer(teardown_function)  # 此内嵌函数做teardown工作
        print('setup_function called.')
    
    @pytest.fixture(scope='module')
    def setup_module(request):
        def teardown_module():
            print("teardown_module called.")
        request.addfinalizer(teardown_module)
        print('setup_module called.')
    
    @pytest.mark.website
    def test_1(setup_function):
        print('Test_1 called.')
    
    def test_2(setup_module):
        print('Test_2 called.')
    
    def test_3(setup_module):
        print('Test_3 called.')
        assert 2==1+1              # 通过assert断言确认测试结果是否符合预期

    fixture的scope参数

    scope参数有四种,分别是'function','module','class','session',默认为function。

    • function:每个test都运行,默认是function的scope
    • class:每个class的所有test只运行一次
    • module:每个module的所有test只运行一次
    • session:每个session只运行一次

    setup和teardown操作

    • setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等
    • teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等
    • 备注:也可以通过在fixture函数中通过yield实现setup和teardown功能

     

    :unitest: unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果

    unittest.TestCase:TestCase类,所有测试用例类继承的基本类:       class BaiduTest(unittest.TestCase)

    unittest.main():将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法并自动执行他们。

    unittest.TestSuite():unittest框架的TestSuite()类是用来创建测试套件的。

    unittest.TextTextRunner():unittest框架的TextTextRunner()类,通过该类下面的run()方法来运行suite所组装的测试用例。

    unittest.defaultTestLoader(): defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。用法如下:discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

    unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

    TestCase类的属性:

    setUp():setUp()方法用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。

    tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。

    assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。

    TestSuite类的属性:

    addTest(): addTest()方法是将测试用例添加到测试套件中,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。   suite = unittest.TestSuite()                  suite.addTest(test_baidu.BaiduTest('test_baidu'))

    TextTextRunner的属性:

    run(): run()方法是运行测试套件的测试用例,入参为suite测试套件:    runner = unittest.TextTestRunner() runner.run(suite)

     

    微信朋友圈测试用例:

    这里写图片描述

     

    8.po模型?

    selenium自动用例脚本,相似功能地方,代码基本都是一样的,界面元素换个查找方式,把原来的使用 xpath方式,改为使用 id 查找,需要对每个用例脚本都要改,虽然几个用例看不出什么工作量,但是重复findElement的代码,已经让我们感到了代码的笨重。如果某些定位发生了改变,我们就得贯穿整个测试代码进行调整元素定位,这样就会导致我们的脚本在后期,难以维护。
    因此通过Page Object Model 我们可以创建更加健壮代码,并减少或者消除重复的测试代码,从而也能够提高代码的可读性,减少编写脚本的工作量。Page Object Model的实现,就是通过分离测试对象和测试脚本的抽象来实现的。简单来说就是代码的封装,将测试方法进行封装对外暴露方法实现调用,在调用界面直接调用某个方法输入具体元素值以及内容。

     

     

    9.Bug的生命周期?新建,提交,确认,分配,修复,验证,关闭

     

    10.软件开发过程中的角色分工?(测试的主要工作)

    测试配合开发等进行需求分析和讨论,根据需求说明书指定《项目测试计划》,编写测试用例,建立测试环境。

    测试负责新产品测试,原有产品的升级测试,负责软件问题解决过程跟踪,软件开发文档、开发工作的规范化,管理开发部        门的产品文档,制作用户手册、操作手册,产品上限测试,监督软件开发过程执行,提高软件质量。

     

    11.缺陷(bug)等级分类?       

    致命:测试过程死机、系统崩溃、数据跌势、功能没有实现

    严重:导致软件功能不稳定、功能实现错误、流程错误

    一般:校验错误、罕见故障、错别字,不影响功能,影响体验

    低级:没影响的小问题

     

    12.使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程?

     

    答:1) 测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,系统会自动通过Email通知项目组长或直接通知开发者。
    2) 经验证无误后,修改状态为VERIFIED(已证实).待整个产品发布后,修改为CLOSED(关闭)
    3) 还有问题,REOPENED(重新打开),状态重新变为“New",并发邮件通知。
    4) 项目组长根据具体情况,重新分配给bug所属的开发者。
    5) 若是,进行处理,断言并给出解决方法。(可创建补丁附件及补充说明)
    6) 开发者收到Email信息后,判断是否为自己的修改范围。
    7) 若不是,重新分配给项目组长或应该分配的开发者。
    8) 测试人员查询开发者已修改的bug,进行重新测试。确认无误后,关闭该bug。

     

     

    13.缺陷报告由哪些组成?(测试报告,测试用例)

       缺陷编号、日期、缺陷标题、 缺陷优先程度、缺陷所属模块、缺陷所属版本、执行流程、预计结果、输出结果、缺陷分析、缺陷所属开发    人员、缺陷描述缺陷有限等级等。提高质量:要有效的发现 Bug 需参考需求以及详细设计等前期文档设计出高效的测试用例,然后严格执行测试用例,对发现的问题要充分确认肯定,然后再向外发布如此才能提高提交 Bug 的质量。

    测试报告:项目说明 测试依据 人员及进度 测试概要 测试环境 测试用例 测试方法 覆盖分析 需求覆盖 测试覆盖

     

    14.如何设计测试用例?

          测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。检验是否满足客户需求;度量测试人员的工作量;展现测试用例的思路。

         测试用例包含:

         用例编号    唯一的编号。
         用例标题    当前测试用例的用途
         测试背景    这个用例属于哪个项目
         前置条件    用例执行前应该满足哪些条件
         重要级别    定义优先级,分为高低级别
         测试数据     具体输入内容
         测试步骤    每步做些什么
         预期结果     需求文档要求结果
         实际结果     实际输出结果
         备注     

         测试用例编写流程:需求分析--》提取测试点--》测试用例编写--》测试用例评审

         测试用例常用设计方法:等价类划分法、  边界值分析法、因果图法、场景法、正交表、测试大纲法、错误推断法、随机测试

       

    15.测试计划编写:

    编写测试计:      测试环境准备、     第一次功能测试、   性能测试、  回归测试、    测试报告总结  

    1. 测试目标:根据xxx需求,提炼测试功能点、制定测试策略、评估测试 风险,预估编写测试用例、执行功能测试和回归测试的工作量,进行人员和进度 安排。

    2. 测试范围:功能模块:(需要结合实际情况)

    3. 测试策略:对需求中的功能改进进行完整测试,并根据应用场景和并发数考虑兼容性和性能测试方案。 并需要指定出测试工具

    3.1 功能测试:见测试用例表

    3.2 性能测试
    3.3 系统兼容性测试
    4. 测试资源
    4.1 人员安排
    4.2 测试环境
    4.3 bug管理
    5试进度安排:任务    时间    执行人员    工作量         
    5.2输出文档:测试计划、测试报告
    6测试验收标准:1.完成所有类型测试 ,没有影响到用户业务使用的bug ,bug数量少于一定数量  , 功能业务,性能指标符合需求

    6.2 产品上线标准:产品 checkelist

    1. 已按照交互文档、需求文档完全的实现需求;
    2.  符合交互稿的交互设计规范、符合视觉要求,已经通过设计评审;
    3.  允许遗留可能会对用户正常使用造成一定影响的正常级缺陷,但应在发布前告知项目组,并经风险评估同意发布后方可发布

    7. 风险说明
    主要包括三个方面:1.测试范围风险 (测试遗漏,需求变更)、2.测试进度风险(预估量不准确,测试人员变动,其他业务工作,)、3.产品质量风险(代码质量,测试人员能力)

     

    16.软件测试的原则:

    1.测试软件存在缺陷。证明测试对象是有缺陷的。

    2.测试尽早介入,缺陷发现越早,修复成本越小。

    3.不可进行穷尽测试(无意义测试)。

    4.缺陷集群性(2/8原则)80%的缺陷发现在20%的模块中。

    5.杀虫剂悖论,如果一直使用相同的测试方法或手段,可能无法发现新的bug。

    6.测试环境的特殊新,测试活动依赖测试内容,不同的行业,测试活动的开展都有所不同,比如测试技术、测试工具的选择,测试流程都不尽相同,所以软件测试的活动开展依赖于所测试的内容

    7.不存在缺陷谬论,软件测试不仅是找出缺陷,同时也需要确认软件是否满足需求。

     

    17.简述集成测试的环境?

    1.硬件环境: 集成测试时,要尽可能的考虑用户使用的实际环境;当实际环境难以达到的时候,模拟环境考虑到与实际环境之间                        可能存在的差异。

    2.操作系统环境:考虑到不同的操作系统版本,对于可能使用的操作系统环境,要尽可能的测试到。

    3.数据库环境:数据库的选择合乎实际情况。容量,性能,版本等多方面考虑。

    4.网络环境:一般的网络环境可以使用以太网、wifi、3G、4G。

     

    18.集成测试通常都有那些策略?

    大爆炸集成
    2、自顶向下集成
    3、自底向上集成
    4、三明治集成适应于大部分软件开发项目
    5、基干集成
    6、分层集成
    7、基于功能的集成
    8、基于消息的集成
    9、基于风险的集成
    10、基于进度的集成

     

    19.测试策略:

    功能测试,性能测试,压力测试,容量测试,安全性测试,GUI测试,可用性测试,安装测试,配置测试,
    异常测试,备份测试,健壮性测试,文档测试,在线帮助测试,网络测试,稳定性测试
    在:正常情况下测试;非正常情况下测试;边界测试;非法,极端测试;

     

    20.什么是测试脚本?

    测试脚本是为了进行自动化测试而编写的脚本,测试脚本的编写必须对应相应的测试用例

    测试脚本是一段代码不假。但是这段代码可能是为了执行某一条,或很多条测试用例而写的。也有可能 ,本身就是一条用例。

    用例本身并不局限,在基于功能。脚本和用例没有并列的可比性。脚本可能是用例,也可能是执行用例用的功能。用例也可能是脚本。

     

    21.软件产品质量特性是什么? ?


    功能性:适应性、准确性、互操作性、依从性、安全性。
    可使用性:易理解性、易学习性、易操作性。
    效率:时间特性、资源特性。
    可维护性:易分析性、易变更性、稳定性、易测试性。
    可移植性: 适应性、易安装性、遵循性、易替换性。

     

    22. 一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?

    300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。300个用户在一个客户端上,需要更大的带宽。
    IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。
    所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。

     

     

    23.使用QTP做功能测试,录制脚本的时候,要验证多个用户的登录情况/查询情况,如何操作?

    分析用户登录的基本情况,得出一组数据,通过性测试/失败性测试的都有(根据TC来设计这些数据),然后录制登录的脚本,将关键的数据参数化,修改脚本,对代码进行加强,调试脚本。

    QTP中的action主要是用来管理代码的,Action的作用 1)用Action可以对步骤集进行分组 2)步骤重组,然后被整体调用 3)拥有自己的sheet 4)组合有相同需求的步骤,整体操作 5)具有独立的对象仓库

     

     

    24.TestDirector有些什么功能,如何对软件测试过程进行管理?

    管理测试需求,测试计划以及缺陷跟踪分析,主要有五个模块:1.服务测试管理器、2.需求管理器、3.测试实验室、4.缺陷管理器、5.测试计划  保证各阶段之间顺畅的信息流,完全基于Web。

    业务分析员:定义应用程序需求和测试目标

    QA测试员:运用手动和自动测试,报告执行测试结果,输入缺陷

    开发人员:数据库查看和解决缺陷

    测试经理和项目经理:设计测试计划,开发测试案例

    产品经理:决定是否准备发布应用

     

     

    25.测试自动化和自动化测试的区别?

    什么是测试自动化:这是一种让测试过程脱离人工的一次变革。对于控制成本,控制质量,回溯质量和减少测试周期都有积极影响的一种研发过程。


    什么是自动化测试:通过将测试执行部分部分或者全部交由机器执行的一种测试,叫做自动化测试。这种测试不需要人的实时参与。同时这种测试在小规模应用时会比手动测试昂贵许多。
    自动化测试可以看作测试自动化的一部分。


    一个自动化工程师,会比较专注于测试工具的研发。最主要的是这个工程师会从成本的角度去考虑问题。这一点比较像PM。他所做的一切是为了减少自己或者团队的工作量,尽可能的将重复的,有规律可循的工作代码化,自动化。

    一个自动化测试工程师,会比较专注于测试代码的开发,以及测试结果的分析。对于被测设备本身非常感兴趣。他们比较倾向于一种完美主义者,追求的是高质量而经常忽略成本。这一点更像开发人员。

     

    26.公司的测试环境?

    开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。

    测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。

    生产环境:是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用的环境都以这个为基础,然后根据客户的个性化需求来做调整或者修改。

    三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境。

    UAT环境:UAT,(User Acceptance Test),用户接受度测试 即验收测试,所以UAT环境主要是用来作为客户体验的环境。

    仿真环境:顾名思义是和真正使用的环境一样的环境(即已经出售给客户的系统所在环境,也成为商用环境),所有的配置,页面展示等都应该和商家正在使用的一样,差别只在环境的性能方面。

     

    27.公司做安全测试是怎么进行的?

    软件安全性测试主要包括程序、数据库安全性测试。根据系统安全指标不同测试策略也不同。

    详细的测试点:
    1.跨网站脚本攻击:通过脚本语言的缺陷模拟合法用户,控制其账户,盗窃敏感数据
    2.注入攻击:通过构造查询对数据库、LDAP和其他系统进行非法查询
    3.恶意文件执行:在服务器上执行Shell 命令Execute,获取控制权
    4.伪造跨站点请求:发起Blind 请求,模拟合法用户,要求转账等请求
    5.不安全对象引用:不安全对象的引入,访问敏感文件和资源,WEB应用返回敏感文件内容
    6.被破坏的认证和Session管理:验证Session token 保护措施,防止盗窃session
    7.Session的失效时间限制:Session的失效时间设置是否过长,会造成访问风险
    8.不安全的木马存储:过于简单的加密技术导致黑客破解编密码,隐秘信息被盗窃,验证其数据加密
    9.不安全的通讯:敏感信息在不安全通道中以非加密方式传送, 敏感信息被盗窃,验证其通讯的安全性
    10.URL访问限制失效:验证是否通过恶意手段访问非授权的资源链接,强行访问一些登陆网页,窃取敏感信息
    11.信息泄露和不正确错误处理测试:恶意系统检测,防止黑客用获取WEB站点的具体信息的攻击手段获取详细系统信息
    12.注册与登录测试:验证系统先注册后登录、验证登录用户名和密码匹配校验,密码长度及尝试登录次数,防止 非法用户登录
    13.超时限制:验证WEB应用系统需要有是否超时的限制,当用户长时间不做任何操作的时候,需要重新登录才能使用
    14.日志文件:验证服务器上日志是否正常工作,所有事务处理是否被记录
    15.目录文件:验证WEB服务器目录访问权限或者每个目录访问时有index.htm,防止 WEB 服务器处理不适当,将整个目录暴露
    16.身份验证:验证调用者身份、数据库身份、验证是否明确服务账户要求、是否强制式试用账户管理措施
    17.授权:验证如何向最终用户授权、如何在数据库中授权应用程序,确定访问系统资源权限
    18.会话:验证如何交换会话标识符、是否限制会话生存期、如何确保会话存储状态安全
    19.配置管理:验证是否支持远程管理、是否保证配置存储安全、是否隔离管理员特权
    20.备份与恢复:为了防止系统意外崩溃造成的数据丢失,验证备份与恢复功能正常实现、备份与恢复方式是否满足Web系统安全性要求
    21.数据库关键数据是否进行加密存储,是否在网络中传递敏感数据
    22.在登录或注册功能中是否有验证码存在,防止恶意大批量注册登录的攻击
    23.Cookie文件是否进行了加密存储,防止盗用cookie内容
    24.密码强度提醒:建议对密码的规则进行加强设置
    25.密码内容禁止拷贝粘贴

     

    用户身份认证安全的测试要考虑问题:
    1.明确区分系统中不同用户权限
    2.系统中会不会出现用户冲突
    3.系统会不会因用户的权限的改变造成混乱
    4.用户登陆密码是否是可见、可复制
    5.系统的密码策略,通常涉及到隐私,钱财或机密性的系统必须设置高可用的密码策略。
    5.是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)
    6.用户推出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入系统

    系统网络安全的测试要考虑问题:
    1.测试采取的防护措施是否正确装配好,有关系统的补丁是否打上
    2.模拟非授权攻击,看防护系统是否坚固
    3.采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI系列和 IPhacker IP )
    4.采用各种木马检查工具检查系统木马情况
    5.采用各种防外挂工具检查系统各组程序的客外挂漏洞


    数据库安全考虑问题:
    1.系统数据是否机密(比如对银行系统,这一点就特别重要,一般的网站就没有太高要求)
    2.系统数据的完整性(我刚刚结束的企业实名核查服务系统中就曾存在数据的不完整,对于这个系统的功能实现有了障碍)
    3.系统数据可管理性
    4.系统数据的独立性
    5.系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)

    浏览器安全
    同源策略:不同源的“document”或脚本,不能读取或者设置当前的“document”
    同源定义:host(域名,或者IP),port(端口号),protocol(协议)三者一致才属于同源。
    要注意的是,同源策略只是一种策略,而非实现。这个策略被用于一些特定的点来保护web的安全。
    <script>,<img>,<iframe>,<link>等标签都可以跨域加载资源,不受同源策略的限制。
    XMLHttpRequest,DOM,cookie受到同源策略的限制。
    网站可以通过提供crossdomain.xml来允许某些源跨域访问自己的资源。
    google chrome使用了多进程来隔离代码运行的环境,从而起到提高web安全的作用
    Q & A
    Q:cookie为什么需要同源策略?
    A:cookie有同源策略是必须的,这样可以保证A网站的用户(识别)信息不会被B网站获取到
    Q:XMLHttpRequest为什么需要同源策略?
    A:两个例子:
    (1)加入没有同源策略,某个网站的某张页面被你写入了一些js ,这些js有些ajax操作,如果某个用户访问了这张页面,你的js就可以获得用户的某些信息(cookie,本地文件等)然后通过ajax发送回你的服务器。 这就是安全问题,信息泄漏。
    (2)先假设浏览器没有限制跨域,A站的xhr请求B站的一个url,那么浏览器是要带上谁家的cookie一起请求呢?(每次http请求都要带上该站下的所有cookie)显然是B家的。假设B家的网站当前用户已经登录,那么cookie里自然记录下了sessionId相关的东西以标识当前用户的身份,那么本次xhr请求很easy的通过了身份认证,然后后果就是不堪设想的。
    这个就很正确,如果A可以用xhr跨站访问B,带着B的cookie自然可以通过B网站的验证,从而获取到敏感数据。所以这点是关键。

    web安全测试方法:
    工具扫描
    目前web安全扫描器针对OSinjection, XSS、SQL injection 、OPEN redirect 、PHP File Include漏洞的检测技术已经比较成熟。
    商业软件web安全扫描器:有IBM Rational Appscan、WebInspect、Acunetix WVS 、burp suite免费的扫描器:W3af 、Skipfish 根据业务资金,可以考虑购买商业扫描软件,也可以使用免费的,各有各的好处。
    首页可以对网站进行大规模的扫描操作,工具扫描确认没有漏洞或者漏洞已经修复后,再进行以下手工检测。


    关于越权操作的问题
    例如A用户的个人资料ID为1 B用户个人资料ID为2,我通过登陆B用户,把ID修改为1 就可以查看到用户A的个人资料,这就是越权。
    测试方法:通过查看URL的get参数对那些类似明显的顺序数字 进行修改,看是否能越权访问。


    关于登陆安全的问题
    除了SQL注入,还有找回密码功能会出现安全问题
    邮箱找回密码测试方法:
    先从邮箱参数修改开始,看填入用户名和自己修改的邮箱账号,看是否能收到邮箱,收到后是否能修改。
    如果不能修改邮箱参数那么,我们就让它邮箱找回,接着点击邮箱内修改密码的链接,看链接的邮箱参数是否可以修改,用户名是否可以修改,加密的urlcode 是否可以逆向解密。
    如果是手机找回密码功能:则测试手机收到的验证码是否是纯数字、纯字母的,如果是请修改为字母与数字的组合。

    关于用开源程序的问题
    关注网上你所用的开源程序的官网更新情况和安全事件。


    关于上传:
    1.上传文件是否有格式限制,是否可以上传exe文件;
    2.上传文件是否有大小限制,上传太大的文件是否导致异常错误,上传0K的文件是否会导致异常错误,上传并不存在的文件是否会导致异常错误;
    3.通过修改扩展名的方式是否可以绕过格式限制,是否可以通过压包方式绕过格式限制;
    4.是否有上传空间的限制,是否可以超过空间所限制的大小,如将超过空间的大文件拆分上传是否会出现异常错误。
    5.上传文件大小大于本地剩余空间大小,是否会出现异常错误。
    6.关于上传是否成功的判断。上传过程中,中断。程序是否判断上传是否成功。
    7.对于文件名中带有中文字符,特殊字符等的文件上传。

     

    28.移动端测试:

    Android手机和IOS手机,系统有什么区别?
    1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
    2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
    3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
     

    Android:

    1:使用灰盒进行功能测试

    2:使用fiddler或者Charles进行抓包测试

    3:兼容性测试,Android 从4.0版本的手机测试到9.0版本手机

    4:各大品牌的手机都的进行测试,比如:小米小米9 小米8 小米7 小米6 note 红米系列 7红米5,华为: 华为mate20 华为mate10,华为荣耀: 荣耀10,9,8 ,vivo: x21,27,23,oppo: R7,R9,R11,三星手机: note9, 8,7 S9,8。

    5:稳定性测试: 使用monkey命令进行稳定性测试

    6:专项测试,使用腾讯专项测试工具进行,测试耗电量,流量,CPU占用率

    7:性能测试,对app的接口进行性能测试,使用工具jmeter或者loadrunner

    8:对app接口进行接口测试,使用postman或者Jmeter都行

    9:如果有时间写自动化脚本

    ios:

    1:使用灰盒进行功能测试

    2:使用fiddler或者Charles进行抓包测试

    3:兼容性测试:ios版本测试从9-12,手机型号从4S测试到xmax

    4:性能测试接口和安卓的是一样的所以只需要进行一次就可以了

    5:专项测试:使用腾讯专项测试工具进行,测试耗电量,流量,CPU占用率

    6:编写自动化脚本

     

    29.web端测试:

    前端 :

    1:web也使用灰&测试方法

    2:兼容性测试:IE浏览器7-12,火狐浏览器 35-最新的,谷歌浏览器,别的浏览器有时间就可以测试

    3:对web端页面进行性能测试,使用jmeter或者loadrunner

    后端

    1:测试http接口

    2:测试https接口

    3:测试tcp接口

    4:测试dubbo接口

    5:对后台代码进行代码审核,进行白盒测试


     

    30.软件测试模型?

     

    1,传统的瀑布模型

    这里写图片描述

    瀑布模型的优缺点

    这里写图片描述

    2,V模型

    这里写图片描述

    3,W模型

    这里写图片描述

    4,X模型

    这里写图片描述

     

     

     

    31.在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?

    1、检查系统是否有中毒的特征                  2、检查软件/硬件的配置是否符合软件的推荐标准

    3、如果是C/S或者B/S结构的软件,需要检查是不是因为与服务器的连接问题或者访问问题造成的

    4、确认当前的系统是否是独立,是否存在负载,无对外提供消耗CPU资源的服务,查看性能监视器,确认应用程序对CPU/内存的访问情况

     

     

    32.MySQL外连接、内连接的区别?

    内连接 :连接的数据表相对应的匹配字段完全相等的连接。连接关键字是 inner join

    外连接:分为左外连接与右外连接、全连接。

    左连接的结果集包括指定的左表全部数据与匹配的右表数据,右表中没匹配的全为空值.关键字 left join

    右连接的结果集包含指定的右表全部数据与匹配的左边数据,左边中没匹配的全为空值.关键字 right join

    全连接返回左右数据表的所有行.关键字 full join

     

    33.测试通过的标准是什么?


    从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行 72 小时,目前 Bug
    Tracking System 中,本版本中没有一般严重的 BUG,普通 BUG 的数量在 3 以下,BUG 修复
    率 90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本 Release。

     

    34.测试退出标准:

    单元测试退出标准

    1) 单元测试用例设计已经通过评审
    2) 核心代码100% 经过Code Review
    3) 单元测试功能覆盖率达到100%
    4) 单元测试代码行覆盖率不低于80%
    5) 所有发现缺陷至少60%都纳入缺陷追踪系统且各级缺陷修复率达到标准
    6) 不存在A、B类缺陷
    7) C、D、E类缺陷允许存在
    8) 按照单元测试用例完成了所有规定单元的测试
    9) 软件单元功能与设计一致


    集成测试退出标准

    1) 集成测试用例设计已经通过评审
    2) 所有源代码和可执行代码已经建立受控基线,纳入配置管理受控库,不经过审批不能随意更改
    3) 按照集成构件计划及增量集成策略完成了整个系统的集成测试
    4) 达到了测试计划中关于集成测试所规定的覆盖率的要求
    5) 集成工作版本满足设计定义的各项功能、性能要求
    6) 在集成测试中发现的错误已经得到修改,各级缺陷修复率达到标准
    7) A、B类BUG不能存在
    8) C、D类BUG允许存在,但不能超过单元测试总BUG的50%。
    9) E类BUG允许存在

    系统测试退出标准

    1) 系统测试用例设计已经通过评审
    2) 按照系统测试计划完成了系统测试
    3) 系统测试的功能覆盖率达100%
    4) 系统的功能和性能满足产品需求规格说明书的要求
    5) 在系统测试中发现的错误已经得到修改并且各级缺陷修复率达到标准
    6) 系统测试后不存在A、B、C类缺陷
    7) D类缺陷允许存在,不超过总缺陷的5%
    8) E类缺陷允许存在,不超过总缺陷的10%
    注:这只是一套比较理想化的退出标准,但在实际工作中不可能达到这种程度,尤其是测试覆盖率和缺陷解决率不可能是100%。现在的军方标准是达到99%。对于通用软件来说就要根据公司实际情况了。

     

    39.查看LINUX进程内存占用

    1、lsof -i:端口号

    2、netstat -tunlp|grep 端口号都可以查看指定端口被哪个进程占用的情况

    查看所有端口、进程的使用情况:netstat -tunlp

    查看某一端口的使用情况:  netstat -tunlp|grep 5560

    在命令行中输入 “top”

      即可启动 top, top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。

      第一部分 -- 最上部的 系统信息栏 :

      第一行(top):“00:11:04”为系统当前时刻;“3:35”为系统启动后到现在的运作时间;

        “2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;

        “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;

      第二行(Tasks):

        “59 total”为当前系统进程总数;

        “1 running”为当前运行中的进程数;

        “58 sleeping”为当前处于等待状态中的进程数;

        “0 stoped”为被停止的系统进程数;

        “0 zombie”为被复原的进程数;

      第三行(Cpus):分别表示了 CPU 当前的使用率;

      第四行(Mem):分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;

     

    35.数据库:mysql语句

        大型数据库   Oracle  Db2
          中型数据库    sqlserver  
          小型数据库    mysql
          微型数据库    sqlite

    增:Insert  into 表名 value 值

    删:Delect from 表名  where  值

    改:Update 表名 set 字段=字段 where 字段;

    查:Select * from 表名

    自增  auto_increment       
    主键  primary key
    非空  not null
    唯一 unique
    默认值  default
    外键  foreign key 

    1. # 查看所有的数据库: SHOW DATABASES ;

    2. # 创建一个数据库: CREATE DATABASE k;

    3. # 删除一个数据库: DROP DATABASE k;

    4. # 使用这个数据库  USE k;

    1. # 查看所有的表  SHOW TABLES ;

    2. # 创建一个表  CREATE TABLE n(id INT, name VARCHAR(10));

    3. CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name));

    4. CREATE TABLE m(id INT, name VARCHAR(10));

    5. # 直接将查询结果导入或复制到新创建的表 : CREATE TABLE n SELECT * FROM m;

    6. # 新创建的表与一个存在的表的数据结构类似:  CREATE TABLE m LIKE n;

    7. # 临时表将在你连接MySQL期间存在。当断开连接时,MySQL将自动删除表并释放所用的空间。也可手动删除。

    8. CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10));

    9. # 直接将查询结果导入或复制到新创建的临时表  CREATE TEMPORARY TABLE tt SELECT * FROM n;

    10. # 删除一个存在表  DROP TABLE IF EXISTS m;

    11. # 更改存在表的名称

    12. ALTER TABLE n RENAME m;

    13. RENAME TABLE n TO m;

    14. # 查看表的结构(以下五条语句效果相同)

    15. DESC n; # 因为简单,所以建议使用

    16. DESCRIBE n;

    17. SHOW COLUMNS IN n;

    18. SHOW COLUMNS FROM n;

    19. EXPLAIN n;

    20. # 查看表的创建语句

    21. SHOW CREATE TABLE n;

    表的结构

    1. # 添加字段: ALTER TABLE n ADD age VARCHAR(2) ;

    2. # 删除字段: ALTER TABLE n DROP age;

    3. # 更改字段属性和属性:ALTER TABLE n CHANGE age a INT;

    4. # 只更改字段属性:ALTER TABLE n MODIFY age VARCHAR(7) ;

    表的数据

    1. # 增加数据

    2. INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');

    3. INSERT INTO n SELECT * FROM n; # 把数据复制一遍重新插入

    4. # 删除数据:DELETE FROM n WHERE id = 2;

    5. # 更改数据:UPDATE n SET name = 'tom' WHERE id = 2;

    6. # 数据查找 : SELECT * FROM n WHERE name LIKE '%h%';

    7. # 数据排序(反序) :SELECT * FROM n ORDER BY name, id DESC ;

    1. # 添加主键:ALTER TABLE n ADD PRIMARY KEY (id);

    2. # 删除主键:ALTER TABLE n DROP PRIMARY KEY ;

    3. # 添加外键

    4. ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id); # 自动生成键名m_ibfk_1

    5. ALTER TABLE m ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES n(id); # 使用定义的键名fk_id

    6. # 删除外键:ALTER TABLE m DROP FOREIGN KEY `fk_id`;

    7. # 修改外键:ALTER TABLE m DROP FOREIGN KEY `fk_id`, ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id); # 删除之后从新建

    联接

    1. # 内联接:SELECT * FROM m INNER JOIN n ON m.id = n.id;

    2. # 左外联接 :SELECT * FROM m LEFT JOIN n ON m.id = n.id;

    3. # 右外联接:SELECT * FROM m RIGHT JOIN n ON m.id = n.id;

    4. # 交叉联接: SELECT * FROM m CROSS JOIN n; # 标准写法

    5. # 类似全连接full join的联接用法

    6. SELECT id,name FROM m

    7. UNION

    8. SELECT id,name FROM n;

    函数

    1. # 聚合函数

    2. SELECT count(id) AS total FROM n; # 总数

    3. SELECT sum(age) AS all_age FROM n; # 总和

    4. SELECT avg(age) AS all_age FROM n; # 平均值

    5. SELECT max(age) AS all_age FROM n; # 最大值

    6. SELECT min(age) AS all_age FROM n; # 最小值

    7. # 数学函数

    8. SELECT abs(-5); # 绝对值

    9. SELECT bin(15), oct(15), hex(15); # 二进制,八进制,十六进制

    10. SELECT pi(); # 圆周率3.141593

    11. SELECT ceil(5.5); # 大于x的最小整数值6

    12. SELECT floor(5.5); # 小于x的最大整数值5

    13. SELECT greatest(3,1,4,1,5,9,2,6); # 返回集合中最大的值9

    14. SELECT least(3,1,4,1,5,9,2,6); # 返回集合中最小的值1

    15. SELECT mod(5,3); # 余数2

    16. SELECT rand(); # 返回0到1内的随机值,每次不一样

    17. SELECT rand(5); # 提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。

    18. SELECT round(1415.1415); # 四舍五入1415

    19. SELECT round(1415.1415, 3); # 四舍五入三位数1415.142

    20. SELECT round(1415.1415, -1); # 四舍五入整数位数1420

    21. SELECT truncate(1415.1415, 3); # 截短为3位小数1415.141

    22. SELECT truncate(1415.1415, -1); # 截短为-1位小数1410

    23. SELECT sign(-5); # 符号的值负数-1

    24. SELECT sign(5); # 符号的值正数1

    25. SELECT sqrt(9); # 平方根3

    26. SELECT sqrt(9); # 平方根3

    27. # 字符串函数

    28. SELECT concat('a', 'p', 'p', 'le'); # 连接字符串-apple

    29. SELECT concat_ws(',', 'a', 'p', 'p', 'le'); # 连接用','分割字符串-a,p,p,le

    30. SELECT insert('chinese', 3, 2, 'IN'); # 将字符串'chinese'从3位置开始的2个字符替换为'IN'-chINese

    31. SELECT left('chinese', 4); # 返回字符串'chinese'左边的4个字符-chin

    32. SELECT right('chinese', 3); # 返回字符串'chinese'右边的3个字符-ese

    33. SELECT substring('chinese', 3); # 返回字符串'chinese'第三个字符之后的子字符串-inese

    34. SELECT substring('chinese', -3); # 返回字符串'chinese'倒数第三个字符之后的子字符串-ese

    35. SELECT substring('chinese', 3, 2); # 返回字符串'chinese'第三个字符之后的两个字符-in

    36. SELECT trim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese'

    37. SELECT ltrim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese '

    38. SELECT rtrim(' chinese '); # 切割字符串' chinese '两边的空字符-' chinese'

    39. SELECT repeat('boy', 3); # 重复字符'boy'三次-'boyboyboy'

    40. SELECT reverse('chinese'); # 反向排序-'esenihc'

    41. SELECT length('chinese'); # 返回字符串的长度-7

    42. SELECT upper('chINese'), lower('chINese'); # 大写小写 CHINESE chinese

    43. SELECT ucase('chINese'), lcase('chINese'); # 大写小写 CHINESE chinese

    44. SELECT position('i' IN 'chinese'); # 返回'i'在'chinese'的第一个位置-3

    45. SELECT position('e' IN 'chinese'); # 返回'i'在'chinese'的第一个位置-5

    46. SELECT strcmp('abc', 'abd'); # 比较字符串,第一个参数小于第二个返回负数- -1

    47. SELECT strcmp('abc', 'abb'); # 比较字符串,第一个参数大于第二个返回正数- 1

    48. # 时间函数

    49. SELECT current_date, current_time, now(); # 2018-01-13 12:33:43 2018-01-13 12:33:43

    50. SELECT hour(current_time), minute(current_time), second(current_time); # 12 31 34

    51. SELECT year(current_date), month(current_date), week(current_date); # 2018 1 1

    52. SELECT quarter(current_date); # 1

    53. SELECT monthname(current_date), dayname(current_date); # January Saturday

    54. SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date); # 7 13 13

    55. # 控制流函数

    56. SELECT if(3>2, 't', 'f'), if(3<2, 't', 'f'); # t f

    57. SELECT ifnull(NULL, 't'), ifnull(2, 't'); # t 2

    58. SELECT isnull(1), isnull(1/0); # 0 1 是null返回1,不是null返回0

    59. SELECT nullif('a', 'a'), nullif('a', 'b'); # null a 参数相同或成立返回null,不同或不成立则返回第一个参数

    60. SELECT CASE 2

    61. WHEN 1 THEN 'first'

    62. WHEN 2 THEN 'second'

    63. WHEN 3 THEN 'third'

    64. ELSE 'other'

    65. END ; # second

    66. # 系统信息函数

    67. SELECT database(); # 当前数据库名-test

    68. SELECT connection_id(); # 当前用户id-306

    69. SELECT user(); # 当前用户-root@localhost

    70. SELECT version(); # 当前mysql版本

     

    36.Linux命令:

    mv 移动文件夹
    source  更新    
    tar -vxzf     解压
    cd /home       进入 '/ home' 目录' 
    cd ..              返回上一级目录 
    cd ../..           返回上两级目录 
    cd                 进入个人的主目录 
    cd ~user1    进入个人的主目录 
    cd -              返回上次所在的目录 
    pwd             显示工作路径 
    ls                查看目录中的文件 

    vi        编辑

    wq          编辑保存
    ls -F            查看目录中的文件 
    ls -l             显示文件和目录的详细资料 
    ls -a            显示隐藏文件 
    ls *[0-9]*     显示包含数字的文件名和目录名 
    tree            显示文件和目录由根目录开始的树形结构
    lstree          显示文件和目录由根目录开始的树形结构
    mkdir dir1   创建一个叫做 'dir1' 的目录' 
    mkdir dir1 dir2 同时创建两个目录 
    mkdir -p /tmp/dir1/dir2 创建一个目录树 
    rm -f file1 删除一个叫做 'file1' 的文件' 
    rmdir dir1 删除一个叫做 'dir1' 的目录' 
    rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 
    rm -rf dir1 dir2 同时删除两个目录及它们的内容 
    mv dir1 new_dir 重命名/移动 一个目录 
    cp file1 file2 复制一个文件 
    cp dir/* . 复制一个目录下的所有文件到当前工作目录 
    cp -a /tmp/dir1 . 复制一个目录到当前工作目录 
    cp -a dir1 dir2 复制一个目录 
    ln -s file1 lnk1 创建一个指向文件或目录的软链接 
    ln file1 lnk1 创建一个指向文件或目录的物理链接 
    文件搜索 
    find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 
    find / -user user1 搜索属于用户 'user1' 的文件和目录 
    find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 
    find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 
    find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 
    find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限 
    find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备 
    locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令 
    whereis halt 显示一个二进制文件、源码或man的位置 
    which halt 显示一个二进制文件或可执行文件的完整路径 

     

     

    37.adb命令:

    adb 使用的端口号,5037

    adb devices , 获取设备列表及设备状态

    adb get-state , 获取设备的状态

    adb install 用于安装

    adb uninstall 用于卸载

    adb push 命令将PC机上的文件推到 DLT-RK3288 机器上

    adb pull  命令将DLT-RK3288机器上的文件拉到PC机上

    ls, cd, rm, mkdir, touch, pwd, cp, mv, ifconfig, netstat, ping, ps, top等,进入adb shell即可执行,与linux相似

    打印默认日志数据adb logcat

    需要打印日志详细时间的简单数据adb logcat -v time

    需要打印级别为Error的信息adb logcat *:E

    • adb help, 列出所有的选项说明及子命令
    • adb devices , 获取设备列表及设备状态
    • adb get-state , 获取设备的状态,设备的状态有 3 钟,device , offline , unknown,其中device:设备正常连接,offline:连接出现异常,设备无响应,unknown:没有连接设备
    • adb kill-server , adb start-server , 结束 adb 服务, 启动 adb 服务,通常两个命令一起用,设备状态异常时使用 kill-server,然后运行 start-server 进行重启服务
    • adb logcat , 打印 Android 的系统日志    adb logcat -c,清除日志
    • adb bugreport , 打印dumpsys、dumpstate、logcat的输出,也是用于分析错误,输出比较多,建议重定向到一个文件中,如adb bugreport > d:\bugreport.log
    • adb install , 安装应用,adb install -r 重新安装
    • adb uninstall , 卸载应用,后面跟的参数是应用的包名,请区别于 apk 文件名
    • adb pull , 将 Android 设备上的文件或者文件夹复制到本地,如例如复制 Sdcard 下的 pull.txt 文件到 D 盘:adb pull sdcard/pull.txt d:\,重命名:adb pull sdcard/pull.txt d:\rename.txt
    • adb push , 推送本地文件至 Android 设备,如推送 D 盘下的 push.txt 至 Sdcard:adb push d:\push.txt sdcard/   sdcard 后面的斜杠不能少
    • adb reboot , 重启 Android 设备,    adb reboot recovery,重启到Recovery界面    adb reboot bootloader,重启到bootloader界面
    • adb root , adb remount,可以直接已这两个命令获取 root 权限,并挂载系统文件系统为可读写状态
    • adb get-serialno,返回设备序列号SN值    adb get-product,获取设备的ID
    • adb forward tcp:5555 tcp:8000,做为主机向模拟器或设备的请求端口
    • adb shell,进入设备shell
    • adb shell pm list package,列出所有的应用的包名
    • adb shell screencap -p /sdcard/screen.png ,截屏,保存至 sdcard 目录
    • adb shell screenrecord sdcard/record.mp4,执行命令后操作手机,ctrl + c 结束录制,录制结果保存至 sdcard
    • adb shell wm size,获取设备分辨率
    • adb shell pm dump 包名,列出指定应用的 dump 信息
    • adb shell pm path 包名, 列出对应包名的 .apk 位置
    • adb shell monkey –p 程序包 –v 测试次数 ,比如“adb shell monkey –p com.htc.Weather –v 20000”意思是对com.htc.Weather 这个程序包单独进行一次20000次的monkey测试,其中程序包名称可以在串口终端这句命令获得:ls data/data 显示所有程序包
    • adb shell ps | grep [process],找出对应的进程pid  adb shell dumpsys meminfo [pid],根据进程pid查看进程占用的内存    或者  adb shell dumpsys meminfo<package_name>,package_name 也可以换成程序的pid,pid可以通过 adb shell top | grep app_name 来查找
    • adb shell ps, 查看当前终端中的进程信息
    • ls // 查看目录   
    • date // 打印或设置当前系统时间   
    • cat /proc/meminfo // 查看内存信息   
    • cat /proc/cpuinfo // 查看CPU信息

    抓取App报错的log日志:

    按住win+r打开cmd,cd到安装adb的目录下,然后输入指令:adb logcat -v time > D:\\logcat.log(可以换成其他磁盘) ,输入完成之后敲击回车,这个时候在D盘下会生成一个logcat日志并且将近期的崩溃记录到这个日志当中。Ctrl+C以结束截取操作。

    1.adb logcat *:V           不过滤地输出所有调试信息,显示所有日志信息

    1.adb logcat *:D            Debug来表达调试信息,能输出Debug、Info、Warning、Error级别的Log信息。

    1.adb logcat *:I              Info来表达一些信息,能输出Info、Warning、Error级别的Log信息。

    1.adb logcat *:W            Warning表示警告,查找崩溃问题一般用:能输出Warning、Error级别的Log信息

    2.adb logcat *:E             Error表示出现错误,能输出Error级别的Log信息。

     

     

     

    40.Monkey命令

    查看设备的链接情况:adb devices

    手机里面的软件随机点击:adb shell monkey 1000

    查看包名(-s只查找系统包名,-3只查看第三方包,-f输出包和包相关联的文件-e只输出启用的包,-i只输出包和安装信息,-u只输出包和未安装包信息都不加显示所有,):adb shell pm list packages -s

    启动一个指定包名:adb shell monkey -p com.dyhoa.school 1000

    操作日志:adb shell monkey -p com.tencent.mobileqq -v -v 100

    1 参数: -p       用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,monkey将只允许系统启动指定的APP,如果不指定包,将允许系统启动设备中的所有APP.

    * 指定一个包: adb shell monkey -p cn.emoney.acg 10

    * 指定多个包:adb shell monkey -p cn.emoney.acg –p cn.emoney.wea -p cn.emoney.acg 100

    * 不指定包:adb shell monkey 100

     

    2 参数: -v用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:

    日志级别 0

    示例 adb shell monkey -p cn.emoney.acg –v 100

    说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息

    日志级别1

    示例 adb shell monkey -p cn.emoney.acg –v -v 100

    说明提供较为详细的日志,包括每个发送到Activity的事件信息

    日志级别 2

    示例 adb shell monkey -p cn.emoney.acg –v -v –v 100

    说明最详细的日志,包括了测试中选中/未选中的Activity信息

     

    3 参数: -s

    用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

    Monkey 测试1:adb shell monkey -p cn.emoney.acg -s 10  100

    Monkey 测试2:adb shell monkey -p cn.emoney.acg –s 10 100

    两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。


    4 参数: --throttle<毫秒>用于指定用户操作(即事件)间的时延,单位是毫秒;

    adb shell monkey -p cn.emoney.acg --throttle 5000 100

     

    5 参数: --ignore-crashes     用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。

    adb shell monkey -p cn.emoney.acg --ignore-crashes 1000        测试过程中即使程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止

    adb shell monkey -p cn.emoney.acg 1000          测试过程中,如果acg程序崩溃,Monkey将会停止运行

     

    6 参数: --ignore-timeouts                        用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

    adb shellmonkey -p cn.emoney.acg --ignore-timeouts 1000

     

    7 参数: --ignore-security-exceptions        用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

    adb shellmonkey -p cn.emoney.acg --ignore-security-exception 1000


    8 参数: --kill-process-after-error             用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态。应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程

    adb shellmonkey -p cn.emoney.acg --kill-process-after-error 1000


    9 参数: --monitor-native-crashes         用于指定是否监视并报告应用程序发生崩溃的本地代码。

    adb shellmonkey -p cn.emoney.acg --monitor-native-crashes 1000

     

    10 参数: --pct-{+事件类别}{+事件类别百分比}用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
    示例:
    --pct-touch{+百分比}
    调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)

    adb shell monkey -p cn.emoney.acg --pct-touch 10 1000
    --pct-motion {+百分比}
    调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随件机事和一个up事件组成)

    adb shell monkey -p cn.emoney.acg --pct-motion 20 1000
    --pct-trackball {+百分比}
    调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)

    adb shell monkey -p cn.emoney.acg --pct-trackball 30 1000
    --pct-nav {+百分比}

    调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

    adb shell monkey -p cn.emoney.acg --pct-nav 40 1000
    --pct-majornav {+百分比}
    调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

    adb shell monkey -p cn.emoney.acg --pct-majornav 50 1000

     

    七、输出monkeylog

    跑monkey的时候或者想抓程序log导出时,有时会提示:cannot create D:monkeytest.txt: read-only file system

    为什么有时候可以有时候不可以?

    后来发现跟使用使用习惯不一样,一会是先进入adb shell 再用命令,一会是直接命令进入。

    进入adb shell后再用命令就会失败~

    正确方法:退出shell或者执行命令时先不要进shell

    C:\Documents and Settings\Administrator>adb shell monkey -p 包名 -v 300  >e:\text.txt

    进入adb shell后就相当于进入linux的root下面,没有权限在里面创建文件~

     

     

    48.保证测试的覆盖率 ?

    测试需求分析分两步:

    1、测试需求的获取    需求的来源:

    显式需求:1.原始需求说明书   2.产品规格书   3.软件需求文档   4.有无继承性文档   5.经验库   6.通用的协议规范

    隐式需求:用户的主观感受,市场的主流观点,专业人士的评价分析

    2,需求的分析,产生测试需求文档

    将不同的需求来源划分成一个个需求点,针对每一点进行测试分析:界定测试范围,利用各种测试设计的方法产生测试点

    在测试方法方面,可做如下注意:

    其一,分析出口入口。从入口分析,将可能出现的环境,条件,操作等内容分类组合,然后根据各位测试达人的方法进行整合,逐一验证。从出口分析,将可能出现的结果进行统计,根据结果的不同追根溯源,再找到不同的操作以及条件等内容,统计成文档,逐一验证。

    其二,多种测试手法的学习和使用。大家可能更多的关心测试方法,但是具体操作的手法也是需要注意的。毕竟测试方法比较容易找到,各位达人都很熟悉。如果将每个人不同的测试手法总结出来并在自己的测试实施中加以使用,可能会收到意想不到的成果。

    二、当测试需求分析完成,并且形成文档后,要进行测试需求评审,保证需求的准确性以及完整性。

    三、测试需求完成以后,可以根据测试需求设计测试用例。

    要保证测试用例能够全面覆盖测试需求,要包含所有的情况。

    测试用例设计上划分为单功能测试用例和测试场景设计,单功能测试覆盖的需求中的功能点,测试场景覆盖需求中的业务逻辑。

    在设计测试用例的时候,可以使用多种测试用例设计方法。

    ●首先进行等价类划分,包括输入条件和输出条件的等价类划分,合理设置有效等价类和无效等价类,这是减少工作量和提高测试效率最有效的方法。

    ●必须使用边界值分析,经验表明,这种方法设计出的用例能发现很多程序错误。

    ●可以使用错误推测法追加一些测试用例,这需要依靠您的智慧和经验。

    ●对照程序逻辑检查已设计出的测试用例的逻辑覆盖度,如果没有达到覆盖标准应当再补充足够的测试用例。

    ●如果程序的功能说明中含有输入条件的组合情况,一开始就可选因果图和判定表驱动法。

    ●对于参数配置类的软件,要用正交试验法选择较少的组合方式达到最佳效果。

    ●对于业务流清晰的系统,可以利用场景法贯穿整个测试方案过程,在案例中综合使用各种测试方法。

    当测试用例设计完成后,要组织测试用例的评审,这样可以吸取别人的意见,减少遗漏,补全测试用例。

    四、测试用例编写完成后,就是测试执行

    1.测试用例执行100%覆盖。2.在测试执行过程中,要继续对测试用例补充完善,确保提高测试覆盖率。

    五、在整个测试过程中,需求都是不可能不变的,所以要及时的更新测试需求、测试用例。

    六、要将测试需求、测试用例以及发现的bug关联起来,便于管理和跟踪,同时也便于查看覆盖率。

     

     

    49.测试用例评审?

    1. 评审就是对测试用例进行检查

    2. 评审类型:同行评审、小组评审、部门评审、三方评审

    3. 评审目的:发现测试用例不足,方便测试人员改进测试用例,提高测试质量

    4. 评审过程:循环执行 “测试用例评审--》改进测试用例”

     

     

    50.做好测试(用例)计划的关键?

    1.明确测试计划

    2.明确测试内容、测试过程、测试目的

    3.测试范围与测试内容高度覆盖

    4.测试结果的直观性、准确性

    5.测试开始与结束时间

    6.测试方法与测试工具的实用性

    7.测试文档与测试软件

    8.采用评审和更新机制

    9.保证测试计划满足实际需求

     

    51.完整的测试组成?

    1.测试设计:需求分解,细化执行测试过程,为每个测试过程选择合适的测试用例

    2.测试计划:根据需求和性能指标说明,定制相应测试计划,安排测试测试人员,测试内容,测试时间以及测试需要的资源

    4.测试执行:建立自动化测试,对发现bug跟踪管理,按步骤测试(单元测试,集成测试,系统测试,验收测试)

    5.测试评估:结合量化测试覆盖域以及bug跟踪,对软件质量,开发进度,工作效率等综合评价

     

    52.所有的软件缺陷都可修复吗,都要修复吗?

    理论上软件的缺陷是可修复的,不过有的修复成本比较高,不能追求软件的完美,根据风险来确定是否修复缺陷

    1.没有足够的时间,在项目中没有足够时间修改缺陷可能会引出其他缺陷,导致项目的推迟

    2.有些缺陷只在特殊环境下出现,这种缺陷处于项目的利益考虑可以放在以后版本中进行修复升级

    3.不是缺陷的缺陷。缺陷的是否修改应该由测试人员、项目经理、程序员共同讨论决定,以确保项目的正常运行

     

     

     

     

     

     

    展开全文
  • 2019软件测试校招笔试题-软件测试基本理论

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

    千次阅读 多人点赞 2019-05-16 21:34:08
    手写这段代码,并写出测试用例 IP的格式:(1–255).(0–255).(0–255).(0–255) 判断字符串是否为空 字符串长度范围:1.0.0.0 – 255.255.255.255(7–15) 字符串第一位和最后一位必须是数字 字符串用“.”分割,...
  • 软件测试心得

    千次阅读 2019-03-06 17:05:03
    软件测试行业里工程师工作岗位的分类  有按看不看代码分的:黑盒测试工程师、白盒测试工程师 有按主要业务分的:金融测试工程师、通信测试工程师、本地化测试工程师、游戏测试工程师 有按主要任务分的:自动...
  • 软件测试自学指南---从入门到精通

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

    万次阅读 2016-04-03 23:23:25
     软件测试方法 1. 软件测试方法包括:白盒测试(White Box Testing)、黑盒测试(Black Box Testing)、灰盒测试、静态测试、动态测试。 2. 白盒测试:是一种测试用例设计方法,在这里盒子指的是被测试的...
  • 软件测试: 用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求 软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。 软件测试是为了发现错误...
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友

    万次阅读 多人点赞 2020-10-11 15:00:46
    这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经...
  • 软件测试的四个阶段

    万次阅读 2016-08-22 21:46:55
    软件测试的对象包括软件需求、概要设计、详细设计、软件运行环境、可运行程序和软件源代码等。软件测试包括质量、人员、资源、技术和流程五大要素,以及测试覆盖率和测试效率两个目标。软件测试一般分为4个阶段:...
  • Python自动化测试之Selenium

    万人学习 2019-11-29 15:18:02
    本课程详细介绍了Selenium Python版本的自动化测试方法和实践,通过本课程的学习你将掌握如下内容:Selenium 测试环境搭建单元测试、生成测试报告、定位元素、WebDriver属性和方法、WebElement属性和方法、操作form...
  • 软件测试方法和技术》电子课件下载

    万次阅读 热门讨论 2008-05-06 09:19:00
    为了配合高校的教学,现将电子课件上载到 Kerry Zhu CSDN下载频道:《软件测试方法和技术》电子课件之一《软件测试方法和技术》电子课件之二《软件测试方法和技术》电子课件之三《软件测试方法和技术》电子课件之四...
  • 软件测试用例(史上最全软件测试干货)

    万次阅读 多人点赞 2019-07-06 15:15:29
    今天来发一篇软件测试用例设计时需要关注的点,前辈总结的非常详细,基本上素有的测试点都包含在其中了,纯纯的图片。 快下载保存本图吧,遇到写测试用例的时候可以参考一下,这样子写出来的测试用例才会更全面,更...
  • 《QuickTest Professional》原书作者授课,书籍配套视频,QuickTest是测试领域的一门重要的专业技术课程,其属于测试领域中课程。课程讲授当前HP旗下主流自动化测试工具QuickTest Professional。
  • 1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 置处理器、断言、监听器以及逻辑控制器等内容全方位讲解。 2、参数化、badboy测试脚本开发以及...
1 2 3 4 5 ... 20
收藏数 1,185,824
精华内容 474,329
关键字:

软件测试