实验01 黑盒测试方法(等价类划分、边界值分析)

一 实验目的:

1、理解黑盒测试的定义;

2、掌握等价类划分法;

3、掌握边界值分析法。

二 实验环境

1、Windows操作系统计算机;

三 实验准备

1、理解黑盒测试的定义;

2、等价类划分法原则;

3、边界值分析。

四 实验内容

(一)阅读以下功能设计说明,并完成以下内容。

网上蛋糕商城购物系统的用户注册功能中,要求填写用户邮箱,用户邮箱的规则为用户名+@+邮件服务器域名,用户名由字母、数字和特殊字符组成,不能含有空格且不能以句号结尾,邮件服务器域名结尾需要为.com或者.cn或者.edu,用户邮箱长度为6到30个字符。

(1)请根据以上设计说明,填写下表。

表1 等价类测试分析

编制人

审定人

时间

软件名称

网上蛋糕商城购物系统

版本

1.0

测试目的

验证用户注册时邮箱输入的正确性

用例编号

TC001

依赖关系

用例描述

输入一个符合规则的用户邮箱

输入数据

username@example.com (用户名由字母、数字和特殊字符组成,不能含有空格且不能以句号结尾,邮件服务器域名结尾需要为.com或者.cn或者.edu,用户邮箱长度为6到30个字符。)

期望输出

注册成功

实际输出

注册成功

(2)根据用户邮箱输入规则,划分等价类,并填写下表

表2 等价类划分

输入条件

有效等价类

编号

无效等价类

编号

输入条件有效等价类编号无效等价类编号
用户名字母数字组合EC01包含空格或特殊字符(除@和.外)或以句号结尾EC02
仅字母EC03超出长度限制(少于6或多于30字符)EC04
仅数字EC05包含非法字符(如@或空格)EC06
邮件服务器域名.com, .cn, .eduEC07其他顶级域名(如.net, .org)EC08
正确长度(6-30字符)EC09错误长度(少于6字符或多于30字符)EC10
邮箱格式用户名+@+域名EC11格式错误(如缺少@或.)EC12
符合所有规则的完整邮箱EC13不符合所有规则的邮箱EC1

(3)对所划分的等价类设计测试用例,并写出覆盖的等价类。

表3 覆盖等价类的测试用例

测试用例编号

输入数据

覆盖的等价类

预期结果

测试用例编号输入数据覆盖的等价类预期结果
TC01user@example.comEC01, EC07, EC09注册成功
TC02username123@edu.cnEC03, EC07, EC09注册成功
TC03123456@example.comEC05, EC07, EC09注册成功
TC04user@examEC02, EC12注册失败,提示邮箱格式错误
TC05username@exam.pleEC02, EC12注册失败,提示邮箱格式错误
TC06user name@example.comEC02, EC12注册失败,提示邮箱格式错误
TC07.username@example.comEC02, EC12注册失败,提示邮箱格式错误
TC08user@exampleEC04, EC12注册失败,提示邮箱格式错误
TC09user@.com.cnEC02, EC12注册失败,提示邮箱格式错误
TC10a@bc.deEC08注册失败,提示邮箱格式错误
TC11user@example.com.EC02, EC12注册失败,提示邮箱格式错误
TC12a@bcEC04, EC10注册失败,提示邮箱格式错误
TC13usernamewhichiswaytoolong@example.comEC04注册失败,提示邮箱格式错误
TC14a@bcdefghijklmnopqrstuvwxyz.comEC10注册失败,提示邮箱格式错误

