软件测试总结

1.什么是软件测试?软件测试的意义和目的是什么?

    IEEE对软件测试的定义为使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验他是否满足规定的需求或是弄清预期结果与实际结果之间的差别。

    软件测试是在一个可控的环境中分析或执行程序的过程,其根本目的是尽可能少的时间和人力发现并改正软件中潜在的各种故障及缺陷,提高软件的质量。

2.软件测试与软件开发有何关系?

    软件开发过程是软件工程的重要内容,也是进行软件测试的基础。软件测试是贯穿软件开发的整个生命周期。测试在开发各阶段的设计中都有作用,以检查本阶段的工作成果是否接近预期的目标,尽可能早地发现并改正错误。

3.简述软件测试过程。

    软件测试是由一系列不同的测试阶段组成,即单元测试、集成测试、确认测试、系统测试、验收测试。软件测试是一个自底向上逐步集成的过程。

    单元测试是测试执行的开始阶段,即首先对每一个程序模块进行单元测试,以确保每个模块能正常工作。单元测试大多采用白盒测试方法,尽可能发现并消除模块内部在逻辑和功能上的故障及缺陷。然后,把已测试的模块组装起来,形成一个完整的软件后进行集成测试,以检测和排除与软件设计相关的程序结构问题。集成测试大多采用黑盒测试方法来设计测试用例。确认测试以规格说明书规定的需求为尺度,检验开发的软件能否满足所有的功能和性能要求。确认测试完成后,给出的应该是合格的软件产品。但为了检验开发的软件是否能与系统的其他部分协调工作,还需进行系统测试。最后进行验收测试,以解决开发的软件产品是否复合预期要求、用户是否接受等问题。

4.软件开发过程

    1)制定计划

    2)需求分析

    3)软件设计

    4)程序编写

    5)软件测试(单元测试、集成测试、确认测试、系统测试)

    6)运行和维护

5.软件测试在软件开发中的作用

  • 项目规划阶段:负责整个测试阶段的监控
  • 需求分析阶段:确定测试需求分析,制定系统测试计划。测试需求分析是指分析产品生存周期测试所需的资源、配置、各阶段评审通过的标准等。
  • 概要设计和详细设计阶段:制定集成测试计划和单元测试计划。
  • 程序编写阶段:开发相应的测试代码和测试脚本。
  • 测试阶段:实施测试,并提交相应的测试报告。

6.软件测试环境的搭建:硬件+软件+网络+数据准备+测试工具

7.请概括静态测试和动态测试的不同点?

    静态测试是指不运行被测程序本身,仅通过分析或检查程序的语法、结构、过程、接口等来检查程序的正确性。静态分析主要集中在需求文档、设计文档以及程序结构上,可以进行类型分析、接口分析、输入输出规格说明分析等。

    动态测试是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。

8.系统测试和验收测试有何不同?

    系统测试实际上是针对系统中各个组成部分进行的综合性检验,很接近日常测试实践。目标不是要找出软件故障,而是要证明系统的性能。

    验收测试的目的是向用户表明所开发的软件系统能够像用户所预期的那样工作。验收测试解决开发的软件产品是否符合预期的各项要求,用户是否接受等问题,不只检验软件某方面的质量,还要进行全面的质量检验并决定软件是否合格。

1.缺陷模式

1)故障模式

  • 内存泄漏模式(Memory Leak Faults,MLF) MLF有三种形式:(1)遗漏故障:是指申请的内存没有被释放(2)不匹配故障:是指申请函数和释放函数不匹配(3)不相等的释放错误:是指释放的空间和申请的空间大小不一样
  • 数组越界模式(Out of Bounds Array Access Fault,OBAF)
  • 使用未初始化变量模式(Uninitialized Variable Fault,UVF)
  • 空指针使用故障模式(NULL Pointer Dereference Fault,NPDF)
  • 非法计算类故障模式(Illegal Computing Fault,ILCF)
  • 死循环结构模式(Dead Loop Fault,DLF)
  • 资源泄漏故障模式(Resource Leak Fault,RLF)
  • 并发故障模式

