草庐IT

黑盒测试实验报告

.wei-upup 2023-04-21 原文

软件测试实验报告

课程名称

软件质量保证与测试

班级

实验日期

姓名

学号

实验地点

实验名称

黑盒测试

实验目的与要求

1、掌握应用黑盒测试技术进行测试用例设计。

2、掌握对测试用例进行优化设计方法。

实验环境

Idea、亿图图示

实验内容

3.1 三角形问题的黑盒测试用例设计

3.2 次日问题的黑盒测试用例设计

一、设计方法描述

1:等价类划分法

等价类划分可以把全部输人数据合理划分为若干等价类,在每一个等价类中取个数据作为测试的输人条件,就可以用少量代表性的测试数据取得较好的测试效果。有效等价类:指对于程序规格说明来说,由合理的、有意义的输入数据构成的集合。利用它,可以检验程序是否实现了规格说明预先规定的功能和性能。无效等价类:指对于程序规格说明来说,由不合理的、无意义的输人数据构成的集合。利用它,可以检查程序中功能和性能的实现是否有不符合规格说明要求的地方。划分等价类的方法有:1.按区间划分;2.按数值划分;3.按数值集合划分;4.按限制条件划分;5.按限制规则划分;6。按处理方式划分。

在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。软件不能只接收合理的数据,还要经受意外的考验,即接收无效的或不合理的数据,这样的软件才能具有较高的可靠性。

2:边界值分析法

基于边界值分析方法选择测试用例的原则如下:

  1. 如果输人条件规定了值的范围,则应该取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值作为测试输入数据。
  2. 如果输人条件规定了值的个数,则用最大个数、最小个数、比最大个数多1个、比最小个数少1个的数作为测试数据。
  3. 根据规格说明的每一个输出条件,使用规则1和规则2。
  4. 根据规格说明的每一个输出条件,使用规则1和规则2。
  5. 如果程序的规格说明给出的输人域或输出域是有序集合(如有序表、顺序文件等),则应选取集合的第一个和最后一个元素作为测试用例。
  6. 如果程序用了一个内部结构,应该选取这个内部数据结构的边界值作为测试用例。
  7. 分析规格说明,找出其他可能的边界条件。

二、设计测试用例

  1. 三角形问题

1:等价类划分法

1.1分析实验条件

条件1: 1≤a≤100 条件2:1≤b≤100 条件3: 1≤c≤100

条件4: a<b+ c    条件5: b<a+ c    条件6: c<a+ b

1.2划分有效等价类和无效等价类

输入条件

有效等价类

无效等价类

是否构成三角形的三条边

1≤a≤100 (1)

1≤b≤100 (2)

1≤c≤100 (3)

a<b+ c    (4)

b<a+ c    (5)

c<a+ b    (6)

(a<1)(7) (a>100) (21)

(b<1)(8) (b>100) (22)

(c<1)(9) (c>100) (23)

a>=b+ c (10)

b>=a+ c (11)

c>=a+ b (12)

是否为等腰三角形

a=b      (13)

b=c      (14)

c=a      (15)

(a!=b)and(b!=c)and(c!=a)        (16)

是否为等边三角形

(a=b)and(b=c)and(c=a) (17)

(a!=b)    (18)

(b!=c)    (19)

(c!=a)    (20)

1.3设计有效等价类的测试用例

序号

测试用例(a,b,c)

预期输出

覆盖等价类

实际输出

1

3,4,5

一般三角形

1,2,3,4,5,6

一般三角形

2

3,3,4

等腰三角形

1,2,3,4,5,6,13

等腰三角形

3

3,4,3

等腰三角形

12345615

等腰三角形

4

4,3,3

等腰三角形

12345614

等腰三角形

5

3,3,3

等边三角形

1, 2,3,4,5,6,17

等边三角形

1.4设计无效等价类的测试用例

序号

测试用例(a,b,c)

预期输出

覆盖等价类

实际输出

1

0,1,2

边值超出范围

7

边值超出范围

2

105,1,2

边值超出范围

21

边值超出范围

3

1,2,0

边值超出范围

9

边值超出范围

4

1,2,105

边值超出范围

23

边值超出范围

5

1,0,2

边值超出范围

8

边值超出范围

6

1,105,2

边值超出范围

22

边值超出范围

