架构师备考-软件测试

定义

软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。

软件测试的目的就是确保软件的质量、确认软件以正确的方式做了用户所期望的事情,所以软件测试工作主要是发现软件的错误、有效定义和实现软件成分由底层到高层的组装过程、验证软件是否满足任务书和系统定义文档所规定的技术要求、为软件质量模型的建立提供依据。软件测试不仅是要确保软件的质量,还要给开发人员提供信息,以方便其为风险评估做相应的准备,重要的软件测试要贯穿在整个软件开发的过程中,保证整个软件开发的过程是高质量的。

测试方法

  • 从程序执行的方式来分类
    • 人工测试
    • 自动化测试
  • 以测试过程中程序执行状态为依据
    • 静态测试
    • 动态测试

静态测试

静态测试是被测程序不运行,只依靠分析或检察源程序的语句、结构、过程等来检查程序是否有错误。即通过对软件需求规格说明书、设计说明书以及源程序做结构分析和流程图分析,从而来找出错误。例如不匹配的参数、未定义的变量等。

静态测试包括:桌前检查、代码审查、代码走查

  • 桌前检查: 程序员自己检查自己编写的程序。
  • 代码审查:若干程序员和测试员组成会审小组,通过阅读,讨论和争议,对程序进行静态分析的过程。代码审查分两步:
    • 第一步,小组负责人提前把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为评审的依据。小组成员在充分阅读这些材料之后,进入审查的第二步。
    • 第二步,召开程序审查会。在会上,首先由程序员逐句讲解程序的逻辑。在此过程中,程序员或其他小组成员可以提出问题,展开讨论,审查错误是否存在。实践表明,程序员在讲解过程中能发现许多原来自己没有发现的错误,而讨论和争议则促进了问题的暴露。
    • 在会前,应当给会审小组每个成员准备一份常见错误的清单,把以往所有可能发生的常见错误罗列出来,供与会者对照检查,以提高会审的实效。这个常见错误清单也叫做检查表,它把程序中可能发生的各种错误进行分类,对每一类列举出尽可能多的典型错误,然后把它们制成表格。
  • 代码走查:
    • 第一步,把材料先发给走查小组每个成员,让他们认真研究程序,然后再开会。
    • 第二步,开会的程序与代码审查不同,不是简单地读程序和对照错误检查表进行检查,而是让与会者"充当"计算机。即首先由测试组成员为被测程序准备一批有代表性的测试用例,提交给走查小组。走查小组开会,集体扮演计算机角色,让测试用例沿程序的逻辑运行一遍,随时记录程序的踪迹,供分析和讨论用。
  • 对代码的静态测试包括控制流分析、数据流分析、接口分析和表达式分析。

|-------|---------------------------------------------------------|
| 名称 | 测试内容 |
| 控制流分析 | 使用控制流程图可检查被测程序是否存在没有使用的语句或子程序。 |
| 数据分析 | 使用控制流程图分析数据各种异常情况,包括数据初始化、赋值或引用过程中的异常。 |
| 接口分析 | 模块之间接口的一致性分析、模块与外部数据库及其他软件配置项之间的一致性分析、子程序和函数之间的接口一致性分析等 |
| 表达式分析 | 检查代码中的表达式错误,括号不配对、数组引用越界、除数为零等 |

动态测试

动态测试与静态测试相对应,是通过运行被测程序,对得到的运行结果与预期的结果进行比较分析,同时分析运行效率和健壮性能等。

这种方法可简单分为3个步骤:构造测试实例、执行程序以及分析结果。

黑盒测试