2)安全漏洞模式

  • 缓冲区溢出模式
  • 被感染的数据模式
  • 竞争条件模式
  • 风险操作模式

3)缺陷模式

4)规则模式

1.什么是集成和集成测试?

    集成(Integration)是指把多个单元组合起来形成更大的单元。

    集成测试(Integration Testing)是在假定各个软件单元已经通过了单元测试的前提下,检查各个软件单元之间的相互接口是否正确。

2.简述系统测试和集成测试的区别?

(1)测试对象。集成测试的对象是由通过了单元测试的各个模块所集成起来的组件。而系统测试的测试对象,除了软件之外,还包括计算机硬件、相关的外围设备以及数据传输机构等。

(2)测试时间。集成测试介于单元测试和系统测试之间的测试。显然,在测试时间上,集成测试由于系统测试。

(3)测试方法。由于集成测试处在单元测试和系统测试的过渡阶段,为了提高软件的可靠性,通常会采用白盒测试和黑盒测试相结合的测试方法。而系统测试通常使用黑盒测试。

(4)测试内容。集成测试的主要内容是各个单元模块之间的接口,以及各个模块集成后所实现的功能。而系统测试关注的主要内容是整个系统的功能和性能。

(5)测试目的。集成测试的主要目的是发现单元之间接口的错误,以及发现集成后的软件同软件概要设计说明书不一致的地方,以确保各个单元模块组合在一起后,能够达到软件概要设计说明的要求,协调一致的工作。而系统测试的主要目的是通过与系统需求定义相比较,发现软件与系统定义不符合或矛盾的地方。

(6)测试角度。集成测试更多的是站在开发人员的角度上。系统测试更多的是站在用户的角度。

3.集成测试的原则?

    对于传统软件来说,按集成粒度不同,可以把集成测试分为3个层次,即:1)模块间集成测试 2)子系统内集成测试 3)子系统间集成测试

    对于面向对象的应用系统来说,按集成粒度不同,可以把集成测试分为2个层次:1)类内集成测试 2)类间集成测试

4.集成测试策略?

    由模块组装成程序时有两种方法。一种方法是先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,这种方法称为非渐增式集成;另一种方法是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合起来进行测试。这种每次增加一个模块的方法称为渐增式集成

    对两个以上模块进行集成时,需要考虑它们和周围模块的联系。为了模拟这些联系,需要设置若干辅助模块。

  • 驱动模块(Driver):用以模拟待测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给待测模块,启动待测模块,并打印出相应的结果。
  • 桩模块(Stub):也称为存根程序,用以模拟待测模块工作过程中所调用的模块。桩模块由待测模块调用,它们一般只进行很少的数据处理。   

非渐增式集成

    非渐增式集成方法首先对每个子模块进行测试(即单元测试),然后将所有模块全部集成起来一次性进行集成测试。

