第四章习题一、选择题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.设计下列伪码程序的语句覆盖和路径覆盖测试用例:STARTINPUT(A,B,C)IFA5THENX=10ELSEX=1ENDIFIFB10THENY=20ELSEY=2ENDIFIFC15THENZ=30ELSEZ=3ENDIFPRINT(A,B,C)STOP5.设计下列伪码程序的分支覆盖和条件组合覆盖测试用例:STARTINPUT(A,B,C,D)IF(A0)AND(B0)THENX=A+BELSEX=A-BENDIF(CA)OR(DTHENY=C-DELSEY=C+DENDPRINT(X,Y)STOP6.使用基本路径测试方法,设计测试下面列出的伪码程序的测试用例:1:STARTINPUT(A,B,C,D)2:IF(A0)3:AND(B0)4:THENX=A+B5:ELSEX=A-B6:END7:IF(CA)8:OR(D9:THENY=C-D10:ELSEY=C+D11:END12:PRINT(X,Y)STOP7.设计测试下列函数的测试方案:、函数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)为了确认用户的