一 实验目的:
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, .edu | EC07 | 其他顶级域名(如.net, .org) | EC08 |
正确长度(6-30字符) | EC09 | 错误长度(少于6字符或多于30字符) | EC10 | |
邮箱格式 | 用户名+@+域名 | EC11 | 格式错误(如缺少@或.) | EC12 |
符合所有规则的完整邮箱 | EC13 | 不符合所有规则的邮箱 | EC1 |
(3)对所划分的等价类设计测试用例,并写出覆盖的等价类。
表3 覆盖等价类的测试用例
测试用例编号 | 输入数据 | 覆盖的等价类 | 预期结果 |
测试用例编号 | 输入数据 | 覆盖的等价类 | 预期结果 |
---|---|---|---|
TC01 | user@example.com | EC01, EC07, EC09 | 注册成功 |
TC02 | username123@edu.cn | EC03, EC07, EC09 | 注册成功 |
TC03 | 123456@example.com | EC05, EC07, EC09 | 注册成功 |
TC04 | user@exam | EC02, EC12 | 注册失败,提示邮箱格式错误 |
TC05 | username@exam.ple | EC02, EC12 | 注册失败,提示邮箱格式错误 |
TC06 | user name@example.com | EC02, EC12 | 注册失败,提示邮箱格式错误 |
TC07 | .username@example.com | EC02, EC12 | 注册失败,提示邮箱格式错误 |
TC08 | user@example | EC04, EC12 | 注册失败,提示邮箱格式错误 |
TC09 | user@.com.cn | EC02, EC12 | 注册失败,提示邮箱格式错误 |
TC10 | a@bc.de | EC08 | 注册失败,提示邮箱格式错误 |
TC11 | user@example.com. | EC02, EC12 | 注册失败,提示邮箱格式错误 |
TC12 | a@bc | EC04, EC10 | 注册失败,提示邮箱格式错误 |
TC13 | usernamewhichiswaytoolong@example.com | EC04 | 注册失败,提示邮箱格式错误 |
TC14 | a@bcdefghijklmnopqrstuvwxyz.com | EC10 | 注册失败,提示邮箱格式错误 |
(4)请说明本蛋糕商城系统邮箱注册用户名存在哪些缺陷?
-
特殊字符限制:规则中提到用户名可以由字母、数字和特殊字符组成,但未具体说明哪些特殊字符是允许的。如果特殊字符的限制不够明确或实现不当,可能会导致用户无法使用一些常见的但合法的邮箱字符,如连字符(-)、下划线(_)等。
-
句号结尾限制:规则禁止用户名以句号结尾,但没有提及是否允许句号出现在用户名的其他位置。如果实现时没有正确处理,可能会错误地接受或拒绝某些合法的邮箱地址。
-
域名限制:规则要求邮件服务器域名结尾必须是.com、.cn或.edu。这限制了用户使用其他合法的顶级域名(TLD),如.net、.org等,可能会排除一些有效的用户。
-
长度限制:用户邮箱长度限制在6到30个字符之间,这可能不包括某些合法但较长的邮箱地址,或者对于非常短的邮箱地址可能无法提供足够的信息来验证其有效性。
-
安全性问题:规则没有提及对邮箱地址的安全性检查,例如防止注入攻击或确保邮箱地址不包含潜在的恶意代码。
-
用户体验:如果输入验证不够灵活或用户界面反馈不明确,可能会导致用户体验不佳,用户可能不清楚为什么他们的邮箱地址被拒绝。
-
国际化支持:规则没有提及对非拉丁字符集的支持,如中文、日文等,这可能限制了非英语用户的注册。
-
错误处理:如果系统在遇到无效输入时没有提供清晰的错误消息或指导,用户可能不知道如何纠正他们的错误。
-
测试覆盖:如果测试用例没有覆盖所有边界条件和异常情况,可能会导致一些缺陷在生产环境中未被发现。
-
维护性:随着互联网的发展,新的顶级域名和邮箱规则可能会出现,当前的规则可能需要定期更新以适应这些变化。
(二)一个程序读入三个整数。把此三个数值看成是一个三角形的三个边。这个程序要打印出信息,说明这个三角形是三边不等的、是等腰的、还是等边的。要求输入三个整数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;
}
}
输入条件 | 边界点 | 领域 |
---|---|---|
a | 1 | 1 ≤ a ≤ 50 |
50 | ||
b | 1 | 1 ≤ b ≤ 20 |
20 | ||
c | 1 | 1 ≤ c ≤ 35 |
35 | ||
a+b | 36 | a+b > c |
a+c | 51 | a+c > b |
b+c | 56 | b+c > a |
a, b, c | 1, 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 | ||
用例编号 | 输入数据 | 输出结果 | a | b | c |
---|---|---|---|---|---|
TC01 | 最小值 | 非三角形 | 1 | 1 | 2 |
TC02 | a的边界 | 非三角形 | 1 | 20 | 35 |
TC03 | b的边界 | 非三角形 | 50 | 1 | 35 |
TC04 | c的边界 | 非三角形 | 50 | 20 | 35 |
TC05 | 边界和 | 等腰三角形 | 10 | 10 | 20 |
TC06 | 边界和 | 等边三角形 | 15 | 15 | 15 |
TC07 | 边界和 | 一般三角形 | 10 | 20 | 30 |
TC08 | 边界和 | 等腰三角形 | 50 | 1 | 1 |
TC09 | 边界和 | 等边三角形 | 50 | 50 | 50 |
TC10 | 边界和 | 一般三角形 | 1 | 20 | 35 |
(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;} }
逻辑错误:在判断等腰三角形的逻辑中,如果
a == b
或b == c
或a == c
,至少有两边相等,那么它应该是等腰三角形。然而,当前的逻辑只有在全部三边相等时才返回"等边三角形",并且当所有三边都不相等时才返回"一般三角形"。这是错误的,因为当只有两边相等时,它也应该是等腰三角形。代码优化:逻辑可以被简化。我们不需要检查所有三个不同的条件来确定是否是"一般三角形"。如果一个三角形不是等边三角形也不是非三角形,那么它必然是等腰三角形或一般三角形。我们可以通过检查是否有两边相等来确定是否是等腰三角形,否则就是一般三角形。
修正后的代码可能如下所示:
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 ≤ a ≤ 50; 1 ≤ b ≤ 20; 1 ≤ c ≤ 35),但在实际应用中,应该检查输入值是否满足这些条件,如果不满足,应该返回错误信息或进行适当的处理。
异常值处理:代码没有处理可能的异常输入,例如负数或非整数输入。在实际应用中,应该确保输入是正整数。
性能问题:虽然在这个特定的例子中不太可能成为问题,但在更复杂的程序中,重复的比较和条件检查可能会影响性能。优化这些检查可以提高效率。
代码风格:按照Java的编码规范,局部变量应该小写,并使用下划线分隔单词(例如
triangleType
而不是triangle
)。
五 实验总结
(1)从软件开发的角度,谈谈在注册时候,用户邮箱填写功能设计时应考虑哪些因素?
-
格式验证:确保输入符合邮箱的标准格式,包括用户名和域名的正确组合,以及恰当的分隔符。
-
字符限制:定义用户名和域名可接受的字符类型,例如字母、数字、特定的特殊字符,以及对空格和句点的限制。
-
长度限制:设置合理的长度限制,保证邮箱地址既不会过短也不会过长。
-
域名限制:确定支持的顶级域名(如.com、.cn、.edu等),并排除不支持的域名。
-
用户体验:提供清晰的输入指导和即时反馈,如果用户输入不符合要求,应给出明确的错误提示。
-
安全性:防止SQL注入、跨站脚本(XSS)等安全漏洞,确保邮箱输入的处理是安全的。
-
国际化:考虑是否需要支持国际化邮箱地址,包括非拉丁字符集。
-
可扩展性:设计时应考虑将来可能添加的新顶级域名或其他规则变更。
-
性能:确保邮箱验证过程不会引入不必要的性能开销。
-
隐私保护:在处理邮箱地址时,应遵守数据保护法规,确保用户信息的安全和隐私。
-
测试覆盖:确保有充分的测试用例覆盖各种正常和异常的输入情况。
(2)使用边界值分析法该如何确定边界?
-
定义输入域:首先明确每个输入项的取值范围,例如用户邮箱的长度、字符类型等。
-
确定最小和最大值:为每个输入项找出最小值和最大值,这些通常直接对应于输入域的边界。
-
考虑异常值:除了最小值和最大值,还应考虑可能导致问题的其他异常值,如负数、零、空字符串等。
-
组合边界值:对于多个输入项的情况,需要考虑不同输入项边界值的组合,以覆盖所有可能的边界情况。
-
扩展边界:在确定边界值时,可以适当扩展边界,例如,如果一个输入域是1到100,可以测试0和101作为边界值,以查看系统如何处理超出预期范围的输入。
-
等价类划分:使用等价类划分法来组织边界值,区分有效等价类和无效等价类,以减少需要测试的用例数量。
-
测试设计:基于边界值分析的结果,设计测试用例,确保每个边界点和边界组合都被测试到。
-
迭代测试:在测试过程中,根据发现的问题调整边界值,进行迭代测试以确保覆盖所有潜在的问题。
-
文档记录:记录边界值分析的过程和结果,为回归测试和未来的测试工作提供参考。