软件质量保证与测试课后习题(第二章 软件测试方法与过程)

第二章 软件测试方法与过程

1. 对软件测试的复杂性进行归纳分析。

(1)无法对程序进行完全的测试:不论是黑盒测试方法还是白盒测试方法,由于测试情况数量巨大,都不可能进行彻底的测试。

(2)测试无法保证被测程序中无遗留错误:通过软件测试只能报告软件已经被发现的缺陷和故障,也不能保证经测试后发现的是全部的软件缺陷,即无法报告隐藏的软件故障。

(3)不能修复所有的软件故障:即使付出再多的时间和代价,也不能够使所有的软件故障都得到修复。

2. 分别解释什么是静态测试、动态测试、黑盒测试、白盒测试、人工测试和自动化测试。

(1)静态测试:静态测试指不运行被测软件,仅通过分析或检查等其他手段达到检测的目的。

(2)动态测试:指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,动态测试包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

(3)黑盒测试:指在对程序进行的功能抽象的基础上,将程序划分成功能单元,然后对每个功能单元生成测试数据进行测试。用这种方法进行测试时,被测程序被当作打不开的黑盒,因而无法了解其内部构造,因此又称为功能测试。

(4)白盒测试:根据被测程序的内部结构设计测试用例的一类测试,又称为结构测试或逻辑驱动测试,它是知道产品内部工作过程,通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作。而不顾它的功能。

(5)人工测试:人工测试是人为测试和手工测试的统称。人为测试的主要方法有桌前检查 (desk checking) ,代码审查( code review )和走查( walkthrough )。手工测试指的是在测试过程中,按测试计划一步一步执行程序,得出测试结果并进行分析的测试行为。

(6)自动化测试:是利用测试工具来执行测试,并进行测试结果分析的测试行为。

3. 如果没有软件规格说明或需求文档,可以进行动态黑盒测试吗?为什么?

不行。因为黑盒测试是基于软件规格说明的测试。

4. 在单元测试中,所谓单元是如何划分的?

单元测试的对象通常是软件设计的最小逻辑单元,单元的划分在面向过程的结构化程序中一般是函数或子过程,在面向对象的程序中可以是类或类的成员函数。

5.    简述单元测试的主要任务。

  1. 模块接口测试
  2. 局部数据结构测试
  3. 路径测试
  4. 错误处理测试
  5. 边界测试

6. 如果开发时间紧迫,是否可以跳过单元测试而直接进行集成测试?为什么?

不可以。因为没有经过单元测试的模块会遗留大量的缺陷到集成测试阶段,而在集成测试阶段对这些缺陷定位困难,导致后续工作展开困难,修复缺陷成本成指数级增长。

7. 什么是驱动模块和桩模块?为下面的函数构造一个驱动模块。

int divide(int a,int b)

{

         int c;

        if (b==0) {printf(“除数不能为 0”); return 0;}

         c=a/b;

        return c;

}

驱动模块(driver):用以模拟被测模块的上级模块,它接收测试数据,把这些数据传送给被测模块,启动被测模块,最后输出实测结果。

桩模块(stub):也称为存根程序,用以模拟被测模块工作过程中所调用的子模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不允许什么事情也不做。

void main(){

int x,y,z;

scanf(“%d,%d”,&x,&y);

z=divide(x,y);

Printf(“%d”,z);

}

8.    什么是回归测试?什么时候应进行回归测试?

回归测试就是重新运行现有测试用例测试原有功能,以便确定变更是否达到了预期的目的,检查变更是否损害了原有的正常功能。

每当软件发生变化时,我们就必须进行回归测试,重新测试原有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能

9.    集成测试有哪些不同的集成方法?简述不同方法的特点。

  1. 一次性集成方法需要的测试用例数目少,测试方法简单、易行。但是由于不可避免存在模块间接口、全局数据结构等方面的问题,所以一次运行成功的可能性不大;如果一次集成的模块数量多,集成测试后可能会出现大量的错误,给程序的错误定位与修改带来很大的麻烦;即使集成测试通过,也会遗漏很多错误进入系统测试。
  2. 自顶向下集成在测试的过程中,可以较早地验证主要的控制和判断点;一般不需要驱动程序,减少了测试驱动程序开发和维护的费用;可以和开发设计工作一起并行执行集成测试,能够灵活的适应目标环境;容易进行故障隔离和错误定位。但是在测试时需要为每个模块的下层模块提供桩模块,桩模块的开发和维护费用大;桩模块不能反映真实情况,重要数据不能及时回送到上层模块,导致测试不充分;涉及复杂算法和真正I/O的底层模块最易出问题,在后期才遇到导致过多的回归测试。
  3. 自底向上集成可以尽早的验证底层模块的行为;提高了测试效率;一般不需要桩模块;容易对错误进行定位。但是直到最后一个模块加进去之后才能看到整个系统的框架;驱动模块的设计工作量大;不能及时发现高层模块设计上的错误。
  4. 混合集成具有自顶向下和自底向上两种集成策略的优点,但是在被集成之前,中间层不能尽早得到充分的测试。

10.    系统测试主要包括哪些内容?

  1. 强度测试
  2. 性能测试
  3. 恢复测试
  4. 安全测试
  5. 可靠性测试
  6. 安装测试
  7. 容量测试
  8. 文档测试

11.    验收测试是由谁完成的?通常包含哪些过程?

验收测试是以用户为主的测试,软件开发人员和QA(质量保证)人员也应参加。通常包含α测试和β测试过程。

12.    分析比较面向对象的软件测试与传统的软件测试有何异同

传统的单元测试的对象是软件设计的最小单位——模块。当考虑面向对象软件时,单元的概念发生了变化,此时最小的可测试单位是封装的类或对象,而不再是个体的模块。

传统单元测试主要关注模块的算法实现和模块接口间数据的传递,而面向对象的单元测试主要考察封装在一个类中的方法和类的状态行为

面向对象软件没有层次的控制结构,因此传统的自顶向下和自底向上集成策略就不再适合,它主要有以下两种集成策略:基于类间协作关系的横向测试;基于类间继承关系的纵向测试。

系统测试一般不考虑内部结构和中间结果,因此面向对象软件系统测试与传统的系统测试差别不大。

面向对象软件测试的整体目标和传统软件测试的目标是一致的,即以最小的工作量发现尽可能多的错误,但是面向对象测试的策略和战术有很大不同。测试的视角扩大到包括复审分析和设计模型,此外,测试的焦点从过程构件(模块)移向了类。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值