软件测试

名词解释

软件缺陷

  • 存在完全没有实现的功能
  • 基本实现用户需要的功能但运行出现错误
  • 实现用户不需要的功能
  • 软件难以理解,不易使用,运行速度慢

软件测试

定义:服从于用户需求的软件测试。判断软件是否存在缺陷的基本依据是软件的用户需求,软件功能特性就是为了满足用户需求,不能满足用户需求的功能是有缺陷的。测试要服从于用户需求,以用户需求为依据对产品进行检验。

测试用例

测试用例就是为特定目标而开发的一组测试输入、执行条件和预期结果,其目标可以是测试某个程序路径或核实是否满足某个特定的需求。

单元测试

软件中最小可测试单元进行检查和验证。程序的多个模块可以并行地进行单元测试。

单元:人为规定的最小的被测功能模块 要求:体现特定功能,覆盖预设好的各种逻辑,算法合理,性能良好。

静态测试

《编码规范》检查代码是否符合规范。

动态测试

《测试用例》检查实际运行结果。

集成测试

将已通过测试的单元模块组装称系统或子系统,再进行测试,重点测试不同模块的接口部分。

易用性测试

易用性测试主要评估软件的易用性,即软件是否易于使用和理解。这种测试的目的是确保软件能够满足用户的需要,用户能够轻松地完成他们的任务。

性能测试

性能测试评估软件在特定条件下的性能表现,包括响应时间、稳定性、资源消耗等。性能测试的目的是发现软件的瓶颈和问题,并优化提升软件的性能。

安全测试

安全测试检查软件的安全性,确保软件能够抵御外部和内部的威胁。安全测试的目的是发现潜在的安全漏洞,并采取措施修复它们。

兼容性测试

兼容性测试确保软件能够在不同的环境中正常运行,包括不同的操作系统、浏览器、硬件配置等。兼容性测试的目的是确保软件的广泛适用性。

验收测试

指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保证人员共同参与的测试,也是软件正式交给用户使用的最后一道工序。

Alpha测试:由用户、测试人员、开发人员共同参与的内部测试

Beta测试:内测后的公测,即完全交给最终用户测试

冒烟测试

冒烟测试是一种初步的测试,用来确认软件的基本功能是否正常。这种测试通常在软件构建后进行,以确保软件的主要功能可以运行,且没有严重的错误阻止进一步的测试。冒烟测试的目的是快速验证软件的基本工作流程,如果冒烟测试失败,则不应该进行更详细的测试。冒烟测试通常由测试人员执行,也可以自动化。

回归测试

回归测试是在软件发生更改(如添加新功能、修复错误或进行性能优化)后进行的测试,以确保这些更改没有引入新的错误,并且原有功能仍然正常工作。回归测试的目的是确保软件的稳定性,确保新的代码更改没有破坏现有的功能。

随机测试

随机测试时一种没有明确测试用例和测试计划的测试方法,测试人员基于经验和直觉随机选择输入和操作来测试软件。这种测试方法的目的时模拟真实用户可能的随机行为,以发现那些可能被正式测试用例遗漏的问题。随机测试可以揭示一些意想不到的软件缺陷,但它通常不被视为系统性的测试方法,而是作为其他测试方法的补充。

黑盒测试

黑盒测试是一种软件测试方法,其中测试人员不需要了解被测试软件的内部结构、设计和实现。测试人员只关注软件的输入和输出,检查软件是否按照需求规格书或设计文档正确地工作。黑盒测试基于软件的外部行为,测试用例是基于软件的规格说明来设计的。黑盒测试的目的是发现功能错误、界面问题、数据结构问题或数据库问题。

功能测试

功能测试是一种测试类型,它验证软件的每个功能是否按照需求规格书执行。功能测试关注软件的具体功能,确保它们能够满足用户的需求。这种测试通常是基于黑盒测试技术,测试人员不需要了解代码的内部细节。