(4)请说明本蛋糕商城系统邮箱注册用户名存在哪些缺陷?

  1. 特殊字符限制:规则中提到用户名可以由字母、数字和特殊字符组成,但未具体说明哪些特殊字符是允许的。如果特殊字符的限制不够明确或实现不当,可能会导致用户无法使用一些常见的但合法的邮箱字符,如连字符(-)、下划线(_)等。

  2. 句号结尾限制:规则禁止用户名以句号结尾,但没有提及是否允许句号出现在用户名的其他位置。如果实现时没有正确处理,可能会错误地接受或拒绝某些合法的邮箱地址。

  3. 域名限制:规则要求邮件服务器域名结尾必须是.com、.cn或.edu。这限制了用户使用其他合法的顶级域名(TLD),如.net、.org等,可能会排除一些有效的用户。

  4. 长度限制:用户邮箱长度限制在6到30个字符之间,这可能不包括某些合法但较长的邮箱地址,或者对于非常短的邮箱地址可能无法提供足够的信息来验证其有效性。

  5. 安全性问题:规则没有提及对邮箱地址的安全性检查,例如防止注入攻击或确保邮箱地址不包含潜在的恶意代码。

  6. 用户体验:如果输入验证不够灵活或用户界面反馈不明确,可能会导致用户体验不佳,用户可能不清楚为什么他们的邮箱地址被拒绝。

  7. 国际化支持:规则没有提及对非拉丁字符集的支持,如中文、日文等,这可能限制了非英语用户的注册。

  8. 错误处理:如果系统在遇到无效输入时没有提供清晰的错误消息或指导,用户可能不知道如何纠正他们的错误。

  9. 测试覆盖:如果测试用例没有覆盖所有边界条件和异常情况,可能会导致一些缺陷在生产环境中未被发现。

  10. 维护性:随着互联网的发展,新的顶级域名和邮箱规则可能会出现,当前的规则可能需要定期更新以适应这些变化。

(二)一个程序读入三个整数。把此三个数值看成是一个三角形的三个边。这个程序要打印出信息,说明这个三角形是三边不等的、是等腰的、还是等边的。要求输入三个整数a,b,c,必须满足以下条件: 1 ≤ a ≤ 50 ; 1 ≤ b ≤ 20 ; 1 ≤ c ≤ 35

(1)运用边界值分析法,根据a、b、c的范围进行边界值分析并填写表4。

表4 边界值分析

输入条件

边界点

领域

实现判断三角形类型的代码为

public class Triangle {

    public String judgeTriangle(int a,int b,int c){

        String triangle="";

        if(a+b >c && a+c>b && b+c>a){

            if(a==b&&b==c){

                triangle="等边三角形";

            }else if(a!=b && b!=c && a!=c){

                triangle="一般三角形";

            }else{

                triangle="等腰三角形";

            }

        }else{

            triangle="非三角形";

        }

        return triangle;

    }

}

输入条件边界点领域
a11 ≤ a ≤ 50
50
b11 ≤ b ≤ 20
20
c11 ≤ c ≤ 35
35
a+b36a+b > c
a+c51a+c > b
b+c56b+c > a
a, b, c1, 1, 2组合的最小边界值
50, 20, 35组合的最大边界值

边界值分析通常包括:

  • 单个输入值的最小值和最大值。
  • 两个输入值之和的最小和最大边界,以确保它们满足构成三角形的条件(任意两边之和大于第三边)。
  • 三个输入值的组合边界,包括最小可能的值和最大可能的值。

请注意,表中的“领域”列应该包含边界点所属的输入域。在这个例子中,输入域是a、b、c的取值范围。

接下来,我们可以根据边界值分析的结果设计测试用例,以确保程序能够正确地判断三角形的类型。例如:

  • 当a、b、c都取最小值时(1, 1, 2),预期结果是“非三角形”,因为1 + 1 < 2。
  • 当a、b、c都取最大值时(50, 20, 35),预期结果是“一般三角形”,因为这些值满足构成三角形的条件,并且不是等腰或等边三角形。

 

(2)运用边界值法,设计测试用例,填写下表。

表5 边界值测试用例

用例编号

输入数据

输出结果

a

b

c

用例编号输入数据输出结果abc
TC01最小值非三角形112
TC02a的边界非三角形12035
TC03b的边界非三角形50135
TC04c的边界非三角形502035
TC05边界和等腰三角形101020
TC06边界和等边三角形151515
TC07边界和一般三角形102030
TC08边界和等腰三角形5011
TC09边界和等边三角形505050
TC10边界和一般三角形12035

(3)该程序判断三角形类型的代码是否存在缺陷?如有请说明。

