第9章面向对象的测试测试是软件开发周期的最后一个阶段,也是保证软件质量至关重要的一个环节。本章学习内容9.1软件测试的概念9.2黑盒测试9.3白盒测试9.4多模块程序的测试9.5面向对象的测试方法9.1软件测试的概念一、软件测试的概念1.什么是软件测试软件测试是为了发现错误而执行程序的过程。通过在计算机上执行程序,暴露程序中潜在的错误。然后对程序错误进行纠错。2.软件测试的目的(1)以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。(2)测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。(3)实施测试收集到的测试结果数据为可靠性分析提供了依据。(4)测试不能表明软件中不存在错误,它只能说明软件中存在错误。3.测试与纠错的关系测试评价纠错程序测试用例测试结果期望结果错误信息改正信息4.软件测试的指导原则(1)应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。(2)测试用例应由测试输入数据和对应的预期输出结果这两部分组成。(3)程序员应避免检查自己的程序。(4)在设计测试用例时,应包括合理的输入条件和不合理的输入条件。(5)充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。(6)严格执行测试计划,排除测试的随意性。(7)应当对每一个测试结果做全面检查。(8)妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。二、软件测试的特性1.挑剔性测试是为了证明程序有错,而不是证明程序无错。因此,只有抱着为证明程序有错的目的去测试,才能把程序中潜在的大部分错误找出来。2.复杂性设计测试用例是一项需要细致和高度技巧的工作,稍有不慎就会顾此失彼,发生不应有的疏漏。3.不彻底性“程序测试只能证明错误的存在,但不能证明错误不存在”。也就是说一切实际测试都是不彻底的,不能够保证测试后的程序不存在遗留的错误。4.经济性为了降低测试成本,在程序测试中,选择一些典型的、有代表性的测试用例,进行有限的测试。以便能使用尽可能少的测试用例,发现尽可能多的程序错误。三、软件测试的种类及测试的文档1.测试种类程序测试静态分析(程序不执行)动态测试(程序执行)静态分析器分析(自动方式)人工方式代码评审代码会审走查办公桌检查黑盒测试(测试程序功能)白盒测试(测试程序结构)2测试文档为了保证测试质量,软件测试必须完成规定的文档。按照软件工程的要求,测试文档主要应包括:测试计划、测试报告两个方面的内容。测试计划的主体是“测试内容说明”,它包括测试项目的名称、各项测试的目的、步骤、进度以及测试用例的设计等。测试报告的主体是“测试结果”,它包括测试项目名称、实测结果与期望结果的比较、发现的问题以及测试达到的效果等。3测试用例和测试结果的定义测试用例={测试数据+期望结果}测试结果={测试数据+期望结果+实际结果}9.2黑盒测试黑盒测试就是把测试程序看成是一个黑盒子,测试人员只针对输入与输出的关系,对被测试程序功能及外部特性进行测试,而不考虑其内部逻辑和内部特性,所以也称为功能测试。用黑盒法设计测试用例,常用技术有:等价分类法、边界值分析法、错误猜测法等。一、等价分类法1.特点等价分类法就是把输入数据的可能值划分为若干等价类,使每类中的任何一个测试用例,都能代表同一等价类中的其它测试用例。例:某工厂公开招工,规定报名者年龄应在16周岁至35周岁之间(假定到2002年3月30日止)。即出生年月不在上述范围内,将拒绝接受,并显示“年龄不合格”等出错信息。试用等价分类法设计对这一程序功能的测试用例。解第一步:划分等价类。假定已知出生年月由6位数字字符表示,前4位代表年,后2位代表月,则可以划分为3个有效等价类,7个无效等价类,如下表所示。输入数据有效等价类无效等价类出生年月(1)6位数字字符(2)有非数字字符(3)少于6个数字符(4)多于6个数字符对应数值(5)在196702~198603之间(6)196702(7)198603月份对应数值(8)在1~12之间(9)等于“0”(10)12第二步:设计有效等价类需要的测试用例。上表中的(1),(5),(8)等3个有效等价类,可以公用一个测试用例,例如:测试数据期望结果测试范围197011输入有效(1),(5),(8)第三步:为每一无效等价类至少设计一个测试用例。本例具有7个无效等价类,需要7个测试用例:测试数据期望结果测试范围MAY,70输入无效(2)19705输入无效(3)1970011输入无效(4)195512年龄不合格(6)197012年龄不合格(7)196200输入无效(9)196222输入无效(10)2.采用这一技术要注意以下两点:1)划分等价类不仅要考虑代表“有效”输入值的有效等价类,还须考虑代表“无效”输入值的无效等价类;2)每一无效等价类至少要用一个测试用例,不然就可能漏掉某一类错误,但允许若干有效等价类合用同一个测试用例。二、边界值分析法1.含义所谓边界值分析,就是要把测试的重点放在各个等价类的边界上,选取刚好等于、刚刚大于和刚刚小于边界值的数据为测试数据,并据此设计出相应的测试用例。2.特点由于在处理边界情况时,很容易因疏忽或考虑不周发生编码错误,采用边界值分析法,就是要这样来选择在边界值及其附近运行的测试用例,使得被测程序能更有效地暴露程序中潜藏的错误。[例]程序同上例。试用边界值分析法设计其测试用例。[解]用等价分类法设计测试用例时,测试数据可以在等价类值域内任意选取。就拿上例来说,为了只接受年龄合格的报名者,程序中可能设有语句if(196702=value(birthdate)=198603)thenread(birthdate)elsewrite“invalidage”三、错误猜测法1.特点就是猜测被测程序在哪些地方容易出错,然后针对可能的薄弱环节来设计测试用例。它比前2种方法更多地依靠测试人员的直觉与经验。9.3白盒测试白盒测试是对系统的内部过程性细节做细致的检查,把被测试的程序看成是透明的盒子,所以也称为结构测试。用白盒法设计测试用例,常用技术有:逻辑覆盖测试法、路径测试法等。一、逻辑覆盖测试法1.特点逻辑覆盖测试法通过流程图来设计测试用例,它考察的重点是图中的判定框(菱形框)。因为这些判定若不是与选择结构有关,就是与循环结构有关,是决定程序结构的关键成份。2.逻辑覆盖测试的5种覆盖标准发现错误的能力弱强语句覆盖每条语句至少执行一次判定覆盖每一判定的每个分支至少执行一次条件覆盖每一判定中的每个条件,分别按“真”、“假”至少各执行一次判定/条件覆盖同时满足判定覆盖和条件覆盖的要求条件组合覆盖求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次二、路径测试法1.含义路径测试就是着眼于程序执行路径的测试方法,对程序图中每一条可能的程序执行路径至少测试一次。如果程序中含有循环(在程序图中表现为环),则每个循环至少执行一次。2.特点1)满足结构测试的最低要求。2)有利于安排循环测试。9.4多模块程序的测试实际的应用程序大都是多模块程序,在软件工程中,软件测试主要指多模块程序的测试。多模块程序要比单模块小程序复杂得多。这种复杂性的主要表现是测试的层次性,多模块程序的测试共包括4个层次。第一层为单元测试第二层为集成测试第三层为确认测试第四层是系统测试一、单元测试1.含义以模块或子程序为单位进行测试,又称模块测试。2.目的与任务目的:是通过对模块的静态分析与动态测试,使其代码达到模块说明书的需求。任务:对模块代码进行编译,发现并纠正其语法错误;对模块代码进行静态分析,并据此设计一组测试用例和必要的测试软件;用选定的测试用例对模块进行测试,直至满足测试终止标准为止;最后,编制单元测试报告。3.测试步骤编译--其检查对象是代码中的语法错误。静态分析器检查代码评审动态测试--重点是发现单元的功能性错误。检查对象已从语法错误改变为以结构性错误为主的其它错误4.特点单元不是独立的程序。在多模块程序中,每一模块都可能调用其它模块或者被其它模块所调用。所以在单元测试时,需要为被测模块编制若干测试软件,给它的上级模块或下级模块作替身。替身模块应该是真实模块的简化,仅须模拟与被测模块直接相关的一部分功能。二、集成测试1.含义通过了单元测试的模块,按照一定的策略在组装为完整的程序的过程中进行的测试,称为集成测试或组装测试。2.目的与任务是将经过单元测试的模块逐步组装成具有良好一致性的完整的程序。三、确认测试1.含义确认测试是对整个程序的测试,用于确认组装完毕的程序确能满足用户的全部需求。2.目的与任务确认测试继集成测试之后进行,其目的在于确认组装完毕的程序是否满足软件需求规格说明书(SRS)的要求。四、系统测试1.含义系统测试是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行软件系统的各种组装测试和确认测试。2.目的与任务测试的目的,是检查把确认测试合格的软件安装到系统中以后,能否与系统的其余部分协调运行,并且完成SRS对它的要求。9.5面向对象的测试方法面向对象测试应扩大到包括对OOA和OOD模型的复审,以便及早发现错误。面向对象软件是基于类/对象的,而传统软件则基于模块。一、面向对象软件的测试面向对象软件测试和传统软件测试一样,也是从单元测试开始,然后经集成测试,最后进入确认与系统测试的。1.面向对象软件的单元测试(1)面向对象软件的单元测试是对类和对象进行测试(2)面向对象软件的类测试是由封装在类中的操作和类的状态行为所驱动的。(3)在面向对象的单元测试中不仅要发现类的所有操作中存在的问题,还要考查一个类与其他的类协同工作时可能出现的错误。2.面向对象软件的集成测试(1)面向对象的集成测试主要关注于系统的结构和内部的相互作用,以便发现仅当各类相互作用时才会产生的错误。(2)此外,面向对象程序具有动态特性,程序的控制流往往无法确定,因此只能做基于黑盒方法的集成测试。3.面向对象软件的确认与系统测试(1)面向对象软件的确认测试与系统测试忽略类连接的细节,主要采用传统的黑盒子法对OOA阶段的用例所描述的用户交互进行测试。(2)OOA阶段的对象行为模型、事件流图等都可以用于导出面向对象系统测试的测试用例。第10章软件项目管理10.1软件的度量10.2软件估算模型10.3软件成本估计10.4人员的分配与组织10.5项目进度安排10.1软件的度量软件度量可划分为1.软件项目度量:目的在于改进软件产品的质量;2.软件过程度量:目的在于改进企业的软件开发过程,提高整个过程的质量。一、项目度量的内容1.5种基本度量度量常用单位Size规模LOC,KLOCEffort工作量人-月Duration时间(或Schedule进度)月Quality质量错误数/KLOCCost成本(或Rework返工)元2.特点(1)以代码行(LOC)表示的软件规模是最基本的度量。它直接关系到软件的成本、开发工作量和完成时间。(2)在项目度量中,所有的基本度量都是以代码行LOC为基础的。例如,软件成本(元)=LOC×每行代码的成本(行/元)开发工作量(人-月)=LOC/每人-月开发的代码行(行/人-月)(3)软件的规模、成本和工作量通常都分阶段进行度量。3.面向功能的项目度量中心思想任何软件都包含若干种功能,每种功能又包含具有不同复杂度的若干个功能点。因此,软件的规模也可用功能点数量的多少来表示,以代替原来常用的LOC表示法。一、过程度量1.含义过程度量可以认为是对整个企业中全体项目组开发能力的衡量。2.特点把对于项目组中个人的度量组合起来,可形成对项目的度量;把所有项目组的项目度量组合起来,就形成了对整个企业的过程度量。10.2软件估算模型估算在软件度量中占有重要的地位。一般地说,估算是在软件开发之前进行的。资源模型可用来估算软件在开发中花费的资源。典型的资源模型:静态单变量资源模型Putnam资源模型COCOMO模型一、静态单变量资源模型1.特点这种模