等价类划分法

等价类划分法是把所有可能的输入数据,即程序的输入数据集合划分称若干个子集。

有效等价类

是指完全满足产品规则说明的输入数据,即有效的有意义的输入数据所构成的集合。利用有效等价类可以检验程序是否满足规则所规定的功能性要求。

无效等价类

和有效等价类相反

边界值分析法

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。 通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。

决策表法

是分析和表达多逻辑条件下执行不同操作的情况的工具。

因果图法

是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的 各种组合情况。

白盒测试

白盒测试方法是根据模块内部结构,基于程序内部逻辑结构,针对程序语句、路径、变量状态来进行测试。

静态白盒测试

静态白盒测试是一种不执行程序而进行测试的技术,其关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。侧重于纠正软件系统在描述、表示和规格上的错误,是任何进一步测试的前提。

动态白盒测试

动态白盒测试需要软件执行,当软件系统在模拟或真实环境中执行之前、之中和之后,对软件系统行为 的分析是动态测试的主要特点。它显示一个系统在检查状态下是正确还是不正确。

逻辑覆盖法

通过对程序逻辑结构的便利实对程序的覆盖,它是一系列测试过程的总称。以不同的覆盖项作为测试标准。覆盖项时指作为测试基础的一个入口或属性,比如语句、判定(分支),条件等。

语句覆盖

语句覆盖要求测试用例能够使得程序中每条语句至少执行一次。这是最基本的一种覆盖方式,目的是确保没有任何代码是“死代码”,即永远不会被执行的代码。但是,语句覆盖并不能保证所有的分支或条件都被测试到。

判定覆盖

判定覆盖要求测试用例能够使得程序中每个判定的每个分支都至少执行一次。在有些文献中,判定覆盖与分支覆盖被视为同义词。判定覆盖比语句覆盖强,因为它要求每个判定(例如if语句)的真假分支都至少执行一次。

条件覆盖

条件覆盖要求测试用例能够使得程序中每个条件的所有可能结果(true和false)至少执行一次。这里,条件指的是判定中的逻辑条件,例如在if (A && B)中,A和B都是条件。条件覆盖关注的是条件的每个部分,而不是整个判定的分支。

条件判定覆盖

条件判定覆盖是判定覆盖和条件覆盖的组合,要求测试用例能够使得程序中每个判定的每个分支都至少执行一次,同时每个条件的所有可能结果也至少执行一次。条件判定覆盖能够比单纯的判定覆盖或条件覆盖发现更多的错误。

条件组合覆盖

条件组合覆盖要求测试用例能够覆盖所有条件组合的结果。在有些情况下,一个判定可能包含多个条件(如if (A && B) 或 if (A || B)),条件组合覆盖要求覆盖这些条件所有可能的组合。例如,对于两个条件A和B,需要测试四个组合:A=true, B=true; A=true, B=false; A=false, B=true; A=false, B=false。条件组合覆盖是一种相对较强的覆盖标准,能够发现条件间交互引起的错误。

基本路径

  • 定义:基本路径也称为独立路径,是指程序中至少引入一个新处理语句或一个新条件的线性序列。换句话说,它是从程序的入口到出口的一条路径,且这条路径至少包含一条其他路径中未包含的语句或条件。
  • 目的:基本路径测试旨在通过执行程序的所有独立路径来确保最大程度的逻辑覆盖。
  • 计算方法:基本路径的数量可以通过McCabe复杂性度量来计算,该度量基于控制流图(CFG)。基本路径的数量等于图的区域数(V(G)),其中V(G)= E - N + 2,E是边数,N是节点数。

路径测试

路径测试就是从一个程序的入口开始,执行所经历的各个语句的完整过程,从广义的角度讲,任何有关路径分析的测试都可以被成为路径测试。

基本路径测试方法

在不能做到所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试方法。

性能测试