public class Triangle {public String judgeTriangle(int a, int b, int c) {String triangle = "";if (a + b > c && a + c > b && b + c > a) {if (a == b && b == c) {triangle = "等边三角形";} else if (a != b && b != c && a != c) {triangle = "一般三角形";} else {triangle = "等腰三角形";}} else {triangle = "非三角形";}return triangle;}
}
  1. 逻辑错误:在判断等腰三角形的逻辑中,如果a == bb == ca == c,至少有两边相等,那么它应该是等腰三角形。然而,当前的逻辑只有在全部三边相等时才返回"等边三角形",并且当所有三边都不相等时才返回"一般三角形"。这是错误的,因为当只有两边相等时,它也应该是等腰三角形。

  2. 代码优化:逻辑可以被简化。我们不需要检查所有三个不同的条件来确定是否是"一般三角形"。如果一个三角形不是等边三角形也不是非三角形,那么它必然是等腰三角形或一般三角形。我们可以通过检查是否有两边相等来确定是否是等腰三角形,否则就是一般三角形。

修正后的代码可能如下所示:

public class Triangle {public String judgeTriangle(int a, int b, int c) {if (a + b <= c || a + c <= b || b + c <= a) {return "非三角形";}if (a == b && b == c) {return "等边三角形";}if (a == b || b == c || a == c) {return "等腰三角形";}return "一般三角形";}
}
  1. 边界条件:代码没有特别处理输入值的边界条件。虽然输入条件已经给出(1 ≤ a ≤ 50; 1 ≤ b ≤ 20; 1 ≤ c ≤ 35),但在实际应用中,应该检查输入值是否满足这些条件,如果不满足,应该返回错误信息或进行适当的处理。

  2. 异常值处理:代码没有处理可能的异常输入,例如负数或非整数输入。在实际应用中,应该确保输入是正整数。

  3. 性能问题:虽然在这个特定的例子中不太可能成为问题,但在更复杂的程序中,重复的比较和条件检查可能会影响性能。优化这些检查可以提高效率。

  4. 代码风格:按照Java的编码规范,局部变量应该小写,并使用下划线分隔单词(例如triangleType而不是triangle)。

五 实验总结

(1)从软件开发的角度,谈谈在注册时候,用户邮箱填写功能设计时应考虑哪些因素?

  1. 格式验证:确保输入符合邮箱的标准格式,包括用户名和域名的正确组合,以及恰当的分隔符。

  2. 字符限制:定义用户名和域名可接受的字符类型,例如字母、数字、特定的特殊字符,以及对空格和句点的限制。

  3. 长度限制:设置合理的长度限制,保证邮箱地址既不会过短也不会过长。

  4. 域名限制:确定支持的顶级域名(如.com、.cn、.edu等),并排除不支持的域名。

  5. 用户体验:提供清晰的输入指导和即时反馈,如果用户输入不符合要求,应给出明确的错误提示。

  6. 安全性:防止SQL注入、跨站脚本(XSS)等安全漏洞,确保邮箱输入的处理是安全的。

  7. 国际化:考虑是否需要支持国际化邮箱地址,包括非拉丁字符集。

  8. 可扩展性:设计时应考虑将来可能添加的新顶级域名或其他规则变更。

  9. 性能:确保邮箱验证过程不会引入不必要的性能开销。

  10. 隐私保护:在处理邮箱地址时,应遵守数据保护法规,确保用户信息的安全和隐私。

  11. 测试覆盖:确保有充分的测试用例覆盖各种正常和异常的输入情况。

(2)使用边界值分析法该如何确定边界?

  1. 定义输入域:首先明确每个输入项的取值范围,例如用户邮箱的长度、字符类型等。

  2. 确定最小和最大值:为每个输入项找出最小值和最大值,这些通常直接对应于输入域的边界。

  3. 考虑异常值:除了最小值和最大值,还应考虑可能导致问题的其他异常值,如负数、零、空字符串等。

  4. 组合边界值:对于多个输入项的情况,需要考虑不同输入项边界值的组合,以覆盖所有可能的边界情况。

  5. 扩展边界:在确定边界值时,可以适当扩展边界,例如,如果一个输入域是1到100,可以测试0和101作为边界值,以查看系统如何处理超出预期范围的输入。

  6. 等价类划分:使用等价类划分法来组织边界值,区分有效等价类和无效等价类,以减少需要测试的用例数量。

  7. 测试设计:基于边界值分析的结果,设计测试用例,确保每个边界点和边界组合都被测试到。

  8. 迭代测试:在测试过程中,根据发现的问题调整边界值,进行迭代测试以确保覆盖所有潜在的问题。

  9. 文档记录:记录边界值分析的过程和结果,为回归测试和未来的测试工作提供参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/43674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java反射与Fastjson的危险反序列化

