第6章 软件编码和测试 课后习题参考答案
一、选择题
(1)为了提高测试的效率,应该(D)。
A.随机地选取测试数据
B.取一切可能的输入数据作为测试数据
C.在完成编码以后制定软件的测试计划
D.选择发现错误的可能性大的数据作为测试数据
(2)软件测试的目的是(B)。
A.评价软件的质量
B.发现软件的错误
C.找出软件中的所有错误
D.证明软件是正确的
(3)单元测试一般以白盒为主,测试的依据是(A)。
A.模块功能规格说明
B.系统模块结构图
C.系统需求规格说明
D.ABC都可以
(4)软件的集成测试工作最好由(C)承担,以提高集成测试的效果。
A.该软件的设计人员
B.该软件开发组的负责人
C.不属于该软件开发组的软件设计人员
D.该软件的编程人员
(5)下列关于α、β测试的描述中正确的是(C)。
A. α测试不需要用户代表参加
B.β测试不是验收测试的一种
C.α测试需要用户代表参加
D.β测试是系统测试的一种
(6)软件测试用例主要由输入数据和(C)两部分组成。
A.测试计划
B.测试规划
C.预期输出结果
D.以往测试记录分析
(7)在黑盒测试中,着重检查输入条件组合的方法是(D)。
A.等价类划分法
B.边界值分析法
C.错误推测法
D.因果图法
(8)黑盒测试是从(C)观点的测试,白盒测试是从(C)观点的测试。
A.开发人员、管理人员
B.用户、管理人员
C.用户、开发人员
D.开发人员、用户
(9)白盒测试法又称为逻辑覆盖法,主要用于(D)。
A.验收测试
B.系统测试
C.α测试
D.单元测试
(10)以下哪种测试方法不属于白盒测试技术(B)。
A.基本路径测试
B.边界值分析测试
C.循环覆盖测试
D.条件测试
(11)白盒测试法是根据程序的(B)来设计测试用例的方法。
A.输出数据
B.内部逻辑
C.功能
D.输入数据
(12)软件调试的目的是(A)。
A.找出错误所在并改正之
B.排除存在错误的可能性
C.对错误性质进行分类
D.统计出错的次数
二、简答题
(1)软件测试应该划分为几个阶段?各个阶段应重点测试的内容是什么?
软件测试可分为单元测试,集成测试,系统测试,验收测试四个阶段。
单元测试又称模块测试、逻辑测试或结构测试,是针对软件设计的最小单位——程序模块或功能模块,进行正确性检验的测试工作。其目的在于检验每个程序单元能够正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现各个模块内部可能存在的各种错误。
集成测试又称组装测试、综合测试或联合测试。通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试是检验程序单元或部件的接口关系,逐步集成为符合概要设计要求的程序部件或整个系统。
系统测试为验证和确认系统是否达到其原始目标,而对集成的硬件和软件系统进行的测试。系统测试是在真实或模拟系统运行的环境下,检查完整的程序系统能否和系统(包括计算机硬件、外设、网络和系统软件、支持平台等)正确配置、连接,并满足用户需求。系统测试的主要依据是《系统需求规格说明书》文档。
验收测试又称交付测试,是软件在完成了单元测试、集成测试、系统测试之后,产品发布之前进行的软件测试活动。验收测试又分为Alpha测试(α测试)和Beta测试(β测试),Alpha测试是由一个用户在开发环境下进行的测试,或者是公司内部的用户在模拟实际操作环境下进行的受控测试,Beta测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。
(2)在软件测试中,应遵循哪些原则?
在软件测试过程中,通常应该遵循以下七个原则。
① 所有的测试都应追溯到用户需求。这是因为软件的目的是使用户完成预定的任务,满足其需求。而软件测试揭示软件的缺陷和错误,一旦修正这些错误,就能更好地满足用户需求。
② 应尽早地和不断地进行软件测试。由于软件的复杂性和抽象性,在软件生命周期各阶段都可能产生错误,所以不应把软件测试仅仅看作是软件开发的一个独立阶段,而应当把它贯穿到软件开发的各个阶段中去。在需求分析和设计阶段就应开始进行测试工作,编写相应的测试计划及测试设计文档,同时坚持在开发各阶段进行技术评审和验证,这样才能尽早发现和预防错误,杜绝某些缺陷和错误,提高软件的质量。测试工作进行得越早,越有利于提高软件的质量,这是预防性测试的基本原则。
③ 在有限的时间和资源下进行完全测试并找出软件所有的错误和缺陷是不可能的,软件测试不能无限进行下去,应适时终止。因为,测试输入量大、输出结果多、路径组合多、用有限的资源来达到完全测试是不现实的。
④ 测试只能证明软件存在错误,而不能证明软件没有错误。测试无法显示潜在的错误和缺陷,继续进一步测试可能还会找到其它错误和缺陷。
⑤ 充分关注测试中的集群现象。在测试的程序段中,若发现的错误数目比较多,则残存在该程序段中的错误数目也会比较多,因此应当花较多的时间和代价测试那些具有更多错误数目的程序模块。
⑥ 程序员应避免检查自己的程序。考虑到人们的心理因素,自己揭露自己程序中的错误是件不愉快的事,自己不愿意否认自己的工作。此外,由于思维定式,自己难以发现自己的错误。因此,测试一般由独立的测试部门或第三方机构进行,这样测试相对比较客观。
⑦ 尽量避免测试的随意性。软件测试是有组织、有计划、有步骤的活动,要严格按照测试计划进行,要避免测试的随意性。
(3)什么是黑盒测试?有哪些常用的黑盒测试方法?
黑盒测试又称功能测试或数据驱动测试,指通过软件的外部表现来发现缺陷和错误。黑盒测试把测试对象看成一个黑盒子,完全不考虑程序内部结构和处理过程,测试者仅依据程序功能的需求规范考虑,确定测试用例和推断测试结果的正确性,它是站在使用软件或程序的角度,从输入数据与输出数据的对应关系出发进行的测试。
常用的黑盒测试方法有等价类划分、边界值分析、因果图、决策表、错误推测法、场景法等。
(4)什么是白盒测试?有哪些常用的白盒测试方法?
白盒测试又称结构测试或逻辑驱动测试,指通过对程序内部结构的分析、检测来寻找问题。白盒测试把程序看成装在一个透明的白盒子里,也就是清楚了解程序结构和处理过程,检查是否所有的结构及路径都是正确的,检查软件的内部动作是否按照设计说明的规定正常进行。
常用的白盒测试方法逻辑覆盖、基本路径测试、程序插桩等。
(5)请对比白盒测试和黑盒测试。
白盒测试和黑盒测试是软件测试的两种基本方法。
黑盒测试优点如下:
1)比较简单,不需要了解程序的内部的代码及实现;
2)与软件的内部实现无关;
3)从用户的角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;
4)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;
5)在做软件自动化测试时较为方便。
黑盒测试缺点如下:
1)不可能覆盖所有的代码,覆盖率较低;
2)自动化测试的复用性较低。
白盒测试优点如下:
- 迫使测试人员去仔细思考软件的实现;
- 可以检测代码中的每条分支和路径;
- 揭示隐藏在代码中的错误;
- 对代码的测试比较彻底。
白盒测试缺点如下:
1)程序运行会有很多不同的路径,不可能测试所有的运行路径;
2)测试基于代码只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求;
3)系统庞大时,测试开销会非常大。
(6)请简述静态测试和动态测试的区别。
静态测试不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
动态测试通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
(7)什么是集成测试?非增量集成测试与增量集成测试有什么区别?
集成测试又称组装测试、综合测试或联合测试。通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试是检验程序单元或部件的接口关系,逐步集成为符合概要设计要求的程序部件或整个系统。
集成测试有两种方法,一种方法是分别测试各个模块,再把这些模块组合起来进行整体测试,这种方法称为非增量集成测试。另一种方法是把一个要测试的模块组合到已测试好的模块中,测试完后再将一个需要测试的模块组合进来测试,逐步把所有模块组合在一起,并完成测试,该方法称为增量集成测试。
(8)什么是调试?什么是测试?二者有何区别?
软件调试是查找、分析和纠正程序中错误的过程。软件测试的目的是充分发现软件的错误信息,软件调试是在测试完成结果分析之后,对结果分析发现的错误进行程序诊断,并且寻求改正的过程。软件测试和软件调试常常交替进行。
三、应用题
(1)如图6.21所示,Nextdate函数包含3个变量:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2000年3月3日,则函数的输出为2000年3月4日。要求输入变量month、day和year均为整数值,并且满足条件:1≤month≤12,1≤day≤31,1920≤year≤2050。请运用等价类划分法设计测试用例。
图6.21 Nextdate示意图
解:(1)分析并确定等价类;
Nextdate函数包含3个变量month、day和year。根据等价类划分原则第一条的内容“在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类”,day、month和year分别可以确立一个有效等价类和两个无效等价类。
① day等价类
D1={日期:1≤日期≤31};D2={日期:日期<1};D3={日期:日期>31}。
② month等价类
M1={月份:1≤月份≤12};M2={月份:月份<1};M3={月份:月份>12}。
③ year等价类
Y1={年:1920≤年≤2050};Y2={年:年<1920};Y3={年:年>2050}。
(2)建立等价类表,列出所有划分出的等价类;
Nextdate函数等价类划分表如表6.1所示。
表6.1 Nextdate函数等价类划分表
输入条件 | 有效等价类 | 无效等价类 |
Day | D1{1,…,28} D2{29} D3{30} D4{31} | D5{day<1} D6{day>31} |
Month | M1{1,3,5,7,8,10,12} M2{2} M3{4,6,9,11} | M4{month<1} M5{month>12} |
Year | Y1{平年,1920≤year≤2050} Y2{闰年,1920≤year≤2050} | Y3{year<1920} Y4{year>2050} |
(3)根据列出的等价类表,设计测试用例。
Nextdate函数预期输出分为如下六种情况。
R1: day=day+1;
R2: day=1,month=month+1;
R3: day=1,month=1,year=year+1;
R4: day越界;
R5: month越界;
R6: year越界。
Nextdate测试用例设计结果如表6.2所示。
表6.2 Nextdate测试用例
测试用例 | day | month | year | 预期输出 | 覆盖的等价类 |
Test1 Test2 Test3 Test4 Test5 Test6 Test7 | 15 28 28 29 31 30 31 | 6 2 2 2 3 4 12 | 1999 1999 2000 2000 2006 2010 2016 | 1999年6月16日 1999年3月1日 2000年2月29日 2000年3月1日 2006年4月1日 2010年5月1日 2017年1月1日 | D1,M3,Y1 R1 D1,M2,Y1 R2 D1,M2,Y2 R1 D2,M2,Y2 R2 D4,M1,Y1 R2 D3,M3,Y1 R2 D4,M1,Y2 R3 |
Test8 Test9 Test10 Test11 Test12 Test13 | -1 32 2 2 20 20 | 6 6 0 13 6 6 | 2001 2001 2001 2001 1919 2051 | Day越界 Day越界 Month越界 Month越界 Year越界 Year越界 | D5,M3,Y1 R4 D6,M3,Y1 R4 D1,M4,Y1 R5 D1,M5,Y1 R5 D1,M3,Y3 R6 D1,M3,Y4 R6 |
(2)用因果图法测试以下程序。程序的规格说明要求:输入的第一个字符必须是A成B,第二个字符必须是一个数字,此情况下进行文件的修改;如果第一个字符不是A或B,则给出信息L,如果第二个字符不是数字,则给出信息M。请运用因果图法设计测试用例。
解:(1)根据题意。原因和结果如下。
原因: c1:第一列字符是A;
c2:第一列字符是B;
c3:第二列字符是一数字。
结果: e21:修改文件;
e22:给出信息L;
e23:给出信息M。
(2)程序规格说明因果图如图6.1所示。其中,11为中间状态,考虑到c1和c2不可能同时为1,因此,在c1和c2上施加E约束。
图6.1程序规格说明因果图
(3)根据因果图建立判定表如表6.3所示。
表6.3 程序规格说明判定表
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
原因(条件) | c1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
c2 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
c3 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
11 | 1 | 1 | 1 | 1 | 0 | 0 | |||
动作(结果) | e22 | 0 | 0 | 0 | 0 | 1 | 1 | ||
e21 | 1 | 0 | 1 | 0 | 0 | 0 | |||
e23 | 0 | 1 | 0 | 1 | 0 | 1 |
在如表6.3所示的8种情况中,左面两列原因c1和c2同时为1,这是不可能出现的,故应排除这两种情况。这是由于原因c1是第一列字符是A,原因c2是第一列字符是B,所以不可能同时出现第一列字符是A,同时第一列字符是B的情况。
(4)把判定表的每一列拿出来作为依据,设计测试用例如表6.4所示。
表6.4 程序规格说明测试用例
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
原因(条件) | c1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
c2 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
c3 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
11 | 1 | 1 | 1 | 1 | 0 | 0 | |||
动作(结果) | e22 | 0 | 0 | 0 | 0 | 1 | 1 | ||
e21 | 1 | 0 | 1 | 0 | 0 | 0 | |||
e23 | 0 | 1 | 0 | 1 | 0 | 1 | |||
测试用例 | A6 | Aa | B9 | BP | C5 | HY | |||
A0 | A@ | B1 | B* | H4 | E% |
(3)请把图6.22中的程序流程图转换成控制流图。