【愚公系列】软考高级-架构设计师 079-测试用例的设计

举报
愚公搬代码 发表于 2024/07/29 17:29:50 2024/07/29
【摘要】 🏆 作者简介,愚公搬代码🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主...

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

测试用例的设计是软件测试过程中至关重要的一部分,其目的是为了验证软件系统的特定功能或特性是否符合预期需求。测试用例的设计需要系统地考虑各种可能的输入、操作、执行条件及预期结果,从而确保软件的质量和可靠性。以下是测试用例设计的主要步骤和方法:

🔎1.确定测试需求

  • 分析需求文档、设计文档,明确需要测试的功能、性能及其他特性。
  • 确定测试覆盖的范围和重点,明确哪些部分需要详细测试,哪些部分可以简化测试。

🔎2.确定测试目标

  • 明确测试的具体目标,比如验证某个功能是否正确实现,检测性能是否达标等。
  • 根据测试目标制定测试策略。

🔎3.选择测试方法

  • 黑盒测试方法:不考虑程序内部逻辑结构,关注输入输出。
    • 等价类划分:将输入数据划分为等价类,从每个类中选取代表性数据进行测试。
    • 边界值分析:选择输入数据的边界值进行测试。
    • 决策表:用表格形式列出各种输入情况及其对应的输出,确保覆盖所有可能的情况。
  • 白盒测试方法:关注程序内部逻辑结构,进行详细测试。
    • 语句覆盖:确保每个语句至少执行一次。
    • 分支覆盖:确保每个分支条件的真假情况至少执行一次。
    • 路径覆盖:确保程序的所有独立路径至少执行一次。

🔎4.设计测试用例

  • 输入:确定测试输入数据或操作步骤。
  • 前置条件:明确执行测试前必须满足的条件。
  • 预期结果:明确测试执行后期望的输出结果或系统状态。
  • 后置条件:测试执行后需要恢复的环境或状态。
  • 优先级:根据测试用例的重要性和影响程度进行优先级划分。

🔎5.编写测试用例

  • 编写详细的测试用例文档,包括测试用例编号、描述、步骤、预期结果等。
  • 确保测试用例清晰、简洁、可复用,并且易于理解和执行。

🔎6.评审和优化

  • 对测试用例进行评审,确保其覆盖率和有效性。
  • 根据评审结果对测试用例进行优化,修正错误,增加遗漏的测试场景。

🔎7.常见测试用例设计方法

  1. 等价类划分

    • 将所有可能的输入数据划分为若干个等价类,每个等价类中的数据被认为是等效的。
    • 从每个等价类中选取代表性数据进行测试。
  2. 边界值分析

    • 选择输入数据的边界值进行测试,因为边界值往往是系统发生错误的地方。
  3. 决策表

    • 用表格形式列出各种输入情况及其对应的输出,确保覆盖所有可能的情况。
  4. 因果图

    • 使用因果图表示输入条件与输出结果之间的逻辑关系,帮助设计有效的测试用例。
  5. 状态迁移测试

    • 针对系统状态的变化设计测试用例,确保系统在各种状态迁移下的正确性。
  6. 用例图

    • 根据用户需求和业务场景设计测试用例,确保所有用户操作路径都被覆盖。

测试用例的设计是保证软件质量的关键步骤,通过系统、全面的测试用例设计,可以有效发现软件中的潜在问题,确保软件在各种条件下都能稳定、可靠地运行。

🚀一、测试用例的设计

🔎1.黑盒测试用例

黑盒测试将程序看作一个黑盒子,只知道输入和输出,不了解内部代码的实现。通过这种方式,可以设计出以下几类测试用例:

🦋1.1 等价类划分

等价类划分是一种通过将输入值分成不同类别,从而减少测试用例数量,同时确保测试覆盖各种可能情况的方法。

  • 目的:提高测试效率,减少测试用例数量,同时确保覆盖所有可能的输入情况。
  • 举例:假设你在测试一个在线订餐系统,用户需要输入送餐地址的街道。
    • 等价类1:合法的街道名,如 “Main Street” 或 “Maple Avenue”。
    • 等价类2:数字街道名,如 “123rd Street”。
    • 等价类3:包含特殊字符的街道名,如 “Main St!” 或 “%Maple Ave”。
    • 等价类4:空白输入。

