1、第第5 5章章 编编程程与测试与测试2/75 第第5 5章章 编程与测试编程与测试n 5.1 5.1 开发工具的选择开发工具的选择n 5.2 5.2 程序设计风格程序设计风格n 5.3 5.3 软件测试的概念软件测试的概念n 5.4 5.4 软件测试的方法软件测试的方法n 5.5 5.5 测试用例设计测试用例设计n 5.6 5.6 测试过程测试过程n 5.7 5.7 调试调试3/75 5.4 5.4 软件测试的方法软件测试的方法n 5.4.1 5.4.1 测试方法测试方法n 5.4.2 5.4.2 测试步骤测试步骤n 5.4.3 5.4.3 测试阶段的信息流测试阶段的信息流4/75 5.4.1
2、 5.4.1 测试方法测试方法n 测试任何产品都有两种方法:测试任何产品都有两种方法:v 黑盒测试黑盒测试v 白盒测试白盒测试5/75 黑盒测试法黑盒测试法n 如果已经知道了产品应该具有的功能,可以通过测如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;试来检验是否每个功能都能正常使用;n 把程序看作一个黑盒子,完全不考虑程序内部的逻把程序看作一个黑盒子,完全不考虑程序内部的逻辑结构和原理,只依据程序的需求规格说明书,检辑结构和原理,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。查程序的功能是否符合它的功能说明。6/75 暗盒测试暗盒测试软件输入输
3、入不深入代码细节的测试方法称为动态黑盒测试。不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用。软件测试员充当客户来使用。能得到需能得到需求定义的求定义的结果吗?结果吗?7/75 黑盒测试黑盒测试n 黑盒测试是在程序接口进行的测试的,它只检查程黑盒测试是在程序接口进行的测试的,它只检查程序功能可否正常使用,能否适当地接收输入数据并序功能可否正常使用,能否适当地接收输入数据并产生欲期的输出结果。产生欲期的输出结果。n 黑盒测试,又称为黑盒测试,又称为“功能测试功能测试”、“暗盒测试暗盒测试”8/75 通过黑盒测试法通过黑盒测试法,发现的错误主要有发现的错误主要有:n 是否有不正确
4、的或遗漏了的功能是否有不正确的或遗漏了的功能;n 在接口上在接口上,能否正确地接受输入数据能否正确地接受输入数据,能否产生正能否产生正确的输入结果确的输入结果;n 访问外问信息是否有错访问外问信息是否有错;n 性能上是否满足要求等性能上是否满足要求等9/75 白盒测试白盒测试n 如果知道产品的内部工作过程,可以通过测试来检验如果知道产品的内部工作过程,可以通过测试来检验产品内部逻辑是否按照规格说明书的规定正常进行。产品内部逻辑是否按照规格说明书的规定正常进行。n 与黑盒测试法相反,白盒测试法的前提是可以把程序与黑盒测试法相反,白盒测试法的前提是可以把程序看成装在一个透明的盒子里,测试者完全知道
5、程序的看成装在一个透明的盒子里,测试者完全知道程序的结构和处理算法结构和处理算法10/75 动态白盒测试动态白盒测试 带上带上X X光眼镜测试软件光眼镜测试软件?程序的结程序的结构设计的构设计的有错误码有错误码吗?吗?11/75 白盒测试白盒测试n 白盒法把测试对象看做一个透明的盒子,它允许测白盒法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。或选择测试用例,对程序所有逻辑路径进行测试。n 通过在不同点检查程序的状态,确定实际的状态是通过在不同点检查程序的状态,确定实际的
6、状态是否与预期的状态一致。因此白盒测试又称为结构测否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。试或逻辑驱动测试。12/75 n 测试方案:通常的做法是,用黑盒法设计基本测试方案:通常的做法是,用黑盒法设计基本的测试方案,再用白盒法补充一些方案。的测试方案,再用白盒法补充一些方案。13/75 5.4 5.4 软件测试的方法软件测试的方法n 5.4.1 5.4.1 测试方法测试方法n 5.4.2 5.4.2 测试步骤测试步骤n 5.4.3 5.4.3 测试阶段的信息流测试阶段的信息流14/75 5.4.2 5.4.2 测试步骤测试步骤n 除非是测试一个小程序,否则一开始就把整个系
7、统除非是测试一个小程序,否则一开始就把整个系统作为一个单独的实体来测试是不现实的。作为一个单独的实体来测试是不现实的。n 根据第根据第4 4条测试准则,测试过程也必须分步骤进行,条测试准则,测试过程也必须分步骤进行,后一个步骤在逻辑上是前一个步骤的继续。后一个步骤在逻辑上是前一个步骤的继续。15/75 测试步骤:测试步骤:n大型软件系统通常由若干个子系统组成,每个子系大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成,因此,测试过程基本上由下统又由许多模块组成,因此,测试过程基本上由下述几个步骤组成:述几个步骤组成:模块测试(单元测试)模块测试(单元测试)子系统测试子系统测试系统测
8、试系统测试验收测试(确认测试)验收测试(确认测试)平行运行(并行运行)平行运行(并行运行)集成测试16/75 1.1.模块测试,又称单元测试模块测试,又称单元测试n 模块功能明确,具有高内聚、低藕合的特征,可能作为模块功能明确,具有高内聚、低藕合的特征,可能作为一个独立的一个独立的“软件成份软件成份”来测试,也比较容易设计测试来测试,也比较容易设计测试方案方案n 模块测试的目的是保证每个模块作为一个单元能正确运模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试,又称为单元测试行,所以模块测试,又称为单元测试n 单元测试发现的往往是编码和详细设计的错误单元测试发现的往往是编码和详细
9、设计的错误,这个测这个测试由程序员自己进行,结队编程时,测试效果会更好试由程序员自己进行,结队编程时,测试效果会更好17/75 2.2.子系统测试子系统测试n 子系统测试是把经过单元测试的模块放在一起形成子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。一个子系统来测试。n 是集成测试的一种。是集成测试的一种。n 模块间的交互是系统测试关注的焦点,因此,这个模块间的交互是系统测试关注的焦点,因此,这个步骤着重测试模块的接口。步骤着重测试模块的接口。18/75 3.3.系统测试系统测试n 系统测试是把经过测试的子系统装配成一个完整的系统测试是把经过测试的子系统装配成一个完整的系统来测
10、试系统来测试n 系统测试不仅要发现设计和编码的错误,重点还在系统测试不仅要发现设计和编码的错误,重点还在于验证系统功能是否满足用户要求于验证系统功能是否满足用户要求n 这一步发现的往往是软件设计中的错误,也可能发这一步发现的往往是软件设计中的错误,也可能发现需求说明中的错误现需求说明中的错误n 不论是子系统测试还是系统测试,都兼有检测和组不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。装两重含义,通常称为集成测试。19/75 4.4.验收测试,又称验收测试,又称“确认测试确认测试”n 验收测试与系统测试基本类似,但是它是在用户参验收测试与系统测试基本类似,但是它是在用
11、户参与下进行的,而且可能主要使用实际数据进行测试。与下进行的,而且可能主要使用实际数据进行测试。n 验收测试的目的是验证系统可否满足用户的需要,验收测试的目的是验证系统可否满足用户的需要,因此,又称为因此,又称为“确认测试确认测试”n 这一步,发现的往往是系统需求说明书中的错误这一步,发现的往往是系统需求说明书中的错误20/75 5.5.平行运行,又称平行运行,又称“并行运行并行运行”n关系重大的软件,在验收之后并不立即投入生产性运行,关系重大的软件,在验收之后并不立即投入生产性运行,而是要再经过一段新而是要再经过一段新/旧系统的并行运行时间的考验旧系统的并行运行时间的考验n将新将新/旧系统并
12、行运行,以便比较两个系统的处理结果。这旧系统并行运行,以便比较两个系统的处理结果。这样做的具体目的如下:样做的具体目的如下:可以在准生产环境中运行新系统而又不冒风险;可以在准生产环境中运行新系统而又不冒风险;用户能有一段熟悉新系统的时间;用户能有一段熟悉新系统的时间;可以验证用户指南和使用手册之类的文档;可以验证用户指南和使用手册之类的文档;能够以准生产模式对新系统进行全负荷测试,可以用能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。测试结果验证性能指标。21/75 5.4 5.4 软件测试的方法软件测试的方法n 5.4.1 5.4.1 测试方法测试方法n 5.4.2 5.
13、4.2 测试步骤测试步骤n 5.4.3 5.4.3 测试阶段的信息流测试阶段的信息流22/75 5.4.3 5.4.3 测试阶段的信息流测试阶段的信息流v 以上集中讨论了与测试有关的概念,但是,测试作以上集中讨论了与测试有关的概念,但是,测试作为软件工程的一个阶段,它的根本任务是保证软件为软件工程的一个阶段,它的根本任务是保证软件的质量,因此除了进行测试之外,还有另外一些与的质量,因此除了进行测试之外,还有另外一些与测试密切相关的工作应该完成。测试密切相关的工作应该完成。v 这就是下一小节要讨论的内容这就是下一小节要讨论的内容针对测试活动的针对测试活动的软件工程管理内容软件工程管理内容23/7
14、5 测试活动管理测试活动管理n 测试阶段的信息流测试阶段的信息流n 调试调试n 测试评价测试评价24/75 测试阶段的信息流测试阶段的信息流25/75 测试阶段的信息流有两类:测试阶段的信息流有两类:软件配置,包括需求说明书、设计说明书和源程序清软件配置,包括需求说明书、设计说明书和源程序清单等;单等;测试配置,包括测试计划和测试方案。测试配置,包括测试计划和测试方案。n所谓测试方案不仅仅是测试时使用的输入数据,还应该所谓测试方案不仅仅是测试时使用的输入数据,还应该包括每组输入数据预定要检验的功能,以及每组输入数包括每组输入数据预定要检验的功能,以及每组输入数据预期应该得到的正确输出。据预期应
15、该得到的正确输出。(称为测试用例称为测试用例)n实际上,测试配置是软件配置的一个子集,最终交出的实际上,测试配置是软件配置的一个子集,最终交出的软件配置应该包括上述测试配置以及测试的实际结果和软件配置应该包括上述测试配置以及测试的实际结果和调试的记录。调试的记录。26/75 调试调试n 比较测试得出的实际结果和预期的结果,如果两者比较测试得出的实际结果和预期的结果,如果两者不一致则很可能是程序中有错误。设法确定错误的不一致则很可能是程序中有错误。设法确定错误的准确位置并改正它,这就是调试的任务。准确位置并改正它,这就是调试的任务。n 与测试不同,通常由程序的编写者负责调试。与测试不同,通常由程
16、序的编写者负责调试。27/75 测试评价测试评价n 在对测试结果进行收集和评价的时候,软件可靠性在对测试结果进行收集和评价的时候,软件可靠性所达到的定性指标也开始明朗了。所达到的定性指标也开始明朗了。n 如果经常出现要求修改设计的严重错误,那么软件如果经常出现要求修改设计的严重错误,那么软件的质量和可靠性是值得怀疑的,应该进一步仔细测的质量和可靠性是值得怀疑的,应该进一步仔细测试。试。n 反之,如果看起来软件功能完成得很正常,遇到的反之,如果看起来软件功能完成得很正常,遇到的错误也很容易改正,则仍然应该考虑两种可能:错误也很容易改正,则仍然应该考虑两种可能:n(1)(1)软件的可靠性是可以接受
17、的;软件的可靠性是可以接受的;n(2)(2)所进行的测试尚不足以发现严重的错误。所进行的测试尚不足以发现严重的错误。28/75 测试评价测试评价n 最后,如果经过测试,一个错误也没有被发现,则很可最后,如果经过测试,一个错误也没有被发现,则很可能是因为对测试配置思考不充分,以致不能暴露软件中能是因为对测试配置思考不充分,以致不能暴露软件中潜藏的错误。潜藏的错误。29/75 测试评价测试评价n 在测试阶段积累的结果,也可以用更形式化的方法在测试阶段积累的结果,也可以用更形式化的方法进行评价。进行评价。n 软件可靠性模型使用错误率数据估计将来出现错误软件可靠性模型使用错误率数据估计将来出现错误的情况,并进而对软件可靠性进行预测的情况,并进而对软件可靠性进行预测30/75 完完