|
中华人民共和国国家标准 GB/T 15532-1995 Computer software unit testing 计算机软件单元测试 1 主题内容与适用范围1.1 主题内容软件单元测试是一个过程。本标准为该过程规定了一个标准的方法,使之成为软件工程实践中的基础。该方法是一种综合的方法,目的是对软件单元进行系统化的测试,包括测试计划的执行、测试集的获取以及测试单元与其需求的对照衡量包括使用样本数据来执行被测试单元、并将该单元的实际结果与单元的需求文件中指定的结果进行比较。 本标准描述了一个测试过程,它由一系列具有层次结构的阶段、活动及任务组成,且为每一活动定义了一个最小任务集。 1.2 适用范围本规范可适用于任何计算机软件的单元测试(包括新开发的或修改过的软件单元)。本标准并不规定这些软件的类型,也不规定哪些软件必须进行单元测试。 本标准不涉及其他综合性的单元验证或确认过程,象评审(例如走查、审查)、静态分析(例如一致性核查、数据流分析—)或形式化分析(例如:正确性证明、符号执行)。 本标准不要求使用特定的测试机制或工具。本标准也不蕴含任何特定的方法学以进行文件控制、配置管理、质量保证、或测试步骤管理。同时也不规定软件排错的过程。 本标准的使用者可以是测试人员、也可是开发人员。 2 引用标准GB 9386 计算机软件测试文件编制规范 GB/T 11457 软件工程术语 GB 12505 计算机软件配置管理计划规范 3 术语下列术语定义适用于本标准,其他术语见GB 9386和GB/T 11457。 3.1 特性 characteristic见数据特性(3.2条)或软件特性(3.5条)。 3.2 数据特性data characteristic数据的一种固有的(也可能是非固有的)性质、质量或特征(例如数据使用率、格式、值范围或域值间关系)。 3.3 非过程性编程语言 monprocedure programming language与过程性编程语言相对。是一种用于表达问题的参数,而不是表达解决问题的步骤的计算机编程语言(例如:报告生成器或分类的规范化语言)。 3.4 过程性编程语言 procedure programming language与非过程性编程语言相对。是一种用于表达操作步骤,以供计算机执行的编程语言(例如:COBOL)。 3.5 软件特性software characteristic软件的一种固有的(也可能是非固有的)性质、质量或特征(例如功能、性能、属性、设计约束、状态数目、分支的行数等)。 3.6 软件特征software feature由需求文件所规定或蕴含的软件特征(例如:功能、性能、属性、设计约束)。 3.7 软件测试事件software test incident在软件测试期间所发生的任何事件。 3.8 状态数据state data确定测试单元内部状态的数据,它用于建立状态或与现存状态比较。 3.9 测试对象test objective在指定条件下,通过对软件的实际状况与软件文件中所描述的状况进行比较来测量的软件特征集。 3.10 测试集结构test set architecture测试用例集(测试集)的嵌套关系,它能直接反映测试对象的层次分解情况。 3.11 测试单元 test unit一个包括一个或多个计算机程序模块及相应控制数据(例如表格)、调用过程、操作过程的模块集合,且该集合成员满足下列条件: a. 所有模块属于同一个计算机程序系统; b. 集合中至少有一个模块(新的或改变过的模块)尚未完成单元测试; c. 所有模块及相应数据和过程的集合是一个测试过程的唯一对象; 注:①一个测试单元可能出现在一个单独的模块到一个完整的程序这样一种设计层次的任何一个级别中,因此,一个测试单元可能是一个模块、一些模块,或一个具有相关数据和过程的完整的计算机程序。 ②一个测试单元可能包含一个或多个忆进行过单元测试的模块。 3.12 单元unit见单元测试。 3.13 单元需求文件unit requirement documentation论述被测单元的功能需求、接口需求、性能需求及设计约束需求的文件。 4 单元测试活动本章规定单元测试过程所涉及的活动,每个活动按输入、任务和输出这样的结构加以描述。所描述的阶段及活动如下: a.
完善测试计划 b.
获得测试集: c.
评价测试单元 制订计划 确定测试特性 细化计划 设计测试集 实现设计 执行测试规程 补充测试集 核对结果 评价 图1单元测试活动流程 当一个以上的单元需进行测试时(例如所有的这引起单元均与一个软件项目有关),则计划活动须指出每个单元在整个测试单元集合中的位置,以免在每个测试单元中重复。 在一般情况下,除了图1中执行测试规程和核对结果这两个循环活动外,所有活动必须顺序进行,对于除了制订计划阶段外的任何一个活动,若其前面的活动或某一外部事件(例如:进度、需求、设计)有错,则有必要重新执行其前面的若干个活动,然后返回到当前活动。 各阶段的输入、输出数据流见图2。
在每个阶段,每个基本活动都连的自身的输入集和输出集,其内容由一系列任务组成。本标准描述了每个活动的输入、任务、输出。所有活动的输出集应当包含足够的信息来创建至少以下两个文件,一份测试设计说明及一份测试总结报告。所有文件必须符合GB 9386中的规定。所有的测试文件必须标明作者及日期。 测试设计说明将从确定测试特性、细化计划及设计测试集这几个活动中获得信息,测试总结报告将从所有的活动中获得信息。 4.1 制订方法、资源及进度的计划总的单元测试应当在综合测试计划期间制订,且应在相应的计划文件中作出记录。 4.1.1 输入a. 项目计划 b. 软件需求文件 4.1.2 任务a. 指定单元测试的总方法 确定测试欲发展的风险区域。指定对确定特性(例如需测试的特性),设计测试集或实现测试(例如必须使用的测试集)等这几个活动阶段的限制。 确定现有的输入、输出和数据资源(例如测试文件、制作文件、测试数据生成器),确定数据确认的总技术。确定用于记录、收集、化简和确认输出数据的总技术。描述与被测试的单元有直接接口的应用软件的准备情况。 b. 指定完备的测试要求 确定单元测试集所覆盖的区域(例如软件特征、过程、状态、功能、数据特性、指令等)以及对每一区域所要求的覆盖程度。 在软件开发期间进行单元测试时,每一软件特征必须至少被一测试用例所覆盖,例外情况须得以批准。此原则也适用于软件维护时的单元测试。 当在软件开发期间测试一个用过程性语言(例如COBOL)实现的单元时,对每一指令(能够到达及执行的),除非该指令所在的模块已经独立地进行过单元测试,或者得到某种特许,它必须被某一测试用例所覆盖。此原则已适用于软件维护时用过程性语言实现的软件的单元测试。 c. 指定终止测试的要求 指定终止测试过程正常终止的需求。终止需求必须满足完备性。 确定会导致单元测试过程异常终止的任何情况(例如发现主要的设计缺陷,到达的最终期限)以及确定其相应通告过程。 d. 决定资源的要求 估计进行测试集获取、初始启动及后续测试活动反复执行所需的资源。应考虑硬件情况、访问时间(例如所用的计算机时间)、通信或系统软件、测试工具、测试文件等。 确定需准备的以及各部门响应所需的资源,包括那些对于其交付时间有严格要求的资源(例如定制的测试工具),并安排这些资源。 确定对单元测试及单元排错负责的部门、人员技能、数量及可参加时间的要求。 e. 指定总的进度安排 指定由资源的测试单元所决定的单元测试活动的进度。 4.1.3 输出a. 单元测试计划(从4.1.2条的a-c得到); b. 单元测试的总体资源请求(若能从4.1.2 条的d条得到)。 4.2 确定需测试的与需求有关的特性4.2.1 输入a. 单元需求文件; b. 软件结构设计的文件(若需要)。 4.2.2 任务a. 研究功能需求 研究单元需求文件中描述的每一功能、保证每一功能有唯一的标识符,若需要的话,应对需求进行分类。 b. 确定附加需求及相应规程 对于那些没有被需求指定,却在单元测试一级有效的软件特性(例如软件性能、属性或设计约束),确定与之相关的需求语句,使之成为附加需求。确定那些仅与待测试单元有关的使用或操作规程。确保每一附加需求及规程有唯一的标识。若需要的话,应对需求进行分类。 c. 确定单元状态 若单元文件指定或蕴含了多种状态(例如不活动、等待接收、处理)软件,0则确定每一状态及每一有效状态转换。保证每一状态转换有唯一的标识符,若需要的话,应对需求进行分类。 d. 确定输入及输出数据特征 确定待测试单元的输入及输出数据结构。对每一结构,确定其特性,诸如使用率、格式、值范围和域值之间的关系,对每个特性,指定其有效范围。保证每一特性有唯一标识符。若需要的话,应对需求进行分类。 e. 选择包含于测试中的各要素 选择待测试的软件特征。选择其相应规程、状态及状态转换,以及测试时的有关数据特性。无效及有效数据都应选择。当无法进行这种完整的测试时,则应该利用如何使用该单元的信息决定选择的内容。对于不能选择的要素,确定由此可能带来的风险问题。 将所选择的特性、状态、状态转换及数据特性等数据记录在单元测试设计说明中的“被测试的特性”一章中(见GB 9386) 4.2.3 输出a. 测试过程中包含的各要素的列表(从4.1.2条的a-c得到); b. 单元测试的总体资源请求(若能从4.1.2 条的d条得到)。 4.3 细化计划4.3.1 输入a. 测试过程中包含的各要素的列表(从4.2.2条的e得到); b. 单元测试计划(从4.1.2条的e得到); 4.3.2 任务a. 方法 确定可以考虑利用的现有的测试用例及测试规程。确定用于数据确认的任何特定技术。确定用于输出记录、输出收集、输出化简及输出确认所用的技术。将细化的方法记录于单元的测试设计说明文件中的“方法详述”一章中(见GB9386)。 b. 详述指定的资源需求 确定所指定的测试单元所需的资源(例如与该单元直接接口的软件)。并为已确定的资源作准备。将指定资源的需求记录在单元测试设计说明的“方法详述”一章中。 c. 指定详细进度 根据支撑软件、指定资源、所使用单元的可获得性及组装进度,为单元测试规定相应进度。将该进度记录于单元的测试设计说明的“方法详述”一章中。“ 4.3.3 输出a. 详细的单元测试计划(从4.3.2条的a-c得到); b. 单元测试的指定资源要求(若能从4.3.2条的b得到)。 4.4 设计测试集4.4.1 输入a. 单元需求文件; b. 测试过程所包含的各要素的列表(从4.2.2条的e得到); c. 单元测试计划(从4.1.2条的a和b及4.3.2条的a得到); d. 单元测试文件; e. 来自以前测试的测试规格说明(若可获得的话)。 4.4.2 任务a. 设计测试集的层次结构 根据待测试的软件特征和由所选的有关要素(例如规程、状态转换、数据特性)所指定或蕴含的情况,设计一个按层次分解好的测试对象集,使得最低层的每一对象能直接用一些测试用例进行测试。选择合适的现有的测试用例,将测试用例标识符组与最低层的相应的对象相关联。将对象层次和相应的测试用例标识符记录于单元的测试设计说明中的“测试用例名称”一章中(见GB9386)。 b. 按需求获得清晰的测试规程 单元需求文件、单元测试计划及测试用例说明的组合可能会隐含地指定出单元测试规程,从而不需要更细致的“测试规程说明”选择现存的测试规程,稍作修改或不加修改地使用。 若单元测试设计说明的补充章条有要求,或另外的规程说明文件有要求,应指定相应的附加的规程。每一种选择都应与GB9386相吻合。当测用例和测试规程的对应关系不是很明显时,用表格连接它们,并将其放于单元测试设计说明中。 c. 获得测试用例说明 指定新的测试用例,可参考现存的测试用例说明。 将该测试用例直接记录于或通过引用的方式记录于单元的测试设计说明的补充章条中或另外的文件中。记录的文件必须符合GB 9386的要求,并放于单元的测试设计说明中。 d. 根据设计信息,按需要扩大测试用例说明。 根据单元设计信息,按需要更新测试集层次结构,注意应与4.4.1条的a保持一致,并考虑所选算法及内部数据结构等软件特征。 如果要确定控制流程及确定必须记录的内容数据的变化情况,则应考虑到可能产生的特殊记录的困难。例如,跟踪复杂算法中的控制流或踊跃内部数据结构(如栈或树)的变化时存在的记录困难。若需求的话,应增加单元设计(例如格式化数据结构、转储功能)以增强单元的可测试性。 根据单元设计中的信息,描述那些新增加的测试用例,并完成各部分的测试用例说明,同时应与4.2.2条的c保持一致。 e. 完成测试设计说明 完成被测单元的测试设计说明,并与 GB 9386相一致。 4.4.3 输出a. 单元测试设计说明(从4.4.2条的e得到); b. 附加的测试规程说明(若能从4.4.2条的b得到); c. 附加的测试用例说明(若能从4.4.2条的c-d得到); d. 单元设计的增强需求(若能从4.4.2条的d得到); 4.5 执行计划及实现设计4.5.1 输入a. 单元测试计划(从4.1.2条的a、c、e及4.3.2条的a-c得到); b. 在单元测试设计说明或附加文件中的测试用例说明(从从4.4.2条的d得到); c. 软件数据结构描述; d. 测试支持资源; e. 测试项; f. 来自以前测试活动的测试数据(若存在); g. 来自以前测试活动的测试工具(若存在); 4.5.2 任务a. 获得并验证测试数据 对于能稍作修改或不作修改便可使用的测试数据,获得它们的一份备份,按需求产生新的数据。为保证数据的一致性和完整性,还应包含附加数据。按照软件数据结构规格说明验证所有数据。当测试用例和数据集的关系不明显时,用表格来记录此种关系,并放于单元测试设计说明书。 b.
获得指定资源 c. 获得测试项 收集包含已有的手册、操作系统规程、控制数据(如表格)和计算机程序在内的所有测试项,获得在测试设计期间确定的与测试单元有直接接口的软件。 当测试一个用过程性语言实现的单元时,要保证执行轨迹信息足以能够满足基于代码的程序的完备性要求。 将每一项的标识符记录于单元测试总结报告的“简述”一章中(见GB9386) 4.5.3 输出a. 验证过的测试数据(从4.5.2条的a得到); b. 测试支持资源(从4.5.2条的b得到); c. 测试项的配置(从4.5.2条的c得到) d. 初步总结(从4.5.2条的c得到) 4.6 执行测试规程4.6.1 输入a. 验证过的测试数据(从4.5.2条的a得到) b. 测试文件资源(从4.5.2条的b得到) c. 测试项的配置(从4.5.2条的c得到) d. 测试用例说明(从4.5.2条的c、d得到) e. 测试规程说明(从4.5.2条的b能够产生) f. 故障分析结果(从排错过程得到); 4.6.2 任务图3为执行测试规程活动的控制流程图 a. 运行测试 建立测试环境,运行测试集,在单元测试总结报告的“结果概述”一章中记录所有的软件测试事件。 b. 判定结果 对每一个测试用例,利用测试用例描述文件中有关的所需的结果的规程说明,来判定单元测试活动是通过还是失败。将通过或失效结果记录于单元测试总结报告的“结果概述”一章中,将资源消耗数据记录于报告的“活动总结”一章中(见GB 9386)。当测试一个用过程性语言实现的单元时,收集执行轨迹的总结信息,且将其添入总结报告中。 对每一次效,应加以分析并将出错信息记录在测试总结报告的“结果概述”一章中,然后选择以下适用情况执行相应措施。 情况1:测试规格说明或测试数据的故障 改正错误,将改正错误信息记录在测试总结报告的“活动总结”一章中,然后重新运行该测试。 情况2:执行测试规程时的故障 重新运行未正确执行的规程。 情况3:测试环境(例如系统软件)中的故障 将环境修正,将环境修正情况记录在测试总结报告的“活动总结”一章中,然后重新运行该测试,或者预先设置异常终止情况,将不能修正环境的理由记录于测试总结报告的“活动总结”一章中,然后开始核对终止情况(即开始执行4.7条的活动)。 情况4:单元实现故障 修正错误,并将修正错误情况记录在测试总结报告的“活动总结”一章中,然后重新运行所有的测试,或者预准备异常终止情况,将不能进行单元修正的理由记录于测试总结报告的“活动总结”一章中,然后开始核对终止情况(即开始执行4.7条的活动)。 情况5:单元设计故障 修正单元设计并实现,在适当的时侯修改测试规格说明及数据,将错误修正情况记录于测试总结报告的“活动总结”一章中,然后重新运行所有的测试,或者,预先设置异常终止情况,将不能进行设计修正的理由记录于于测试总结报告的“活动总结”一章中,然后开始核对终止情况(即开始执行4.7条的活动)。 4.6.3 输出a. 包含在测试总结报告中的执行信息,其中包括测试输出、软件测试事件描述、故障分析结果、错误修正活动、不能修改错误的理由、资源消耗数据,对过程性语言实现的程序而言,还应包括执行轨迹总结信息(从4.6.2条的a、b)产生; b. 修订后的测试规格说明(若能从4.6.2条的b得到); c. 修订后的测试数据(若能从4.6.2条的b得到)。 4.7 核对终止情况4.7.1 输入a. 完备性和终止情况的需求说明(从4.1.2条的b、c得到); b. 执行信息(从4.6.2条的a、b得到) c. 测试规格说明 (从4.4.2条的a-c得到)(若有需要); d. 软件数据结构描述(若有需要)。 4.7.2 任务图4为结果核对活动内的控制流程图。 a. 对测试过程的正常终止情况进行核对 根据完备性要求或失效记录,决定是否要增加新的测试。对于用过程性语言实现的程序,要分析执行轨迹总结信息(例如变量、数据流)。 若不需附加测试,则将正常终止情况记录于测试总结报告的“活动总结”一章中,然后开始评价测试效果及被测单元(即开始执行4.8条的活动)。 b. 对测试过程的异常终止情况进行核对 若满足异常终止条件(例如重要错误不能修正、超时),则应将导致终止的特殊条件记录于测试总结报告的“活动总结”一章中,同时也应记录未完成的测试及未被修正的错误,然后开始评价测试效果及被测单元(即开始执行4.8条的活动)。 c. 补充测试集 当需要附加的测试且异常终止情况不满足时,通过下列步骤来补充测试集。 ——更新测试集的结构,并与4.4.2条的a一致,且根据4.4.2条的c获得相应的测试用例说明; ——按需要根据4.4.2条的b,修改测试规程说明; ——根据4.4.2条的a,获得附加测试数据; ——将附加内容记录于测试总结报告的“活动总结”一章中; ——执行附加的测试(即返回4.6条的活动)。 4.7.3 输出a. 记录于测试总结报告内的核对信息,包括终止条件及任何及任何测试用例的附加情况(4.7.2条的a-c得到); b. 附加的或修订后的测试规格说明(若能从4.7.2条的c得到); c. 附加的测试数据(若能从4.7.2条的c得到)。 4.8 评价测试效果和被测单元4.8.1 输入a. 单元的测试设计说明(从4.4.2 条的e得到); b. 执行信息(从4.6.2 条的a、b得到); c. 核对信息(从4.7.2 条的a-c得到); d. 附加的测试用例说明(若能从4.4.2 条的c、d得到)。 4.8.2 任务a. 描述测试状态 将测试计划和测试规格说明的变化情况记录于测试总结报告的“差异”一章中(见GB 9386)。要说明每次变化的原因。 对异常终止情况,要确定未能被测试活动充分地覆盖的区域。且将理由记录于总结报告的“测试充分性评价”一章内(见GB 9386)。 确定未能解决的软件测试事件以及不能解决的理由,并记录于测试总结报告的“结果概述”一章中。 b. 描述单元状态 将通过测试所反映的单元与其需求文件之间的差异记录于测试总结报告的“差异”一章中。 将测试结果及所发现的错误情况同需求对照,评价单元的设计与实现,将评价信息记录于测试总结报告的“测试充分性评价”一章中。 c. 完成测试总结报告 根据GB 9386,完成测试总结报告。 d. 保存测试文件 确保测试得到的成果的收集、组织和存储。以备调用及重用,这些成果包括测试设计说明、附加和测试用例说明,附加的测试规程说明、测试数据、测试用例的产生规程、测试驱动程序和桩模块以及测试总结报告。 4.8.3 输出a. 测试总结报告(从4.8.2 条的c得到); b. 测试成果的收集存储(从4.8.2 条的d得到)。 附录A 实现及使用指南 (参考件) 本附录包含使用本标准时有益的信息。因此建议在作出更作详细的计划之前先阅读本附录。 A1 标准的使用 A2 附加的测试需求 A3 附加的测试文件 A4 认可及评审 A5 审计 A6 配置管理 A7 确定基于需求的特性 A8 用户的参与 A9 更强的代码覆盖需求 A10 代码覆盖工具 A11 测试过程的补充 A12 本标准的使用 A13 标准的可实施性 附录B (参考件) B1软件工程概念 本标准中描述的标准化单元测试过程是建立在软件工作一些基本概念之上的,B1-B1.8条描述了这些概念。 B1.1 测试与验证、确认的关系 B1.2 像产品开发般的测试 B1.3 排错过程的组成 B1.4 测试与排错的关系 B1.5 单元类型之间的关系 B1.6 对设计与实践信息的需求 B1.7 测试中所考虑的元素说明的补充 B1.8 对创建测试设计说明的补充 B1.9 对创建测试总结报告的补充 B2测试假设 B2.1 单元测试的目标之一就是判断根据单元需求及设计而实现的单元的正确性与完备性。它试图在以下几项中发现错误: B2.2 测试的内容之一是根据需求核对实际情况。人们总是非正式地说起接口测试、语句测试或需求说明测试,其意义就是对照相应的接口、语句、需求说明的描述来核对它们的实际情况。任何可核对的单元测试过程都必须有该单元的需求说明文件,本标准假设在测试开始之前该单元测试需求测试需求文件已经存在。 B2.3 单元需求说明文件必须经过完备性、可测试性或跟踪性的全面评审。本标准假设需求说明已评审过,不论是作为评审过程的一个部分,还是特殊的单元需求说明进行的评审。 B2.4 在查错的早期,往往有重要的经济效益。这意味着应当在一获得单元需求说明文件并进行测试之时便开始开发测试集,这是由于它会影响需求的难证及确认。这也意味着在单元一级应进行尽可能多的测试。 B2.5 项目测试的级别(如验收、系统、组装、单元)是在项目计划、验收及确认计划或全局测试计划中描述的。同时这些计划中也要描述适用于所有被测试单元的单元测试计划信息(如完备性需求、终止需求、资源总需求)。继而,根据对软件设计的分析,标识出测试单元,选择组装序列。 B2.6 完成一个任务所需要的输入条件和资源的可获得性是决定活动顺序和活动内的任务顺序的主要约束。若能获得必要的资源,某些活动及一个活动内的某些任务便可能得以并行执行。 B2.7 本标准认为拖延测试用例的设计是影响开销的最大因素,此处测试集是基于代码特点和需求及设计的特点,这种影响直到测试集执行后才结束。这样的方法使基于代码的设计任务最小化。若基于代码的设计在获得测试执行数据之前便已开始,则它应在那些基于需求及设计特点的测试用例已被说明之后再开始。 中华人民共和国国家标准 GB/T 15532-1995 Computer software unit testing 计算机软件单元测试 1 主题内容与适用范围1.1 主题内容软件单元测试是一个过程。本标准为该过程规定了一个标准的方法,使之成为软件工程实践中的基础。该方法是一种综合的方法,目的是对软件单元进行系统化的测试,包括测试计划的执行、测试集的获取以及测试单元与其需求的对照衡量包括使用样本数据来执行被测试单元、并将该单元的实际结果与单元的需求文件中指定的结果进行比较。 本标准描述了一个测试过程,它由一系列具有层次结构的阶段、活动及任务组成,且为每一活动定义了一个最小任务集。 1.2 适用范围本规范可适用于任何计算机软件的单元测试(包括新开发的或修改过的软件单元)。本标准并不规定这些软件的类型,也不规定哪些软件必须进行单元测试。 本标准不涉及其他综合性的单元验证或确认过程,象评审(例如走查、审查)、静态分析(例如一致性核查、数据流分析—)或形式化分析(例如:正确性证明、符号执行)。 本标准不要求使用特定的测试机制或工具。本标准也不蕴含任何特定的方法学以进行文件控制、配置管理、质量保证、或测试步骤管理。同时也不规定软件排错的过程。 本标准的使用者可以是测试人员、也可是开发人员。 2 引用标准GB 9386 计算机软件测试文件编制规范 GB/T 11457 软件工程术语 GB 12505 计算机软件配置管理计划规范 3 术语下列术语定义适用于本标准,其他术语见GB 9386和GB/T 11457。 3.1 特性 characteristic见数据特性(3.2条)或软件特性(3.5条)。 3.2 数据特性data characteristic数据的一种固有的(也可能是非固有的)性质、质量或特征(例如数据使用率、格式、值范围或域值间关系)。 3.3 非过程性编程语言 monprocedure programming language与过程性编程语言相对。是一种用于表达问题的参数,而不是表达解决问题的步骤的计算机编程语言(例如:报告生成器或分类的规范化语言)。 3.4 过程性编程语言 procedure programming language与非过程性编程语言相对。是一种用于表达操作步骤,以供计算机执行的编程语言(例如:COBOL)。 3.5 软件特性software characteristic软件的一种固有的(也可能是非固有的)性质、质量或特征(例如功能、性能、属性、设计约束、状态数目、分支的行数等)。 3.6 软件特征software feature由需求文件所规定或蕴含的软件特征(例如:功能、性能、属性、设计约束)。 3.7 软件测试事件software test incident在软件测试期间所发生的任何事件。 3.8 状态数据state data确定测试单元内部状态的数据,它用于建立状态或与现存状态比较。 3.9 测试对象test objective在指定条件下,通过对软件的实际状况与软件文件中所描述的状况进行比较来测量的软件特征集。 3.10 测试集结构test set architecture测试用例集(测试集)的嵌套关系,它能直接反映测试对象的层次分解情况。 3.11 测试单元 test unit一个包括一个或多个计算机程序模块及相应控制数据(例如表格)、调用过程、操作过程的模块集合,且该集合成员满足下列条件: a. 所有模块属于同一个计算机程序系统; b. 集合中至少有一个模块(新的或改变过的模块)尚未完成单元测试; c. 所有模块及相应数据和过程的集合是一个测试过程的唯一对象; 注:①一个测试单元可能出现在一个单独的模块到一个完整的程序这样一种设计层次的任何一个级别中,因此,一个测试单元可能是一个模块、一些模块,或一个具有相关数据和过程的完整的计算机程序。 ②一个测试单元可能包含一个或多个忆进行过单元测试的模块。 3.12 单元unit见单元测试。 3.13 单元需求文件unit requirement documentation论述被测单元的功能需求、接口需求、性能需求及设计约束需求的文件。 4 单元测试活动本章规定单元测试过程所涉及的活动,每个活动按输入、任务和输出这样的结构加以描述。所描述的阶段及活动如下: a.
完善测试计划 b.
获得测试集: c.
评价测试单元 制订计划 确定测试特性 细化计划 设计测试集 实现设计 执行测试规程 补充测试集 核对结果 评价 图1单元测试活动流程 当一个以上的单元需进行测试时(例如所有的这引起单元均与一个软件项目有关),则计划活动须指出每个单元在整个测试单元集合中的位置,以免在每个测试单元中重复。 在一般情况下,除了图1中执行测试规程和核对结果这两个循环活动外,所有活动必须顺序进行,对于除了制订计划阶段外的任何一个活动,若其前面的活动或某一外部事件(例如:进度、需求、设计)有错,则有必要重新执行其前面的若干个活动,然后返回到当前活动。 各阶段的输入、输出数据流见图2。
在每个阶段,每个基本活动都连的自身的输入集和输出集,其内容由一系列任务组成。本标准描述了每个活动的输入、任务、输出。所有活动的输出集应当包含足够的信息来创建至少以下两个文件,一份测试设计说明及一份测试总结报告。所有文件必须符合GB 9386中的规定。所有的测试文件必须标明作者及日期。 测试设计说明将从确定测试特性、细化计划及设计测试集这几个活动中获得信息,测试总结报告将从所有的活动中获得信息。 4.1 制订方法、资源及进度的计划总的单元测试应当在综合测试计划期间制订,且应在相应的计划文件中作出记录。 4.1.1 输入a. 项目计划 b. 软件需求文件 4.1.2 任务a. 指定单元测试的总方法 确定测试欲发展的风险区域。指定对确定特性(例如需测试的特性),设计测试集或实现测试(例如必须使用的测试集)等这几个活动阶段的限制。 确定现有的输入、输出和数据资源(例如测试文件、制作文件、测试数据生成器),确定数据确认的总技术。确定用于记录、收集、化简和确认输出数据的总技术。描述与被测试的单元有直接接口的应用软件的准备情况。 b. 指定完备的测试要求 确定单元测试集所覆盖的区域(例如软件特征、过程、状态、功能、数据特性、指令等)以及对每一区域所要求的覆盖程度。 在软件开发期间进行单元测试时,每一软件特征必须至少被一测试用例所覆盖,例外情况须得以批准。此原则也适用于软件维护时的单元测试。 当在软件开发期间测试一个用过程性语言(例如COBOL)实现的单元时,对每一指令(能够到达及执行的),除非该指令所在的模块已经独立地进行过单元测试,或者得到某种特许,它必须被某一测试用例所覆盖。此原则已适用于软件维护时用过程性语言实现的软件的单元测试。 c. 指定终止测试的要求 指定终止测试过程正常终止的需求。终止需求必须满足完备性。 确定会导致单元测试过程异常终止的任何情况(例如发现主要的设计缺陷,到达的最终期限)以及确定其相应通告过程。 d. 决定资源的要求 估计进行测试集获取、初始启动及后续测试活动反复执行所需的资源。应考虑硬件情况、访问时间(例如所用的计算机时间)、通信或系统软件、测试工具、测试文件等。 确定需准备的以及各部门响应所需的资源,包括那些对于其交付时间有严格要求的资源(例如定制的测试工具),并安排这些资源。 确定对单元测试及单元排错负责的部门、人员技能、数量及可参加时间的要求。 e. 指定总的进度安排 指定由资源的测试单元所决定的单元测试活动的进度。 4.1.3 输出a. 单元测试计划(从4.1.2条的a-c得到); b. 单元测试的总体资源请求(若能从4.1.2 条的d条得到)。 4.2 确定需测试的与需求有关的特性4.2.1 输入a. 单元需求文件; b. 软件结构设计的文件(若需要)。 4.2.2 任务a. 研究功能需求 研究单元需求文件中描述的每一功能、保证每一功能有唯一的标识符,若需要的话,应对需求进行分类。 b. 确定附加需求及相应规程 对于那些没有被需求指定,却在单元测试一级有效的软件特性(例如软件性能、属性或设计约束),确定与之相关的需求语句,使之成为附加需求。确定那些仅与待测试单元有关的使用或操作规程。确保每一附加需求及规程有唯一的标识。若需要的话,应对需求进行分类。 c. 确定单元状态 若单元文件指定或蕴含了多种状态(例如不活动、等待接收、处理)软件,0则确定每一状态及每一有效状态转换。保证每一状态转换有唯一的标识符,若需要的话,应对需求进行分类。 d. 确定输入及输出数据特征 确定待测试单元的输入及输出数据结构。对每一结构,确定其特性,诸如使用率、格式、值范围和域值之间的关系,对每个特性,指定其有效范围。保证每一特性有唯一标识符。若需要的话,应对需求进行分类。 e. 选择包含于测试中的各要素 选择待测试的软件特征。选择其相应规程、状态及状态转换,以及测试时的有关数据特性。无效及有效数据都应选择。当无法进行这种完整的测试时,则应该利用如何使用该单元的信息决定选择的内容。对于不能选择的要素,确定由此可能带来的风险问题。 将所选择的特性、状态、状态转换及数据特性等数据记录在单元测试设计说明中的“被测试的特性”一章中(见GB 9386) 4.2.3 输出a. 测试过程中包含的各要素的列表(从4.1.2条的a-c得到); b. 单元测试的总体资源请求(若能从4.1.2 条的d条得到)。 4.3 细化计划4.3.1 输入a. 测试过程中包含的各要素的列表(从4.2.2条的e得到); b. 单元测试计划(从4.1.2条的e得到); 4.3.2 任务a. 方法 确定可以考虑利用的现有的测试用例及测试规程。确定用于数据确认的任何特定技术。确定用于输出记录、输出收集、输出化简及输出确认所用的技术。将细化的方法记录于单元的测试设计说明文件中的“方法详述”一章中(见GB9386)。 b. 详述指定的资源需求 确定所指定的测试单元所需的资源(例如与该单元直接接口的软件)。并为已确定的资源作准备。将指定资源的需求记录在单元测试设计说明的“方法详述”一章中。 c. 指定详细进度 根据支撑软件、指定资源、所使用单元的可获得性及组装进度,为单元测试规定相应进度。将该进度记录于单元的测试设计说明的“方法详述”一章中。“ 4.3.3 输出a. 详细的单元测试计划(从4.3.2条的a-c得到); b. 单元测试的指定资源要求(若能从4.3.2条的b得到)。 4.4 设计测试集4.4.1 输入a. 单元需求文件; b. 测试过程所包含的各要素的列表(从4.2.2条的e得到); c. 单元测试计划(从4.1.2条的a和b及4.3.2条的a得到); d. 单元测试文件; e. 来自以前测试的测试规格说明(若可获得的话)。 4.4.2 任务a. 设计测试集的层次结构 根据待测试的软件特征和由所选的有关要素(例如规程、状态转换、数据特性)所指定或蕴含的情况,设计一个按层次分解好的测试对象集,使得最低层的每一对象能直接用一些测试用例进行测试。选择合适的现有的测试用例,将测试用例标识符组与最低层的相应的对象相关联。将对象层次和相应的测试用例标识符记录于单元的测试设计说明中的“测试用例名称”一章中(见GB9386)。 b. 按需求获得清晰的测试规程 单元需求文件、单元测试计划及测试用例说明的组合可能会隐含地指定出单元测试规程,从而不需要更细致的“测试规程说明”选择现存的测试规程,稍作修改或不加修改地使用。 若单元测试设计说明的补充章条有要求,或另外的规程说明文件有要求,应指定相应的附加的规程。每一种选择都应与GB9386相吻合。当测用例和测试规程的对应关系不是很明显时,用表格连接它们,并将其放于单元测试设计说明中。 c. 获得测试用例说明 指定新的测试用例,可参考现存的测试用例说明。 将该测试用例直接记录于或通过引用的方式记录于单元的测试设计说明的补充章条中或另外的文件中。记录的文件必须符合GB 9386的要求,并放于单元的测试设计说明中。 d. 根据设计信息,按需要扩大测试用例说明。 根据单元设计信息,按需要更新测试集层次结构,注意应与4.4.1条的a保持一致,并考虑所选算法及内部数据结构等软件特征。 如果要确定控制流程及确定必须记录的内容数据的变化情况,则应考虑到可能产生的特殊记录的困难。例如,跟踪复杂算法中的控制流或踊跃内部数据结构(如栈或树)的变化时存在的记录困难。若需求的话,应增加单元设计(例如格式化数据结构、转储功能)以增强单元的可测试性。 根据单元设计中的信息,描述那些新增加的测试用例,并完成各部分的测试用例说明,同时应与4.2.2条的c保持一致。 e. 完成测试设计说明 完成被测单元的测试设计说明,并与 GB 9386相一致。 4.4.3 输出a. 单元测试设计说明(从4.4.2条的e得到); b. 附加的测试规程说明(若能从4.4.2条的b得到); c. 附加的测试用例说明(若能从4.4.2条的c-d得到); d. 单元设计的增强需求(若能从4.4.2条的d得到); 4.5 执行计划及实现设计4.5.1 输入a. 单元测试计划(从4.1.2条的a、c、e及4.3.2条的a-c得到); b. 在单元测试设计说明或附加文件中的测试用例说明(从从4.4.2条的d得到); c. 软件数据结构描述; d. 测试支持资源; e. 测试项; f. 来自以前测试活动的测试数据(若存在); g. 来自以前测试活动的测试工具(若存在); 4.5.2 任务a. 获得并验证测试数据 对于能稍作修改或不作修改便可使用的测试数据,获得它们的一份备份,按需求产生新的数据。为保证数据的一致性和完整性,还应包含附加数据。按照软件数据结构规格说明验证所有数据。当测试用例和数据集的关系不明显时,用表格来记录此种关系,并放于单元测试设计说明书。 b.
获得指定资源 c. 获得测试项 收集包含已有的手册、操作系统规程、控制数据(如表格)和计算机程序在内的所有测试项,获得在测试设计期间确定的与测试单元有直接接口的软件。 当测试一个用过程性语言实现的单元时,要保证执行轨迹信息足以能够满足基于代码的程序的完备性要求。 将每一项的标识符记录于单元测试总结报告的“简述”一章中(见GB9386) 4.5.3 输出a. 验证过的测试数据(从4.5.2条的a得到); b. 测试支持资源(从4.5.2条的b得到); c. 测试项的配置(从4.5.2条的c |