把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明设计测试实例,检查程序是否满能够按照规范说明准确无误的运行。其主要是对软件界面和软件功能进行测试。对于黑盒测试行为必须加以量化才能够有效保证软件的质量。

  • 黑盒测试主要有:等价类划分法、边界值分析、因果图、正交实验法等。
  • 等价类划分:在设计测试用例时,等价类划分是用得最多的一种黑盒测试方法。它将所有可能的输入数据,划分为等价的部分,然后每个部分中选取少数有代表性的数据作为测试用例。
    • 等价类可以分为有效等价类(合理,有意义的数据集合)无效等价类(不合理,无意义的数据集合)两种。
    • 有效等价类:符合《需求规格说明书》要求的,输入合理的数据。用来检验软件是否实现了《需求规格说明书》中规定的功能。
    • 无效等价类:不符合《需求规格说明书的要求的,输入不合理的数据。用来检验软件的容错性。
    • 而在选取测试用例时,应遵从"设计一个新的测试用例时,应尽可能多的覆盖尚未覆盖的有效等价类;但每次应仅覆盖一个尚未覆盖的无效等价类"的原则;
  • 边界值分析:它是对等价类划分的一个补充,即选取正好等于,刚刚大于,或刚刚小于边界的值作为测试数据;
  • 因果图:等价类划分,边界值分析都只考虑了输入条件,未考虑输入条件间的联系;而因果图则用来描述多种条件组合的测试用例,其最终生成的结果是判定表。它首先基于规格说明书分析原因 (等价类)和结果(输出条件);然后找出原因与结果之间的关系,画出因果图;在因果图上加上约束或限制条件;将其转化为判定表/判定树;最后为每种输出条件组合设计测试用例;
  • 正交实验法:是从大量的实验点中挑出适量的、有代表性的点,应用正交表,合理的安排实验的一种设计方法。

白盒测试

白盒测试主要是借助程序内部的逻辑和相关信息,通过检测内部动作是否按照设计规格说明书的设定进行,检查每一条通路是否正常工作。白盒测试是从程序方面出发对测试用例进行设计。主要用于检查各个逻辑结构是否合理,对应的模块独立路径是否正常以及内部结构是否有效。

  • 常用的白盒测试法有控制流分析、数据流分析、路径分析、程序变异等。
    • 控制流分析:它涉及到分析程序的执行路径。这种分析关注的是程序中语句、分支和循环的执行顺序。控制流分析的主要目的是确保所有可能的执行路径都被测试到。
    • 数据流分析:数据流分析关注的是程序中数据的使用和定义。它检查数据在程序中的流动,包括定义、使用、赋值和生命周期的正确性。
    • 路径分析:它涉及到分析程序中所有可能的执行路径。测试人员会尝试构造测试用例,使得程序中的每一条执行路径至少被执行一次。
    • 程序变异:程序变异是一种通过修改程序(变异体)来生成测试用例的技术。变异体是对原始程序进行微小修改后得到的版本,测试人员使用相同的测试用例集来运行变异体,如果测试用例能够识别出变异体与原始程序的不同,则认为测试用例是有效的。
  • 根据测试用例的覆盖程度,分为语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
    • 语句覆盖 :被测程序的每个语句至少执行一次。
    • 判定覆盖(分支覆盖):每个判定的每种可能的结果都至少执行一次。
    • 条件覆盖:判定表达式中的每个条件都取到各种可能的结果。条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖;
    • 判定/条件覆盖:同时满足判定覆盖和条件覆盖。判定表达式中每个条件的所有可能结果至少出现一次,且每个判定本身的所有可能结果也至少出现一次。
    • 条件组合覆盖:每个判定表达式中条件结果所有可能组合至少出现一次。满足条件组合覆盖的测试用列,也一定满足判定/条件覆盖
    • 路径覆盖:测试用例使得程序的每条可能执行到的路径都至少经过一次;考虑了程序中各种判定结果的可能组合;但并未考虑判定中条件结果的组合,并不能代替条件覆盖和条件组合覆盖

灰盒测试

介于白盒测试黑盒测试之间,关注输出对于输入的正确性。同时也关注内部表现;灰盒测试结合了白盒测试和黑盒测试的要素,考虑了用户端、特定的系统知识和操作环境,在系统组件的协同性环境中评价应用软件的设计;

测试阶段

