《2022年软件测试技术与实践阅读笔记 .pdf》由会员分享,可在线阅读,更多相关《2022年软件测试技术与实践阅读笔记 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、前言软件测试的内容:需求分析、系统设计、详细设计、程序编码、内部测试、系统测试、系统安装、确认验收、系统维护整个软件生命周期软件评测思想:静态分析、质量度量与评价在内的评测结合的软件评测思想第 1 章 软件与软危机软件与硬件的不同主要从:表现形式不同、生产方式不同、精度要求不同、维护不同。软件的特性:1、软件是一个逻辑实体,具有抽象性,可以记录在纸上、内存上,必须通过观察、分析和思考才能了解它的功能、性能等特点;软件没有明显的批量生产的过程;2、软件没有磨损老化等问题,但有退化问题为了适应硬件、环境和需求的变化而进行修改,修改会不可避免的引起错误,导致软件失效率升高,从而使软件退化,修改成本难
2、以接受时会被抛弃;3、软件具有可移植性问题;软件种类:系统软件(操作系统、数据库系统、设备驱动程序)、应用软件(嵌入式软件、娱乐软件)、工具软件(文本编辑软件、文件格式化软件等)、可重用软件软件危机包含两方面问题:如何开发软件以满足对软件日益增长的需求;如何维护已有的数量不断膨胀的软件。把整个软件生命周期划分为若干阶段,使得每个阶段有明确的任务,使大规模的复杂软件开发变得容易控制和管理。每个阶段都要有定义、工作、审查、形成文档以供交流和备查。软件生命周期从对热任务的抽象逻辑分析开始,划分为若干个阶段,每个阶段的开始和结束都有严格的标准,结束前都要进行技术审查和管理复审,都要交出高质量的文档资料
3、以说明到目前为止关于工程的已知情况以及下一步工作的基础。软件生命周期的划分原则:使各阶段的任务尽可能相对独立,同一阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂程度,简化不同阶段之间的联系。软件生命周期由软件定义(问题定义、可行性分析、需求分析、成本预估、制定工程记录表)、软件开发(具体设计实现。总体设计、详细设计、编码、单元测试、综合测试)和软件维护(修改错误、使适应环境、满足用户新需求)三大部分组成。第 2 章 软件测试基础软件测试是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复查,是软件质量保证的关键步骤。软件测试的目的:检验软件系统是否满足需求,弄清预期结果与实
4、际结果之间的差距。广义上,软件测试是指软件生命周期内所有的检查、评审和确认活动;狭义上,软件测试是对软件产品质量的检验和评价。软件测试的具体目标:确保软件能完成预期功能、有具体的书面说明、满足各项要求、适应用户环境。软件测试的木桶原理产品质量的关键因素是分析、设计和实现,测试是融于其中的补充检查手段。软件测试的80-20 原则在分析、设计、实现阶段的复审和测试能避免80%的 bug,在系统测试阶段能找出其余部分的80%的 bug,剩余部分在用户的长期大范围使用后才会暴露出来。测试只能保证尽可能多地发现错误,无法保证能够发现所有错误。软件测试的 一般原则:1、基于用户需求、基于质量第一;2、项目
5、一启动,软件测试就开始(指定测试计划、尽早进行测试设计、测试模块)3、第三方测试会更有效、更客观。软件测试的 具体原则:1、可以发现软件缺陷的存在,但不能证明不存在缺陷;2、应尽早介入(在软件生命周期早期引入的错误占软件过程中出现的所有错误的58%-80%,且缺陷成放名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -大趋势);3、选择最佳的测试策略多快好省;4、测试用例设计是软件测试的关键。设计测试用例时,应包括合理输入条件和不合理输入条件,不要放弃随机测试的方法;5、系统的质量特征不仅是功能性要求,还包括其他很多方面的要求,如稳定性、可用性、兼容性等;6、妥善保存测试计
6、划、测试用例、出错统计和最终分析报告;测试工作的流程:1、需求阅读与评审。阅读需求文档,记录需求中模糊的部分、提出测试环境方案、绘制测试系统结构图、进行可测性评估。2、需求评审会议。询问记录中模糊的部分、介绍测试环境方案,评审确定最终方案、探讨不可测部分,提供解决方案。3、设计与评审用例。用例不需要非常详细,但是要全面且充分考虑异常,保证各个模块低到充分测试。4、根据最终测试方案搭建测试环境。5、软件测试。细化测试用例的每一个步骤,测试软件,对发现的问题向开发组提交问题单。汇报测试进度(发现的bug、每个 bug 的处理情况)。6、编写有关测试文档(用例设计、测试报告、问题报告等)7、提交文档
7、以供审核,通过则测试工作完成。第 3 章软件测试的分类及分级软件测试的分类。是否关心软件内部结构和具体实现白盒测试、黑盒测试、灰盒测试;软件开发过程单元测试、集成测试、系统测试、验收测试;是否执行程序静态测试、动态测试;测试时是否需要人工干预人工测试、自动化测试;测试实施组织开发方测试、用户测试、第三方测试。软件配置项测试的测试内容(软件质量模型)功能性测试、可靠性测试、性能测试、安全性测试、边界测试、安装性测试、余量测试、恢复性测试、接口测试、功能多余物测试、强度测试。功能测试具体要求:每个功能必须被一个用例或异常覆盖;用基本数据类型和数据值测量;用合理数据类型和数据值运行,测试超负荷、饱和
8、及其他“最坏情况”的结果;测试其排除不规则输入能力;测试合法边界和非法边界。性能测试要求:精确度测试;有速度要求时进行速度测试;能处理的数据量大小测试;不同速度下的协调性测试;负载能力、占用空间测试。外部接口与人机交互界面测试:测试外部接口,检测接口信息的格式及内容;以非常规操作、误操作、快速操作来检测界面的可靠性、清晰性;对用户手册逐条操作和观察。余量测试:测试程序全部存储量、输入/输出通道及处理时间的余量是否满足要求。安全性测试:包括软件安全评估、系统侵入测试两部分。安全评估包括标识与鉴别、访问控制、审计、特权管理、可信通路、隐蔽通道。入侵测试包括系统脆弱性分析、系统安全漏洞检测等。软件测
9、试分级。组件测试:考虑接口的相关参数、局部数据结构,对独立执行路径进行测试;集成测试:暴露接口以及集成组件/系统间交互时存在的缺陷,可以分为组件集成测试和系统集成测试。集成测试重点在接口,而不是模块内部,黑盒测试和白盒测试都可以应用在集成测试上;etc第 5 章 基于生命周期的软件测试方法基于生命周期的软件测试可以划分为:测试需求分析;测试计划;测试设计;测试开发;测试执行;测试评估。第 6 章 软件测试过程及测试过程管理软件测试过程模型有:v 模型、W 模型、H 模型等。第 7 章 软件静态测试静态测试方法主要包括代码审查、代码走查、桌面检查、技术评审、静态分析等;动态测试方法 主要包括:黑
10、盒测试、白盒测试、灰盒测试等。测试方法包括具体的测试目的(如预期要测试的具体功能)、应该输入的测试数据和预期结果(测试用例)。最难的部分是测试名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -用例输入数据的设计。静态测试 指不执行程序代码而寻找代码中可能存在的错误或评估程序代码的过程,主要包括 各阶段评审、代码检查、程序分析、软件质量度量等。它具有以下特点:1、不用设计测试用例、分析结果;2、可以人工进行,在发现错误的同时定位错误;3、不需要特别的条件;4、对测试人员要求较高。静态分析适用于需求实现度高但是内部结构复杂、混乱、代码不规范、软件内部有可能存在不易被察觉的错误
11、的情况。静态分析的目的是对代码标准及质量进行监控,提高代码的可靠性,使系统的设计符合模块化、结构化、面向对象的要求。各阶段评审 包括培训评审、预备评审和同行评审。其中,同行评审又分为:审查、小组评审、走查、桌面评审和临时评审。同行评审是由开发作者以外的其他人检查产品,已发现缺陷并寻找改进的机会。从审查到临时评审,正式程度下降,花费成本下降,发现缺陷越少。审查流程包括:计划、总体会议、准备、会议、返工、跟踪、因果分析。代码检查 是白盒 检查的一种静态方法,是发现软件缺陷中最有效的方法之一,如代码审查(4 人组)、桌面检查(自己检查)、代码走查(与代码审查类似,但是为非正式的)和技术评审。代码审查
12、 的内容包括:代码和设计的一致性、代码执行标准的情况、代码的逻辑表达正确性、代码结构的合理性、代码的可读性。软件复杂性分析。软件复杂性度量的结果是软件复杂度。人们根据数据流和控制流出发,结合软件规模的复杂性、结构复杂性以及两者的总体复杂性来实现对软件复杂性的度量。目前已经有的度量方法和标准主要分为两大类:面向对象的软件复杂度度量和面向过程的软件复杂度度量。著名的软件复杂度度量有Line Count 语句行度量、基于 FPA功能点分析的度量、Halstead 软件科学度量法和McCabe 结构复杂性度量。面向对象复杂性度量方法有C&K、MOOD 等。C&K度量方法 主要考虑类的继承、类的方法数、
13、类之间的耦合、类的内聚性等。MOOD 是从封装、继承、耦合、多态性提出类的多个度量指标。规模度量元Line Count复杂度 统计程序源代码行数。难度度量元Halstead 复杂度 根据程序中可执行代码行的操作符(程序调用、数学运算符、有关分隔符)和操作数(常数和变量)的数量啦计算程序的复杂性。(考虑程序数据量和程序体积,不考虑控制流)结构度量元(McCabe 复杂度)对程序拓扑结构复杂性的度量。McCabe 复杂度包括圈复杂度、基本复杂度、模块设计复杂度等。McCabe 复杂度的三中使用方式为:作为测试的辅助工具、作为程序设计和管理的指南、作为网络复杂性的的一种度量方法。McCabe圈复杂度
14、的根据是图论和程序结构控制理论。CheckStyle是非常优秀的代码规则检查工具,但不能修改代码。想要修改代码格式,可以使用 Jalopy。第 8 章 软件动态测试动态测试 指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。从是否关心软件内部结构和具体实现角度可以分为白盒测试、黑盒测试和灰盒测试。白盒测试 通常只用于单元测试,可以获得较多工具的支持,有一定的充分性度量手段。白盒测试的内容有:1、对程序模块的所有独立执行路径至少测试一次;2、对所有的逻辑判定,取真与取假的两种情况都至少测试一次;3、在
15、循环的边界和运行的边界限制内执行循环体;4、测试内部数据结构的有效性。白盒测试分为静态测试和动态测试。动态测试需要在 Host 环境或 Target 环境中实际运行软件,并使用设计的测试用例去探测软件缺陷。所采用的测试方法是逻辑覆盖(包括语句覆盖、分支覆盖、条件覆盖、分支-条件覆盖、路径覆名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -盖)。1.逻辑覆盖 是以程序内部的逻辑结构为基础的测试方法,要求对程序的逻辑结构有清楚的了解。A.语句覆盖 设计测试用例,使得每条语句至少被执行一次。优点:1、检查所有语句;2、结构简单的代码的测试效果较好;3、容易实现自动测试;4、代码
16、覆盖率高。PS.语句覆盖不能检查条件语句错误、逻辑运算符错误、循环语句错误。B.判定覆盖(分支覆盖)设计测试用例,使得每一条分支语句的真值与假值都至少执行一次。执行了分支覆盖也就执行了语句覆盖。分支覆盖具有和语句覆盖一样的缺点,同样对程序的逻辑覆盖程度不高。C.条件覆盖 使程序中每个条件获得各种可能的结果。条件覆盖的利弊:1、能够检查所有的条件错误;2、不能实现对每个分支的检查;3、测试用例数量增加。D.判定/条件覆盖 设计足够多的测试用例,使得判定中每个条件的所有可能取值至少能够执行一次,同时每个判断的所有可能的判定结果至少执行一次。利弊:1、发现错误的能力强于判定覆盖和条件覆盖;2、不能覆
17、盖全部路径;3、用例数量增加;E.条件组合覆盖每个判定中条件的各种组合至少出现一次。F.路径覆盖 使得程序中每条路径都至少执行一次。2.路径测试 根据程序的逻辑控制所产生的路径进行测试用例设计的方法。从一个程序的入口开始,执行所经历的各条语句的完整过程。理想的路径测试是做到路径覆盖。对于做不到所有路径都被覆盖的程序中,则假定:程序中每一条独立路径都被测试过了,那么认为程序中的每一条语句都被测试过了,达到了语句覆盖。(基本路径测试法)。常用的路径测试法有:A.DD 路径测试 着眼于命令式程序语言的测试覆盖率问题。覆盖率考虑的是对程序中每个分支测试的覆盖情况,因此可以对程序中串联部分进行压缩(DD
18、-路径),再设计测试用例。B.基本路径测试首先计算程序的圈复杂度,并以圈复杂度为指南定义执行路径的基本集合(从该集合中导出的测试用例,可以保证程序中的每条语句至少执行一次,且每个条件在执行时都分别取真和假两种情况)。基本步骤:1、根据设计结果画相应的流图;2、确立线性独立路径的基本集合;3、循环路径测试覆盖;3.数据流测试 关注变量赋值与使用位置,是一种结构性测试方法,可视为基于路径测试的一种改良方案。一种简单的数据流测试策略是要求覆盖每一个定义-使用路径一次。数据流测试便于实现自动化,实现自动化分析。4.信息流分析通过输入数据、输出数据、语句之间的关系来检查程序错误,分析是否存在无用语句。黑
19、盒测试 又称功能测试或数据驱动测试,不考虑程序内部结构和处理过程,仅关注确定测试用例和推断测试结果的正确性。使用黑盒测试可以导出执行程序所有功能需求的输入条件集,实现功能全覆盖(功能覆盖中最常见的是需求覆盖)。黑盒测试主要针对软件界面和软件功能进行测试(站在使用软件或程序的角度)。黑盒测试不能发现外部特性本身的设计问题以及规格说明书中的规定问题,因此,黑盒测试不能代替白盒测试,只能用来发现白盒类型以外的其他错误。由于黑盒测试不需要了解程序内部结构,因此许多高层测试(确认测试、系统测试、验收测试)都采用黑盒测试。黑盒测试关注的是信息域,主要回答以下几个方面的问题:1、如何测试功能的有效性;2、如
20、何测试系统行为和性能;3、何种类型的输入会产生好的测试用例;4、系统是否对特定的输入值特别敏感等。黑盒测试存在的问题:1、测试用例数量较大,测试用例会产生很多冗余;2、功能性测试的覆盖范围不可能达到100%。黑盒测试的主要方法有:等价类划分法、因果图法、边值分析法、猜错法、随机数法等。A.等价类划分 把程序的输入域划分成若干个部分,然后从每个部分选取少数代表性数据当做测试用例,其测试结果代表这一类的测试结果。等价类实际上就是某个输入域的一个子集合,在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。等价类按“对程序的规格说明”而言是否合理分为有效等价类和无效等价类,在设计测试用例时,要同
21、时考虑这两类的设计。B.边界值分析 一种补充等价划分法的测试用例设计方法,是选择等价类名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -边界的测试用例。(可以查出更多的错误,取得良好的测试结果。)使用边界值分析方法时,首先要确定输入等价类和输出等价类的边界,选取测试数据应刚好等于/小于/大于边界值。C.因果图 充分考虑输入条件的各种组合以及相互制约关系。基本步骤:1、分析软件规格说明中,哪些是原因,哪些是结果,并给每一个原因或者结果赋一个标识符。2、分析原因和结果、原因和原因之间的关系,画出因果图。3、根据语法和环境限制,给不可能出现的组合做标记。4、把因果图转化成判定表
22、。5、设计测试用例。D.随机测试 使用伪随机数发生器、硬件随机模拟器产生输入数据,测试员只要规定输入变量取值范围(必要时规定随机数服从预期的概率分布)。随机测试不能事先将测试数据存入文档,在拍错时无法重现测试中错误发生的过程,补救办法是将随机产生的测试数据记录备用。E.猜错法 1、列举出程序中所有可能的错误和容易发生的特殊情况,根据它们选择测试用例。第 9 章 软件单元测试单元测试包括五个方面的内容:1、模块接口测试;2、局部数据结构测试;3、独立路径测试;4、错误处理测试;5、边界条件测试;单元测试的要求:1、语句覆盖达到100%;2、分支覆盖达到100%;3、错误处理路径达到 100%;4
23、、单元的软件特性覆盖;5、各种数据特性覆盖。第 10 章 软件集成测试和确认测试集成测试的内容:1、集成后的功能性测试;2、接口测试;3、全局数据结构测试;4、资源测试;5、性能测试;6、稳定性测试。集成测试的步骤:1、体系结构分析;2、模块分析;3、接口分析;4、风险分析;5、可测试性分析;6、集成测试策略分析。传统的集成测试方法有:1、一次性组装方式;首先对每个模块进行测试,然后把通过单元测试的模块组装在一起进行测试,最后得到要求的软件系统。2、渐增式集成测试,分为 自顶向下集成测试方法(按程序和控制结构从主控模块开始,向下逐个把模块连接起来)、自底向上集成测试方法和混合渐增式集成测试方法
24、。其中自顶向下集成测试方法分为深度优先方法(先把一条主要的控制路径上的全部模块组装起来)和广度优先方法(把上一层模块直接调用的模块组装进去)。常见的混合渐进式集成测试方法有:衍变的自顶向下渐增式集成测试(1、强化对输入/输出模块和引入新算法模块进行测试,自底向上组装成功能相对完整且相对独立的子系统;2、对由主模块开始自顶向下进行渐进式集成测试)、自底向上-自顶向下的渐增式集成测试(1、对含读操作的子系统自底向上直至根节点模块进行组装和测试;2、对含写操作的子系统做自顶向下的组装和测试)、回归测试(1、采取自顶向下的方式测试被修改的模块及其子系统;2、自底向上检查该子系统及其上级模块的接口是否匹
25、配)。确认测试 是在集成性测试之后,依据确认测试准则,针对软件需求规格说明进行得到测试,以确认所开发的软件系统能否满足规定的功能和性能需求。确认测试通常采用黑盒测试,确认测试的内容主要包括安装测试、功能测试、性能测试、可靠性测试、安全性测试、效率测试、易用性测试、可移植性测试、可维护性测试、文档测试等。在确认测试中,alpha 测试在开发场所进行,有用户参与,而beta 测试是在客户场所进行的。第 12 章 面向对象软件测试名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 6 页 -面向对象分析的测试包括对认定的对象的测试、对认定的结构的测试、对认定的主题的测试、对定义的属性和实例关联的测试、对定义的服务和消息关联的测试等内容。面向对象设计的测试包括对认定的类的测试、对构造的类层次结构的测试、对类库支持的测试等内容。面向对象编程的测试主要是类测试,主要测试数据成员是否满足数据封装的要求以及类是否实现了要求的功能。名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -