• 软件测试基本概念


    本章要点

    • 什么是软件测试?
    • 软件测试和研发的区别?
    • 软件测试都有那些岗位?
    • 软件测试在不同类型公司定位?
    • 优秀的测试人员需要具备的素质?
    • 什么是需求?
    • 什么是bug?
    • 什么是测试用例?
    • 开发模型和测试模型?
    • 软件测试的生命周期?
    • 如何描述一个bug?
    • 如何定义bug级别?
    • bug的生命周期?
    • 如何开始第一次测试?
    • 测试的执行和bug管理?
    • 和开发人员产生争执怎么办?

    什么是软件测试?

    通俗讲:软件测试就是找BUG,发现缺陷!
    软件测试就是验证软件特性是否满足用户的需求!

    软件测试的特定?

    软件测试只是一个样本实验,具有不可穷举性,没有办法进行一个完整的测试

    软件测试和开发的区别?

    技能:开发要求技能集中,专业度高,测试要求的是技能广泛,专业要求不那么高 … 难易程度,薪资,发展前景
    测试要求技能广泛:接口测试,自动化测试,性能测试工具,抓包,APP测试工具,以及有一定的编程基础

    软件测试和软件开发中的调试有什么区别?

    • 目的:
      软件调试:开发人员验证软件是否实现了他想让软件实现的功能
      软件测试:测试人员验证软件是否实现了用户需求
    • 角色:
      软件调试:开发人员 软件测试:测试人员+开发人员(白盒测试代码相关)
    • 阶段:
      软件调试:开发阶段
      软件测试:贯穿整个软件开发过程中,处处有软件测试

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

    无组织,专职,兼职…
    项目性:就是一个项目分配测试人员进这个项目组直到项目结束!
    职能性:就是测试部门派遣测试人员进行项目跟进,一个测试人员可能同一时间需要跟进多个项目!

    一个优秀的测试人员应该具备的素质(你为啥要选择测试开发)

    • 综合能力
      沟通能力,学习能力(新技能业务)开发能力(测试开发),文字描述能力(文档,描述BUG)
    • 测试用例的编写能力(掌握了测试用例设计的基本方法)
    • 自动化测试能力(掌握了selenium等自动化测试工具的使用)
    • 兴趣责任感,抗压能力!
    • 探索性思维:不会被条条框框束缚,发散性思维,结合实际思考问题
      核心竞争力:开发+测试用例设计+掌握自动化测试技术

    需求是衡量软件测试的依据

    需求的概念:
    满足用户期望或者正式规定文档(合同,标准,规范)所具有的条件和职能
    包含用户需求和软件需求
    用户需求:甲方提出的需求,如果没有甲方,那么就是用户使用
    软件需求:软件需求是用户需求转换而来的,是用户需求的细化,是用户需求的具体实现细节和规范
    用户需求比较粗略,直接实现比较困难,因为没有细节,所以需要软件需求将用户需求细节实现和规范,把用户需求变成一个具体可实现的过程文档

    从软件测试人员角度看需求

    需求是测试人员开展软件测试工作的依据
    在设计测试用例的时候,首先需要搞清楚每个业务需求对应多个软件需求功能点,在分析每个软件功能需求点对应的多个测试需求点,然后针对每个测试需求点设计测试用例

    业务需求->软件功能需求点->测试需求点->测试用例
    假如要写一个用户登入
    用户登入就是一个业务需求,登入又有注册和用户登入2个软件功能需求点,然后登入功能需求点又需要测许多测试需求点,功能,性能,兼容性,安全性等待测试点,然后根据不同的测试点编写测试用例!

    为啥需求对软件测试人员如此重要?

    • 从软件需求出发,无一遗漏的识别出测试需求是至关重要的,这就直接关系到测试用例的覆盖率
    • 对于每个测试需求点,需要采用具体的设计测试用例的方法,来进行测试用例的设计

    如何才可以深入理解别测试软件的需求?

    • 测试人员需要在需求分析和设计阶段就开始介入,因为这个阶段是理解和掌握软件的原始业务需求的最好时机
    • 只有真正理解了原始业务需求之后,才有可能从业务需求的角度去设计针对性明确,从终端用户的使用场景到端对端的覆盖率较高的测试用例集!

    测试用例的概念?

    测试用例是为了实施测试而先被测试的系统提供的一组集合,这组集合包含:
    测试环境,测试步骤,测试用例,预期结果等要素!
    测试用例解决了2个问题,测什么和怎么测!
    编写测试用例可以解决测试过程中遇到以下的问题:

    • 不知道是否全面的测试了所有功能
    • 测试的覆盖率无法衡量
    • 对新版本重复的测试很难实施
    • 存在大量冗余测试影响测试效果

    软件错误bug的概念?

    • 当仅当软件需求文档规格说明存在并且正确,程序与规格说明不匹配才是bug
    • 当需求规格说明书没有提到的功能,判断标志以最终用户为准:当程序没有实现用户合理预期的功能要求时就是bug!

    软件的生命周期?

    6个阶段:需求分析,计划,设计,开发,测试,运行维护

    开发模型和测试模型?

    瀑布模型,螺旋模型,增量,迭代,敏捷

    • 瀑布模型:
      按照软件的生命周期进行串行开发
      特点:阶段性强,每个阶段比较独立;看着前面的需求分析和后期的测试
      缺点: 测试在开发后才介入,导致前期的问题后期才发现,会失去错误补救机会!
    • 螺旋模型:前期需求不是很明确,一般针对项目庞大,复杂度高,风险大,采用渐进式的开发模型,迭代开发模式!
      特点:强调每一个迭代测试质量和风险分析
      缺点:风险管控人力物理投入较多,成本比较大
    • 增量模型:
      第一周开发A,C功能模块,第二周开发B,D功能模块
    • 迭代模型:
      第一周想开发ABCD的基础功能,第二周在第一周开发的基础上增加功能
      特点:抗击风险能力强
    • 敏捷模型:
      敏捷宣言:
      个体与交互重于过程和工具
      可用的软件重于完备的文档
      客户协作重于合同谈判
      响应变化重于遵循计划
      在每对比对中,后者并非全无价值,但我们更看重前者。
      特点:轻文档,轻流程,总目标,总产出
      敏捷开发有很多种方式,其中scrum是比较流行的一种!
      scrum:
      • 角色:
        scrum由product owner(产品经理)、scrum master(项目经理)和team(研发团队)组成
        product owner:负责整理user story(用户故事),定义其商业价值,对其进行排序,制定发布计划,对产品负责。
        scrum master: 负责召开各种会议,协调项目,为研发团队服务。
        team研发团队:则由不同技能的成员组成,通过紧密协同,完成每一次迭代的目标,交付产品
      • 迭代开发:
        与瀑布不同,scrum将产品的开发分解为若干个小sprint(迭代),其周期从1周到4周不等,但不会超过4周。参与的团队成员一般是5到9人。每期迭代要完成的user story是固定的。每次迭代会产生一定的交付。
      • scrum的基本流程:
        产品负责人负责整理user story,形成左侧的product backlog。
        发布计划会议:product owner负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,sprint backlog。
        迭代计划会议:项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,每个任务都有明确的负责人,并完成工时的初估计。
        每日例会:每天scrum master召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题。
        演示会议:迭代结束之后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由po整理,形成新的story。
        回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,已达到持续改进的效果
      • 敏捷中的测试:
        挑战: 轻文档, 快速迭代
        1、测试工作的核心内客是没有变的,就是不断地找Bug,只是要调整好自己的心态,一切以敏捷的原则为主。
        2、测试人员不能依赖文档,测试用例作用减弱,更多的采用思维导图、探索性测试(强调自由度,设计和执行同时执行,根据测试结果不断调整测试计划)、自动化测试
        3、敏捷讲求合作,在敏捷项目组中,测试人员应该更主动点,多向开发人员了解需求、讨论设计、一起研究Bug出现的原因。

    V模型:
    在这里插入图片描述
    特点:
    每一个阶段的独立性很强左边开发阶段是右边测试阶段的依据
    缺点:
    瀑布模型的变种,前期的错误后期才会发现,会失去错误及时纠正的机会

    W模型:
    在这里插入图片描述
    特点:
    每一个阶段的独立性很强,测试一开始就介入,可以保证前期问题及时发现和纠正,测试和开发并行!
    缺点:
    每一个阶段都是串行的过程,一个阶段完了之后就进行下一个阶段
    不支持敏捷开发

    软件测试的生命周期(软件测试流程)?

    需求分析->测试计划->测试设计/测试开发->测试执行->测试评估

    • 需求分析:验证需求的正确性,合理性,细化需求找出测试项,写测试用例
    • 测试计划:测试人数,测试环境,测试时间,测试设备
      测试设计/测试开发:根据需求写测试用例,开发自动化脚本
      测试执行:开发已经完成,执行测试用例,验证功能,bug,提交bug,验证bug
      测试评估:写了多少测试用例执行了多少,剩余测试用例,bug数量,解决的bug数,遗留的bug及解决方案,测试的范围和测试的功能

    如何描述一个bug?

    依赖于Bug管理工具,通过文字的形式进行描述,有禅道,jira,tapd等bug管理工具

    • 测试版本号(代码版本信息):代码第几个迭代版本,方便开发人员复现
    • 测试环境:硬件信息:电脑品牌及型号web端:操作系统及版本,浏览器及版本
      app端:手机品牌及型号,系统 网络环境,WiFi还是数据4g还是5g
    • 测试数据:测试用例,更加快速的复现问题
    • 测试步骤:最快导致bug的测试步骤
    • 测试实际结果
    • 测试预期结果
    • 附件,错误日志,错误截图等

    如何定义bug级别?

    每个公司对bug级别定义不一样(以下是典型普遍情况)
    1.崩溃
    系统无法正常运行出现崩溃,操作死锁,死循环,黑屏,阻碍测试人员工作
    如果线上版本出现了这样的情况,那就回退一个版本即可进行补救
    2.严重
    系统运行,但不稳定,继续运行会造成严重损失,重要功能没有实现,或者功能和需求不符合,数据库中的用户数据存储错误,威胁到用户的安全(信息,财产)
    3.一般
    次要的功能没有实现或者有错误,系统可以稳定运行
    4,建议
    会影响用户体验,排版(仓促),颜色不符合大众审美,信息没有换行或者提前换行!

    bug的生命周期?

    bug的状态转换图
    在这里插入图片描述
    New(新建):新发现的bug,未经评审决定是否指派给开发人员修改
    Open(确认):确认是bug,并且认为需要修改,指派给相应的开发人员
    Fixed(已解决):开发人员进行修改后标识成修改状态,有待测试人员的回归测试验证
    Rejected(拒绝修改):认为不是bug,拒绝修改
    Delay(延后修改):如果认为暂时不需要修改或者暂时不能修改,则延后修改
    Closed(关闭):修改状态的bug经测试人员回归测试验证通过,则关闭bug
    Reopen(重开bug):如果验证bug依然存在,则需要重新打开bug,开发人员重新修改
    无效的bug:open->closed open->rejected->closed

    和开发人员产生争执怎么办?

    1. 检查看bug描述是否清楚
    2. 从用户的角度说服开发人员修改
    3. bug定级有理有据(根据公司规范)
    4. 不断提高自己的业务水平和技术水平(权威)
      不但能发现bug,并且能够定位,还能提出解决方案
    5. 不用争吵,找产品经理理论
      三方会议,测试人员,开发人员,产品经理讨论这个bug的最终解决方案

  • 相关阅读:
    分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测
    “KeyarchOS:国产Linux新星的崛起与创新之路“
    【Linux操作系统】——网络配置与SSH远程
    B. Remove Prefix
    DGIOT实战教程——虚拟ModbusRTU接入
    工厂模式有三个Level,你能用Go写到第几层?
    HarmonyOS 音频通话开发指导
    POI在指定excel插入行java
    WPF中行为与触发器的概念及用法
    虚幻引擎:UEC++如何对JSON文件进行读写?
  • 原文地址:https://blog.csdn.net/weixin_52345071/article/details/127281768