在这个例子中,你可以为每个等价类设计一个测试用例,以确保系统能够正确处理不同类型的输入情况。例如:

  • 测试一个合法的街道名来确保订单可以成功提交。
  • 测试一个数字街道名和特殊字符,以验证系统是否能够正确拒绝无效的输入。

通过代表不同等价类的测试用例,可以有效地覆盖各种可能的情况。

🦋1.2 边界值分析

边界值分析通过测试输入数据的边界值,验证系统在边界条件下的行为是否正确。

  • 目的:检测系统在输入范围的边界值和临近边界值上的表现。

  • 方法:将每类的边界值作为测试用例,边界值通常包括范围的两端值以及在此范围之外的最小值和最大值。

  • 举例:假设测试年龄范围为0-150。

    • 边界值:0, 150
    • 临近边界值:-1, 151

🦋1.3 错误推测

错误推测基于经验和直觉来推测可能产生问题的地方,并设计相应的测试用例。

  • 目的:通过经验和直觉来发现潜在错误。
  • 方法:没有固定的方法,通常由测试人员凭经验进行推测。

🦋1.4 因果图分析

因果图分析通过分析输入条件(原因)和输出结果(结果)之间的逻辑关系来设计测试用例。

  • 目的:通过因果关系来设计测试用例,确保测试覆盖各种输入条件组合和对应的输出结果。
  • 方法:分析输入条件和输出结果之间的关系,设计覆盖所有组合情况的测试用例。

通过使用等价类划分、边界值分析、错误推测和因果图分析等方法,可以有效地设计黑盒测试用例,确保系统在各种输入情况下的正确性和稳定性。这些方法不仅可以提高测试效率,还可以确保测试覆盖全面,有助于发现潜在的系统问题。

🔎2.白盒测试用例

白盒测试用例的设计基于对程序代码逻辑的了解,按照程序的代码语句设计覆盖代码分支的测试用例。覆盖级别从低到高分为以下几种:

🦋2.1 语句覆盖 (Statement Coverage, SC)

  • 定义:确保逻辑代码中的所有语句至少被执行一次。
  • 覆盖层级:最低,因为执行了所有的语句,不代表执行了所有的条件判断。
  • 目的:检测代码中每条语句是否都能执行。
  • 示例:如果有以下代码段:
    if (a > b) {
        c = a - b;
    } else {
        c = b - a;
    }
    
    为了实现语句覆盖,需要设计两个测试用例:
    • 测试用例1:a = 5, b = 3,执行 c = a - b
    • 测试用例2:a = 2, b = 4,执行 c = b - a

🦋2.2 判定覆盖 (Decision Coverage, DC)

  • 定义:确保逻辑代码中的所有判断语句的条件的真假分支都要覆盖一次。
  • 覆盖层级:中等,较语句覆盖更严格,因为不仅要执行所有语句,还要确保每个判断条件的所有可能分支都被测试到。
  • 目的:检测代码中每个条件判断的分支是否都能执行。
  • 示例:对于上述代码段,需要设计的测试用例:
    • 测试用例1:a = 5, b = 3,判断 a > b 为真,执行 c = a - b
    • 测试用例2:a = 2, b = 4,判断 a > b 为假,执行 c = b - a

在这里插入图片描述

🦋2.3 条件覆盖 (CC)

在这里插入图片描述
在这里插入图片描述

🦋2.4 路径覆盖

路径覆盖:逻辑代码中的所有可行路径都覆盖了,覆盖层级最高。
在这里插入图片描述

🚀二、练习

🔎1.题目一

题目
招聘系统要求求职的人年龄在20岁到60岁之间(含),学历为本科、硕士或者博士,专业为计算机科学与技术、通信工程或者电子工程。其中( )不是好的测试用例。

选项
A. (20, 本科,电子工程)
B. (18, 大专,电子工程)
C. (18, 本科,通信工程)
D. (25, 硕士,生物学)

