代码测试分析知识点汇总.docx
《代码测试分析知识点汇总.docx》由会员分享,可在线阅读,更多相关《代码测试分析知识点汇总.docx(21页珍藏版)》请在冰豆网上搜索。
代码测试分析知识点汇总
第一二章重点知识点
1.下面哪个测试不属于代码静态测试的范畴(D)
A软件质量度量B软件代码静态分析C文档测试D单元测试
2.以下哪一项的测试不属于文档测试的范畴(C)
A通过文档测试可以了解被测系统的架构和功能
B通过文档测试可以清楚的认识整个系统及其内部的软件
C通过文档测试可以发现软件中存在的bug
D通过文档测试可以发现软件设计过程中存在的bug
3.以下哪一项是白盒测试的指标(A)
A覆盖率B用例执行率C测试bug数量Dcpu使用率
4.以下哪个选项不属于高质量软件的特点(D)
A软件本身具有良好的设计方案
B软件代码编写遵循相关行业的规范
C软件代码编写过程中,变量命名能达到见名知意的效果
D软件代码编写过程中根据开发人员的习惯,随意编写
5.以下哪一项不是为了提高软件的可靠性而采取的措施(D)
A避免错误设计B容错保护设计C降低复杂度设计D通用性设计
6.被测的酒店管理系统使用的是(B)语言
AC语言BJAVACPHPDC#
7.当洗衣机的水位传感器异常时,蜂鸣报警是基于(B)进行设计的
A性能需求B安全性需求C恢复性需求D兼容性需求
第三章重点知识点
1、最主要的软件质量度量指标有正确性、可维护性、完整性和可用性,下面关于这些质量指标的描述中正确的是()。
A、软件维护的工作量比开发阶段的工作量小
B、正确性用每千行代码的故障(fault)数来度量
C、软件完整性是指软件功能与需求符合的程度
D、可用性与用户的操作效率和用户对软件的主观评价有关
答案:
D
2、计算下图E节点的扇出和扇入数目:
()
A.扇入1,扇出2B.扇入2,扇出3
C.扇入2,扇出3D.扇入3,扇出1
答案:
C
3.模块扇入和扇出的原则是:
()
(1)底层模块或过程高扇入,低扇出
(2)上层模块或过程高扇入,高扇出
(3)上层模块或过程高扇出,低扇入
(4)底层模块或过程低扇出,低扇入
A.(3)、(4)B.
(1)、(4)C.
(2)、(4)D.
(1)、(3)
答案:
D
4.计算下面结构流图的圈复杂度()
A:
5B:
4C:
6D:
3
答案:
A
5、有如下代码选项中说法正确的是:
()
for (i=0; i<100; ++i)
{
1
2//输出hello
3 printf("hello");
}
A、物理行数为5
B、代码物理行数为4
C、逻辑行数为4
D、代码逻辑行数为3
答案:
B
6、TestBed工具的用途不包括哪一项:
()
A、软件质量度量B、代码静态分析
C、软件单元测试D、软件动态分析
答案:
D
7、从spin.c文件的质量度量报告中可以看出,这个.c文件中函数的圈复杂度多大的有几个()
A:
0B:
1C:
2D:
3
答案:
C
8、查看单个文件的质量度量分析报告,应选择的操作步骤为:
()
A、“SetResults-TextResults-CodeReviewReport(HTML)”
B、“SetResults-TextResults-QualityReviewReport(HTML)”
C、“IndividualResults-TextResults-QualityReviewReport(HTML)”
D、“IndividualResults-TextResults-CodeReviewReport(HTML)”
答案:
D
简答题:
1、什么是扇入与扇出,其指标的意义?
答案:
1)、扇入数是指直接调用该模块的上级模块的个数,扇入数大表示模块的复用程度高。
2)、扇出数是指该模块直接调用的下级模块的个数,扇出数大表示模块的复杂度高。
2、软件质量6个评价特性是什么?
答案:
∙功能性:
软件所实现的功能达到它的设计规范和满足用户需求的程度
∙可靠性:
在满足一定条件的应用环境中,软件能够正常维持其工作的能力
∙可用性:
对于一个软件,用户在学习、操作和理解过程中所做努力的程度
∙效率:
在规定条件下,用软件实现某种功能所需的计算机资源(包括时间)的有效程度
∙维护性:
当环境改变或软件运行发生故障时,为使其恢复正常运行所做努力的程度
∙可移植性:
为使一个软件从现有运行平台向另一个运行平台过度所做努力的程度
3、圈复杂度的计算方法?
答案:
计算公式1:
V(G)=e-n+2p(弱连通图)
V(G)=e-n+p(强连通图)
计算公式2:
V(G)=判定节点数+1
计算公式3:
V(G)=R(区域数)
其中,e表示控制流图中边的数量,n表示控制流图中节点的数量,p图的连接组件数目(因为控制流图都是连通的,所以p为1)。
第四章重点知识
高亮的为答案
选择题
1.对软件代码静态分析描述不正确的是
A只对源代码进行分析B需设计测试用例C不运行测试代码D与动态测试相对应
2.在软件开发过程的各个环节中,编码规范是最基本的规范之一。
制定编码规范的目的是
A在代码编写的过程中避免一些常见的错误B提高代码质量C提高代码的可维护性和可读性D以上都是
3.MISRA-C:
2004编码规范有共有强制规则多少条?
A127B121C120D136
4.在MISRA-C规范中,for循环的控制表达式不应包含
A浮点数类型B整型C字符型D布尔型
5在MISRA-C规范中,关于switch语句的规则描述正确的是
Aswitch语句的主体必须是复合语句Bswitch的表达式中不能出现有效的布尔类型值Cswitch的最后一个子句必须是default子句D以上都正确
6.Eclipse中,离线安装checkstyle,需要将Eclipsecs-Checkstyle插件安装包里的哪两个文件夹内容分别拷贝到对应的文件夹下
Aplugins、libBplugins、featuresCfeatures、libDfeatures、java
7.在Eclipse工作站中,右键选择checkstyle,选择下面哪一项进行检查,可以对有问题的类使用警告或者错误标识。
AActiveCheckstyleBDeactiveCheckstyleCCheckcodewithCheckstyleDConfigureproject(s)fromblueprint
8.使用Testbed进行代码静态分析后,选中一个.c文件,点击IndividualResults—GraphicalResults,选择下面哪一项可以查看程序的控制流图?
AKiviatDiagramBStaticBarChartsCStaticCallGraphDStaticFlowGraph
简答题:
1.在MISRA-C规范中,对于表达式中存在的隐士数据类型转换有严格的限制。
请列出,整型表达式中不允许出现的隐士数据类型转换的情况。
(答案课本P158)
(1)无符号整型与有符号整型的转换
(2)整型和浮点类型的转换
(3)复杂表达式的数据类型转换
(4)从宽类型到窄类型的转换
(5)函数返回表达式类型转换
(6)函数实参类型转换
第五章重点知识点
1、目前比较典型的由于运行时错误所引起的软件代码安全性缺陷主要有下列哪些内容:
A、①②③④B、③④⑤⑥C、⑥⑦⑧⑨D、以上全错
1变量使用之前为初始化
2SQL注入
3对空指针和野指针的引用
4数组下标越界
5硬编码密码
6非法的算术运算(如除零错误,负数开方)
7整数和浮点数的上溢出/下溢出
8多线程应用中未保护数据的访问冲突
9不可达代码
2、通过控制流分析可以发现以下错误内容:
1无条件跳转的使用
2负数开平方
3不适当的循环嵌套和分支嵌套
4死循环
5转向不存在的语句标号
6调用不存在的子程序
7除数为零
8未使用的变量、子程序定义
9不可达语句
下列选项中全部正确的是
A、①②③④B、③④⑤⑥C、⑥⑦⑧⑨D、①②③④⑤⑥⑦⑧⑨
3、程序的表达式分析主要用于发现以下几种错误:
1程序中括号的使用不正确
2数组引用错误
3正切值的自变量可能为π/2
4浮点数进行相等比较
5除数为零
6未使用的变量、子程序定义
7不可达语句
下列选项中全部正确的是:
A、①②③④B、③④⑤⑥C、⑥⑦D、①②③④⑤⑥⑦
4、攻击者在远程WEB页面的HTML代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,这是哪种类型的漏洞?
A.缓冲区溢出B.SQL注入C.设计错误D.跨站脚本
5、下列关于缓冲区溢出原因的描述中正确的是()
A、输入数据取值超出了该数据类型的表示范围
B、输入数据长度超出了控件所允许的长度
C、输入数据长度超出了存储该数据的变量定义的长度
D、输入数据取值超出了控件所允许的表示范围
6、FortifySCA包含了若干个不同的分析器,分别有:
①数据流分析器
②字符流分析器
③控制流分析器
④语义分析器
⑤配置分析器
⑥结构分析器
⑦语法分析器
下面选项全部正确的是:
A、①②③④B、③④⑤⑥C、⑤⑥⑦D、①②⑥⑦
7、现在有下列程序
intmain
{
chara;
char*str=&a;
strcpy(str,"hello");
printf("%s",str);
}
该程序输出的结果为:
A:
helloB、hC、oD、以上都不对
8、以下关于内存泄露的说法正确的是_____。
A.内存泄露是操作系统内存管理出错导致的问题
B.单线程程序不可能内存泄露
C.如果一个进程在运行过程中占用的内存无限制的上升,那么该进程有内存泄露
D.内存泄露仅仅出现在C/C++程序的问题,Java程序不会出现内存泄露
二、简答题
请列出缓冲区溢出的防范措施
答:
1、编写正确的代码和代码分析
2、设置非执行的缓冲区
3、数组边界检查
4、改进C语言函数库
5、程序指针完整性检查
第六章重点知识点
1、如图1所示,是某程序的控制流图,其中圈复杂度为(D)?
A.2B.3C.4D.5
图1
2、对图1进行独立路径测试,下列说法中错误的是(C)
A.典型路径测试原理是通过从所有路径集合中选择一组无关联的独立路径进行测试,以达到覆盖全部路径的目的
B.根据独立路径原理,该程序应该有5条独立路径
C.该程序的独立路径为:
1-2-3-8-9,1-2-4-5-8-9,1-2-4-6-8-9,1-2-4-7-8-2-3-8-9
D.该程序的独立路径为:
1-2-3-8-9,1-2-4-5-8-9,1-2-4-6-8-9,1-2-4-7-8-9,1-2-3-8-2-4-5-8-9
3、如图2所示,是某函数的程序流程图,下列说法中错误的是(C)
图2
A.从此流程图可以看出,该程序有4条不同的路径
B.此流程图中有2个判定,4个条件
C.需要两组数据,才能达到语句覆盖的100%
D.语句覆盖是很弱的逻辑覆盖,不能检查条件语句的错误和逻辑运算的错误
4、针对图2设计数据,使其满足判定/条件覆盖的要求,下面设计的数据中正确的一组是(C)
A.a=2,b=0,x=4
B.a=2,b=0,x=3;a=3,b=1,x=1
C.a=2,b=0,x=4;a=1,b=1,x=1
D.a=2,b=0,x=2;a=3,b=1,x=1
5、针对图2需要设计(A)组数据,能够使其达到条件组合覆盖?
A.4B.6C.7D.8
6、一个判定中有10个条件,条件组合覆盖需要多少个测试用例,MC/DC覆盖需要多少个测试用例(A)?
A.102411~20B.102410~21C.51211~20D.51210~21
7、针对if(A||(B&&C))类型的判定设计测试用例,下面数据中,能够达到MC/DC覆盖的数据组合为(A)
ATBTCT
ATBFCT
AFBTCT
AFBFCF
AFBTCF
AFBFCT
A.
B.
C.
D.
8、白盒测试又称为基于结构的测试、基于代码的测试,关于白盒测试原则说法错误的是(D)?
A.保证一个模块中的所有路径至少被测试一次
B.对所有逻辑判定,取“真”或取“假”的两种取值至少测试一次
C.检查程序的内部数据结构是否有效
D.检查模块间的数据传递是否有问题
9、下列关于白盒测试的优点,说法正确的是(C)
A.发现问题早,修复成本低
B.测试效率高,具有较强针对性
C.可以发现全局数据结构的问题
D.基于自动化测试框架,比较容易进行回归测试
10、图2的基本复杂度为(A)
A.1B.2C.3D.0
第七章重点知识点
1.进行单元测试时需要在哪些方面对所测试模块进行检查:
()
A.模块接口测试、全局数据结构、边界条件、出错处理、独立路径
B.模块接口测试、局部数据、边界条件、出错处理、独立路径
C.检查模块接口的数据、全局数据结构、边界条件、出错处理、独立路径
D.一个模块对其他模块的影响、局部数据、边界条件、出错处理、独立路径
2.单元测试的主要目的不包括哪一项:
()
A.发现软件中不符合编程规范的代码B.发现代码本身存在的错误
C.发现设计文档中存在的错误D.验证代码实现与设计文档的一致性
分析如下程序代码,完成15题和16题。
特别说明,该程序片段中有两个判断,按照顺序分别命名为判断1和判断2。
if((hSetWaterLevel>1)||((hSetWaterLevel<=4)&&(hFactWaterLevel<=1)))
{
if(inFilterAutoFillInFall>3000)
{
iFilterAutoFillInFall=0x0000;
}
else
{
iFilterAutoFillInFall=0x0000;
}
}
3.针对判断1,下列哪个选项中,hSetWaterLevel和hFactWaterLevel的取值能够最有效的达到判定/分支覆盖率为100%:
()
A.4,2;1,2;5,2B.4,2;5,2C.4,1;1,2;5,2D.4,1;1,2
4.针对判断2,在下列哪个选项中,inFilterAutoFillInFall取值能够最有效地使该判断的语句语句覆盖率为100%:
()
A.3100B.3100,2900C.3100,3200D.2800,2900
5.以下哪项不是TBrun与Testbed提供的代码覆盖率的指标:
()
A.语句覆盖B.判定分支覆盖C.修正条件/判定覆盖D.函数覆盖
6.以下说法不正确的是:
()
A.创建桩/驱动模块在回归测试时尽可能不需要修改即可直接使用,提高回归测试的效率。
B.驱动模块可以接收测试数据,包括测试用例的输入和相应的预期输出结果。
C.桩模块只是原调用单元的真实模拟,包含原单元的全部逻辑细节内容。
D.单元测试的运行环境包括:
桩模块、驱动模块和软件开发环境或仿真环境,以此保证被测单元的独立运行。
7.如下对单元测试描述不正确的是:
()
A.单元测试是对软件中最基本的可测单元进行测试,以验证单元的正确性。
B.单元测试主要以白盒测试为主,需要覆盖大量的逻辑路径,非常浪费时间,所以将多个单元集成在一起进行测试以节约测试时间。
C.单元测试是最基本可测试的单元具有明确的功能要求、性能要求、以及与外部其他单元的接口要求等,可方便地与其他软件单元划分开。
D.单元测试是验证被测单元对软件详细设计文档满足的情况,不针对程序本身进行测试。
8.如下关于单元测试技术描述不正确的是:
()
A.语句覆盖是最起码的测试要求,使得每一条语句至少被执行一次
B.修正条件判定覆盖设计足够多的测试用例,使条件判断表达式中所有条件操作数逻辑值独立对条件判定表达式结果影响
C.判定/条件覆盖要求设计足够的测试用例,使得程序中的每一个分支至少通过一次即每一条分支语句的“真”值和“假”值都至少执行一次
D.条件组合设计足够多的测试用例,使得每个判定中条件的各种组合至少出现一次
9.以java语言编写酒店管理系统单元测试用到的工具是()
A.JuintB.EclEmmaC.Fest-SwingD.TESTbed-tburn
10.采用DbUnit进行数据库层的测试,下列说法不正确的是()
1.根据业务,做好测试用的准备数据和预想结果数据,通常准备成XML格式文件。
2.在setUp()方法里边备份数据库中的关联表,在准备数据的过程中,不应去掉数据库的外键属性以及自增长属性。
3.在SetUp()方法里面边读入准备数据,对测试类的对应测试方法进行封装,执行对象方法,把数据库的实际执行结果和预想结果进行比较。
4.在tearDown()方法里面,把数据库还原到测试前状态。
1-5BADBD6-10CBCDC
简答题:
3.阅读以下说明,回答下面的问题。
(15分)
【说明】在软件开发与运行阶段一般需要完成单元测试、集成测试、确认测试、系统测试和验收测试,这些对软件质量保证起着非常关键的作用。
(1)请简述单元测试的主要内容。
(2)集成测试也叫组装测试或者联合测试,请简述集成测试的主要内容。
(3)请简述集成测试与系统测试的关系
3答案、阅读以下说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
(15分)
参考答案:
(1)模块接口测试(1分)、局部数据结构测试(1分)、路径测试(1分)、错误处理测试(1分)、边界测试(1分)。
(2)知识点包括:
(共5分)
(a)在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失(1分):
(b)一个模块的功能是否会对另一个模块的功能产生不利的影响(1分);
(c)各个子功能组合起来,能否达到预期要求的父功能(l分);
(d)全局数据结构是否有问题(1分);
(e)单个模块的误差累积起来,是否会放大,从而达到不能接受的程度(1分)。
(3)知识点包括:
(共5分)
集成测试的主要依据是概要设计说明书,系统测试的主要依据是需求设计说明书。
(2分)
集成测试是系统模块的测试,系统测试是对整个系统的测试,包括相关的软硬件平台、网络以及相关外设的测试。
(3分)
第八章重点知识点
1、关于集成测试的描述,正确的条数是多少:
1)集成测试又称为组装测试、部件测试、系统测试等。
2)一般都是在做好单元测试后,再进行集成测试的。
3)集成测试可以校验各模块接口间传递参数的有效性,也可以测试模块集成后因为误差导致的错误结果。
4)集成测试主要的测试方法是黑盒和白盒相结合
A:
1条B:
2条C:
3条D:
4条
答案:
C1)错误
2、下面说法错误的是:
A:
集成测试的测试时间介于单元测试和系统测试之间
B:
集成测试无法验证全局数据结构是否正确,但是可以测试模块与模块之间的兼容性以及集成后每个模块的误差是否会累计扩大而影响整个系统
C:
集成测试按照系统层次可以分为模块内集成测试、子系统内集成测试、子系统间集成测试三个级别
D:
子系统间集成测试主要验证各子系统间交互的正确性
答案:
B
3、下面哪一个不是集成测试用例设计的方法:
A:
典型值B:
边界值C:
异常处理法D:
判定表驱动法
答案:
D
4、下面关于集成测试的策略,说法错误的是
A:
集成测试的策略就是在确定测试对象之前,将被测对象进行集成的方法
B:
集成测试策略分为自底向上集成测试、自顶向下集成测试、三明治集成测试、大爆炸集成测试等等
C:
大爆炸集成测试又称为非增量式集成测试
D:
采用探索式开发风格的产品,可以使用自顶向下集成测试策略
答案:
A
5、下面集成测试工具的使用,正确的有几条:
1)集成测试的时候,打开Testbed新建文件集,在弹出的Selectthenewsetproperty中Group和System选项,选择System
2)进入Testbed集成测试模式,有两种方式,一种是点击菜单按钮IntegrationUnit/ModuleTest;另一种是IsolationUnit/ModuleTest
3)通过IntegrationUnit/ModuleTest进入集成测试,会根据项目特点和测试策略,对入口函数调用的函数进行打桩,存在实际执行的调用函数和以桩函数形式出现的调用函数
4)使用Eclipse编写java的集成测试用例,也需要新建Junit测试类
A:
1条B:
2条C:
3条D:
4条
答案:
C3)错误
二、简答题
1.阐述软件代码可靠性测试过程包含的内容。
并阐述静态测试与动态测试分别包含哪些内容?
软件测试过程包括:
文档测试、质量度量、静态分析、代码分析、单元测试、集成测试与系统测试。
静态测试:
文档测试、质量度量、静态分析,代码分析;
动态测试:
单元测试、集成测试,系统测试。
2.采用白盒测试法设计测试用例时,常用的逻辑覆盖测试方法有哪几种?
请简单描述各种方法的目的。
目前比较常用的逻辑覆盖测试方法有:
语句覆盖、判定覆盖(分支覆盖)、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
(1)语句覆盖的目的是选择足够多的测试用例,使程序中的每个可执行语句至少执行一次。
(2)判定覆盖的目的是通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值,也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次。
(3)条件覆盖的目的是设计若干测试用例,在执行被测程序以后,要使每个判定中每个条件的可能值至少满足一次。
(4)判定/条件覆盖的目的是设计足够的测试用例,使得判定中每个条件的所有取值(真/假)至少出现一次,并且每个判定本身的所有判定结果(真/假)也至少出现一次。
(5)组合覆盖的目的是通过执行足够的测试用例,使得每个判定中条件的各种可能都至少出现一次。
(6)路径覆盖的目的是设计足够多的测试用例,要求覆盖程序中所有可能的路径。
三、综合题型
1、阅读下列说明,回答下面的问题。
(15分)
逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。
针对以下由C语言编写的程序,按要求回答问题。
voidGetIt(int m)
{
int i, k;
k=sqrt(m);
for(i=2;i<=k; i++)
if(m%i==0)break;
if(i>=k+1)
printf( "%d is a selected number\n", m);
else