1、四级软件测试工程师-4 及答案解析(总分:71.00,做题时间:90 分钟)一、选择题(总题数:20,分数:40.00)1.以下关于软件回归测试的说法中错误的是_。(分数:2.00)A.软件变更后,应对软件变更部分的正确性和对变更需求的符合性进行测试B.软件变更后,首先应对变更的软件单元进行测试,然后再进行其他相关的测试C.软件变更后,不必再对软件原有正确的功能、性能和其他规定的要求进行测试D.对具体的软件,可以根据软件测试合同及软件的重要性、完整性级别对回归测试内容进行剪裁2.在理想情况下,只要软件发生了变更,就要对其进行_。(分数:2.00)A.验证测试B.回归测试C.确认测试D.验收测试
2、3.以下关于面向对象软件测试的说法中,正确的是_。(分数:2.00)A.不需要对抽象类进行单元测试B.等价类划分测试是一种类层次的测试技术C.不变式边界测试是一种类层次的测试技术D.测试动态绑定是类树测试的唯一目标4.压力测试(Stress Testing)又称强度测试,其目标是_。(分数:2.00)A.测试各种资源在超负荷的情况下的运行情况B.检测系统可以处理目标内确定的数据容量C.度量系统的性能和预先定义的目标有多大差距D.验证系统从软件或者硬件失效中恢复的能力5.关于逻辑覆盖,说法错误的是(分数:2.00)A.DDP覆盖是判定覆盖的一个变体B.满足条件覆盖一定也满足判定覆盖C.指令块覆盖
3、属于语句覆盖D.若判定覆盖率迭 100%,则语句覆盖率一定也是 100%6.极限编程中,完成开发任务的标志是 _。(分数:2.00)A.通过的单元测试B.编码完成C.测试用例设计完成D.通过验收测试7.程序流程图如下图所示,采用路径覆盖法进行测试,则至少需要几个测试用例可以覆盖所有可能的路径_。 (分数:2.00)A.24个B.12个C.6个D.48个8.下列有关软件质量的叙述中,错误的是_。(分数:2.50)A.软件质量不仅包括软件产品的质量,还包括软件过程的质量B.明确的软件质量属性是指在合同或行业标准中规定必须实现的质量要求C.隐含的软件质量属性在合同或行业标准中没有规定,因此在产品开发
4、时不必专门考虑?D.软件的功能和性能必须结合在一起考虑9.下列关于面向对象集成测试的说法中,正确的是_。(分数:2.00)A.大突击集成是面向对象集成测试最常用且最有效的方法B.自底向上集成和自顶向下集成都需要为集成测试开发大量代码C.协作集成在任何情况下都优于自底向上集成和自顶向下集成D.高频集成是以自底向上集成为基础,利用冒烟测试进行的集成测试10.下列关于测试方法的叙述中不正确的是_。(分数:2.00)A.从某种角度上讲,白盒测试与黑盒测试都属于动态测试B.功能测试属于黑盒测试C.对功能的测试通常是要考虑程序的内部结构的D.结构测试属于白盒测试11.关于软件可靠性测试的目的,下列说法错误
5、的是_。(分数:2.00)A.通过受控的软件测试过程来实现B.预测软件在实际运行中的可靠性C.不通过测试揭示该软件缺陷D.通过修改缺陷来提高软件的可靠性12.下列关于测试方法,说法正确的是_。(分数:2.00)A.白盒测试不同于黑盒测试之处是它可以减少测试用例数量B.覆盖所有独立路径就能够覆盖所有分支C.在单元测试中不使用黑盒测试技术D.满足分支覆盖就满足条件覆盖和语句覆盖13.以下哪一项属于易用性测试关注的范畴(分数:2.00)A.软件使用的图标是否能准确反映相应的功能B.软件是否具有良好的性能C.软件是否能够在多种操作系统环境下运行D.软件提供的功能是否丰富14.GUI是一个分层的图形化的
6、软件前端,下面不属于 GUI系统的层次是_。(分数:1.50)A.数据层B.界面层C.接口层D.功能层15.关于软件性能测试的指标,下列说法不正确的是_。(分数:2.00)A.系统的响应时间通常是指该系统所有功能的平均响应时间或者所有功能的最大响应时间B.响应时间是一个合理且准确的性能指标,其绝对值可以直接反映软件性能的高低C.对于无并发的应用系统而言,吞吐量与响应时间成严格的反比关系D.吞吐量不能无限的增大,关键原因在于资源利用率不能无限的提高16.下面面向对象程序单元测试中,模态类测试是基于 _ 图生成测试用例。(分数:2.00)A.用例图B.顺序图C.协作图D.状态转换图17.在黑盒测试
7、中,着重检查输入条件的组合是_。(分数:2.00)A.等价类划分法B.边界值分析法C.错误推测法D.因果图法18.软件可靠性的研究很大程度借鉴了硬件可靠性的研究,但二者还是有很多区别,主要体现在(分数:2.00)A.软件设计出来后,每份拷贝都完全一样,而硬件设计出来后,每个按照设计生产的都不可能完全相同B.软件是纯逻辑产品,内部逻辑复杂度高,而硬件的内部逻辑相对简单C.软件版本更新很频繁,但硬件版本更新通常很慢D.以上全部19.硬件因素和软件因素的综合是 _。(分数:2.00)A.数据库环境B.接口环境C.网络环境D.社会物理环境20.一般来说,大多数软件缺陷源于软件开发项目的_阶段。(分数:
8、2.00)A.软件测试B.程序编写和调试C.需求和设计D.加班工作期间二、论述题(总题数:2,分数:31.00)21.已知 C源程序如下: /*Input today“s date,output tomorrow“s date * / /* version 2 * / #includestdio. h struct ydate int day; int month; int year; int leap(struct ydate d) if(d. year%4=0d. year%100 ! =0)|(d. year%400=0) return 1; else return 0; int num
9、days(struct ydate d) int day; static int daytab= 31,28,31,30,31,30,3l,31,30,31,30,31; if(1eap(d)d. month=2) day=29; else day=daytabEd. month-1; return day; int main(void) struct ydate today,tomorrow;printf(“format of date is:year,month,day 输入的年、月、日之间应用逗号隔开/n); printf(“ today is:“); scanf(“%d,%d%“,&t
10、odayyear,&todaymonth,&todayday); while(0=today. year | today. year65535|0=today. month|today. month12)| 0=today. day|today. daynumdays(today) printf(“input date error!reenter the day!/n“); printf(“ today is:“); scanf(“%d,%d,%d“,today. year,&todaymonth,today. day); if(today. day!=numdays(today) tomor
11、row. year=today. year; tomorrow. month=today. month; tomorrow. day=today. day+1; else if(todaymonth=12) tomorrow. year=today. year+1; tomorrow. month=1; tomorrow. day=1; else tomorrow. year=today. year; tomorrow. month=today. month+1: tomorrow.day=1; printf(“tomorrow is:%d,%d,%d/n/n“, tomorrow. year
12、,tomorrow. month,tomorrow. day); (1) 画出程序中所有函数的控制流程图; (2) 设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到 100%。如果认为该程序的语句或分支覆盖率无法达到 100%,需说明为什么。 (分数:10.00)_以下是班级成绩处理平台的程序流程图,请仔细阅读程序并完成要求。 该平台允许最多输入 100个学生的成绩,以-1 作为输入结束标志。N2 存放输入的学生成绩个数,NI 存放输入成绩中有效成绩的个数,sum 存放成绩总和。初始化 N2=N1=0,sum=0。计算其中有效的学生分数的个数、总分数和平均值。请针对该程序流程
13、图进行基本路径覆盖测试用例设计。(分数:21.00)(1).导出过程的控制流图。(分数:7.00)_(2).确定基本测试路径集合。(分数:7.00)_(3).设计满足基本路径覆盖的测试用例。 (分数:7.00)_四级软件测试工程师-4 答案解析(总分:71.00,做题时间:90 分钟)一、选择题(总题数:20,分数:40.00)1.以下关于软件回归测试的说法中错误的是_。(分数:2.00)A.软件变更后,应对软件变更部分的正确性和对变更需求的符合性进行测试B.软件变更后,首先应对变更的软件单元进行测试,然后再进行其他相关的测试C.软件变更后,不必再对软件原有正确的功能、性能和其他规定的要求进行
14、测试 D.对具体的软件,可以根据软件测试合同及软件的重要性、完整性级别对回归测试内容进行剪裁解析:解析 回归测试的目的是测试软件变更之后,变更部分的正确性和对变更需求的符合性,并测试软件变更之后,对软件原有正确的功能、性能和其他规定的要求不产生损害。其测试的对象有未通过单元测试、系统集成测试、配置项测试、系统测试的软件。在变更之后,首先应对变更的软件单元进行测试,然后再进行相关的测试。 回归测试的内容可能有:只重复测试原来软件单元测试做过的测试内容;修改原软件单元测试做过的测试内容;以及在前两者基础之上新增测试内容。 由以上可得 A、B 项说法均正确,而 C选项说法明显错误。 软件测试规范规定
15、,对具体的软件可根据软件测试合同及软件的重要性、完整性级别对上述各类软件测试的内容进行裁剪。D 选项说法错误。2.在理想情况下,只要软件发生了变更,就要对其进行_。(分数:2.00)A.验证测试B.回归测试 C.确认测试D.验收测试解析:解析 回归测试是测试人员常做的事情,一经发现并改正程序中隐藏的缺陷,然后再重新执行以前发现这个缺陷的测试,看这个缺陷是否会重现,这是一种回归测试。另外,当对发现的缺陷进行修改后,执行一系列基准测试,以确认程序的修改没有对程序的其他部分产生干扰,这也称为是回归测试。在理想情况下,只要软件发生了变更,就要对其进行回归测试。3.以下关于面向对象软件测试的说法中,正确
16、的是_。(分数:2.00)A.不需要对抽象类进行单元测试B.等价类划分测试是一种类层次的测试技术C.不变式边界测试是一种类层次的测试技术 D.测试动态绑定是类树测试的唯一目标解析:解析 面向对象软件测试中,需要对抽象类进行单元测试。故 A错。测试动态绑定是类树测试的目标之一,不是唯一目标,故 D错。等价类划分测试不是类层次的测试技术,不变式边界测试是一种类层次的测试技术,故选 C。4.压力测试(Stress Testing)又称强度测试,其目标是_。(分数:2.00)A.测试各种资源在超负荷的情况下的运行情况 B.检测系统可以处理目标内确定的数据容量C.度量系统的性能和预先定义的目标有多大差距
17、D.验证系统从软件或者硬件失效中恢复的能力解析:5.关于逻辑覆盖,说法错误的是(分数:2.00)A.DDP覆盖是判定覆盖的一个变体B.满足条件覆盖一定也满足判定覆盖 C.指令块覆盖属于语句覆盖D.若判定覆盖率迭 100%,则语句覆盖率一定也是 100%解析:解析 条件覆盖是指设计若干个测试用例,运行被测程序,使得程序中每个判定的每个条件的可能取值至少评价一次。而判定覆盖是设计测试用例,使得程序中每个判定的取真分支和取假分支至少评价一次。二者没有必然的联系,故满足条件覆盖的未必会满足判定覆盖,选项 B错误。而满足判定覆盖一定会满足语句覆盖是容易理解的,因为每个判定的取真分支和取假分支都至少评价一
18、次,必然预示着每个可执行语句至少评价了一次,即满足了语句覆盖。另外指令块覆盖是语句覆盖的一个变体,而 DDP覆盖(判定路径覆盖)是判定覆盖的一个变体。6.极限编程中,完成开发任务的标志是 _。(分数:2.00)A.通过的单元测试 B.编码完成C.测试用例设计完成D.通过验收测试解析:7.程序流程图如下图所示,采用路径覆盖法进行测试,则至少需要几个测试用例可以覆盖所有可能的路径_。 (分数:2.00)A.24个 B.12个C.6个D.48个解析:解析 上图表示三个顺序执行的分支结构,即采用结构化分解的方法,可以把程序流程图分为三层,最上面一层有三个判定结点,由上面例子显然该层的测试用例数至少为
19、4,同样,中间一层仅有一个判定结点,故测试用例数至少需要两个,最下面一层判定结点数为 2,故至少需要三个,综合上面可以得到预完成整个程序的测试,至少需要 423=24个测试用例才可以覆盖所有路径。8.下列有关软件质量的叙述中,错误的是_。(分数:2.50)A.软件质量不仅包括软件产品的质量,还包括软件过程的质量B.明确的软件质量属性是指在合同或行业标准中规定必须实现的质量要求C.隐含的软件质量属性在合同或行业标准中没有规定,因此在产品开发时不必专门考虑? D.软件的功能和性能必须结合在一起考虑解析:解析 软件质量是表征软件产品满足明确的和隐含的需求的能力的特性或特性的集合,它除了关注“明确的需
20、求”外,还扩展到了“隐含的需求”。软件质量是各种特性的复杂组合,定义一个软件的质量,就等于为该软件定义一系列质量属性。C 项叙述不准确。9.下列关于面向对象集成测试的说法中,正确的是_。(分数:2.00)A.大突击集成是面向对象集成测试最常用且最有效的方法B.自底向上集成和自顶向下集成都需要为集成测试开发大量代码 C.协作集成在任何情况下都优于自底向上集成和自顶向下集成D.高频集成是以自底向上集成为基础,利用冒烟测试进行的集成测试解析:解析 面向对象程序的集成测试策略有很多种,其中主要有传统的集成策略(大突击集成、自底向上集成、自顶向下集成和夹层式集成),协作集成,基于集成,高频集成,基于事件
21、(或消息)的集成,基于使用的集成,客户机/服务器的集成、分布式集成。大突击集成就是将系统的所有组成成分都集成在一起进行测试,通常只有在整个软件的可靠性有了基本的保障时,大突击集成测试才是一种合理的选择。自底向上集成主要缺点是需要开发大量的测试驱动代码,自顶向下集成则需要为集成测试开发大量桩代码,总之,二者都要为集成测试开发大量代码。选项 C说法过于绝对,因为只有当类间的主要协作关系可以明确辨识,且每个功能只需要少数类协作就可以完成时,采用协作集成方式才是一个不错的选择。高频集成并不是一个具体的集成策略,它是指在软件开发过程中频繁地将新开发出来的代码与已有代码集成,一般采用冒烟测试的方法,但并不
22、是以自底向上集成为基础。10.下列关于测试方法的叙述中不正确的是_。(分数:2.00)A.从某种角度上讲,白盒测试与黑盒测试都属于动态测试B.功能测试属于黑盒测试C.对功能的测试通常是要考虑程序的内部结构的 D.结构测试属于白盒测试解析:解析 白盒测试是程序员十分了解程序的前提下,对程序的逻辑结构进行的测试。而黑盒测试则将程序视为一个黑盒子,仅仅是测试人员提供数人数据,观察输出数据,并不了解程序是如何运行的,结构测试属于白盒测试,关注的是如何选择合适的程序或子程序路径来执行有效的检查。功能测试则属于黑盒测试,对功能的测试通常通过提供输入数据,检查实际输出的结果,很少考虑程序的内部结构。11.关
23、于软件可靠性测试的目的,下列说法错误的是_。(分数:2.00)A.通过受控的软件测试过程来实现B.预测软件在实际运行中的可靠性C.不通过测试揭示该软件缺陷D.通过修改缺陷来提高软件的可靠性 解析:解析 软件的可靠性测试目的:通过受控的软件测试过程来预测软件在实际运行中的可靠性,而不是通过测试来揭示软件缺陷并通过修改缺陷来提高软件的可靠性。12.下列关于测试方法,说法正确的是_。(分数:2.00)A.白盒测试不同于黑盒测试之处是它可以减少测试用例数量B.覆盖所有独立路径就能够覆盖所有分支 C.在单元测试中不使用黑盒测试技术D.满足分支覆盖就满足条件覆盖和语句覆盖解析:解析 白盒测试与黑盒测试的本
24、质区别是对内部逻辑的理解,与测试用例数量无关。单元测试是以白盒测试为主,但有时也会用到黑盒测试技术。满足分支测试不一定满足条件测试。13.以下哪一项属于易用性测试关注的范畴(分数:2.00)A.软件使用的图标是否能准确反映相应的功能 B.软件是否具有良好的性能C.软件是否能够在多种操作系统环境下运行D.软件提供的功能是否丰富解析:解析 易用性测试中用户界面元素的图标测试主要检查图标是否能够准确反映所对应的功能,以方便用户使用。14.GUI是一个分层的图形化的软件前端,下面不属于 GUI系统的层次是_。(分数:1.50)A.数据层 B.界面层C.接口层D.功能层解析:解析 GUI 即图形化用户接
25、口,相当于软件产品的外观,GUI 是分层的图形化的软件前端,通过特定的事件集中接受用户或系统产生的事件,生成相应的图形输出。为更好地进行 GUI测试,通常会将界面与功能的设计分离,一般把 GUI系统分为 3个层次,即界面层、功能层和界面与功能的接口层,而进行测试的重点是界面层和接口层。GUI 测试分成两个部分,一是界面实现与界面设计的情况要符合,二是要确认界面能够正确处理事件。15.关于软件性能测试的指标,下列说法不正确的是_。(分数:2.00)A.系统的响应时间通常是指该系统所有功能的平均响应时间或者所有功能的最大响应时间B.响应时间是一个合理且准确的性能指标,其绝对值可以直接反映软件性能的
26、高低 C.对于无并发的应用系统而言,吞吐量与响应时间成严格的反比关系D.吞吐量不能无限的增大,关键原因在于资源利用率不能无限的提高解析:16.下面面向对象程序单元测试中,模态类测试是基于 _ 图生成测试用例。(分数:2.00)A.用例图B.顺序图C.协作图D.状态转换图 解析:17.在黑盒测试中,着重检查输入条件的组合是_。(分数:2.00)A.等价类划分法B.边界值分析法C.错误推测法D.因果图法 解析:解析 在黑盒测试中,这些测试策略基本上都要考虑输入条件的组合,基于因果图的方法就是着重检查输入条件组合的一种测试方法。18.软件可靠性的研究很大程度借鉴了硬件可靠性的研究,但二者还是有很多区
27、别,主要体现在(分数:2.00)A.软件设计出来后,每份拷贝都完全一样,而硬件设计出来后,每个按照设计生产的都不可能完全相同B.软件是纯逻辑产品,内部逻辑复杂度高,而硬件的内部逻辑相对简单C.软件版本更新很频繁,但硬件版本更新通常很慢D.以上全部 解析:解析 软件可靠性和软件可靠性测试的研究在很大程度上借鉴了硬件可靠性的研究,但由于软件和硬件的不同特点导致软件可靠性和硬件可靠性有很大区别,具体而言,软件可靠性和硬件可靠性的区别有:唯一性,软件设计出来后,所有副本就是一模一样的;硬件设计出来后,每个按照设计生产的硬件都不可能完全相同。物理退化,一个正确的硬件器件会因为物理退化在某时刻失效,但正确
28、的软件则不会因为物理退化而发生失效。逻辑复杂性,软件是纯逻辑产品,具有复杂的内部逻辑,而硬件的内部逻辑则相对简单。版本更新,硬件的版本更新通常很慢,而软件的版本更新比较频繁。19.硬件因素和软件因素的综合是 _。(分数:2.00)A.数据库环境B.接口环境C.网络环境 D.社会物理环境解析:20.一般来说,大多数软件缺陷源于软件开发项目的_阶段。(分数:2.00)A.软件测试B.程序编写和调试C.需求和设计 D.加班工作期间解析:解析 通常来说,软件缺陷大多数是来自软件开发项目的需求和设计阶段的。二、论述题(总题数:2,分数:31.00)21.已知 C源程序如下: /*Input today“
29、s date,output tomorrow“s date * / /* version 2 * / #includestdio. h struct ydate int day; int month; int year; int leap(struct ydate d) if(d. year%4=0d. year%100 ! =0)|(d. year%400=0) return 1; else return 0; int numdays(struct ydate d) int day; static int daytab= 31,28,31,30,31,30,3l,31,30,31,30,31
30、; if(1eap(d)d. month=2) day=29; else day=daytabEd. month-1; return day; int main(void) struct ydate today,tomorrow;printf(“format of date is:year,month,day 输入的年、月、日之间应用逗号隔开/n); printf(“ today is:“); scanf(“%d,%d%“,&todayyear,&todaymonth,&todayday); while(0=today. year | today. year65535|0=today. mon
31、th|today. month12)| 0=today. day|today. daynumdays(today) printf(“input date error!reenter the day!/n“); printf(“ today is:“); scanf(“%d,%d,%d“,today. year,&todaymonth,today. day); if(today. day!=numdays(today) tomorrow. year=today. year; tomorrow. month=today. month; tomorrow. day=today. day+1; els
32、e if(todaymonth=12) tomorrow. year=today. year+1; tomorrow. month=1; tomorrow. day=1; else tomorrow. year=today. year; tomorrow. month=today. month+1: tomorrow.day=1; printf(“tomorrow is:%d,%d,%d/n/n“, tomorrow. year,tomorrow. month,tomorrow. day); (1) 画出程序中所有函数的控制流程图; (2) 设计一组测试用例,使该程序所有函数的语句覆盖率和分支
33、覆盖率均能达到 100%。如果认为该程序的语句或分支覆盖率无法达到 100%,需说明为什么。 (分数:10.00)_正确答案:()解析:函数 leap的流程图如下: 函数 nLimdays的流程图如下: main函数的流程图如下(语句的具体内容已略去): 以下是班级成绩处理平台的程序流程图,请仔细阅读程序并完成要求。 该平台允许最多输入 100个学生的成绩,以-1 作为输入结束标志。N2 存放输入的学生成绩个数,NI 存放输入成绩中有效成绩的个数,sum 存放成绩总和。初始化 N2=N1=0,sum=0。计算其中有效的学生分数的个数、总分数和平均值。请针对该程序流程图进行基本路径覆盖测试用例设
34、计。(分数:21.00)(1).导出过程的控制流图。(分数:7.00)_正确答案:()解析:该程序的过程控制流图如下。 (2).确定基本测试路径集合。(分数:7.00)_正确答案:()解析:该过程控制流图的圈复杂性度量 G(V)为 6(区域数,或者 G(V)=E-N+2) 所以基本路径集合包含 6条独立的路径。 1-2-910-12 1-2-9-11-12 1-2-3-9-10-12 1-2-3-4-5-8-2- 1-2-3-4-5-6-8-2 1-2-3-4-5-6-7-8-2(3).设计满足基本路径覆盖的测试用例。 (分数:7.00)_正确答案:()解析:为每一条独立路径设计一组测试用例,以便强迫程序沿着该路径至少执行一次。 (score,i)=(-1,3);(-1,0);(89,101);(-2,56);(88,56);(188,56)