7

2,1,1

无法构成三角形

10

等腰三角形

8

1,2,1

无法构成三角形

11

等腰三角形

9

1,1,2

无法构成三角形

12

等腰三角形

10

3,4,5

一般三角形

16

一般三角形

11

4,3,3

等腰三角形

18

等腰三角形

12

3,4,3

等腰三角形

19

等腰三角形

13

3,3,4

等腰三角形

20

等腰三角形

14

1,2,

无效等价类

无效输入

15

1,,

无效等价类

无效输入

16

B,1,2

无效等价类

无效输入

17

,,,

无效等价类

无效输入

18

!,2,1

无效等价类

无效输入

2.边界值分析法

序号

测试用例(a,b,c)

预期输出

覆盖等价类

实际输出

1

0,1,2

边值超出范围

7

边值超出范围

2

105,1,2

边值超出范围

21

边值超出范围

3

1,2,0

边值超出范围

9

边值超出范围

4

1,2,105

边值超出范围

23

边值超出范围

5

1,0,2

边值超出范围

8

边值超出范围

6

1,105,2

边值超出范围

22

边值超出范围

7

1,100,100

等腰三角形

1,2,3

等腰三角形

8

2,100,33

一般三角形

2

一般三角形

9

3,3,1

等腰三角形

3

等腰三角形

  1. 次日问题

1:等价类划分法

1.1划分等价类

输入数据(年、月、日)

有效等价类

无效等价类

(1)1900到2050内的闰年整数

(10) year<1900

(2)1900到2050内的平年整数

(11) year>2050

(12) 其他输入

(3) 1,3,5,7,8,10,12内的整数

(13) month<1

(4) 4,6,9,11内的整数

(14) 12<month

(5) 2

(15) 其他输入

(6) 1~28

(16) day<1

(7) 29

(17) year为闰年 month=2时,29<day

(9) 31

(18)year为非闰年 month=2时,28<day

(19)month=1,3,5,7,8,10,12时,31<day

(20) month=4,6,9,11时,30<day

(21) day>31

(22) 其他输入

1.2设计有效等价类测试用例

序号

输入数据

预期结果

覆盖等价类

实际输出

1

2016 2 29

2016年3月1日

(1)(5)(7)

2016年3月1日

2

2017 1 28

2017年1月29日

(2)(3)(6)

2017年1月29日

3

2017 1 31

2017年2月1日

(2)(3)(9)

2017年2月1日

4

2017 4 30

2017年5月1日

(2)(4)(8)

2017年5月1日

5

2017 12 31

2018年1月1日

(2)(3)(9)

2018年1月1日

1.3设计无效等价类测试用例

序号

输入数据

预期结果

覆盖等价类

实际输出

1

1899 3 1

年超出范围

(10)

年超出范围

2

2051 3 1

年超出范围

(11)

年超出范围

3

205& 3 1

无效输入

(12)

无效输入

4

1901 -1 1

月超出范围

(13)

月超出范围

5

1901 1% 1

无效输入

(15)

无效输入

6

2016 2 30

日超出范围

(17)

日超出范围

7

2017 2 29

日超出范围

(18)

日超出范围

8

2017 3 32

日超出范围

(19)

日超出范围

9

2017 4 31

日超出范围

(20)

2017年5月1日

10

2017 4 32

日超出范围

(21)

日超出范围

11

2017 4 3%

无效输入

(22)

无效输入

12

1901 13 1

月超出范围

(14)

月超出范围

13

1901 1 -1

日超出范围

(16)

日超出范围

2.边界值分析法

序号

输入数据

期望输出

覆盖等价类

实际输出

1

1889

7

10

年的值不在指定范围内

(1)(2)

年的值不在指定范围内

2

1900

7

10

19000711

(1)(2)

19000711

3

1901

7

10

19010711

(1)(2)

19010711

4

2049

7

10

20490711

(1)(2)

20490711

5

2050

7

10

20500711

(1)(2)

20500711

6

2051

7

10

年的值不在指定范围内

(1)(2)

年的值不在指定范围内

7

2019

7

10

月的值不在指定范围内

(3)(4)(5)(6)

月的值不在指定范围内

8

2019

0

10

20190111

(3)(4)(5)(6)

20190111

9

2019

1

10

20190211

