草庐IT

软件测试 黑盒测试之等价类划分测试 电话号码合法性检验

王回甘 2023-03-28 原文

黑盒测试之等价类划分测试

实验要求:

分析电话号码的输入情况,划分等价类表(要求考虑无效输入);根据(1)所划分的等价类,给出具体的测试用例,实施测试。据此实验生成测试报告2。测试报告中至少包含等价类列表,测试用例及测试结论。

自选语言编写程序:输入电话号码,对电话号码的合法性进行检查,输出是否合法,不合法在屏幕上输出错误原因。

电话号码合法要求:

电话号码由三部分构成

地区码:空白或三位数字

前缀码:"0"或”1”开头的三位数字

后缀码:四位数字

符合以上要求的为合法电话号码

确认等价类,列出等价类表:

输入条件

有效等价类

编号

无效等价类

编号

电话号码长度

7

1

小于7

10

10

2

大于7小于10

11

大于10

12

电话号码长度为7时首位字符类型

非0非1的数字

3

0

13

1

14

非数字的字符

15

电话号码长度为7时前缀码后两位字符类型

数字

4

非数字的字符

16

电话号码长度为7时后缀码字符类型

数字

5

非数字的字符

17

电话号码长度为10时第4位字符类型

非0非1的数字

6

0

18

1

19

非数字的字符

20

电话号码长度为10时前缀码后两位字符类型

数字

7

非数字的字符

21

电话号码长度为10时后缀码字符类型

数字

8

非数字的字符

22

电话号码长度为10时地区码字符类型

数字

9

非数字的字符

23

测试用例表:

测试用例

输入数据

预期结果

覆盖的等价类

地区码

前缀码

后缀码

1

空白

222

3333

输入合法

1,3,4,5

2

111

222

3333

输入合法

2,6,7,8,9

3

空白

22

3333

输入不合法,电话号码长度不合格

10

4

空白

222

333

输入不合法,电话号码长度不合格

11

5

111

2222

3333

输入不合法,电话号码长度不合格

12

6

空白

022

3333

输入不合法,前缀码有误

13

7

空白

122

3333

输入不合法,前缀码有误

14

8

空白

a12

3333

输入不合法,前缀码有误

15

9

空白

2aa

3333

输入不合法,前缀码有误

16

10

空白

222

aaaa

输入不合法,后缀码有误

17

11

111

022

3333

输入不合法,前缀码有误

18

12

111

122

3333

输入不合法,前缀码有误

19

13

111

a12

3333

输入不合法,前缀码有误

20

14

111

2aa

3333

输入不合法,前缀码有误

21

15

111

222

aaaa

输入不合法,后缀码有误

22

16

aaa

222

3333

输入不合法,地区码有误

23

部分用例执行后结果演示:

演示(测试编号1):

演示(测试编号2):

演示(测试编号3):

演示(测试编号4):

演示(测试编号5):

演示(测试编号6):

演示(测试编号7):

演示(测试编号8):

演示(测试编号9):

演示(测试编号10):

演示(测试编号11):

演示(测试编号12):

演示(测试编号13):

演示(测试编号14):

演示(测试编号15):

演示(测试编号16):

实验代码:

import java.util.Scanner;

public class test2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的电话号码:");
        String phone = sc.next();
        System.out.println("您输入的电话号码为:" + phone);
        boolean boom = judge(phone);

        if (boom == true) {
            System.out.println("您输入的电话号码是合法的");
        }
        else {
            System.out.println("您输入的电话号码是非法的");
        }
    }

    public static boolean isNumber(String str, int length) {
        for (int i = 0; i < length; i++) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }
    public static boolean judge(String phone){
        char fourchar =phone.charAt(3);
        char firstchar = phone.charAt(0);
        int length = phone.length();
        if (isNumber(phone,phone.length())){
            if (length == 10){
                if (fourchar=='0' || fourchar=='1'){
                    System.out.println("提示:前缀码应该是除了0和1开头的三位数字!");
                    return false;
                }
                else{
                    return true;
                }
            }
            else if (length == 7){
                if (firstchar=='0' || firstchar=='1'){
                    System.out.println("提示:前缀码应该是除了0和1开头的三位数字!");
                    return false;
                }
                else {
                    return true;
                }
            }
            else {
                System.out.println("提示:电话号码的长度应为 7或 10位!");
                return false;
            }
        }
        else{
            if (phone.length()==10){
                if (isNumber(phone,3)==false){
                    System.out.println("提示:地区码为非数字!");
                }
                else if (isNumber(phone,6)==false){
                    System.out.println("提示:前缀码为非数字!");
                }
                else {
                    System.out.println("提示:后缀码为非数字!");
                }
            }
            else {
                if (isNumber(phone,3)==false){
                    System.out.println("提示:前缀码为非数字!");
                }
                else{
                    System.out.println("提示:后缀码为非数字!");
                }
            }
            System.out.println("电话号码不应当出现除了数字以外的字符!");
            return false;
        }
    }
}

 

测试结论:

预期结果与程序执行结果一致,说明测试成功,程序无异常。写到测试用例才发现程序的条件有冗余,导致测试用例重复。

有关软件测试 黑盒测试之等价类划分测试 电话号码合法性检验的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  8. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  9. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  10. ruby-on-rails - 如何调试 cucumber 测试? - 2

    我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element

随机推荐