1、第 1 页 共 38 页注释:黄色表示重复或相似一、选择题1. 软件测试的目的是( B )A. 避免软件开发中出现的错误B. 发现软件中出现的错误C. 容忍软件中出现的错误D. 修改软件中出现的错误2. 对于逻辑表达式(a出错的描述是否难以理解、是否对错误定位有误、是否出错原因报告有误、是否对错误条件的处理不正确;在对错误处理之前错误条件是否已经引起系统的干预等。边界测试:要特别注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。此外,如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时
2、间的因素。这类信息对进行性能评价是十分有用的。3. 单元测试的策略主要有哪些,并简述这些策略。单元测试策略主要有三种方式: 1.自顶向下的单元测试策略:从顶层调用的单元做成桩模块;对第二层测试,使用上面已测试的单元做驱动模块;依次类推,直到全部单元测试结束。 2.自底向上的单元测试策略:先对模块调用的最底层模块进行测试,模拟调用该模块的模块为驱动模块;其次,对上一层模块进行单元测试,用已经被测试过的模块做桩模块,依次类推,直到全部单元测试结束。 3.孤立测试的单元测试策略:无需考虑每个模块与其他模块之间第 18 页 共 38 页的关系,分别为每个模块单独设计桩模块和驱动模块,逐一完成所有单元模
3、块的测试。4. 集成测试有哪些不同的集成方法?简述不同方法的特点。解:集成测试通常有一次性集成、自顶向下集成、自底向上集成和混合集成 4 种集成方法。 一次性集成方法需要的测试用例数目少,测试方法简单、易行。但是由于不可避免存在模块间接口、全局数据结构等方面的问题,所以一次运行成功的可能性不大;如果一次集成的模块数量多,集成测试后可能会出现大量的错误,给程序的错误定位与修改带来很大的麻烦;即使集成测试通过,也会遗漏很多错误进入系统测试。 自顶向下集成在测试的过程中,可以较早地验证主要的控制和判断点;一般不需要驱动程序,减少了测试驱动程序开发和维护的费用;可以和开发设计工作一起并行执行集成测试,
4、能够灵活的适应目标环境;容易进行故障隔离和错误定位。但是在测试时需要为每个模块的下层模块提供桩模块,桩模块的开发和维护费用大;桩模块不能反映真实情况,重要数据不能及时回送到上层模块,导致测试不充分;涉及复杂算法和真正 I/O 的底层模块最易出问题,在后期才遇到导致过多的回归测试。 自底向上集成可以尽早的验证底层模块的行为;提高了测试效率;一般不需要桩模块;容易对错误进行定位。但是直到最后一个模块加进去之后才能看到整个系统的框架;驱动模块的设计工作量大;不能及时发现高层模块设计上的错误。 混合集成具有自顶向下和自底向上两种集成策略的优点,但是在被集成之前,中间层不能尽早得到充分的测试。5. 简述
5、基于功能分解的集成的特点,并分析其适用的应用场景。第 19 页 共 38 页6. 系统测试主要包括哪些内容?解:系统测试主要包括强度测试、性能测试、恢复测试、安全测试、可靠性测试、安装测试、容量测试和文档测试。7. 针对某论坛,考虑其重要测试的内容。8. 简述黑盒测试方法的特点黑盒测试用例设计方法主要有以下几种:等价类划分法、边界值分析法、因果图法、决策表法、错误推测法等方法。等价类划分法的特点:等价类划分法的优点是考虑了单个输入域的各类情况,避免了盲目或随机选取输入数据的布完整性和覆盖的不稳定性。等价类划分法虽然简单易用,但是没有对组合情况进行充分的考虑。需要结合其他测试用例设计的方法进行补
6、充。边界值分析法的特点:1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。因果图法的特点:1、考虑输入条件间的组合关系。2、考虑输出条件对输入条件的信赖关系,即因果关系。3、测试用例发现错误的效率高。4、能检查出功能说明书中的某些不一致或遗漏。决策表法的特点:在一个程序中,如果输入输出比较多,输入之间,输出之间相互制约的条件比较多,在这种情况下使用决策表更合适,它可以清楚地表达它们之间的各种复杂关系。错误推测法的特点:没有确定的步骤,很大程度上是凭经验进行的。9. 健壮等价类测试与标准等
7、价类测试的主要区别是什么?主要区别在于健壮等价类测试在标准等价类的基础上还要进行有效取值范围之外的输入(无效输入)的测试。10. 简述单元测试的目的和意义。目的:是暴漏出失败和错误。失败的可能性是可预期的,并且可以使用断言来进行检查。而错误则是不可预期的问题意义:(1)提前发现问题并解决可以节约时间(2)是测试阶段的基础,为后期的集成测试和系统测试做好准备;(3)对单元独立测试,第 20 页 共 38 页容易发现问题,减少成本。11. 单元测试的策略主要有哪些,并简述这些策略。12. 简述基于调用图的集成的特点,并分析其适用的应用场景。13. 什么是系统测试?系统测试是指测试整个系统已确定其是
8、否能够提供应用的所有需求行为,包含了多种测试活动,主要分为功能性测试和非功能测试。14. 针对某杀毒软件(如 360 杀毒) ,考虑其需要测试的内容。主要是采用黑盒测试的方法,包括程序各功能性测试、界面友好性测试、时效性测试、安装/卸载测试、用户说明书测试、与其他软件的兼容性、与特定硬件的兼容性、可靠性(如长时间运行,休眠/唤醒等) 、合法性(版权标示验证)等。15. 什么是软件测试计划?是指导测试过程的纲领性文件,包含产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流和风险分析等内容。16. 制定软件测试的计划的原则有?(1)制定测试计划应尽早开始;(2)保持测试
9、计划的灵活性;(3)保持测试计划简洁和易读;(4)尽量争取多渠道评审测试计划;(5)计算测试计划的投入。17. 单元测试的原则有哪些?(1)单元测试越早进行越好;(2)单元测试应该根据软件详细设计规格说明进行;(3)对于修改过的代码应该重做单元测试,以保证对已发现错误的修改没有引入新的错误;(4)当测试用例的测试结果与设计规格说明书的预期结果不一致时,测试人员应该如实记录实际的测试结果;(5)单元测试应注意选择好被测试软件单元的大小;(6)一个完整的单元测试说明应该包含软件证明测试和负面测试;(7)注意使用单元测试工具。18. 单元测试的重要性及目的是什么?19. 系统测试与用户测试有何不同?
10、系统测试是测试整个系统已确定其是否能够提供应用的所有需求行为;用户测试分为体验、界面、验收、用户测试报告组成 第 21 页 共 38 页20. 制定软件测试的计划的步骤有?(1)产品基本情况调研;(2)测试需求说明;(3)测试的策略和记录;(4)测试资源配置;(5)计划表;(6)问题跟踪报告;(7)测试计划的评审21. 什么是静态测试、动态测试?静态测试:是一种不通过执行程序而进行测试的技术,只是检测和评审。动态测试:直接执行被测试程序以提供测试支持。22. 简述单元测试的过程.(1)准备阶段;(2)编制阶段(3)代码审查阶段;(4)单元测试阶段;(5)评审、提交阶段。23. 什么是插桩程序设
11、计?是在保证被测程序原有逻辑完整性的基础上在程序中插于一些探针,通过探针的执行抛出程序运行的特征数据,通过这些数据的分析,可以获得程序的控制流和数据信息,进而得到逻辑覆盖等动态信息,从而实现测试目标的方法。 24. 简述系统测试的主要内容?(1)功能测试。即测试软件系统的功能是否正确,其依据是需求文档,如产品需求规格说明书 。 (2)健壮性测试。即测试软件系统在异常情况下能否正常运行的能力。健壮性有两层含义:一是容错能力,二是恢复能力 25. 容量测试与压力测试的区别有哪些?(1)压力测试是在给系统不断加压,增加并发量,直到崩溃,找到系统所能承受的极限值。 (2)容量测试是在预先分析的极限值下
12、,系统能否正常运行。26. 如何组织软件测试团队(1)建立合理、高效的组织结构(2)建立正确的分工体系,即角色与职责;(3)培养合格的测试人员。27. 什么是软件测试计划?是指导测试过程的纲领性文件,包含产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流和风险分析等内容。28. 制定软件测试的计划的原则有?(1)制定测试计划应尽早开始;(2)保持测试计划的灵活性;第 22 页 共 38 页(3)保持测试计划简洁和易读;(4)尽量争取多渠道评审测试计划;(5)计算测试计划的投入。29. 单元测试的原则有哪些?(1)单元测试越早进行越好;(2)单元测试应该根据软件详细设
13、计规格说明进行;(3)对于修改过的代码应该重做单元测试,以保证对已发现错误的修改没有引入新的错误;(4)当测试用例的测试结果与设计规格说明书的预期结果不一致时,测试人员应该如实记录实际的测试结果;(5)单元测试应注意选择好被测试软件单元的大小;(6)一个完整的单元测试说明应该包含软件证明测试和负面测试;(7)注意使用单元测试工具。30. 单元测试的重要性及目的是什么?重要性:1、提前发现问题并解决可以节约时间 2、是测试阶段的基础,为后期的集成测试和系统测试做好准备;3、对单元独立测试,容易发现问题,减少成本。目的:是暴漏出失败和错误。失败的可能性是可预期的,并且可以使用断言来进行检查。而错误
14、则是不可预期的问题31. 测试和 测试有什么不同?a 测试是在公司内部由用户组织与的测试;a 测试对发现缺陷是可控的,但缺陷是人数有限、地域限制。b 测试是在外部有用户进行的测试;b 测试不会认真地去发现缺陷,有时仅仅是为了抢占市场。四、综合应用题1. 白盒测试方法的综合应用(1) 简述白盒测试用例的设计方法。解:白盒测试用例设计方法主要有逻辑覆盖和独立路径测试。 从覆盖源程序语句的详尽程度分析,逻辑覆盖主要有以下不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。实际项目中,由于程序内部的逻辑存在不确定性和无穷性,尤其对于大规模复杂软件,不必采用所有的覆盖指
15、标,而应根据实际情况选择合适的覆盖指标。 独立路径测试是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出可执行的独立路径集合,从而设计出相应的测试用例。设计出的测试用例要保证被测程序的每条可执行的独立路径至少被执行一次。独立路径测试给出了满足路径覆盖指标所需测试用例的下限,同时给出了第 23 页 共 38 页语句覆盖的上限,它可以确保对所有相互独立的决策结果进行测试。(2) 分析归纳逻辑覆盖的各种策略,并比较每种覆盖的特点,分析在怎样的情况下采用何种覆盖方式。解:语句覆盖是选择足够多的测试数据,使被测程序中每个语句至少执行一次。语句覆盖是最弱的逻辑覆盖标准。 判定覆盖又叫分支覆盖,它
16、不仅每个语句必须至少执行一次,而且每个判定表达式的每种可能的结果都应该至少执行一次。判定条件覆盖比语句覆盖强,但是对程序逻辑的覆盖程度仍然不高。 条件覆盖的含义是,使判定表达式中的每个条件都取到各种可能的结果。条件覆盖通常比判定覆盖强,但是也可能有相反的情况:虽然每个条件都取到了两个不同的结果,判定表达式却始终只取一个值。 判定/条件覆盖的含义是,选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。但有时判定/条件覆盖也并不比条件覆盖更强。 条件组合覆盖是更强的逻辑覆盖标准,它要求选取足够的测试数据,使得每个判定表达式中条件的各种可能组
17、合都至少出现一次。满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。因此,条件组合覆盖是前述几种覆盖标准中最强的。但是,满足条件组合覆盖标准的测试数据并不一定能使程序中的每一条路径都执行到。路径覆盖的定义是选取足够多测试数据,使程序的每一条可能路径都至少执行一次。但在实际问题中,一个不太复杂的程序,其路径数都可能是一个庞大的数字,以致要在测试中覆盖所有的路径是不可能实现的。即使对于路径数有限的程序做到了路径覆盖,也不能保证被测程序的正确性。(3)请按照各种覆盖方法为下述语句设计测试用例,并写出测试过程if(a1) and (b=0) thenx=x/aif(a=
18、2) or (x1) thenx=x+1第 24 页 共 38 页语句覆盖:CASE 1:a=2,b=0,x=3。则程序按路径 ace 执行,这样该程序段的 4 个语句均得到执行,从而达到了语句覆盖。断定覆盖:CASE2:a=2,b=0,x=3。CASE3:a=1,b=0,x=1。则可分别执行路径 ace 和 abd。从而使两个判断的 4 个分支 c、e 和 b、d 分别得到覆盖。条件覆盖:在上述程序段中,第一个判断应考虑到:a1 取真值,记为 Ta1;a1 取价值,即 a1 取真值,记为 Tx1;x1 取假值,即 x1,b=0 记为 Ta,Tb ;2 号、a1,b!=0 记为 Ta,Fb;3
19、 号、a1 记为 Ya,Yx;6 号、a=2,x1 记为 Na,Yx ;8 号、a!=2,x0 and b0) Thenc = c/aEnd ifIf(a1 OR c 1) Thenc = c +1End ifc = b+c要求:根据以上的示例源码,采用两种以上的白盒测试方法进行测试,要求写出详细的测试用例及测试过程,并比较你所采用的测试方法的优点和缺点。第 28 页 共 38 页第 29 页 共 38 页5. 黑盒测试方法的综合应用以“打印机打印文件”为例,用黑盒测试中的判定表法来对其进行测试。要求:写出详细的要求写出详细的测试步骤,测试用例以及详细的测试过程。1、 列出所有的条件桩和动作桩
20、条件桩:C1:有驱动程序吗?C2:有纸张吗?C3:有墨粉吗?动作桩:A1:安装驱动程序A2:加入纸张A3:加入墨粉A4:打印纸张2、 确定规则个数输入条件个数:3每个条件的取值:”是“ 或” 否 “规则个数:2*2*2=83、 填入条件项和动作项第 30 页 共 38 页1 2 3 4 5 6 7 8C1 Y Y Y Y N N N NC2 Y Y N N Y Y N N条件C3 Y N Y N Y N Y NA1 A2 A3 动作A4 4、 简化决策表,合并相似规则没有相似规则,无需合并。6. 白盒测试方法的综合应用示例源码(购物车添加商品方法,判断 hashmap 中没有 pid 对应的商品为false 的情况下添加 product)public void addProduct(String pid,Product product)if(hasmap=null)hashmap= new HashMap();if(hashmap.containsKey(pid)=false) /购物车中不存在该商品 hashmap.put(pid,product);要求:根据以上的示例源码,采用两种以上的白盒测试方法进行测试,要求写出详细的测试用例及测试过程,并比较你所采用的测试方法的