11.7 软件测试的一般步骤
除非是测试一个小程序,否则一开始就把整个系统作为一个单独的实体来测试是不现实的。与开发过程类似,测试过程也必须分步骤进行,后一个步骤在逻辑上是前一个步骤的继续。
从过程的观点考虑测试,在软件工程环境中的测试过程,实际上是顺序进行的4个步骤的序列。最开始,着重测试每个单独的模块,以确保它作为一个单元来说功能是正确的,这种测试称为单元测试。单元测试大量使用白盒测试技术,检查模块控制结构中的特定路径,以确保完全覆盖并发现最大数量的错误。接下来,必须把模块装配(即集成)在一起形成完整的软件包,在装配的同时进行测试,因此称为集成测试。集成测试同时解决程序验证和程序构造这两个问题。在集成过程中最常用的是黑盒测试用例设计技术。
当然,为了保证覆盖主要的控制路径,也可能使用一定数量的白盒测试。在软件集成完成之后,还需要进行一系列高级测试。必须测试在需求分析阶段确定下来的确认标准,确认测试是对软件满足所有功能的、行为的和性能需求的最终保证。在确认测试过程中仅使用黑盒测试技术。
11.8 单元测试
11.8.1 单元测试概述
编写一个函数,执行其功能,检查功能是否正常,有时还要输出一些数据进行辅助判断,如果弹出信息窗口,则可以把这种单元测试称为临时单元测试。只进行了临时单元测试的软件,针对代码的测试很不充分,代码覆盖率要超过70%都很困难,未覆盖的代码可能遗留有大量细小的错误,而且这些错误还会相互影响。当Bug暴露出来时难以调试,大幅度提高后期测试和维护成本,因此进行充分的单元测试是提高软件质量、降低开发成本的必由之路。
单元测试是开发者编写代码检验被测代码的某单元功能是否正确而进行的测试。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,将一个很大的值放入一个有序表中,然后确认该值是否出现在表的尾部,或者从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符。
单元测试与其他测试不同,可以看作是编码工作的一部分,是由程序员自己完成的,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码进行单元测试。执行单元测试,就是为了证明这段代码的行为与我们期望的一致。只有经过单元测试的代码才是已完成的代码,提交产品代码时也要同时提交测试代码。
单元测试是软件测试的基础,其效果会直接影响软件后期的测试,最终在很大程度上影响软件质量。做好单元测试能够在接下来的集成测试等活动中节省很多时间;发现很多集成测试和系统测试无法发现的深层次问题;降低定位问题和解决问题的成本;从整体上提高软件质量。
11.8.2 单元测试的内容
单元测试侧重于模块的内部处理逻辑和数据结构,利用构件级设计描述作为指南,测试重要的控制路径以发现模块内的错误。测试的相对复杂度和这类测试发现的错误受到单元测试约束范围的限制,测试可以对多个构件并行执行。
图11-17概要描述了单元测试。测试模块的接口是为了保证被测程序单元的信息能够正常地流入和流出;检查局部数据结构是为了确保临时存储的数据在算法的整个执行过程中能够维持其完整性;执行控制结构中的所有独立路径(基本路径),以确保模块中的所有语句至少执行一次;测试错误处理确保被测模块在工作中发生错误后,能够采取有效的错误处理措施;测试边界条件确保模块在到达边界值的极限或受限处理的情形下仍能正确执行。
11.8.3 单元测试的方法
一般情况下,单元测试在代码编写之后就可以进行。测试用例设计应与复审工作结合,根据设计规约选取数据,增大发现各类错误的可能。
在进行单元测试时,被测试的单元本身不是独立的程序,需要为其开发驱动模块和桩模块。驱动模块是用来模拟待测试模块的上级模块。驱动模块在集成测试中接受测试数据,将相关的数据传送给待测模块,启动待测模块,并打印出相应的结果;桩模块也称为存根程序,用以模拟待测模块工作过程中调用的模块。桩模块由待测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验待测模块与下级模块的接口。
驱动模块和桩模块都是额外的开销,属于必须开发但是又不能和最终软件一起提交的部分。如果驱动模块和桩模块相对简单,则额外开销相对较低;在比较复杂的情况下,完整的测试需要推迟到集成测试阶段才能完成。
11.9 集成测试
11.9.1 集成测试概述
集成是指把多个单元组合起来形成更大的单元。集成测试是在假定各个软件单元已经通过了单元测试的前提下,检查各个软件单元之间的接口是否正确。集成测试是构造软件体系结构的系统化技术,同时也是进行一些旨在发现与接口相关的错误的测试。其目标是利用已通过单元测试的构件建立设计中描述的程序结构。
集成测试是多个单元的聚合,许多单元组合成模块,而这些模块又聚合成程序的更大部分,如子系统或系统。集成测试(也称组装测试、联合测试)是单元测试的逻辑扩展,它的最简单的形式是将两个已经测试通过的单元组合成一个构件,并且测试它们之间的接口。集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规约的要求组装成模块、子系统或系统的过程中,各部分功能是否达到或实现相应技术指标及要求的活动。集成测试主要是测试软件单元的组合能否正常工作以及与其他组的模块能否集成起来工作。最后,还要测试构成系统的所有模块组合能否正常工作。集成测试参考的主要标准是软件概要设计,任何不符合该设计的程序模块行为,都应该加以记录并上报。
在集成测试之前,单元测试应该已经完成,集成测试中使用的对象应该是已经经过单元测试的软件单元。这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大程度的影响,并且会大幅增加软件单元代码纠错的代价。单元测试和集成测试关注的范围不同,因此它们发现问题的集合上包含不相交的区域,二者之间不能相互替代。
11.9.2 集成测试分析
要做好集成测试,必须加强集成测试的分析工作。集成测试分析直接指导集成测试用例的设计,在整个集成测试过程中占据最关键的地位。集成测试分析可以从以下几个方面进行。
1. 体系结构分析
体系结构分析可以从两个角度出发,首先从需求的跟踪实现出发,划分出系统实现上的结构层次,这个结构层次对集成的层次考虑是有帮助的;其次需要划分系统构件之间的依赖关系图,通过分析该图,划分出集成测试的粒度。
2.模块分析
模块分析是集成测试分析最关键的活动之一,模块划分的好坏直接影响了集成测试的工作量、进度以及质量。因此需要慎重对待模块的分析。
3.接口分析
接口分析包括接口划分、接口分类和接口数据分析3个部分。
4.集成测试策略
分析集成测试策略分析主要根据被测试对象选择合适的集成策略。下面重点讲述集成测试策略。
标签:集成,测试,步骤,单元测试,一般,模块,软件,单元,软件测试 From: https://www.cnblogs.com/angoli/p/16726043.html