测试在一定条件下系统行为表现是否符合需求规格的性能指标。

  1. 模拟真实的生产环境,以各种不同的压力(模拟大量的用户)去测试被测系统、去“攻击”被测系统。同时记录下被测系统各台服务器的各种重要资源情况,包括CPU、内存、磁盘和网络等资源。
  2. 性能测试之前要做好系统备份。
  3. 性能测试时首先要看性能需求(需求规格中的性能指标),如果没有需求,要凭借和客户交流的信息、被测系统的相关资料、性能测试经验,去编写性能测试计划,进行性能测试。

响应时间

对请求做出响应所需要的时间。页面响应时间分为,网络传输时间,应用延迟时间(数据库延迟时间、应用服务器延迟时间)。

并发用户数

  1. 并发强调所有的用户必须在同一时刻对服务器进行施压。
  2. 强调要与服务器进行数据交互。

吞吐量

指在一次性能测试过程中,网络上传输数据量的总和。

  1. 一般来说,在系统的设计范围之内,吞吐量随系统的并发用户数的增加呈现增加的趋势。
  2. 当超出这个范围时有两种情况,一种是系统只能处理这么多,超过这个数系统不接收了,最后随着并发用户数的增多,吞吐量时一个水平的直线;还有一种情况时不管来多少系统都接收导致系统吞吐量下降甚至系统崩溃。

性能计数器

描述服务器或操作系统性能的一些数据指标,如使用内存数、进程时间等,在性能测试中发挥着“监控和分析”的作用。

资源利用率

CPU占用率、内存占用率、磁盘使用率、网络等。资源利用率表现当前服务器资源使用的情况,它是分析服务器出现瓶颈和对服务器进行调优的主要依据,在配置调优测试的过程中,通过比较配置调优前后系统资源的使用率来判断调优的效果。

思考时间

也称“休眠时间”,是指用户在进行操作时,每个请求之间的时间间隔。

点击率

每秒钟用户向服务器提交的HTTP数量。

基准测试

基准测试旨在确定系统的基准性能水平,即在特定条件下系统能够提供的最佳性能。它用于衡量 系统在正常负载情况下的性能表现,并作为后续测试的参考点。

联机测试

联机测试旨在评估系统在真实生产环境下的性能和可用性,包括与实际用户交互的各个方面。

综合场景测试

综合场景测试用于评估整个系统的功能和性能,模拟真实生产环境中的各种复杂使用场景。

负载测试

负载测试旨在评估系统在正常负载和预期负载峰值情况下的性能表现和稳定性。

压力测试

压力测试用于评估系统在超出正常负载能力的极限情况下的性能和稳定性,以确定系统的弹性和扩展性。

问答题

软件测试的目的是什么?

  1. 寻找错误,尽最大的可能找出最多的错误
  2. 设计出又针对性的测试方法
  3. 没有发现错误的测试也是有价值的

什么是软件测试的原则?

  1. 应该把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。
  2. 测试用例应由测试输入数据和与之对应的与其输出结果两部分组成。
  3. 程序员应该避免检查自己的程序。
  4. 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
  5. 充分注意测试中的群集现象。
  6. 严格执行测试计划,排除测试的随意性。
  7. 应当对每一个测试结果做全面检查。
  8. 妥善保存测试计划

什么时候进行集成测试?

理论:单测之后

实际:和单元测试同步进行,在单元测试中先测试几个函数的功能,然后再测成测试一下这几个函数的接口(参数传递)。

集成测试的方法

非增量式集成测试方法:先分别测试每个模块,再把所有模块按设计要求放在一起结合成索要的程序,也成为大棒模式。

增量式集成测试方法:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。普遍采用此方式来持续集成。分为自顶向下、自底向上和三明治(混合)策略。

