软件测试基础-概念篇1-1–笔记
1-1软件测试概要
什么是软件测试? 早期定义:软件测试是对程序能够按预期运行建立起一种信心 - Bill Hetzel,1973 经典定义:测试是为发现错误而执行程序的过程 - Myers,1979 IEEE定义(ISO/IEC/IEEE 29119):使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。 软件测试定义:使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异 软件测试五大要素:质量(核心)、人员、资源、流程、技术 软件测试两个目标:测试覆盖率、测试效率 软件测试所遵循的原则: 1、测试显示缺陷的存在,但不能证明系统不存在缺陷 2、穷尽测试是不可能的,应设定及时终止的条件 3、测试应该尽早进行 4、缺陷具备群集特性 5、测试的杀虫剂悖论 6、测试的二八原则 7、测试活动依赖于测试背景2-1软件测试阶段
一:软件测试的分类 按测试阶段来分类 单元测试、集成测试、系统测试、验收测试 二:单元测试 什么是单元测试? 对软件中的最小可测试单元进行检查和验证 F:C语言可以是函数,Java可以每一个类可以看做是一个单元,针对一些有界面的功能软件,单元可以看作具体的某一项功能 单元测试的原则: 1、尽可能保证各个测试用例是相互独立的; 2、一般由代码的开发人员来实施,用来检验所开发的代码功能能符合自己的设计要求。 单元测试的限制: 1、不可能覆盖所有的执行路径,所以不可能保证捕捉到所有路径的错误; 2、每一行代码,一般需要3到5行测试代码才能完成单元测试。所以存在投入和产出的一个平衡。 集成测试: 是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。 集成测试的主要实施方案:1、Big Bang;2、自顶向下;3、自底向上;4、核心系统集成;5、高频集成。 集成测试与单元测试:1、测试的对象不同;2、测试的依据不同;3、测试的方法不同。 系统测试:是将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行的一系列严格有效地测试,以发现软件潜在的问题,保证系统的正常运行。 系统测试的关注点:1、关注系统本身的使用;2、关注系统与其他相关系统间的连通;3、关注系统在不同使用压力下的表现;4、关注系统在真实使用环境下的表现。 系统测试与集成测试: 1、测试对象:集成测试:由通过了单元测试的各个模块所集成起来的构件。系统测试:除了软件之外,还包括计算机硬件及相关的外围设备、数据采集和传输机构、支持软件、系统操作人员等整个系统。 2、测试时间:集成测试介于单元测试和系统测试之间的测试;系统测试在集成测试之后。 3、测试内容:集成测试:各个单元模块之间的接口;系统测试:整个系统的功能和性能。 4、测试角度:集成测试:偏于技术角度的验证;系统测试:偏于业务角度的验证。 验收测试:也称交付测试。针对用户需求、业务流程的正式的测试,确定系统是否满足验收标准,由用户、客户或其他授权机构决定是否接受系统。(细分:用户验收测试、运行验收测试、合同和规范验收测试、alpha测试、Beta测试)2-2软件测试手段
按软件测试手段分为:黑盒测试、白盒测试、静态测试、动态测试手工测试、自动化测试。 黑盒测试:无需关注内部结构、但代码覆盖率比较低(40%左右),自动化的黑盒测试复用率较低,维护成本也比较高,黑盒测试主要测试是否有不正确或者遗漏的功能,在接口上,输入是否能被正确的接受,能否输出正确地结果,是否有数据结构或者数据文件的访问错误,性能上是否能满足要求。 黑盒测试的主要设计方法有等价类划分法、边界值分析法、错误推测法、因果图法、正交试验分析法、状态图迁移法、流程分析法。 白盒测试:内部逻辑代码对开发人员是透明的,也叫透明测试,主要看逻辑覆盖率,语句覆盖、条件覆盖、条件组合覆盖、分支覆盖、判定覆盖、条件判定组合覆盖、路径覆盖。白盒测试会迫使测试人员去思考软件的实现原理,可以检测代码中的每条分支和路径、可以揭示隐藏在代码中的错误、对代码的测试比较彻底,比较昂贵。白盒测试的主要测试方法有代码检测法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法。 静态测试:无需执行被测程序,看文档或代码。互审-》走查-》会议 动态测试:运行被测程序,检查结果与预期结果的差异。 手工测试:深度测试和强调主观判断的测试。众包测试、探索式测试等。 自动化测试: 使用单独的测试工具控制测试的自动化执行以及对预期和结果进行自动检查。单元测试、接口测试、性能测试。工具:Xunit 软件测试的职业发展方向: 技术方向:黑盒测试、白盒测试、自动化测试、性能测试、安全测试、测试架构。 管理方向:测试组长、测试经理、测试总监、项目经理。 软件测试的一个学习路线: 系统知识储备:linux(必会)、互联网网络基础、数据库、编程基础。 功能测试核心:测试模型、测试流程、用例设计、缺陷管理。 自动化测试:web前端开发基础、浏览器调试工具的使用、接口测试工具的使用、web自动化测试selenium、自动化测试框架的使用和搭建、自动化测试平台。 性能测试:性能需求分析、性能测试工具的使用、性能的监控分析和调优。 安全测试:抓包工具的使用、安全漏洞原理、安全漏洞测试方法、漏洞的防范。 测试进阶学习:shell脚本、测试工具的研发、敏捷测试&TestOps、Mock、Docker。 软件测试按照测试的阶段来分: 单元测试:一般由开发人员对最小模块逐一测试 集成测试:各个单元模块之间的接口 系统测试:整个系统的功能和性能 验收测试:alpha测试、beta测试2-3软件测试模式
按测试模式来分类 瀑布模式、敏捷测试、基于脚本测试、基于风险测试、探索式测试等 传统的瀑布模型(传统软件工程学的开发模式) 项目计划-->需求分析-->软件设计-->程序开发-->软件测试-->集成维护 项目计划:制定项目总体的研发计划,确定项目主要的里程碑节点;需要输出项目计划书。 需要分析:明确用户的需求定义,并对定义进行清晰的描述,是充分理解客户需求,详细描述产品功能的一个重要阶段;需要输出产品的需求规格书。 软件设计:根据产品的定义,确定产品的实现方案;包括定义软件与硬件的结构,组件模块的实现方法,接口、界面、数据如何组织,需要输出概要设计、详细设计在内的多份说明书。 程序开发:由开发团队根据需求和设计具体实现产品的功能,根据编程规范编写各类组件和模块,最后输出产品版本。 软件测试:通过独立的测试小组(QA团队)来评估产品是否满足需求的定义,需要输出测试结果、测试报告。 集成维护:产品经过测试后交付给用户,根据用户的使用情况,对产品进行维护,及必要的修改、升级的操作。 瀑布模式的优缺点 优点 1、强调需求、设计的作用 2、前一阶段完成后,只需要关注后续阶段 3、为项目提供了按阶段划分的检查点,里程碑清晰 4、文档规范 缺点 1、难以适应需求的频繁变化 2、项目周期后段才能看到成果 3、强制的里程碑、完成时间点 4、文档工作量大优点 描述了测试与软件开发过程的对应关系。 强调了软件开发的协作与速度,反应测试活动和分析设计的关系,并且将软件实现和验证有机的结合起来,明确界定测试过程存在不同阶段的,明确了不同测试阶段和研发过程每个阶段的对应关系。 缺点 把测试当做软件编码后的阶段,忽视了测试对需求的分析和验证,对需求与概要的验证要到后期才能进行,不符合软件测试需要尽早进行的感念。 软件开发过程中,各个阶段测试都参与,测试伴随软件开发的整个开发周期 优点:能尽早的发现软件的缺陷;有利于尽早的发现软件的风险,及早的制定相应的应对方案,加快项目的进度 缺点:需求设计编码还是串行的关系,测试开发保持着一种线性的关系,在上一个阶段完成后才能进行以一个阶段,不能很好的支持迭代场景
。
解决交接与频繁集成周期的问题。 分片段进行测试。 把软件测试当做一个独立的流程,贯穿在整个软件测试周期当中,与其他流程并发进行。