什么是Java反射&#xff1f; 在前文中&#xff0c;我们有一行代码 Computer macBookPro JSON.parseObject(preReceive,Computer.class); 这行代码是什么意思呢&#xff1f;看起来好像就是我们声明了一个名为 macBookPro 的 Computer 类&#xff0c;它由 fastjson 的 parseObje…

Java入门-Day7-面对对象基础-构造器

&#xff08;1&#xff09;特点 创建对象时&#xff0c;对象会去调用构造器 &#xff08;2&#xff09;应用场景 创建对象时&#xff0c;同时完成对对象的成员变量&#xff08;属性&#xff09;&#xff0c;的初始化 &#xff08;3&#xff09;注意事项 //Sutdent构造器 注…

Java 幼儿园(20240709)多来源列表映射多实现类

1、功能场景 对接多个外部厂商&#xff0c;比如多个银行的账单获取&#xff0c;需要根据银行信息执行对应的实现类。 2、功能代码 &#xff08;1&#xff09;YAML配置来源列表 bank-source: bank_001, bank_002, bank_003 &#xff08;2&#xff09;外部来源枚举 public …

《梦醒蝶飞:释放Excel函数与公式的力量》10.2 COMPLEX函数

第二节 10.2 COMPLEX函数 10.2.1函数简介 COMPLEX函数是Excel中的一个工程函数&#xff0c;用于将实部和虚部组合成一个复数。复数广泛应用于工程、电气、物理等领域&#xff0c;COMPLEX函数提供了方便的复数表示和计算方法。 10.2.2语法&#xff1a; COMPLEX(real_num, i_…

flex 填满剩余空间

常见的flex属性值&#xff1a; 1.flex:1,也就是flex-grow:1,也就是上面说的自动放大填充满剩余空间&#xff0c;若有其他子盒子设置flex&#xff0c;则平分。 2.flex:0 0 auto,等同于flex:none,子元素的长度决定它的长度&#xff0c;当整体空间不足时&#xff0c;它也不会缩小&…

swift获取app网络和本地网络权限

请求蓝牙权限&#xff1a; //蓝牙if #available(iOS 13.1, *) {let autostate CBManager.authorizationif(autostate .notDetermined){print("")self.manager CBCentralManager(delegate: nil, queue: DispatchQueue.main,options: [CBCentralManagerOptionShowPo…

【LabVIEW学习篇 - 5】:数据类型——数值、字符串

文章目录 数值枚举下拉列表控件 字符串字符串与十六进制截取字符串连接字符串 字符串与数值间的转换字符串转为数值数值转为字符串 数值 如下图所示&#xff0c;各种数值型数据的不同之处在于存储和表示数据时所使用的位置不同。 浮点型 整型 在LabVIEW中&#xff0c;想要改…

JavaScript中的LHS和RHS

LHS和RHS之前我们先来回忆一下最简单的赋值操作! var test100; console.log(test); 以上代码的意思简单我们理解为把右边的值赋值给左边的test变量,然后输出打印结果。 可是我们要是深入理解你就会发现在这个过程当中&#xff0c;还发生了一些其他的事情 而这些事情就是今天…

C语言 printf函数缓冲机制

printf不立即打印到stdout的原因 printf函数使用了缓冲机制。当我们调用printf时,输出通常不会立即显示在屏幕上,而是先存储在一个缓冲区中。这是为了提高I/O操作的效率。 缓存数据输出的原理 stdio库维护了一个缓冲区。当缓冲区满了,或者在特定条件下,缓冲区的内容会被刷新…

前端如何让网页页面完美适配不同大小和分辨率屏幕

推荐使用postcss插件&#xff0c;它会自动将项目所有的px单位统一转换为vw等单位&#xff08;包括npm安装的第三方组件&#xff09;&#xff0c;从而实现适配&#xff0c;具体配置规则可参考官网或npm网站介绍。 另外对于大屏的适配&#xff0c;需要缩放网页&#xff0c;可使用…

