软工题第四章.docx
《软工题第四章.docx》由会员分享,可在线阅读,更多相关《软工题第四章.docx(26页珍藏版)》请在冰豆网上搜索。
软工题第四章
第四章习题
一、选择题
1.从供选择的答案中选出应填入下列( )中的字句。
软件测试的目的是( A )。
为了提高测试的效率,应该( B )。
使用白盒测试方法时,确定测试数据应根据( C )和指定的覆盖标准。
与设计测试数据无关的文档是( D )。
软件的集成测试工作最好由( E )承担,以提高集成测试的效果。
供选择的答案:
A.①评价软件的质量 ②发现软件的错误
③找出软件中的所有错误 ④证明软件是正确的
B.①随机地选取测试数据
②取一切可能的输入数据作为测试数据
③在完成编码以后制定软件的测试计划
④选择发现错误的可能性大的数据作为测试数据
C.①程序的内部逻辑 ②程序的复杂程度
③使用说明书 ④程序的功能
D.①该软件的设计人员 ②程序的复杂程度
③源程序 ④项目开发计划
E.①该软件的设计人员 ②该软件开发组的负责人
③该软件的编程人员 ④不属于该软件开发组的软件设计人员
2.请从供选择的答案中选出应填入下列( )中的字句。
程序的三种基本控制结构是( A )。
它们的共同点是( B )。
结构化程序设计的一种基本方法是( C )。
软件测试的目的是( D )。
软件调试的目的是( E )。
供选择的答案:
A.①过程,子程序,分程序 ②顺序,条件,循环
③递归,堆栈,队列 ④调用,返回,转移
B.①不能嵌套使用 ②只能用来写简单的程序
③已经用硬件实现 ④只有一个入口和一个出口
C.①筛选法 ②递归法 ③归纳法 ④逐步求精法
D.①证明程序中没有错误 ②发现程序中的错误
③测量程序的动态特性 ④检查程序中的语法错误
E.①找出错误所在并改正之 ②排除存在错误的可能性
③对错误性质进行分类 ④统计出错的次数
3.从下列关于软件测试的叙述中,选出5条正确的叙述。
(1)用黑盒法测试时,测试用例是根据程序内部逻辑设计的。
(2)尽量用公共过程或子程序去代替重复的代码段。
(3)测试是为了验证该软件已正确地实现了用户的要求。
(4)对于连锁型分支结构,若有n个判定语句,则有2n条路径。
(5)尽量采用复合的条件测试,以避免嵌套的分支结构。
(6)GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。
(7)发现错误多的程序模块,残留在模块中的错误也多。
(8)黑盒测试方法中最有效的是因果图法。
(9)在做程序的单元测试时,桩(存根)模块比驱动模块容易编写。
(10)程序效率的提高主要应通过选择高效的算法来实现。
4.从供选择的答案中选出同下列关于软件测试的各条叙述关系最密切的字句。
(1)对可靠性要求很高的软件,例如操作系统,由第三者对源代码进行逐行检查。
(2)已有的软件被改版时,由于受到变更的影响,改版前正常的功能可能发生异常,性能也可能下降。
因此,对变更的软件进行测试是必要的。
(3)在意识到被测试模块的内部结构或算法的情况下进行测试。
(4)为了确认用户的需求,先做出系统的主要部分,提交给用户试用。
(5)在测试具有层次结构的大型软件时,有一种方法是从上层模块开始,由上到下进行测试。
此时,有必要用一些模块替代尚未测试过的下层模块。
供选择的答案:
A~E:
①仿真器 ②代码审查 ③模拟器 ④桩模块 ⑤驱动器
⑥域测试 ⑦黑盒测试 ⑧原型 ⑨白盒测试 ⑩退化测试
5.从供选择的答案中选出应填入下面有关软件测试的叙述的( )内的正确答案。
软件测试方法可分为黑盒测试法和白盒测试法两种。
黑盒测试法是通过分析程序的( A )来设计测试用例的方法。
除了测试程序外,它还适用于对( B )阶段的软件文档进行测试。
白盒测试法是根据程序的( C )来设计测试用例的方法。
除了测试程序外,它也适用于对( D )阶段的软件文档进行测试。
白盒法测试程序时常按照给定的覆盖条件选取测试用例。
( E )覆盖比( F )覆盖严格,它使得每一个判定的每一条分支至少经历一次。
( G )覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。
( H )覆盖比其他条件都要严格,但它不能保证覆盖程序中的每一条路径。
单元测试一般以( I )为主,测试的依据是( J )。
供选择的答案:
A,C:
①应用范围 ②内部逻辑 ③功能 ④输入数据
B,D:
①编码 ②软件详细设计 ③软件总体设计 ④需求分析
E,F,G,H:
①语句 ②判定 ③条件 ④判定/条件
⑤多重条件 ⑥路径
I:
①白盒法 ②黑盒法
J:
①模块功能规格说明 ②系统模块结构图 ③系统需求规格说明
6.从供选择的答案中选出应该填入下列关于软件测试的叙述的( )内的正确答案。
软件测试中常用的静态分析方法是( A )和( B )。
( B )用于检查模块或子程序间的调用是否正确。
分析方法(白盒方法)中常用的方法是( C )方法。
非分析方法(黑盒方法)中常用的方法是( D )方法和( E )方法。
( E )方法根据输出对输入的依赖关系设计测试用例。
供选择的答案:
A~B:
①引用分析 ②算法分析 ③可靠性分析 ④效率分析
⑤接口分析 ⑥操作分析
C~E:
①路径测试 ②等价类 ③因果图 ④归纳测试
⑤综合测试 ⑥追踪 ⑦深度优先 ⑧调试
⑨相对图
二、简答题
1.编程时使用的程序设计语言,对软件的开发与维护有何影响?
2.如果一个程序有两个输入数据,每个输入都是一个32位的二进制整数,那么这个程序有多少个可能的输入?
如果每微妙可进行一次测试,那么对所有可能的输入进行测试需要多长时间?
3.假设有一个由5000行FORTRAN语句构成的程序(经编译后大约有25000条机器指令),你估计在对它进行测试期间将发现多少个错误?
为什么?
4.设计下列伪码程序的语句覆盖和路径覆盖测试用例:
START
INPUT(A,B,C)
IFA>5
THENX=10
ELSEX=1
ENDIF
IFB>10
THENY=20
ELSEY=2
ENDIF
IFC>15
THENZ=30
ELSEZ=3
ENDIF
PRINT(A,B,C)
STOP
5.设计下列伪码程序的分支覆盖和条件组合覆盖测试用例:
START
INPUT(A,B,C,D)
IF(A>0)AND(B>0)
THENX=A+B
ELSEX=A-B
END
IF(C>A)OR(D
THENY=C-D
ELSEY=C+D
END
PRINT(X,Y)
STOP
6.使用基本路径测试方法,设计测试下面列出的伪码程序的测试用例:
1:
START
INPUT(A,B,C,D)
2:
IF(A>0)
3:
AND(B>0)
4:
THENX=A+B
5:
ELSEX=A-B
6:
END
7:
IF(C>A)
8:
OR(D
9:
THENY=C-D
10:
ELSEY=C+D
11:
END
12:
PRINT(X,Y)
STOP
7.设计测试下列函数的测试方案:
、
函数SEARCH(somearray,size,value)的功能是,在一组整数数组somearray中搜索一个值为value的整数,如果数组中有这个数,则函数值等于该数的下标,否则函数值等于-1.数组的长度由参数size指定。
假定数组第一个元素的下标为1.
8.一个折半查找程序可搜索按字母顺序排列的名字列表,如果查找的名字在列表中则返回真,否则返回假。
为了对它进行功能测试,应该使用哪些测试用例?
9.某图书馆有一个使用CRT终端的信息检索系统,该系统有下列四个基本检索命令,如表4.1所示。
表4.1 检索命令
要求:
(1)设计测试数据以全面测试系统的正常操作;
(2)设计测试数据以测试系统的非正常操作。
10.航空公司A向软件公司B订购了一个规划飞行路线的程序。
假设你是软件公司C的软件工程师。
A公司已雇用你所在的公司对上述程序进行验收测试。
你的任务是,根据下述事实设计验收测试的输入数据。
领航员向程序输入出发地点和目的地,以及根据天气和飞行型号而初步确定的飞行高度。
程序读入途中的风向风力等数据,并且制定出三套飞行计划(高度,速度,方向及途中的五个位置校核点)。
所制定的飞行计划应该做到燃料消耗和飞行时间都最少。
11.对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第二个月改正了10个错误),MTTF=15h.
要求:
(1)根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间t的关系曲线。
在画这条曲线时你做了什么假设?
(2)为做到MTTF=100h,必须进行多长时间的集成测试?
当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?
12.在测试一个长度为48000条指令的程序时,第一个月由甲、乙两名测试员各种独立测试这个程序。
经一个月测试后,甲发现并改正了20个错误,使MTTF达到8h。
与此同时,乙发现24个错误,其中的6个甲也发现了。
以后由甲一个人继续测试这个程序。
问:
(1)刚开始测试时程序中总共有多少潜藏的错误?
(2)为使MTTF达到240h,必须再改正多少个错误?
第四章习题解答
一、选择题
1.A.② B.④ C.① D.④ E.④
软件测试的目的是软件中的错误。
因为不可能把所有可能的输入数据都拿来测试(时间花费不起),为了提高测试的效率,应该选择发现错误的可能性大的数据作为测试数据。
使用白盒测试方法时,确定测试数据应根据程序的内部逻辑和指定的覆盖标准,可以不考虑程序的功能。
与设计测试数据无关的文档是项目开发计划。
软件的集成测试工作最好由不属于该软件开发组的软件设计人员承担,以提高集成测试的效果。
2.A.② B.④ C.④ D.② E.①
1966年,Bohm与Jacopini提出任何单入口单出口的没有“死循环”的程序都能由三种最基本的控制结构构造出来。
这三种基本控制结构就是“顺序结构”、“选择IF-THEN-ELSE结构”、“重复DO-WHILE或DO-UNTIL结构”。
它们的共同点是只有一个入口和一个出口。
E.W.Dijkstra提出了程序要实现结构化的主张,并将这一类程序设计称为结构化程序设计。
这种方法的一个重要原则就是采用自顶向下、逐步求精的方法编写程序。
N.Wirth曾做过如下说明:
“我们对付一个复杂问题的最重要的方法就是抽象。
因此,对于一个复杂的问题,不要急于马上用计算机指令、数字和逻辑符号来表示它,而应当先用较自然的抽象的语句来表示,从而得到抽象的程序。
抽象程序对抽象的数据类型进行某些特定的运算,并用一些合适的记号(可以是自然语言)来表示。
下一步对抽象程序再做分解,进入下一个抽象的层次。
这样的细化过程一直进行下去,直到程序能被计算机接受为止。
此时的程序已经是用某种高级语言或机器指令书写的了。
”
软件调试则是在进行了成功的测试之后才开始的工作。
它与软件测试不同,软件测试的目的是尽可能多地发现软件中的错误,但进一步诊断和改正程序中潜在的错误,则是调试的任务。
调试活动由两部分组成:
①确定程序中可疑错误的确切性质和位置。
②对程序(设计,编码)进行修改,排除这个错误。
3.正确的叙述有(4)、(5)、(6)、(7)、(10)。
黑盒测试主要是根据程序的有关功能规格说明和覆盖准则来设计测试用例,进行测试的,不是根据程序的内部逻辑来设计测试用例,这是白盒测试做的事情。
在所有黑盒测试方法中,最有效的不是因果图法,而是边界值分析方法。
测试的目的是尽可能多地发现软件中的错误,其附带的收获才是验证该软件已正确地实现了用户的要求。
测试的一条重要原则是:
发现错误多的程序模块,残留在模块中的错误也多。
软件可靠性模型(Shooman)就是依据这个原则建立它的公式的。
对于连锁型分支结构,若有n个判定语句,则有2n条路径。
因此,随着n的增大,路径数增长非常快。
单元测试时,因为桩模块要模拟子模块的功能,这不是一件容易的事情,而驱动模块只是控制被测模块的执行,所以桩模块的编写比驱动模块的编写要难得多。
在程序设计风格方面,如果重复的代码段没有明显的功能,不可以抽取出来形成独立的公共过程或子程序,只有在这些代码段表现出独立的功能时,才可把它们抽取出来形成独立的公共过程或子程序。
另外,程序效率的提高主要应通过选择高效的算法或使用高效的语言编译器来实现。
GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁,这句话是正确的。
4.
(1)②
(2)⑩ (3)⑨ (4)⑧ (5)④
(1)对可靠性要求很高的软件,由第三者对源代码进行逐行检查,这是代码审查。
(2)软件变更时可能发生退化现象:
原来正常的功能可能发生异常,性能也可能下降。
因此,对变更的软件要进行退化测试。
(3)基于被测试模块的内部结构或算法设计测试用例进行测试,这是白盒测试。
(4)为了确认用户的需求,先做出系统的原型,提交给用户试用。
(5)自顶向下对具有层次结构的大型软件进行集成测试时,需要设计一些虚拟模块来替代尚未测试过的下层模块,这些模块叫做桩模块。
5.A.③ B.④ C.② D.② E.② F.① G.④ H.⑤ I.① J.①
软件测试方法可分为黑盒测试法和白盒测试法两种。
黑盒测试法是基于程序的功能来设计测试用例的方法。
除了测试程序外,它还适用于对需求分析阶段的软件文档进行测试。
白盒测试法是根据程序的内部逻辑来设计测试用例的方法。
除了测试程序外,它也适用于对软件详细设计阶段的软件文档进行测试。
白盒法测试程序时常按照给定的覆盖条件选取测试用例。
判定覆盖比语句覆盖严格,它使得每一个判定的每一条分支至少经历一次。
判定/条件覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。
多重条件覆盖,也叫组合条件覆盖,比其他条件都要严格,但它不能保证覆盖程序中的每一条路径。
单元测试一般以白盒法为主,测试的依据是系统的模块功能规格说明。
6.A.① B.⑤ C.① D.② E.③
软件测试中常用的静态分析方法是引用分析和接口分析。
接口分析用于检查模块或子程序间的调用是否正确。
分析方法(白盒方法)中常用的方法是路径测试方法。
非分析方法(黑盒方法)中常用的方法是等价类(划分)方法和因果图方法。
因果图方法根据输出对输入的依赖关系设计测试用例。
二、简答题
1.答:
程序设计语言是人用计算机解决问题的基本工具,因此,它将影响软件开发人员的思维方式和解题方式。
程序设计语言是表达具体的解题方法的工具,它的语法是否清晰易懂,阅读程序时是否容易产生二义性,都对程序的可读性和可理解性有较大影响。
程序设计语言所提供的模块化机制是否完善,编译程序差错能力的强弱等,对程序的可靠性有明显影响。
程序设计语言实现设计结果的难易程度,是否提供了良好的独立编译机制,可利用的软件开发工具是否丰富而且有效,都对软件的开发效率有影响。
编译程序优化能力的强弱,程序设计语言直接操纵硬件设施的能力等,将明显地影响程序的运行效率。
程序设计语言的标准化程度,所提供的模块封装机制,源程序的可读性和可理解性等,将影响软件的可维护性。
2.答:
每个32位的二进制整数具有232个可能的值,因此,具有两个整数输入的程序应该具有264个可能的输入。
每微妙可进行一次测试,即每秒可进行106个测试,因此,每天可进行的测试数为
60*60*24*106=8.64*1010
这等于每年大约可进行3.139*1013个测试。
因为210=1024≈103,所以264=(210)6.4≈1019.2。
1019.2/(3.139*1013)>105,所以做完全部测试将至少需要105年(即10万年)。
3.答:
经验表明,在类似的程序中,单位长度里的错误数ET/IT近似为常数。
美国的一些统计数字告诉我们,通常
0.5*10-2≤ET/IT≤2*10-2
也就是说,在测试之前每1000条指令中大约有5~20个错误。
假设在该程序的每1000条指令中有10个错误,则估计在对它进行测试期间将发现的错误数为
25000*(10/1000)=250
4.答:
(1)语句覆盖的测试用例
因为每个判定表达式为真或为假时均有赋值语句,为了使每个语句都至少执行一次,总共需要两组测试数据,以便使得每个判定表达式取值为真或为假各一次。
下面是实现语句覆盖的典型测试用例:
1)使3个判定表达式之值全为假
输入:
A=1,B=1,C=1
预期的输出:
X=1,Y=2,Z=3
2)使3个判定表达式之值全为真
输入:
A=20,B=40,C=60
预期的输出:
X=10,Y=20,Z=30
(2)路径覆盖的测试用例
本程序共有8条可能的执行通路,为做到路径覆盖总共需要8组测试数据。
下面是实现路径覆盖的典型测试用例:
1)3个判定表达式之值全为假
输入:
A=1,B=1,C=1
预期的输出:
X=1,Y=2,Z=3
2)3个判定表达式依此为假、假、真
输入:
A=1,B=1,C=60
预期的输出:
X=1,Y=2,Z=30
3)3个判定表达式依此为假、真、假
输入:
A=1,B=40,C=1
预期的输出:
X=1,Y=20,Z=3
4)3个判定表达式依此为假、真、真
输入:
A=1,B=40,C=60
预期的输出:
X=1,Y=20,Z=30
5)3个判定表达式依此为真、假、假
输入:
A=20,B=1,C=1
预期的输出:
X=10,Y=2,Z=3
6)3个判定表达式依此为真、假、真
输入:
A=20,B=1,C=60
预期的输出:
X=10,Y=2,Z=30
7)3个判定表达式依此为真、真、假
输入:
A=20,B=40,C=1
预期的输出:
X=10,Y=20,Z=3
8)3个判定表达式全为真
输入:
A=20,B=40,C=60
预期的输出:
X=10,Y=20,Z=30
5.答:
(1)分支覆盖(即判定覆盖)标准为,不仅使每个语句至少执行一次,而且使每个判定表达式的每个分支都至少一次。
为做到分支覆盖,至少需要两组测试数据,以使每个判定表达式之值为真或为假各一次。
下面是典型的测试用例:
1)使两个判定表达式之值全为假
输入:
A=-1,B=-2,C=-3,D=1
预期的输出:
X=1,Y=-2
2)使两个判定表达式之值全为真
输入:
A=1,B=2,C=3,D=1
预期的输出:
X=3,Y=2
(2)条件组合覆盖标准为,使得每个判定表达式中条件的各种可能组合都至少出现一次。
本题程序中共有两个判定表达式,每个判定表达式中有两个简单条件,因此,总共有8种可能的条件组合,它们是:
1)A>0,B>0
2)A>0,B≤0
3)A≤0,B>0
4)A≤0,B≤0
5)C>A,D
6)C>A,D≥B
7)C≤A,D
8)C≤A,D≥B
下面的4个测试用例,可以使上面列出的8种条件组合每种至少出现一次:
1)实现1,5两种条件组合
输入:
A=1,B=1,C=2,D=0
预期的输出:
X=2,Y=2
2)实现2,6两种条件组合
输入:
A=1,B=0,C=2,D=1
预期的输出:
X=1,Y=1
3)实现3,7两种条件组合
输入:
A=0,B=1,C=-1,D=0
预期的输出:
X=-1,Y=-1
4)实现4,8两种条件组合
输入:
A=0,B=0,C=-1,D=1
预期的输出:
X=0,Y=0
6.答:
用基本路径测试方法设计测试用例的过程,有下述4个步骤:
(1)根据过程设计的结果画出流图
与本题给出的伪码程序相对应的流图如图4.1所示。
(2)计算流图的环形复杂度
使用下述3种方法中的任一种都可以算出图4.1所示流图的复杂度为5.
1)该流图共有15条边,12个结点,所以环形复杂度为
15-12+2=5
2)该流图共有5个区域,因此环形复杂度为5.
3)该流图中共有4个判定结点,因此环形复杂度为
4+1=5
(3)确定线性独立路径的基本集合
所谓线性独立路径是指至少引入程序的一个新语句集合或
一个新条件的路径,用流图术语来描述,独立路径至少包含一
条在定义该路径之前不曾用过的边。
使用基本路径测试法设计测试用例时,程序的环形复杂度
决定了程序中独立路径的数量,而且这个数值是确保程序中所
以语句至少被执行一次所需的测试数量的上界。
对于图4.1所示流图来说,由于它的环形复杂度为5,因
此共有5条独立路径。
下面列出了5条独立路径:
路径1:
1-2-3-4-6-7-9-11-12
路径2:
1-2-5-6-7-9-11-12
路径3:
1-2-3-5-6-7-9-11-12
路径4:
1-2-3-4-6-7-8-9-11-12
路径5:
1-2-3-4-6-7-8-10-11-12
图4.1 与第6题伪码程序对应的流图
(4)设计可强制执行基本路径集合中每条路径的测试用例
1)执行路径1(两个判定表达式全为真)
输入:
A=1,B=1,C=2,D=2(任意)
预期的输出:
X=2,Y=0
2)执行路径2(第一个判定表达式为假,第二个判定表达式为真)
输入:
A=0,B=1(任意),C=2,D=0(任意)
预期的输出:
X=-1,Y=2
3)执行路径3(第一个判定表达式为假,第二个判定表达式为真)
输入:
A=1,B=0,C=2,D=0(任意)
预期的输出:
X=1,Y=2
4)执行路径4(两个判定表达式全为真)
输入:
A=1,B=1,C=0,D=-1
预期的输出:
X=2,Y=1
5)执行路径5(第一个判定表达式为真,第二个判定表达式为假)
输入:
A=1,B=1,C=0,D=2
预期的输出:
X=2,Y=2
7.答:
题中并没有给出实现函数SEARCH的算法,仅仅描述了它的功能,因此,只能用黑盒测试技术设计测试它的测试方案.
为了用等价划分法设计测试用例,首先需要划分输入数据的等价类。
根据该函数的功能,可以把它的输入数据划分成以下等价类:
(1)有效输入的等价类
●数组有偶数个元素,第1个元素是所要找的