易用性测试包含哪几方面?

  • 界面测试:检查软件的界面布局、颜色、字体等是否合理,是否美观。
  • 导航测试:确保用户能够轻松地在软件的不同部分间导航,找到他们需要的功能。
  • 任务流程测试:通过实际操作来测试用户完成特定任务的流程是否顺畅。
  • 可访问性测试:确保软件对残障人士也是可访问的,如色盲用户能否正常使用等。

性能测试主要包括哪几种?

  • 负载测试:模拟高负载情况下软件的性能,检查软件是否能够处理大量的用户或数据。

  • 压力测试:评估软件在极端工作负载下的稳定性和错误处理能力。

  • 并发测试:测试软件在多用户同时操作时的表现。

  • 容量测试:评估软件处理数据增长的能力,确保软件能够处理预期内的数据量。

安全测试有什么方法?

  • 漏洞扫描:使用工具自动扫描软件中可能的安全漏洞。

  • 渗透测试:模拟黑客攻击,试图侵入系统以发现安全漏洞。

  • 加密测试:确保敏感数据在存储和传输过程中得到正确的加密保护。

  • 访问控制测试:检查软件的访问控制机制是否有效,防止未授权访问。

兼容性测试方法?

  • 跨浏览器测试:确保软件在不同的浏览器上都能正常工作。
  • 跨平台测试:检查软件在不同操作系统上的兼容性。
  • 不同设备测试:确保软件在手机、平板、电脑等不同设备上都能正常使用。
  • 分辨率测试:检查软件在不同屏幕分辨率下的显示效果。

等价类划分的原则是什么?

  1. 规定输入数据的取值范围
  2. 规定输入数据的集合
  3. 规定输入数据的数值
  4. 规定输入数据的规则

使用等价类划分法的过程?

  1. 首先为等价类表中的每一个等价类分别规定一个唯一的编号
  2. 设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,知道所有的有效等价类均被测试用例所覆盖。
  3. 设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,知道所有的无效等价类均被测试用例所覆盖。

为什么使用边界值分析法?

无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。因 此,针对各种边界情况设计测试用例,通常会取得很好的测试效果。

如何确定边界值?

  1. 识别边界:首先,需要识别软件组件或系统的所有输入和输出边界。这通常涉及到阅读需求文档、设计规格或与开发人员沟通。
  2. 确定边界值:对于每个边界,确定其上界和下界。如果边界是连续的范围,还需要考虑实际的边界值和刚刚超越边界的值。
  3. 考虑边界条件:除了常规的边界值,还需要考虑边界附近的特殊条件,如空值、最大值加一(上界溢出)、最小值减一(下界溢出)等。

使用边界值分析法的过程

如果有不考虑健壮性要求,那么有效输入之外的值是不测的。如果没有讲,那么有效输入之外的值都要测。

  1. 识别测试对象:确定需要测试的软件组件或功能。
  2. 确定输入范围:对于每个输入,确定其有效范围,包括最小值、最大值和可能的无效值。
  3. 设计测试用例:基于边界值和边界条件设计测试用例。每个测试用例都应该针对一个特定的边界值或边界条件。
  4. 执行测试:运行设计的测试用例,并记录结果。
  5. 评估结果:分析测试结果,确定软件是否按预期工作,以及是否存在与边界条件相关的问题。

制定决策表的四个步骤

  1. 列出所有的条件桩和动作桩
  2. 填入条件桩
  3. 填入动作桩,指定初始判定表
  4. 简化、合并相似规则或者动作

决策表规则的简化和合并

如果两条或多条规则的动作项相同,条件项只有一项不同,则可以将该项合并,合并后的条件项用符号 “-”表示,说明执行的动作与该条件的取值无关,称为无关条件。

基本路径测试方法的四个步骤

  1. 以详细设计或源代码作为基础,导出程序的控制流图G。
  2. 计算控制流图G的圈复杂度V(G),到处程序基本路径集中的独立路径数目,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
  3. 确定程序的独立路径
  4. 生成测试用例,确保独立路径集中每条路径的执行。