测试对应关系

  • 详细设计文档对应单元测试
  • 概要设计文档对应集成测试
  • 系统需求规格说明书对应系统测试
  • 用户需求对应验收测试

单元测试

  • 也称为模块测试,其目的是检查每个模块是否正确的实现设计说明中的功能、性能、接口和其他设计约束条件,发现模块内可能存在的各种差错。
  • 驱动模块用来调用被测模块
  • 桩模块用来模拟被测模块所调用的子模块,它接收被测模块的调用
  • 顶层模块测试时不需要驱动模块,底层模块不需要庄模块

集成测试

  • 集成测试的目的是检查模块之间,以及模块和已集成的软件之间的接口关系,并验证已集成的软件是否符合设计要求。

系统测试

  • 一般情况下,系统测试采用黑盒测试,以此来检查系统是否符合软件需求。
  • 本阶段的测试内容包括功能测试、性能测试、健壮性测试、安装或反安装测试、用户界面测试、压力测试、可靠性及安全性测试等。
  • 为了保证这一阶段测试的客观性,必须由独立的测试小组来进行相关的系统测试。
  • 所以测试人员必须进行多轮回归测试。系统测试的结束标志是测试工作以满足测试目标所规定的需求覆盖率,并且测试所发现的缺陷都已全部归零。

性能测试

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

验收测试

  • 验收测试是最后一个阶段的测试,是软件产品投入正式交付前的测试工作。和系统测试相比,验收测试要满足用户需求或者与用户签订的合同的各项要求。
  • 此外,系统测试是软件开发过程中的一项工作,而验收测试是由用户对要交付软件开展的一种测试工作。
  • 验收测试的主要目的是为用户展示出所开发出来的软件符合预定的要求和有关标准,并验证软件实际工作的有效性和可靠性,确保用户能用该软件顺利完成既定的任务和功能。
    • Alpha 测试:是软件开发环境下由用户进行的测试,或者模拟实际操作环境进而进行的测试.Alpha 测试主要是对软件产品的功能、局域化、界面、可使用性及性能等方面进行评价。
    • Beta 测试:是在实际环境中由多个用户对其进行测试,并将在测试过程中发现的错误有效反馈给软件开发者。

其他测试

  • AB测试:AB 测试是为Web 或 APP 界面或流程制作两个或多个版本,在同一时间维度,分别让组成成分相同的访客群组随机的访问这些版本,收集各群组的用户体验数据和业务数据,最后分析,评估出最好版本,正式采用。
  • Web测试:Web 测试是软件测试的一部分,针对Web 应用的一类测试。由于Web 应用与用户直接相关,又通常需要承受长时间大量操作,因此Web 项目的功能和性能都必须经过可靠的验证。
  • 链接测试:链接是Web 应用系统的一个主要特征,它是在页面之间切换和指导用户去一些未知地址页面的主要手段。链接测试分为3各方面。
    • 测试所有链接是否按指示的那样确实链接到了该链接的页面
    • 测试链接的页面是否存在
    • 最后,保证Web 应用系统上没有孤立的页面
  • 表单测试:确保提交按钮正常工作,程序是否正常处理提交数据,验证服务器是否能正确保存这些数据,操作完成后返回成功信息。
相关推荐
人才程序员17 小时前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
Theodore_102219 小时前
3 需求分析
java·开发语言·算法·java-ee·软件工程·需求分析·需求
七灵微1 天前
进程与线程以及如何查看
linux·系统架构
做人求其滴1 天前
GDPU软件工程习题(挖空版)
软件工程
MrFlySand_飞沙1 天前
软件工程
软件工程
jokr_1 天前
【软件工程复习】
软件工程
云空1 天前
《软件工程文档攻略:解锁软件开发的“秘籍”》
软件工程
人才程序员1 天前
【无标题】
c语言·前端·c++·qt·软件工程·qml·界面
oioihoii1 天前
桌面图形界面生成原理:从流水灯到电脑屏幕
系统架构
Aderversa1 天前
关于数据流图绘制和使用上的一些个人经验
软件工程