欧姆龙安全PLC及周边产品要点指南

电气安全、自动化设备作业安全&#xff0c;向来是非常非常之重要的&#xff01;越来越多的客户在规划新产线、改造既有产线的过程中&#xff0c;明确要求设计方和施工方将安全考虑进整体方案中进行考虑和报价&#xff01;作为一名自动化电气工程师&#xff0c;尤其是高级工程师…

养宠经验分享猫咪经常掉毛怎么办?最值得买的宠物空气净化器分享

身为资深铲屎官&#xff0c;深知若偷懒不打扫&#xff0c;家中便成猫毛纷飞、异味缭绕的战场&#xff0c;尤其换季时&#xff0c;更是雪上加霜。长期处于这样的环境&#xff0c;不仅我们头疼眼涩、咳嗽气喘&#xff0c;对老人、小孩、孕妇等敏感群体更是健康大敌。 幸运的是&a…

Vagrant配合VirtualBox搭建虚拟机

目录 前言一、软件下载及安装1.下载2.安装扩展&#xff1a; 二、创建一个虚拟机1.Vagrant官方镜像仓库 三、使用远程工具连接虚拟机1.修改相关配置文件 四、虚拟机克隆及使用1.通用配置2.简单搭建一个java环境3.克隆虚拟机1.重命名虚拟机&#xff08;可选&#xff09;2.打包指定…

靶场练习 手把手教你通关DC系列 DC1

DC1靶场通关教程 文章目录 DC1靶场通关教程前言一、信息收集1.主机存活2.端口收集3.网页信息收集4.目录收集4.1 Nikto4.2 Dirb 信息收集总结 二、漏洞发现与利用1. 发现2. 利用 三、FlagFlag1Flag2Flag3Flag4Flag5(提权) 前言 本次使用的kali机的IP地址为192.168.243.131 DC1的…

机器学习 - 比较检验

列联表 列联表&#xff08;Contingency Table&#xff09;是一种用于显示两个或多个分类变量之间关系的表格。它广泛应用于统计学中的分类数据分析&#xff0c;尤其在独立性检验和关联性分析时。列联表的每个单元格展示了相应分类变量组合的频数&#xff08;或比例&#xff09…

【2024_CUMCM】LINGO入门+动态规划

目录 什么是动态规划 怎么使用动态规划&#xff1f; 例题&#xff1a;最短路线问题 2020b-问题一 稳定性分析 灵敏度分析 什么是动态规划 基本想法&#xff1a;将原问题转换为一系列相互联系的子问题&#xff0c;然后通过逐层递推求得最后的解 基本思想&#xff1a;解决…

X12端口配置指南:ISA ID、测试指示符与997

通过知行之桥EDI系统实现X12 & 标准XML之间的格式转换时&#xff0c;需要完善交换头ISA ID及其限定符、测试标识符以及997的相关配置。 在X12文件中有两组EDI ID对&#xff0c;分别是发送方 ID 限定符 及发送方ID &#xff0c;接收方 ID 限定符及接收方ID。 比如&#xf…

STM32Cubemx配置生成 Keil AC6支持代码

文章目录 一、前言二、AC 6配置2.1 ARM ComPiler 选择AC62.2 AC6 UTF-8的编译命令会报错 三、STM32Cubemx 配置3.1 找到stm32cubemx的模板位置3.2 替换文件内核文件3.3 修改 cmsis_os.c文件3.4 修改本地 四、编译对比 一、前言 使用keil ARM compiler V5的时候&#xff0c;编译…

RK3568 buildroot 使用dropbear实现ssh远程的方法

RK3568 buildroot 使用dropbear实现ssh远程的方法 文章目录 RK3568 buildroot 使用dropbear实现ssh远程的方法前言一、创建S99dropbear.sh脚本二、创建sshd_config三、添加root账户密码到系统验证登录前言 rk3568 linux 的sdk中,buildroot已经集成了dropbear的所需的lib库环境…

交替打印-GO

1 两个channel 版本 package mainimport ("fmt""sync")var wg sync.WaitGroup var c1 chan int var c2 chan intfunc A(){defer wg.Done()for i:0;i<10;i {<-c1fmt.Println(2*i)c2<-1 //牵引协程} } func B(){defer wg.Done()for i:0…