解析

我们需要找出哪个选项不是好的测试用例。好的测试用例应该覆盖各种可能的情况,包括合法和非法输入,以验证系统是否正确处理这些情况。我们来看每个选项:

  1. 选项A:(20, 本科,电子工程)

    • 年龄:20(合法)
    • 学历:本科(合法)
    • 专业:电子工程(合法)
    • 这是一个合法的测试用例,用于验证系统能够正确接受符合要求的输入。
  2. 选项B:(18, 大专,电子工程)

    • 年龄:18(不合法)
    • 学历:大专(不合法)
    • 专业:电子工程(合法)
    • 这是一个非法的测试用例,用于验证系统能否正确拒绝不符合年龄和学历要求的输入。
  3. 选项C:(18, 本科,通信工程)

    • 年龄:18(不合法)
    • 学历:本科(合法)
    • 专业:通信工程(合法)
    • 这是一个非法的测试用例,用于验证系统能否正确拒绝不符合年龄要求的输入。
  4. 选项D:(25, 硕士,生物学)

    • 年龄:25(合法)
    • 学历:硕士(合法)
    • 专业:生物学(不合法)
    • 这是一个非法的测试用例,用于验证系统能否正确拒绝不符合专业要求的输入。

从以上分析可以看出:

  • 选项A是一个合法的测试用例。
  • 选项B、C和D都是非法的测试用例,但它们分别验证了不同的非法输入条件。

结论

所有选项中的测试用例都可以验证系统不同方面的输入合法性,但根据题目要求选择“不是好的测试用例”,需要分析每个选项是否有测试价值。选项B和C的年龄都是18,选项B的学历是大专,选项C的学历是本科。这两项都验证了非法年龄输入的情况,但选项B还验证了非法学历的情况,所以选项B比选项C更全面。

因此,选项C (18, 本科,通信工程) 不是好的测试用例,因为它和选项B相比,缺少了非法学历的验证,不能有效覆盖所有非法输入条件。

答案:C. (18, 本科,通信工程)

🔎2.题目二

题目
以下关于测试的叙述中,正确的是( )。

选项
A. 实际上,可以采用穷举测试来发现软件中的所有错误
B. 错误很多的程序段在修改后错误一般会非常少
C. 测试可以用来证明软件没有错误
D. 白盒测试技术中,路径覆盖法往往能比语句覆盖法发现更多的错误

解析

我们需要选择正确的描述。逐一分析每个选项:

  1. 选项A:实际上,可以采用穷举测试来发现软件中的所有错误

    • 错误:穷举测试指的是测试所有可能的输入和路径,这在实践中是不可行的,因为输入组合和路径可能非常多,穷举测试会耗费大量时间和资源。通常,测试是通过设计合理的测试用例来覆盖主要的功能和边界条件,而不是穷举所有可能的情况。
  2. 选项B:错误很多的程序段在修改后错误一般会非常少

    • 错误:错误很多的程序段在修改后不一定会错误很少,修改代码时可能会引入新的错误。这需要通过仔细的测试和代码审查来确保修复后的代码质量。因此,错误多的程序段即使经过修改,也需要进行严格的回归测试。
  3. 选项C:测试可以用来证明软件没有错误

    • 错误:测试的目的是发现软件中的错误,而不是证明软件没有错误。即使经过详细测试,仍可能存在未发现的缺陷。因此,测试不能证明软件没有错误,只能提高对软件质量的信心。
  4. 选项D:白盒测试技术中,路径覆盖法往往能比语句覆盖法发现更多的错误

    • 正确:路径覆盖法是白盒测试的一种方法,它比语句覆盖法更严格。路径覆盖要求测试每一个可能的执行路径,而语句覆盖只要求测试每一个语句。路径覆盖能发现更多的错误,因为它考虑了程序的逻辑流和条件组合,而不仅仅是单个语句的执行。

结论

只有选项D是正确的描述。

答案:D. 白盒测试技术中,路径覆盖法往往能比语句覆盖法发现更多的错误

🔎3.题目三

在这里插入图片描述


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。