(3)(4)(5)(6)

20190211

10

2019

2

10

20191111

(3)(4)(5)(6)

20191111

11

2019

11

10

20191211

(3)(4)(5)(6)

20191211

12

2019

12

10

月的值不在指定范围内

(3)(4)(5)(6)

月的值不在指定范围内

13

2019

13

27

20190228

(5)(7)(8)(9)

20190228

14

2019

2

28

20190301

(5)(7)(8)(9)

20190301

15

2019

2

29

日的值不在指定范围内

(5)(7)(8)(9)

20190301

16

2020

2

28

20200229

(5)(7)(8)(9)

20200229

17

2020

2

29

20200301

(5)(7)(8)(9)

20200301

18

2020

2

30

日的值不在指定范围内

(5)(7)(8)(9)

20200230

19

2019

1

30

20190131

(3)(9)(10)

20190131

20

2019

1

31

20190201

(3)(9)(10)

20190201

21

2019

1

32

日的值不在指定范围内

(3)(9)(10)

日的值不在指定范围内

22

2019

4

30

20190501

(4)(9)(10)

20190501

23

2019

4

31

日的值不在指定范围内

(4)(9)(10)

20190431

24

2019

4

32

日的值不在指定范围内

(4)(9)(10)

日的值不在指定范围内

3.判定表驱动法

3.1条件桩

M1=month:这个月有30天

M2 = month : 这个月有31天 , 除了12月

M3 = month : 这个月是12月

M4 = month : 这个月是2月

D1 = day : 1 ≤ day ≤ 27

D2 = day : day = 28

D3 = day : day = 29

D4 = day : day = 30

D5 = day : day = 31

Y1 = year : year是闰年

Y2 = year : year不是闰年

3.2动作桩

A 0:不可能

A 1 : day + 1

A 2 : day复位

A 3 : month + 1

A 4 : month复位

A 5 : year + 1

3.3判断表

规则

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

条件

C1:month是

M1

M1

M1

M2

M2

M3

M3

M4

M4

M4

M4

M4

M4

C2:day是

D1

D2

D3

D4

D5

D1D2D3D4

D5

D1

D2

D3

D4

D5

D1

D2

D2

D3

D4

D4

D5

C3:year是

Y1

Y2

Y1

Y2

A0=不可能

Y

Y

Y

A1:day+1

Y

Y

Y

Y

Y

A2:day复位

Y

Y

Y

Y

Y

A3:month+1

Y

Y

Y

Y

A4:month复位

Y

A5:

year+1

Y

3.3设计测试用例

测试规则序号

输入数据

期望输出

实际输出

1、2、3

2022 9 16

2022 9 17

2022 9 17

4

2022 9 30

2022 10 1

2022 10 1

5

2022 9 31

日的值不在指定范围内

日的值不在指定范围内

6、7、8、9

2022 1 16

2022 1 17

2022 1 17

10

2022 1 31

2022 2 1

2022 2 1

11、12、13、14

2022 12 16

2022 12 17

2022 12 17

15

2022 12 31

2023 1 1

2023 1 1

16

2022 2 16

2022 2 17

2022 2 17

17

2022 2 28

2022 3 1

2022 3 1

18

2020 2 28

2020 2 29

2020 2 29

19

2020 2 29

2020 3 1

2020 3 1

20

2022 2 29

日的值不在指定范围内

日的值不在指定范围内

21、22

2022 2 30

日的值不在指定范围内

日的值不在指定范围内

1.测试结果:

  1. 三角形问题

等价类划分法测试结果

有效等价类测试用例测试结果

无效等价类测试用例测试结果

 

 

  1. 次日问题

等价类划分法测试用例测试结果

 

边界值分析法测试用例测试结果

 

判定表分析法测试用例测试结果

 

2.缺陷分析:

用例15测试错误的原因是由于程序先判断day为29则得出结果为3.1,并没有先判断年是否为闰年。

用例18、23测试错误原因是程序并没有先判断接收参数是否在指定范围内,而是先根据month进行数据处理,再判断处理后的参数是否在指定范围内。

通过本次实验,掌握了应用黑盒测试技术进行测试用例设计,掌握了对测试用例进行优化设计方法,能用Junit实施参数化测试。

有关黑盒测试实验报告的更多相关文章

  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

随机推荐