爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      软件测试:等价类测试与基于判定表测试及综合题解析

      首页 知识中心 软件开发 文章详情页

      软件测试:等价类测试与基于判定表测试及综合题解析

      2024-11-08 08:55:42 阅读次数:25

      划分,条件

      1.等价类测试

      等价类测试是把所有可能的输入数据,即程序的输入域划分为若干个等价类,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。
      简单来说,使用等价类测试的目的就是为了在测试资源有限的情况下,用少量有代表性的数据得到比较好的测试效果!

      1.等价类的划分

      等价类的重要问题是它们构成集合的划分!划分是指互不相交的一组子集,这些子集的并是整个集合。
      划分可定义为:给定集合 B B B,以及 B B B的一组子集 A 1 , A 2 , ⋯   , A n A_{1},A_{2},\cdots ,A_{n} A1​,A2​,⋯,An​,这些子集是B的一个划分,当且仅当 A 1 ∪ A 2 ∪ ⋯ ∪ A n = B A_{1}\cup A_{2}\cup \cdots \cup A_{n}=B A1​∪A2​∪⋯∪An​=B,且 i ≠ j i\neq j i=j时, A i ∩ A j = ∅ A_{i}\cap A{j}=\varnothing Ai​∩Aj=∅。
      等价类划分是将输入定义域进行一个划分,并且划分的各个子集是由等价关系决定的。 测试某等价类的代表值就等于对这个类中的其他值的测试。也就是说,如果等价类中某个输入条件不能导致问题发生,那么该等价类中其他的输入条件进行测试也不能发现错误!
      等价类划分有两种不同的情况:有效等价类和无效等价类。
      有效等价类是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。
      无效等价类与有效等价类的定义恰好相反。无效等价类是指对于程序的规格来说是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个。
      **在设计测试时,要同时考虑这两种等价类。因为用户在使用软件的功能时,有意或无意输入一些非法的数据是常见的事情。**软件不仅要能经受意外的考验,这样的测试才能保证软件具有更高的可靠性!

      2.划分等价类的方法

      等价类测试的思想就是吧全部输入数据合理划分为若干个等价类,在每一个等价类中取一个具有代表性的数据作为测试的输入条件,这样就可以用少量的测试数据取得较好的测试效果!
      在等价类测试中,划分等价类非常关键。如果等价类划分合理,可以大大减少测试用例,并能保证达到要求的测试覆盖。一般按照以下的规则进行划分!
      (1)按照区间划分:在输入条件规定了取值范围的个数的情况下,则确定一个有效等价类和两个无效等价类。例如,程序的输入是学生成绩score,其范围为0~100。
      有效等价类为: 0 ⩽ s c o r e ≤ 100 0\leqslant score\leq 100 0⩽score≤100;
      无效等价类为: s c o r e < 0 , s c o r e > 100 score<0,score>100 score<0,score>100
      (2)按照数值划分:在规定了输入数据的一组值(假设有n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
      例如:程序输入x取值与一个固定的枚举类型{1,2,4,12},并且程序中对4个数值分别进行了处理,则有效等价类为x=1,x=2,x=4,x=12,无效等价类为1,2,4,12以外的值构成的集合。
      (3)按照数值集合划分:在输入条件规定了输入值的集合或者规定了“必须如何”的情况下,可确立一个有效等价类和一个无效等价类。例如,某程序中有规定标识符,其输入 条件规定“标识符必须以字母开头……”。
      则可以这样划分等价类:“以字母开头者”作为一个有效等价类,“以非字母开头者”作为无效等价类。

      3.用等价类设计测试用例

      1.划分等价类

      首先根据输入条件或输出条件划分等价类。

      2.建立等价类表
      输入 有效等价类 无效等价类
           
      3.选择测试用例

      从等价类中选取具有代表性的数据设计测试用例。从等价类中选择测试用例时,一般遵循以下原则。
      (1)为每一个等价类规定一个唯一的编号。
      (2)设计一个测试用例,使尽可能多地覆盖尚未被覆盖的有效等价类。重复这一步,直到所有的有效等价类都被覆盖!
      (3)设计一个测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

      2.基于判定表测试

      在一些数据处理问题中,某些操作是否实施依赖于多个逻辑条件的取值。在这些逻辑条件取值的组合所构成的多种情况下,分别执行不同的操作。处理这类问题的一个非常有力的分析和表达工具是判定表,或称为决策表。判定表能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。

      1.判定表的组成

      判定表通常有四个部分组成,如下表所示:

      桩 规则
      条件桩 条件项
      动作桩 动作项

      (1)条件桩:列出了问题的所有条件。
      (2)动作桩:列出了问题规定可能采取的操作。
      (3)条件项:列出针对它所列条件的取值。
      (4)动作项:列出了条件项的各种情况下应该采取的动作。
      动作项和条件项紧密相关,它指出了在条件项的各组取值情况下应采取的动作。任何一个条件组合的特定取值及其相应要执行的操作称为规则。
      显然,判定表中列出多少条件组合取值,也就有多少条规则。
      在判定表中国贯穿条件项和动作项的一列就是一条规则。

      桩 规则1 规则2 规则3 规则4
      条件1 T T F F
      条件2 T F T F
      动作1 √   √  
      动作2   √   √

      2.考生录取的案例

      某程序规定:对总成绩大于450分,且各科成绩均高于85分或者是优秀毕业生,应优先录取,其余情况作其他处理。请建立判定表。
      解题:
      1)列出所有的条件桩和动作桩
      条件桩:
      (1)总成绩大于450分吗?
      (2)各科成绩均高于85分吗?
      (3)是优秀毕业生吗?
      动作桩:
      (1)优先录取
      (2)作其他处理
      2)确定规则的个数
      本例中输入有三个条件,每个条件的取值为“是”或“否,因此有 2 3 = 8 2^{3}=8 23=8中规则”。
      3)填入条件项
      在填写条件项时,可以将各个条件取值的集合进行笛卡尔积,得到每一列条件项的取值。本例就是计算{Y,N}{Y,N}{Y,N}的笛卡尔积,然后将所得集合中的每一个元素的值填入每一列条件项中,如下表所示:
      4)填入动作桩和动作项
      根据每一列中各条件的取值得到所要采取的行动,填入动作桩和动作项,便得到初始判定表。如下所示:
      软件测试:等价类测试与基于判定表测试及综合题解析
      5)化简
      如果某个条件项的取值变化对动作桩的取值没有影响,则可以考虑合并规则,具体简化后的判定表如下所示:
      软件测试:等价类测试与基于判定表测试及综合题解析

      3.综合题解析

      用决策表测试法测试以下程序:该程序有三个输入变量month、day、year(month 、 day和year均为整数值,并且满足:1≤month≤12和1≤day≤31),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔一天的日期(next day)。例如,输入为 2004 年11月29日,则该程序的输出为2004年12月1日。
      (1) 分析各种输入情况,列出为输入变量 month 、 day 、 year 划分的有效等价类。
      (2) 分析程序的规格说明,并结合以上等价类划分的情况,给出问题规定的可能采取的操作(即列出所有的动作桩)。
      (3) 根据 (1) 和 (2) ,画出简化后的决策表。
      (4) 开发一个能够生成合法年月日的测试用例自动生成的小工具。
      解题步骤如下所示:

      (1).分析各种输入情况,可以分别对变量year,day以及month进行等价类的划分,具体如下所示:
      month变量的有效等价类:
      M1={month=4,6,9,11}
      M2={month=1,3,5,7,8,10}
      M3={month=12}
      M4={month=2}

      day变量的有效等价类
      D1={1≤day≤26}
      D2={day=27}
      D3={day=28}
      D4={day=29}
      D5={day=30}
      D6={day=31}

      year的有效等价类
      Y1={year是闰年}
      Y2={year是平年}

      (2)分析程序规格说明,结合以上等价类划分的情况给出的问题规定的可能采取的操作(即列出所有的动作桩)。考虑各种有效的输入情况,程序中可能采取的操作有以下六种
      a1:day+2;
      a2:day=1
      a3:day=2
      a4:month+1
      a5:month=1
      a6:year=1
      a7:不可能

      (3)简化后的决策表如下表所示
      如果不简化可能会有246=48种,数据量太大,因此这里仅仅给出简化后的决策表,具体如下所示:
      软件测试:等价类测试与基于判定表测试及综合题解析软件测试:等价类测试与基于判定表测试及综合题解析
      (4)使用Java语言开发的小工具如下所示,这里该工具首先是随机生成一个合法的日期,然后计算该日期隔一天后的日期,具体代码如下所示:

      import java.util.ArrayList;
      import java.util.Collections;
      import java.util.List;
      import java.util.Random;
      
      public class MyDate {
          private int year;
          private int month;
          private int day;
          //随机生成合法日期
          public static MyDate randomDate(){
              MyDate date=new MyDate();
              Random random=new Random();
              //随机生成符合规范的年,并判断是否为闰年
              int year = random.nextInt(51) + 2000;//随机生成2000-2050之间的年份
              int month = random.nextInt(12) + 1;//随机生成1-12的月份
              //定义两个集合
              List<Integer> list1=new ArrayList<>();
              Collections.addAll(list1,1,3,5,7,8,10,12);//list1中的集合元素有31天
              List<Integer> list2=new ArrayList<>();
              Collections.addAll(list2,4,6,9,11);//list2中的集合元素有30天
              int day;
              if(list1.contains(month)){
                  //表示该月有31天
                  day=random.nextInt(31)+1;
              }else if(list2.contains(month)){
                  //表示该月有30天
                  day=random.nextInt(30)+1;
              }else{
                  //表示该月为2月
                  if(isLeafYear(year)){
                      //如果当年为闰年
                      day=random.nextInt(29)+1;
                  }else{
                      day=random.nextInt(28)+1;
                  }
              }
              date.year=year;
              date.month=month;
              date.day=day;
              return date;
          }
      
          //计算隔一天后的日期
         public static MyDate computerDate(MyDate date){
              MyDate tomorrow =new MyDate();
              tomorrow.year=date.year;
              tomorrow.month=date.month;
              tomorrow.day=date.day;
              int lastday=28;
              if((date.month%2==1 && date.month<8) ||date.month%2==0 && date.month>=8){//该月有31天
                  lastday=31;
              }else if (date.month==4 || date.month==6 ||date.month==9||date.month==11){//该月有30天
                  lastday=30;
              }else{//2月
                  if(isLeafYear(date.year)){//为闰年
                      lastday=29;
                  }else{
                      lastday=28;
                  }
              }
              if(date.day==lastday){//如果是日期的最后一天
                  tomorrow.day=2;
                  if(date.month==12){
                      tomorrow.month=1;
                      tomorrow.year++;
                  }else{
                      tomorrow.month++;
                  }
              }else if(date.day==lastday-1){//如果是日期的倒数第二天
                  tomorrow.day=1;
                  if(date.month==12){
                      tomorrow.month=1;
                      tomorrow.year++;
                  }else{
                      tomorrow.month++;
                  }
              }else {
                  tomorrow.day= tomorrow.day+2;
              }
              return tomorrow;
          }
      
          //判断是否为闰年
          public static boolean isLeafYear(int year){
              if(year%4==0 && year%100!=0)
                  return true;
              else if(year%100==0 && year%400==0)
                  return true;
              else {
                  return false;
              }
          }
      
          public static void main(String[] args) {
                  //随机生成的测试用例如下
                  MyDate date = randomDate();
                  System.out.println("随机生成的合法日期为:");
                  System.out.println(date.year+"年"+date.month+"月"+ date.day+"日");
                  MyDate tomorrow = computerDate(date);
                  System.out.println("隔一天后的日期为:");
                  System.out.println(tomorrow.year+"年"+tomorrow.month+"月"+tomorrow.day+"日");
          }
      }
      
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://lglxv587.blog.csdn.net/article/details/124708589,作者:散一世繁华,颠半世琉璃,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Python爬虫简单入门

      下一篇:如何在Java中实现多语言国际化支持

      相关文章

      2025-05-14 10:03:13

      【Mybatis】-动态SQL

      【Mybatis】-动态SQL

      2025-05-14 10:03:13
      include , set , sql , SQL , 条件 , 标签
      2025-05-06 08:30:38

      【30天玩转python】条件语句与循环

      条件语句用于根据不同条件执行不同的代码块。在 Python 中,条件语句使用 if、elif 和 else 关键字。

      2025-05-06 08:30:38
      代码 , 循环 , 执行 , 条件 , 语句
      2025-04-23 08:18:38

      SQL—DQL(数据查询语言)之小结

      SQL—DQL(数据查询语言)之小结

      2025-04-23 08:18:38
      分组 , 列表 , 字段 , 排序 , 条件 , 查询
      2025-04-18 08:02:09

      CUDA从入门到精通(四)——数据划分方法介绍

      在并行计算或数据并行编程中,数据划分是将大量数据分配给多个计算单元(如 GPU 线程或 CPU 核心)进行并行处理的重要技术。块划分(Block Partitioning)和周期划分(Cyclic Partitioning)是两种常见的划分方式,它们的区别主要体现在 数据分配的模式 上。

      2025-04-18 08:02:09
      分配 , 划分 , 数据 , 矩阵 , 线程 , 负载
      2025-04-16 09:26:45

      Flask ORM 学习笔记Part11:数据查询(四)

      Flask ORM 学习笔记Part11:数据查询(四)

      2025-04-16 09:26:45
      filter , 使用 , 条件 , 查询 , 过滤 , 链式
      2025-04-11 07:12:29

      JavaScrip条件语句

      条件语句就是通过条件来控制程序的走向

      2025-04-11 07:12:29
      amp , false , true , 代码 , 条件 , 语句 , 运算符
      2025-03-21 08:23:07

      python中选择结构

      选择结构主要通过if、elif(else if的缩写)和else语句来实现。这些语句允许程序根据条件执行不同的代码块。另外还有表达式中多个条件连接等。

      2025-03-21 08:23:07
      elif , 代码 , 执行 , 条件 , 模式匹配 , 表达式 , 语句
      2025-03-11 09:34:32

      【python基础(四)】if语句详解:条件测试与分支结构

      【python基础(四)】if语句详解:条件测试与分支结构

      2025-03-11 09:34:32
      elif , 列表 , 条件 , 测试 , 语句
      2025-03-10 09:52:47

      【算法】二分算法——寻找旋转排序数组中的最小值

      【算法】二分算法——寻找旋转排序数组中的最小值

      2025-03-10 09:52:47
      二分 , 代码 , 划分 , 数组 , 特殊 , 题目
      2025-02-27 09:33:20

      【C++二分查找】825. 适龄的朋友|1697

      【C++二分查找】825. 适龄的朋友|1697

      2025-02-27 09:33:20
      发送 , 条件 , 示例 , 算法 , 请求
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5245982

      查看更多

      最新文章

      【30天玩转python】条件语句与循环

      2025-05-06 08:30:38

      SQL—DQL(数据查询语言)之小结

      2025-04-23 08:18:38

      CUDA从入门到精通(四)——数据划分方法介绍

      2025-04-18 08:02:09

      JavaScrip条件语句

      2025-04-11 07:12:29

      python中选择结构

      2025-03-21 08:23:07

      【python基础(四)】if语句详解:条件测试与分支结构

      2025-03-11 09:34:32

      查看更多

      热门文章

      Java 循环语句

      2024-11-12 06:36:50

      【C语言】循环结构

      2024-12-05 08:49:34

      Python 分支语句详解:if-elif-else 与条件判断

      2024-12-13 06:50:17

      javaScript(三):javaScript流程控制

      2024-12-05 08:49:34

      【第三章:流程控制语句】3.3 条件表达式

      2024-12-17 08:28:23

      shell编程-四种if条件语句

      2025-01-06 08:42:37

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      Java 循环语句

      【C++二分查找】825. 适龄的朋友|1697

      shell编程-四种if条件语句

      JavaScrip条件语句

      【python基础(四)】if语句详解:条件测试与分支结构

      SQL—DQL(数据查询语言)之小结

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号