渐增式集成

    1.自顶向下集成

    (1)对主控制模块进行测试,测试时用桩模块代替所有直接附属于主控制模块的模块;

    (2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个桩模块(新结合进来的模块往往又需要新的桩模块)

    (3)再结合近一个模块的同时进行测试。

    (4)为了保证加入模块没有引进新的错误,可能需要进行回归测试(即全部或部分地重复以前做过的测试)。

    2.自底向上集成

    (1)把低层模块组合成实现某个特定软件子功能的族。

    (2)写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出。

    (3)对由模块组成的子功能族进行测试。

    (4)去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。

三明治集成

    三明治集成是一种混合增量式测试策略,综合了自顶向下和自底向上两种集成方法的优缺点。

    (1)确定以那一层为界来进行集成

    (2)对模块B及其所在层下面的各层使用自底向上的集成策略

    (3)对模块B所在层上面的层次使用自顶向下的集成策略

    (4)对模块B所在层各模块同相应的下层集成

    (5)对系统进行整体测试

5.简述各种集成测试策略的优缺点。

    (1)非渐增式集成:测试时会遇到许许多多的错误,定位和改正错误更是困难,只适用于规模娇小的应用系统,在大、中型系统中一般不推荐使用这种方法。

    (2)渐增式集成:把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误;对接口可以进行更彻底的测试;可以使用系统化的测试方法。

    (3)三明治集成:综合了自顶向下和自底向上两种集成方法的优点。桩模块和驱动模块的开发工作都比较小,不过其代价是在一定程度上增加了定位缺陷的难度。

6.集成测试过程:制定集成测试计划->设计集成测试->实施集成测试->执行集成测试->评估集成测试

1.什么是压力测试?在实际设计中压力测试的侧重点是什么?

    压力测试(Stress Testing)是指模拟巨大的工作负荷,以查看系统在峰值使用情况下是否可以正常运行。

    压力测试侧重的是系统整体,保证产品发布后系统能否满足用户需求。

2.压力测试与其它功能测试相比较有哪些区别?

    压力测试与性能测试的联系与区别:压力测试是用来保证产品发布后系统能否满足用户需求,关注的重点是系统整体;而性能测试可以发生在各个测试阶段,即使是在单元层,一个单独模块的性能也可以进行评估。压力测试是通过确定一个系统的瓶颈,来获得系统能提供的最大服务级别的测试。性能测试是检测系统在一定负荷下的表现,是正常能力的表现;而压力测试是极端情况下系统能力的表现。

    压力测试和负载测试:负载测试是通过逐步增加系统工作量,测试系统能力的变化,并最终确定在满足功能指标的情况下,系统所能承受的最大工作量的测试。压力测试实质上就是一种特定类型的负载测试。

    压力测试和并发性测试:并发性测试是一种测试手段,在压力测试中可以利用并发测试来进行压力测试。

3.什么是容量测试?

    容量测试(Volume Testing)是指采用特定的手段,检测系统能够承载处理任务的极限值所进行的测试工作。

    容量测试的目的是使系统承受超额的数据容量来检测它是否能够正确处理,通过测试,分析出反映软件系统应用特征的某项指标的极限值,确定系统在其极限值状态下还能否保持其主要功能正常运行。

    压力测试主要是使系统承受速度方面的超额负载,容量测试关注的是数据方面的承受能力。

4.什么是健壮性测试?

    健壮性测试(Robustness Testing)主要用于测试系统抵御错误的能力。这里的错误通常指的是由于设计缺陷而带来的系统错误。测试的重点为当出现故障时,系统是否能够自动恢复或忽略故障继续运行。

5.什么是安全性测试?

    安全性测试是检查系统对非法侵入的防范能力,其目的是为了发现软件系统中是否存在安全漏洞。软件安全性是指在非正常条件下不发生安全事故的能力。

6.可靠性测试

7.恢复性测试与备份测试?

    恢复性测试主要检查系统的容错能力。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。

    备份测试是恢复性测试的一个补充,也是恢复性测试的一个部分。备份测试的目的是验证系统在发生软件或者硬件失败时备份数据的能力。

8.协议一致性测试

9.兼容性测试:是指检查软件之间是否能够正确地进行交互和共享信息。

10.安装性测试

11.可用性测试(Usability Testing)是对于用户友好性的测试,是指在设计过程中被用来改善易用性的一系列方法。

12.配置性测试(Configuration Testing)是验证系统在不同的系统配置下能否正确工作,这些配置包括:软件、硬件和网络等。

13.文档性测试(Doucumentation Testing):主要针对系统提交给用户的文档进行验证,目标是验证软件文档是否正确记录系统开发全过程的技术细节。

14.GUI测试

15.验收测试:是为了向用户表明系统能够按照用户需求正常运行。经过集成测试后,已经把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除,接着就应当进一步验证系统在功能与性能方面的有效性,这就是验收测试的任务。

16.回归测试:是在软件发生变动时保证原有功能正常运作的一种测试策略和方法。





你可能感兴趣的:(软件测试)