版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 软件工程软件工程 Software Engineering2第第5章章 结构化的实现结构化的实现o结构化实现:结构化实现:n编码编码n测试测试o编码:把编码:把软件设计软件设计翻译成计算机可以理解的形式翻译成计算机可以理解的形式用某种用某种程序设计语言程序设计语言书写的程序。书写的程序。o测试:在软件投入生产性运行之前,尽可能多地发测试:在软件投入生产性运行之前,尽可能多地发现软件中的现软件中的错误错误。结构化实现结构化实现o结构化实现工作的内容和步骤结构化实现工作的内容和步骤n设计阶段所设计定义的每一个模块进行程序过设计阶段所设计定义的每一个模块进行程序过程设计、编码和单元测试工作。程设
2、计、编码和单元测试工作。n按结构图将各软件模块组装起来,进行组装测按结构图将各软件模块组装起来,进行组装测试、确认测试和系统测试等工作。试、确认测试和系统测试等工作。n交付用户使用并根据使用情况进行维护。交付用户使用并根据使用情况进行维护。n在每个阶段都必须按照有关规范编写相应的说在每个阶段都必须按照有关规范编写相应的说明书或报告。明书或报告。结构化实现结构化实现o结构化结构化实现工实现工作的内作的内容和步容和步骤骤结构化实现结构化实现o结构化实现阶段的主要任务:结构化实现阶段的主要任务:n按总体设计方案购置和安装计算机网络系统。按总体设计方案购置和安装计算机网络系统。n软件准备。软件准备。n
3、人员培训。主要是用户培训。人员培训。主要是用户培训。n数据准备。没有一定基础的数据准备,系统调数据准备。没有一定基础的数据准备,系统调试就不能很好的运行。试就不能很好的运行。n试运行。试运行。6结构化的实现结构化的实现p编码编码p软件测试基础软件测试基础p软件测试方法软件测试方法p软件测试步骤软件测试步骤p单元测试单元测试p集成测试集成测试p确认测试确认测试p软件调试软件调试7编码编码o程序设计语言的选择原则程序设计语言的选择原则o编码风格编码风格8程序设计语言的选择原则程序设计语言的选择原则在选择编程语言时,可以考虑以下因素。在选择编程语言时,可以考虑以下因素。应用领域:目标系统的应用领域不
4、同,需要采应用领域:目标系统的应用领域不同,需要采取的系统开发范型也不同,所以要考虑支持相取的系统开发范型也不同,所以要考虑支持相应范型的编程语言。应范型的编程语言。系统用户的要求。系统用户的要求。软件运行环境。软件运行环境。可得到的软件工具。可得到的软件工具。工程规模。工程规模。软件可移植性。软件可移植性。程序员的知识。程序员的知识。 9程序设计语言的选择原则程序设计语言的选择原则oC语言:适合系统底层实现。语言:适合系统底层实现。oC语言、汇编语言、语言、汇编语言、Ada:适合实时应用、或很特:适合实时应用、或很特殊的复杂算法、代码优化要求高的领域。殊的复杂算法、代码优化要求高的领域。oF
5、ORTRAN:工程领域,复杂的数值计算。:工程领域,复杂的数值计算。oJava:适合平台无关的应用、网络编程应用。:适合平台无关的应用、网络编程应用。oDephi:适合信息系统应用。:适合信息系统应用。oPROLOG和和LISP:人工智能领域。:人工智能领域。oSQL Server、Oracle、Access:数据库操作。:数据库操作。程序的复杂性及度量程序的复杂性及度量o1.代码行度量法代码行度量法o度量程序的复杂性,最简单的方法就是统计程序的度量程序的复杂性,最简单的方法就是统计程序的源代码行数。源代码行数。o常用的软件成本估量计量单位:常用的软件成本估量计量单位:n源代码行源代码行n工作
6、量:一项任务所需的程序员平均工作时间工作量:一项任务所需的程序员平均工作时间。单位是人月、人年或人日。单位是人月、人年或人日。n软件生产率:开发全过程中单位劳动量能够完软件生产率:开发全过程中单位劳动量能够完成的平均软件数量。成的平均软件数量。程序的复杂性及度量程序的复杂性及度量o2.McCabe度量法度量法o由由Thomas McCabe提出的一种基于程序控制流提出的一种基于程序控制流的复杂性度量方法。的复杂性度量方法。o先画出流图,然后用该图的环路数作为程序复杂性先画出流图,然后用该图的环路数作为程序复杂性的度量值。的度量值。o流图是退化的程序流程图。把流程图中的每一个处流图是退化的程序流
7、程图。把流程图中的每一个处理符号都退化成一个结点,原来连接不同处理符号理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样的有向图的流线变成连接不同结点的有向弧,这样的有向图叫做流图。叫做流图。o有向图有向图Go结结点数点数n=6o弧弧数数m=9o环的个数环的个数V(G)=m-n+2=512o环路复杂度取决于程序控制结构的复杂度。当程序的分支环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目增加时其复杂度也增加。数目或循环数目增加时其复杂度也增加。o对于复杂度超过对于复杂度超过10的程序,应分成几个小程序,以减少程的程序,应分成几个小程序,以减少程序中
8、的错误。序中的错误。o这种度量的缺点:这种度量的缺点:n不同种类的控制流的复杂度不能区分。不同种类的控制流的复杂度不能区分。n简单简单IF语句与循环语句的复杂性是一样的。语句与循环语句的复杂性是一样的。n嵌套嵌套IF语句与简单语句与简单CASE的复杂性是一样的。的复杂性是一样的。n模块接口当成一个简单分支一样处理。模块接口当成一个简单分支一样处理。n一个具有一个具有1000行的顺序程序与一行语句的复杂性相同行的顺序程序与一行语句的复杂性相同。1314编码风格编码风格o1. 源程序文档化源程序文档化o编写源程序文档化的原则为:编写源程序文档化的原则为:n1)标识符应尽量具有实际意义)标识符应尽量
9、具有实际意义n2) 程序应加注释程序应加注释o主要内容有:主要内容有: n说明每个模块的用途、功能。说明每个模块的用途、功能。n说明模块的接口形式、参数描述及从属模块的清单。说明模块的接口形式、参数描述及从属模块的清单。n该模块的数据描述:特殊的数组或变量的说明、约束或该模块的数据描述:特殊的数组或变量的说明、约束或其他信息。其他信息。n开发历史:指程序的编写者、审阅者姓名及日期、修改开发历史:指程序的编写者、审阅者姓名及日期、修改说明及日期。说明及日期。15o2. 数据说明数据说明n变量、常量声明时说明其用途变量、常量声明时说明其用途n变量命名时采用一定的规范变量命名时采用一定的规范n说明语
10、句中变量排列有序化说明语句中变量排列有序化n使用注释说明复杂数据结构使用注释说明复杂数据结构o例如:变量命名可采用匈牙利命名法例如:变量命名可采用匈牙利命名法nnLength, szUserNameo常量采用全大写方式常量采用全大写方式o变量说明顺序示例:变量说明顺序示例:n 常量说明常量说明n 简单变量类型说明简单变量类型说明n 数组说明数组说明n 公用数据块说明公用数据块说明n 所有的文件说明所有的文件说明编码风格编码风格16o3. 语句构造语句构造n不要把多个语句写在一行不要把多个语句写在一行n避免多层循环或条件嵌套避免多层循环或条件嵌套n语句清晰语句清晰n采用缩进采用缩进n统一风格统一
11、风格编码风格编码风格17o一行中包括了多个语句,掩盖了程序的循环结一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性变得很差构和条件结构,使其可读性变得很差FOR I:=1 TO N1 DO BEGIN T:=I;FOR J:=I1 TO N DO IF AJAT THEN T:=J;IF TI THEN BEGIN WORK:=AT;AT:=AI;AI:=WORK;END END;编码风格编码风格18FOR I:=1 TO N-1 DO / BEGIN T:=I; FOR J:=I1 TO N DO IF AJAT THEN T:=J; IF TI THEN BEGIN WOR
12、K:=AT; AT:=AI; AI:=WORK; END END;编码风格编码风格19o阶梯式布局阶梯式布局 IF() THEN IF() THEN ELSE ENDIF ELSE ENDIF编码风格编码风格20o程序编写首先应当考虑清晰性程序编写首先应当考虑清晰性n例如,有一个用例如,有一个用Pascal语句写出的程序段:语句写出的程序段:AI := AI AJ;AJ := AI AJ;AI := AI AJ;WORK:=AJ;AJ:=AI;AI:=WORK;编码风格编码风格21o4.输入输入/输出输出n对所有输入数据进行检查对所有输入数据进行检查n输入采用简单、一致的格式输入采用简单、一致
13、的格式n输入提示输入提示n输出数据统一格式,说明简洁无二义输出数据统一格式,说明简洁无二义n编码风格编码风格22o5.效率效率n效率是靠良好的设计来保证的。效率是靠良好的设计来保证的。n程序运行时间程序运行时间o 减少嵌套循环,避免多维数组,减少类型转减少嵌套循环,避免多维数组,减少类型转换、采用占用内存少的数据类型。换、采用占用内存少的数据类型。 n内存内存o 采用优化的算法采用优化的算法n输入输入/ /输出效率输出效率o 设计简单的人机接口设计简单的人机接口编码风格编码风格23软件测试背景软件测试背景软件是人编的软件是人编的所以不完美所以不完美实例实例: :1994-1995,1994-1
14、995,迪斯尼的狮子王系统不支持问题迪斯尼的狮子王系统不支持问题19991999年年1212月月3 3日日, ,美国航天局火星极地登陆飞船失美国航天局火星极地登陆飞船失踪踪19911991年爱国者导弹防御系统系统时钟错误积累造年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度成跟踪系统失去精确度千年虫千年虫, ,世界各地解决世界各地解决20002000年错误超过数亿美元年错误超过数亿美元24千年虫千年虫(Y2K)(Y2K)o在上个世纪在上个世纪70年代,程序员为了节约非常宝贵年代,程序员为了节约非常宝贵的内存资源和硬盘空间,在存储日期时,只保的内存资源和硬盘空间,在存储日期时,只保留年
15、份的后两位,如留年份的后两位,如“1980”被存为被存为“80”。当当2000年到来的时候,问题就会出现,年到来的时候,问题就会出现,比如银行比如银行存款程序在计算利息时,应该用现在的日期存款程序在计算利息时,应该用现在的日期“2000年年1月月1日日”减去当时减去当时存款的日期,比如存款的日期,比如“1989年年1月月1日日” ,结果应该是,结果应该是11年,如果利息是年,如果利息是3%,银行要付给顾客每,银行要付给顾客每100元,大约元,大约66元利息。如果程序没有纠正年份元利息。如果程序没有纠正年份只存储两位的问题,其存款年数就变为只存储两位的问题,其存款年数就变为-89年,变成顾客反要
16、付银行巨额年,变成顾客反要付银行巨额利息。利息。o就是为了这样一个简单的设计缺陷,全世界付就是为了这样一个简单的设计缺陷,全世界付出几十亿美元。出几十亿美元。 25软件测试的背景软件测试的背景o19631963年年, ,美国飞往火星的火箭爆炸美国飞往火星的火箭爆炸, , 损失损失$10 $10 million。原因原因: : FORTRAN循环:循环: DO 5 I = 1,3 DO 5 I = 1,3 误写为误写为 DO 5 I = 1.3DO 5 I = 1.326软件测试的背景软件测试的背景27Bugo有人说,软件测试就是在寻找软件中的有人说,软件测试就是在寻找软件中的Bug。28关于关
17、于Bug的一个有趣的小故事的一个有趣的小故事o故事发生在故事发生在19451945年年9 9月的一天,一个炎热的下午,机房是一月的一天,一个炎热的下午,机房是一间第一次世界大战时建造的老建筑,没有空调,所有窗户间第一次世界大战时建造的老建筑,没有空调,所有窗户都敞开着。都敞开着。HopperHopper正领着她的研究小组夜以继日地工作,正领着她的研究小组夜以继日地工作,研制一台称为研制一台称为“MARK IIMARK II”的计算机,它使用了大量的继电的计算机,它使用了大量的继电器(电子机械装置,那时还没有使用晶体管),一台不是器(电子机械装置,那时还没有使用晶体管),一台不是纯粹的电子计算机
18、。突然,纯粹的电子计算机。突然,MARK IIMARK II死机了。研究人员试了死机了。研究人员试了很多次还是启动不来,然后就开始用各种方法找问题,看很多次还是启动不来,然后就开始用各种方法找问题,看问题究竟出现在哪里,最后定位到板子问题究竟出现在哪里,最后定位到板子F F第第7070号继电器出错。号继电器出错。HopperHopper观察这个出错的继电器,惊奇地发现一只观察这个出错的继电器,惊奇地发现一只飞蛾飞蛾躺在躺在中间,已经中间,已经被继电器打死被继电器打死。她小心地用摄子将蛾子夹出来,。她小心地用摄子将蛾子夹出来,用透明胶布帖到用透明胶布帖到“事件记录本事件记录本”中,并注明中,并注
19、明“第一个发现第一个发现虫子的实例虫子的实例”,然后计算机又恢复了正常。从此以后,人,然后计算机又恢复了正常。从此以后,人们将计算机错误戏称为们将计算机错误戏称为臭虫臭虫(BugBug),而把找寻错误的工作),而把找寻错误的工作称为称为“找臭虫找臭虫”(DebugDebug)。)。Grace HopperGrace Hopper的事件记录本,的事件记录本,连同那个飞蛾,现在都陈列在美国历史博物馆中。连同那个飞蛾,现在都陈列在美国历史博物馆中。 29问题在哪里?问题在哪里? 没有足够测试没有足够测试 缺乏测试平台缺乏测试平台 不正确的测试环境不正确的测试环境 缺少集成测试缺少集成测试 缺少性能测
20、试缺少性能测试 缺少强度测试缺少强度测试 缺少可靠性测试缺少可靠性测试 微软的经验微软的经验pWindows95Windows95有有10001000万行代码万行代码pWindows2000Windows2000有有50005000万行代码,万行代码,30003000多个工程师,多个工程师,几百个小团队。几百个小团队。pExchange2000Exchange2000和和 Windows2000Windows2000开发人员结构开发人员结构Exchange2000Exchange2000Windows2000Windows2000项目经理项目经理2525人人约约250250人人开发人员开发人员
21、140140人人约约17001700人人测试人员测试人员350350人人约约32003200人人测试人员测试人员/开发人员开发人员2.51.931软件测试行业前景软件测试行业前景o软件测试行业前景看好,需求量已超过软件测试行业前景看好,需求量已超过3030万。万。 o有数据显示,目前软件测试行业人才需求量已超有数据显示,目前软件测试行业人才需求量已超过过3030万,并且仍在以每年万,并且仍在以每年20%20%的速度增加。中国软的速度增加。中国软件协会秘书长胡昆山表示,现阶段,件协会秘书长胡昆山表示,现阶段,我国软件测我国软件测试基础人才不足,已成为制约我国软件产业发展试基础人才不足,已成为制约
22、我国软件产业发展的瓶颈的瓶颈。o软件测试人才是职场的多面手,需要具备缜密的软件测试人才是职场的多面手,需要具备缜密的逻辑思维能力逻辑思维能力、全面的、全面的测试技术能力测试技术能力、较强的、较强的责责任心和团队合作精神任心和团队合作精神,以及出色的,以及出色的沟通能力沟通能力等职等职业素质。业素质。32软件测试基础软件测试基础o软件测试目标软件测试目标o软件测试准则软件测试准则o软件测试方法软件测试方法o软件测试步骤软件测试步骤o功能测试和性能测试功能测试和性能测试o软件测试工具软件测试工具o软件测试管理流程软件测试管理流程33软件测试目标软件测试目标 34软件测试目标软件测试目标o程序测试能
23、证明错误的存在程序测试能证明错误的存在, ,但不能证明错误不存但不能证明错误不存在。在。o测试的目的是发现程序中的错误,是为了证明程测试的目的是发现程序中的错误,是为了证明程序有错序有错, , 而不是证明程序无错。而不是证明程序无错。35软件测试目标软件测试目标o如果软件中的问题没有人发现,那么它算不算如果软件中的问题没有人发现,那么它算不算软件缺陷?软件缺陷?o古谚:古谚: “一片树叶飘落在森林中没有人听见,一片树叶飘落在森林中没有人听见, 谁能说它发出了声音?谁能说它发出了声音?”o由于不能报告没有看见的问题,因此,没有看由于不能报告没有看见的问题,因此,没有看见就不能说存在软件缺陷。见就
24、不能说存在软件缺陷。o 只有看到了,才能断言软件缺陷。只有看到了,才能断言软件缺陷。36测试的目的是说明程序正确地执行它应有的功能测试的目的是说明程序正确地执行它应有的功能” 这种说法这种说法正确吗?正确吗?例:程序例:程序TriangleTriangle,输入三个整数,表示一个三角形的三个,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。等腰三角形还是不等边三角形。为 说 明 其 能 正 确 执 行 它 的 功 能 , 可 使 用为 说 明 其 能 正 确 执 行 它 的 功
25、 能 , 可 使 用 “ 测 试 用 例测 试 用 例”(3,4,5),(5,5,6),(6,6,6),(3,4,5),(5,5,6),(6,6,6),程序都能给出正确结果,是否程序都能给出正确结果,是否就可认为程序是正确的?就可认为程序是正确的?软件测试目标软件测试目标37对测试的理解对测试的理解o编程大师说:编程大师说:“任何一个程序,无论它多么小,总存在着错误。任何一个程序,无论它多么小,总存在着错误。”o初学者不相信大师的话,他问:初学者不相信大师的话,他问:“如果一个程序小得只执行一个简单的如果一个程序小得只执行一个简单的功能,那会怎样?功能,那会怎样?”o“这样的一个程序没有意义,
26、这样的一个程序没有意义,”大师说,大师说,“但如果这样的程序存在的话,但如果这样的程序存在的话,操作系统最后将失效,产生一个错误。操作系统最后将失效,产生一个错误。”o但初学者不满足,他问:但初学者不满足,他问:“如果操作系统不失效,那么会怎样?如果操作系统不失效,那么会怎样?”o“没有不失效的操作系统,没有不失效的操作系统,”大师说,大师说,“但如果这样的操作系统存在的但如果这样的操作系统存在的话,硬件最后将失效,产生一个错误。话,硬件最后将失效,产生一个错误。”o初学者仍不满足,再问:初学者仍不满足,再问:“如果硬件不失效,那么会怎样?如果硬件不失效,那么会怎样?”o大师长叹一声道:大师长
27、叹一声道:“没有不失效的硬件。但如果这样的硬件存在的话,没有不失效的硬件。但如果这样的硬件存在的话,用户就会想让那个程序做一件不同的事,这件事也是一个错误。用户就会想让那个程序做一件不同的事,这件事也是一个错误。”o没有错误的程序世间难求。没有错误的程序世间难求。o 编程之道(郭海编程之道(郭海 等译),清华大学出版社等译),清华大学出版社 38o(1 1)所有的测试都应追溯到用户需求所有的测试都应追溯到用户需求n最严重的错误最严重的错误( (从用户角度从用户角度) )是那些导致软件无是那些导致软件无法满足需求的错误。法满足需求的错误。软件测试的准则软件测试的准则39o(2 2)应该在测试开始
28、之前的相当长时间,就制定)应该在测试开始之前的相当长时间,就制定出测试计划。出测试计划。n概要设计时应完成测试计划。概要设计时应完成测试计划。n软件测试软件测试不等于不等于程序测试,软件测试应程序测试,软件测试应贯穿于贯穿于软件定义与开发的整个期间。软件定义与开发的整个期间。软件测试的准则软件测试的准则40软件测试的准则软件测试的准则o(3 3)把)把ParetoPareto原理应用于软件测试。原理应用于软件测试。ParetoPareto原理原理告诉我们,测试发现的错误中的告诉我们,测试发现的错误中的80%80%很可能是由程很可能是由程序中序中20%20%的模块造成的。的模块造成的。 41软件
29、测试的准则软件测试的准则o(4 4)测试应该从)测试应该从“小规模小规模”开始,并逐步进行开始,并逐步进行“大规模大规模”测试。测试。o(5 5)穷举测试是不可能的。)穷举测试是不可能的。例例 Sum(int a, int b, int c) 假定假定 int 类型为类型为16位整数位整数 需要测试需要测试216* 216 * 216次次 return (a+b+c); 每次每次1ms, 约要约要1万年万年 42o(6 6)为了达到最佳的测试效果,应该由独立的)为了达到最佳的测试效果,应该由独立的第三方来从事测试工作。第三方来从事测试工作。o开发和测试队伍分别建立。开发和测试队伍分别建立。软件
30、测试的准则软件测试的准则43软件测试是有风险的行为软件测试是有风险的行为软件数数量量遗漏软件遗漏软件缺陷数目缺陷数目测试费用测试费用测试中测试中测试后测试后测试工作量测试工作量最优测量量最优测量量44软件测试软件测试方法方法静态测试静态测试方法方法动态测试动态测试方法方法白盒测试方法白盒测试方法黑盒测试方法黑盒测试方法软件测试方法软件测试方法45静态测试静态测试o静态测试技术静态测试技术:不实际运行程序,而是通过检查:不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量的软件和阅读等手段来发现错误并评估代码质量的软件测试技术。测试技术。o静态测试约可找出静态测试约可找出3070%的
31、逻辑设计错误。的逻辑设计错误。o方法:方法:o走查走查:WalkThrougho审查审查:Inspectiono评审评审:ReviewMichael Fagan IBM46静态测试静态测试-走查走查o走查走查:开发组内部进行的,主要是个人通过检查:开发组内部进行的,主要是个人通过检查和阅读等手段来查找错误的活动。和阅读等手段来查找错误的活动。o经验:经验:n限时限时o 避免跑题避免跑题o 不要现场修改不要现场修改n检查要点检查要点o 逻辑错误逻辑错误o 代码标准代码标准/规范规范/风格风格47静态测试静态测试-审查审查o审查审查:开发组内部进行的,分配了相关的角色,采用讲解、:开发组内部进行的
32、,分配了相关的角色,采用讲解、提问并使用提问并使用Checklist方式进行的查找错误的活动。方式进行的查找错误的活动。o经验:经验:n以会议的形式,制定会议目标、流程和规则,结束后以会议的形式,制定会议目标、流程和规则,结束后要编写报告。要编写报告。n参加人员:参加人员:经验丰富的开发人员经验丰富的开发人员、和本模块相关的开和本模块相关的开发人员发人员、本项目组的新人。本项目组的新人。n由另外一名开发者进行讲解、其他开发者主要按照由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并进行提问并填表、本模块开发者回答问题并记录。记录。n不要现场修改
33、。不要现场修改。n检查要点检查要点o 设计需求设计需求o 代码标准代码标准/规范规范/风格风格48静态测试静态测试-评审评审o评审评审:开发组开发组、测试组测试组和和相关人员相关人员(QA、产品经理等、产品经理等)联合进行联合进行的,采用讲解、提问并使用的,采用讲解、提问并使用Checklist方式进行的查找错误的活方式进行的查找错误的活动。动。o经验:经验:n以会议的形式,制定会议目标、流程和规则,结束后要编写以会议的形式,制定会议目标、流程和规则,结束后要编写报告。相关资料要在会议前下发并阅读。报告。相关资料要在会议前下发并阅读。n参加人员:经验丰富的开发人员、和本模块相关的开发人员、参加
34、人员:经验丰富的开发人员、和本模块相关的开发人员、测试组和相关人员。测试组和相关人员。n由另外一名开发者进行讲解、其他开发者主要按照由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录。进行提问并填表、本模块开发者回答问题并记录。n不要现场修改。不要现场修改。n检查要点检查要点o 设计需求设计需求o 代码标准代码标准/规范规范/风格风格o 文档的完整性和一致性文档的完整性和一致性49动态测试动态测试o动态测试:动态测试:通过运行软件来检验软件的动态行为通过运行软件来检验软件的动态行为和运行结果的正确性和运行结果的正确性o动态测试的两个基本要素
35、:动态测试的两个基本要素:n被测试程序被测试程序n测试数据(测试用例)测试数据(测试用例)50动态测试动态测试o白盒测试(结构测试)白盒测试(结构测试)n测试者测试者完全知道完全知道程序的内部结构和处理算法程序的内部结构和处理算法o黑盒测试(功能测试)黑盒测试(功能测试)n测试者测试者完全不知道完全不知道程序的内部结构和处理算法程序的内部结构和处理算法51白盒测试白盒测试 基于代码的测试基于代码的测试52黑盒测试黑盒测试基于需求的测试基于需求的测试软件输入输入输出输出53C C B BA AD D- -A:A:只能用黑盒测试发现的错误只能用黑盒测试发现的错误- -B:B:只能用白盒测试发现的错
36、误只能用白盒测试发现的错误- -C:C:两种方法都能发现的错误两种方法都能发现的错误- -D:D:两种方法都不能发现的错误两种方法都不能发现的错误黑盒测试与白盒测试能发现的错误黑盒测试与白盒测试能发现的错误54穷举测试穷举测试例例: :输入三角形的三条边长可采用的输入三角形的三条边长可采用的测试用例数测试用例数( (设字长设字长1616位位) )=2=21616X2X21616X2X216163X103X101414执行时间执行时间: : 设测试一次需设测试一次需1ms1ms,共需一万年。,共需一万年。黑盒测试黑盒测试黑盒测试黑盒测试55穷举测试穷举测试例:从例:从A A到到B B的可能路径的
37、可能路径51+52 +.+519 +520 1014执行时间执行时间: : 设测试一次需设测试一次需2ms2ms 穷举测试需穷举测试需5 5亿年。亿年。p不论黑盒还是白盒测试都不论黑盒还是白盒测试都不不能进行穷尽测试能进行穷尽测试A AB B白盒测试白盒测试56白盒测试技术白盒测试技术o白盒测试技术将介绍:白盒测试技术将介绍:n逻辑覆盖逻辑覆盖n基本路径测试基本路径测试n循环测试循环测试57白盒测试技术白盒测试技术-逻辑覆盖逻辑覆盖o逻辑覆盖逻辑覆盖是设计白盒测试方案的一种技术。是设计白盒测试方案的一种技术。o设计测试方案是测试阶段的关键技术问题。设计测试方案是测试阶段的关键技术问题。o测试方
38、案包括具体的测试目的测试方案包括具体的测试目的( (例如,要测试的具例如,要测试的具体功能体功能) ),应该输入的测试数据和预期的输出结果。,应该输入的测试数据和预期的输出结果。o测试数据测试数据和和预期的输出结果预期的输出结果称为测试用例。称为测试用例。58o不同的测试数据发现程序错误的能力差别很大,为了提高不同的测试数据发现程序错误的能力差别很大,为了提高测试效率降低测试成本,应该选用高效的测试数据。因为测试效率降低测试成本,应该选用高效的测试数据。因为不可能进行穷尽的测试,选用少量不可能进行穷尽的测试,选用少量“最有效的最有效的”测试数据,测试数据,做到尽可能完备的测试就更重要了。做到尽
39、可能完备的测试就更重要了。o有选择地执行程序中某些最有代表性的通路是对穷尽测试有选择地执行程序中某些最有代表性的通路是对穷尽测试的唯一可行的替代办法。的唯一可行的替代办法。o逻辑覆盖逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。进行越来越完整的通路测试。59o测试数据从覆盖源程序语句的详尽程度分析,大测试数据从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准。致有以下一些不同的覆盖标准。n语句覆盖语句覆盖n判定覆盖判定覆盖n条件覆盖条件覆盖n判定判定/ /条件覆盖条件覆盖n条件组合覆盖条件组合覆盖n路径覆盖路径覆
40、盖60o测试数据:测试数据:A=2,B=0,X=4A=2,B=0,X=4语句覆盖是语句覆盖是最弱的逻辑覆盖最弱的逻辑覆盖1.1.语句覆盖语句覆盖语句覆盖的含义是,选择足够多的测试数据,使语句覆盖的含义是,选择足够多的测试数据,使被测程序中每个语句至少执行一次。被测程序中每个语句至少执行一次。61o测试数据:测试数据:oA=3,B=0,X=1A=3,B=0,X=1覆盖覆盖sacbdsacbdoA=2,B=1,X=3A=2,B=1,X=3覆盖覆盖sabedsabed2.2.判定覆盖判定覆盖判定覆盖又叫分支覆盖,判定覆盖又叫分支覆盖,使每个判定的真假分支都至少执行一次使每个判定的真假分支都至少执行一
41、次判定覆盖仍是弱的逻辑覆盖判定覆盖仍是弱的逻辑覆盖只覆盖了全部路径的一半只覆盖了全部路径的一半62o测试数据:测试数据:oA=2,B=0,X=4A=2,B=0,X=4满足满足A1,B=0,A=2,X1A1,B=0,A=2,X1条件条件覆盖覆盖sacbedsacbedoA=1,B=1,X=1A=1,B=1,X=1满足满足A1,B0,A2,X1A1,B0,A2,X1条件条件覆盖覆盖sabdsabda点各种情况:点各种情况:A1, A1, B=0, B0 b点各种情况:点各种情况:A=2, A2, X1, X13.3.条件覆盖条件覆盖判定表达式中的每个条件都取到各种可能的结果。判定表达式中的每个条件
42、都取到各种可能的结果。条件覆盖强于判定覆盖条件覆盖强于判定覆盖条件覆盖的每个条件都取到了两个不条件覆盖的每个条件都取到了两个不同的结果同的结果判定覆盖的每个判定表达式都取到了判定覆盖的每个判定表达式都取到了两个不同的结果两个不同的结果63o测试数据:测试数据:oA=2,B=0,X=1A=2,B=0,X=1满足满足A1,B=0,A=2, X1A1,B=0,A=2, X1条件条件覆盖覆盖sacbedsacbedoA=1,B=1,X=2A=1,B=1,X=2满足满足A1,B0,A2, X1A1,B0,A2, X1条件条件覆盖覆盖sabedsabed条件覆盖不一定满足判定覆盖条件覆盖不一定满足判定覆盖
43、第二个判定表达式的值为第二个判定表达式的值为假的情况没有考虑。假的情况没有考虑。64o判定覆盖判定覆盖不一定包含不一定包含条件覆盖条件覆盖。o条件覆盖条件覆盖也不一定包含也不一定包含判定覆盖判定覆盖。o一种能同时满足这两种覆盖标准的是:一种能同时满足这两种覆盖标准的是:判定判定/ /条件覆盖条件覆盖。65o测试数据:测试数据:oA=2,B=0,X=4A=2,B=0,X=4覆盖覆盖sacbedsacbedoA=1,B=1,X=1A=1,B=1,X=1覆盖覆盖sabdsabd4. 4. 判定判定/ /条件覆盖条件覆盖判定表达式中的每个条件都取到各种可能的值,而且每个判定判定表达式中的每个条件都取到
44、各种可能的值,而且每个判定表达式也都取到各种可能的结果表达式也都取到各种可能的结果能同时满足判定、条件两种覆盖。能同时满足判定、条件两种覆盖。判定判定/条件覆盖不一定满足路径覆条件覆盖不一定满足路径覆盖。盖。665.5.条件组合覆盖条件组合覆盖每个判定表达式每个判定表达式中条件的各种可能组合都至少出现一次。中条件的各种可能组合都至少出现一次。o测试数据:测试数据:oA=2,B=0,X=4A=2,B=0,X=41 1,5 5组合,覆盖组合,覆盖sacbedsacbedoA=2,B=1,X=1A=2,B=1,X=12 2,6 6组合,覆盖组合,覆盖sabedsabedoA=1,B=0,X=2A=1
45、,B=0,X=23 3,7 7组合,覆盖组合,覆盖sabedsabedoA=1,B=1,X=1A=1,B=1,X=14 4,8 8组合,覆盖组合,覆盖sabdsabd八种组合:八种组合:(1)A1,B=0 (2)A1,B0 (3)A1,B=0 (4)A1,B0(5)A=2,X1 (6)A=2,X1 (7)A2,X1 (8)A2,X1676.6.路径覆盖路径覆盖覆盖每一个可能的路径覆盖每一个可能的路径。o测试数据:测试数据:oA=1,B=1,X=1A=1,B=1,X=1覆盖覆盖sabdsabdoA=1,B=1,X=2A=1,B=1,X=2覆盖覆盖sabedsabedoA=3,B=0,X=1A=3
46、,B=0,X=1覆盖覆盖sacbdsacbdoA=2,B=0,X=4A=2,B=0,X=4覆盖覆盖sacbedsacbed686种覆盖标准的对比种覆盖标准的对比发现错误能力发现错误能力覆盖标准覆盖标准要求要求弱弱强强语句覆盖语句覆盖每条语句至少执行一次每条语句至少执行一次判定覆盖判定覆盖每个判定的每个分支至少执行一次每个判定的每个分支至少执行一次条件覆盖条件覆盖每个判定的每个条件应取到各种可能每个判定的每个条件应取到各种可能的值的值判定判定/ /条件覆盖条件覆盖同时满足判定覆盖和条件覆盖同时满足判定覆盖和条件覆盖条件组合覆盖条件组合覆盖每个判定中各条件的每一种组合至少每个判定中各条件的每一种组
47、合至少出现一次出现一次路径覆盖路径覆盖使程序中每一条可能的路径至少执行使程序中每一条可能的路径至少执行一次一次69流图流图o流图流图o在设计测试方案时,往往需要仔细分析程序的控制在设计测试方案时,往往需要仔细分析程序的控制流。为了突出表示程序的控制流,可以使用流。为了突出表示程序的控制流,可以使用流图流图( (也称为也称为程序图程序图) )。o流图仅仅描绘程序的控制流程,它完全不表现对数流图仅仅描绘程序的控制流程,它完全不表现对数据的具体操作以及分支或循环的具体条件。据的具体操作以及分支或循环的具体条件。70流图流图o在流图中用圆表示在流图中用圆表示节点节点,一个圆代表一条或多条语句。,一个圆
48、代表一条或多条语句。o程序流程图中的一个处理框序列和一个菱形判定框,可以程序流程图中的一个处理框序列和一个菱形判定框,可以映射成流图中的一个节点。映射成流图中的一个节点。o流图中的箭头线称为流图中的箭头线称为边边,它和程序流程图中的箭头线类似,它和程序流程图中的箭头线类似,代表控制流。代表控制流。o在流图中一条边必须终止于一个节点,即使这个节点并不在流图中一条边必须终止于一个节点,即使这个节点并不代表任何语句代表任何语句( (实际上相当于一个空语句实际上相当于一个空语句) )。o由边和节点围成的面积称为由边和节点围成的面积称为区域区域,当计算区域数时应该包,当计算区域数时应该包括图外部未被围起
49、来的那个区域。括图外部未被围起来的那个区域。71流图流图图图 把程序流程图映射成流图把程序流程图映射成流图(a)(a)程序流程图;程序流程图;(b)(b)流图流图72流图流图PDLPDLprocedure:sortprocedure:sort1 1:do while records remaindo while records remainread record;read record;2 2: if record field 1=0if record field 1=03 3: then process record;then process record; store in buffers
50、tore in buffer; incremertincremert counter; counter;4 4: elseifelseif record field 2=0 record field 2=05 5: then reset counter;then reset counter;6 6: else process record;else process record; store in file;store in file;7a7a:endifendifendifendif7b7b:enddoenddo8 8:endend图图 由由PDLPDL翻译成的流图翻译成的流图73白盒测试技
51、术白盒测试技术-基本路径测试基本路径测试o基本路径测试基本路径测试o基本路径测试是基本路径测试是Tom McCabeTom McCabe提出的一种白盒测提出的一种白盒测试技术。试技术。o通过分析由控制构造的环路的复杂性,导出基通过分析由控制构造的环路的复杂性,导出基本路径集合,从而设计测试用例,保证这些路本路径集合,从而设计测试用例,保证这些路径至少通过一次。径至少通过一次。 74设计基本路径测试的步骤设计基本路径测试的步骤(1)以详细设计或源程序为基础,导出程序流程图)以详细设计或源程序为基础,导出程序流程图的拓扑结构的拓扑结构程序图。程序图。 (a a)程序流程图)程序流程图 (b b)程
52、序图)程序图 图:程序流程图和程序图图:程序流程图和程序图 75o(2)程序图)程序图G的环路复杂性的环路复杂性V(G)的计算的计算 o例如,图(例如,图(b)的)的V(G)=4,还可以按如下两种方法计算:,还可以按如下两种方法计算:nV(G)= 判定结点数判定结点数+1=3+1=4。nV(G)= 边的数量边的数量-节点数量节点数量+2=11-9+2=4。o(3)确定只包含独立路径的基本路径集。)确定只包含独立路径的基本路径集。o例如,在图(例如,在图(b)所示的图中,一组独立的路径是:)所示的图中,一组独立的路径是:npath1:111npath2:1234510111npath3:1236
53、8910111npath4:12367910111o(4)设计测试用例,确保基本路径集合中每条路径的执行。)设计测试用例,确保基本路径集合中每条路径的执行。76o使用基本路径测试技术设计测试用例的步骤如下:使用基本路径测试技术设计测试用例的步骤如下: n1. 1. 根据过程设计结果画出相应的流图根据过程设计结果画出相应的流图n2. 2. 计算流图的环形复杂度计算流图的环形复杂度n3. 3. 确定线性独立路径的基本集合确定线性独立路径的基本集合n4. 4. 设计可强制执行基本集合中每条路径的测试用例设计可强制执行基本集合中每条路径的测试用例77白盒测试技术白盒测试技术-循环测试循环测试o循环测试
54、循环测试o循环测试是一种白盒测试技术,它专注于测试循环循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。结构的有效性。o在结构化的程序中通常只有三种循环:在结构化的程序中通常只有三种循环:n简单循环简单循环n串接循环串接循环n嵌套循环嵌套循环78图图 三种循环三种循环79白盒测试技术白盒测试技术-循环测试循环测试o1.1.简单循环简单循环o使用下列测试集来测试简单循环,其中使用下列测试集来测试简单循环,其中n n是允许通是允许通过循环的最大次数。过循环的最大次数。n跳过循环。跳过循环。n只通过循环一次。只通过循环一次。n通过循环两次。通过循环两次。n通过循环通过循环m m次,其中次,其
55、中m mn-1n-1。n通过循环通过循环n-1n-1,n n,n+1n+1次。次。 for(i=1;i=n;i+)80白盒测试技术白盒测试技术-循环测试循环测试o2.2.嵌套循环嵌套循环o如果把简单循环的测试方法直接应用到嵌套循环,可能的测如果把简单循环的测试方法直接应用到嵌套循环,可能的测试数就会随嵌套层数的增加按几何级数增长,这会导致不切试数就会随嵌套层数的增加按几何级数增长,这会导致不切实际的测试数目。实际的测试数目。B.BeizerB.Beizer提出了一种能减少测试数的方法。提出了一种能减少测试数的方法。n从最内层循环开始测试,把所有其他循环都设置为最小值。从最内层循环开始测试,把所
56、有其他循环都设置为最小值。n对最内层循环使用简单循环测试方法,而使外层循环的迭对最内层循环使用简单循环测试方法,而使外层循环的迭代参数代参数( (例如,循环计数器例如,循环计数器) )取最小值,并为越界值或非法取最小值,并为越界值或非法值增加一些额外的测试。值增加一些额外的测试。n由内向外,对下一个循环进行测试,但保持所有其他外层由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为循环为最小值,其他嵌套循环为“典型典型”值。值。n继续进行下去,直到测试完所有循环。继续进行下去,直到测试完所有循环。for(i=1;i=m;i+)for(j=1;j1001000 1000
57、 100 有效等价类有效等价类00成绩成绩100100 无效等价类无效等价类 成绩成绩00黑盒测试黑盒测试-等价类划分等价类划分88黑盒测试黑盒测试-等价类划分等价类划分(2 2)如果规格说明规定了数据值的集合,或者是规定了)如果规格说明规定了数据值的集合,或者是规定了“必必须如何须如何”的条件,这时可确定一个有效等价类和一个无效等价的条件,这时可确定一个有效等价类和一个无效等价类。类。例如,在例如,在C C中对变量标识符规定为中对变量标识符规定为“以字母开头的以字母开头的串串”,那么所有以字母开头的串构成有效等价类,而不在此集合内那么所有以字母开头的串构成有效等价类,而不在此集合内(不以字母
58、开头)的串归于无效等价类。(不以字母开头)的串归于无效等价类。(3 3)如果规格说明中规定的是一个条件数据,则可确定一个)如果规格说明中规定的是一个条件数据,则可确定一个有效等价类和一个无效等价类。有效等价类和一个无效等价类。例如:例如:“成人(年满成人(年满1818岁)须岁)须”,则考虑成人为一个,则考虑成人为一个有效等价类;有效等价类; 未满未满1818岁者为一个无效等价类。岁者为一个无效等价类。o(4)如规定了输入数据的一组值,且程序对不同)如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效
59、等价类效等价类,并有一个无效等价类(所有不允许的输所有不允许的输入值的集合入值的集合)。o例:输入条件说明学历可为例:输入条件说明学历可为:专科、本科、硕士、专科、本科、硕士、博士博士四种之一,则分别取这四个值作为四种之一,则分别取这四个值作为四个有效等四个有效等价类价类,另外把四种学历之外的任何学历作为无效等,另外把四种学历之外的任何学历作为无效等价类。价类。o(5)如果我们确知,已划分的等价类中各元素在)如果我们确知,已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。分成更小的等价类。90黑盒测试黑盒测试-等价
60、划分等价划分用等价类划分法设计测试用例步骤:用等价类划分法设计测试用例步骤:(1)(1)形成等价类表,每一等价类规定一个唯一的编号;形成等价类表,每一等价类规定一个唯一的编号;(2)(2)设计一个新的测试方案以尽可能多地覆盖尚未被设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的覆盖的有效等价类有效等价类,复重这一步骤直到所有有效,复重这一步骤直到所有有效等价类都被覆盖为止。等价类都被覆盖为止。(3)(3)设计一个新的测试方案,使它覆盖一个而且只覆设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的盖一个尚未被覆盖的无效等价类无效等价类,重复这一步骤,重复这一步骤直到所有无效等价类都被覆
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年低田闲置转让合同范本
- 2024年代理要账居间协议合同范本
- 2024年冲桩机出售转让合同范本
- 小学毕业数学总复习专题九解决问题第21课时比和比例实际问题课件
- 专家幼小衔接培训
- 2024安全生产法律法规知识培训
- 2024至2030年中国锁花片数据监测研究报告
- 【数学】指数函数图象与性质测试卷-2024-2025学年高一上学期数学人教A版(2019)必修第一册
- 2024家庭装修施工合同新
- 2024石材供货合同书
- 兽医流行病学病因推断
- 历史幽愤的现代回响——《记念刘和珍君》课堂实录
- 英语单词分类大全-20170913
- 信息技术课课堂教学评价表
- 施工进度计划书
- 35KV集电线路铁塔组立专项方案
- 不锈钢管规格表大全以及理论重量表大全
- 公司保密制度-附保密分类表
- 滑雪场管理手册
- 人类养生长寿的新方法---“中枢平衡”健体强身模式
- 胸外科技术操作规范
评论
0/150
提交评论