系统实施测试评价和维护.ppt

上传人:牧羊曲112 文档编号:6373260 上传时间:2023-10-21 格式:PPT 页数:235 大小:1.53MB
返回 下载 相关 举报
系统实施测试评价和维护.ppt_第1页
第1页 / 共235页
系统实施测试评价和维护.ppt_第2页
第2页 / 共235页
系统实施测试评价和维护.ppt_第3页
第3页 / 共235页
系统实施测试评价和维护.ppt_第4页
第4页 / 共235页
系统实施测试评价和维护.ppt_第5页
第5页 / 共235页
点击查看更多>>
资源描述

《系统实施测试评价和维护.ppt》由会员分享,可在线阅读,更多相关《系统实施测试评价和维护.ppt(235页珍藏版)》请在三一办公上搜索。

1、1,1,信息系统的开发思路,系统分析,系统设计,系统实施,第6章系统实施测试、评价和维护,2,本章主要内容:,6.1 系统实施的概念、任务、特点及步骤 6.2 系统软硬件、网络购置和系统的准备 6.3 程序编制6.4 测试6.5 系统试运行与切换6.6 系统评价和维护,第6章系统实施测试、评价和维护,3,系统设计说明书审核通过后,研制工作进入实施阶段。这一阶段要把物理模型转换为实际可运行的信息系统,交付用户使用。也就是在系统分析、系统设计的基础上,完成程序的编码、测试、数据库系统的建立,系统的试运行和系统的转换,将系统设计付诸实现,形成目标系统的运行环境。,6.1.1 系统实施的概念,构建系统

2、运行平台,程序的调试和测试,系统实施报告,系统的物理模型,6.1.1 系统实施的概念,5,具体地讲,这一阶段的任务包括以下几个方面:(1)硬件、系统的准备根据系统分析和系统设计方案的要求,选择与安装符合新系统运行环境要求的硬件及系统。(2)数据准备按照数据库设计方案的要求,安装调试系统所需要的数据库管理系统。收集和整理信息系统运行所需的基础数据,建立数据库。,6.1.2 系统实施阶段的任务,6,(3)程序设计制定编程的规范约定;采用结构化程序设计方法;选择合适的程序设计语言进行编程,包括程序的设计、测试、运行和调试。,6.1.2 系统实施阶段的任务,7,(4)系统测试与调试系统测试是为了发现系

3、统中所存在的错误而运行系统的过程,其目的就是在系统投入运行之前,尽可能多发现系统中的错误,以保证系统可靠地、高质量地实现设计功能;系统调试是将测试出的错误做进一步的诊断和改正。,6.1.2 系统实施阶段的任务,8,(5)系统转换系统经过测试、试运行之后,就可以选择适当的方式,在适宜的时间进行新老的替换工作,使新系统进入实际运行。,6.1.2 系统实施阶段的任务,9,与系统分析、系统设计阶段相比较,系统实施阶段的特点是:时间短、难度小、工作量大,投入的人力、物力多。,6.1.3 实施的特点及步骤,10,硬件获取,系统编程,用户准备,人员:聘用和培训,机房、场所准备,数据准备,安装,测试,试运行,

4、系统切换,用户验收,实施步骤,11,系统软硬件、网络购置1)硬件的获取根据系统设计的指标要求制作采购的标书邀请硬件供应商进行技术交流选择资质好的厂商发放标书评标开标及商务谈判签订合同执行合同,6.2 系统软硬件、网络购置和系统的准备,12,2)网络的获取局域网络的建设和改造新建网络改造网络自建或外包广域网络的建设传输网络的取得(传输方式的选择、线路的租赁)网络设备的获取(与硬件同)自建与承包给系统集成商,6.2.1 系统软硬件、网络购置,13,6.2.1 系统软硬件、网络购置,3)系统工具的选取选择开发方法选择开发工具及数据库产品,14,1)用户准备用户准备主要是指准备好信息系统的管理人员、使

5、用人员等。用户的培训(内部培训与外部培训)。信息系统的IT人员的招聘和培训。2)场所准备新系统的工作场所(空调、电力、办公家具)。,6.2.2 系统准备,15,3)数据准备将原来的手工数据文件转化成计算机文件。将原来的不同格式的数据文件转换成新系统的格式。4)安装将计算机设备、网络设备在信息系统场所安装、使其运转。,6.2.2 系统准备,16,6.3.1 程序设计语言的分类 6.3.2 结构化程序设计6.3.3 程序设计风格6.3.4 程序效率,6.3 程序编制,17,随着计算机技术的发展,目前已经出现了数百种程序设计语言,但被广泛应用的只有几十种。由于不同种类的语言适用于不同的问题域和系统环

6、境,因此了解程序设计语言的分类可以帮助我们选择出合适的语言。通常可将程序设计语言分为机器语言、汇编语言,高级语言和第四代语言4类。,6.3.1 程序设计语言的分类,18,结构化程序设计主要包括两方面:在编写程序时,强调使用几种基本控制结构,通过组合嵌套,形成程序的控制结构。尽可能避免使用GOTO语句。在程序设计过程中,尽量采用自顶向下和逐步细化的原则,由粗到细,一步步展开。,6.3.2 结构化程序设计,19,使用语言中的顺序、选择、循环等有限的基本控制结构表示程序逻辑。选用的控制结构只准许有一个入口和一个出口。程序语句组成容易识别的块,每块只有一个入口和一个出口。复杂结构应该用基本控制结构进行

7、组合嵌套来实现。,结构化程序设计的主要原则,20,自顶向下,逐步求精,在详细设计和编码阶段,应当采取自顶向下,逐步求精的方法。把一个模块的功能逐步分解,细化为一系列具体的步骤,进而翻译成一系列用某种程序设计语言写成的程序。,逐步细化,6.3.2 结构化程序设计,21,例,用筛选法求100以内的素数,筛选法就是从2到100中去掉2,3,5,7的倍数,剩下的就是100以内的素数。为了解决这个问题,可先按程序功能写出一个框架。,6.3.2 结构化程序设计,22,main()/程序框架 建立2到100的数组A,其中Aii;-1 建立2到10的素数数组 B,其中存放2 到10以内的素数;-2 若Aii是

8、B 中任一数的倍数,则 剔除Ai;-3 输出A 中所有没有被剔除的数;-4,6.3.2 结构化程序设计,23,main()/*建立2到100的数组A,其中Aii*/for(i=2;i=100;i+)Ai=i;/*建立2到10的素数数组B,其中存放2到 10以内的素数*/B1=2;B2=3;B3=5;B4=7;/*若Aii是B 中任一数的倍数,则剔 除Ai*/for(j=1;j=4;j+)检查A 所有的数能否被Bj整除并将 能被整除的数从A 中剔除;-3.1/*输出A 中所有没有被剔除的数*/for(i=2;i=100;i+)若Ai没有被剔除,则输出之-4.1对框架中的局部再做细化,得到整个程序

9、。,6.3.2 结构化程序设计,24,main()/*建立2到100的数组A,其中Aii*/for(i=2;i=100;i+)Ai=i;/*建立2到10的素数表B,其中存放2到 10以内的素数*/B1=2;B2=3;B3=5;B4=7;/*若Aii是B 中任一数的倍数,则剔除 Ai*/for(j=1;j=4;j+)/*检查A 所有的数能否被Bj整除并将能 被整除的数从A 中剔除*/for(i=2;i=100;i+)if(AiBj*Bj=Ai)Ai=0;/*输出A 中所有没有被剔除的数*/for(i=2;i=100;i+)/*若Ai没有被剔除,则输出之*/if(Ai!=0)printf(“A%d

10、%dn”,I,Ai);,6.3.2 结构化程序设计,25,自顶向下,逐步求精方法的优点,符合人们解决复杂问题的普遍规律。可提高系统开发的成功率和生产率。用先全局后局部,先整体后细节,先抽象后具体的逐步求精的过程开发出来的程序具有清晰的层次结构,程序容易阅读和理解。程序自顶向下,逐步细化,分解成一个树形结构。在同一层的节点上的细化工作相互独立。有利于编码、测试和集成。每一步工作仅在上层节点的基础上做不多的设计扩展,便于检查。有利于设计的分工和组织工作。,6.3.2 结构化程序设计,26,程序实际上也是一种供人阅读的文章,有一个文章的风格问题。应该使程序具有良好的风格。1.源程序文档化2.数据说明

11、3.语句结构4.输入输出方法,6.3.3程序设计风格,27,1)标识符的命名2)安排注释3)程序的视觉组织,1.源程序文档化,28,符号名即标识符,包括模块名、变量名、常量名、标号名、子程序名、数据区名以及缓冲区名等。这些名字应能反映它所代表的实际东西,应有一定实际意义。例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要给每一个名字加注释。同时,在一个程序中,一个变量只应用于一种用途。,1)符号名的命名,29,夹在程序中的注释是程序员

12、与日后的程序读者之间通信的重要手段。注释决不是可有可无的。一些正规的程序文本中,注释行的数量占到整个源程序的13到12,甚至更多。注释分为序言性注释和功能性注释。,2)程序的注释,30,通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。有些系统开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关项目包括:程序标题;有关本模块功能和目的的说明;主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息;模块位置:在哪一个源文件中,或隶属于哪一个系统包;开发简历:模块设计者,复审

13、者,复审日期,修改日期及有关说明等。,序言性注释,31,功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。例:/*ADD AMOUNT TO TOTAL*/TOTAL=AMOUNTTOTAL不好。如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:/*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/TOTAL=AMOUNTTOTAL要点 描述一段程序,而不是每一个语句;用缩进和空行,使程序与注释容易区别;注释要正确。,功能性注释,32,恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。

14、例如,将表达式(A16)ANDNOT(B49)ORC写成(A16)AND NOT(B49)OR C自然的程序段之间可用空行隔开。,3)视觉组织(空格、空行和移行),33,移行也叫做向右缩格。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰。例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。,3)视觉组织(空格、空行和移行),34,IF()THEN IF()THEN ELSE ENDIF ELSE ENDIF,3)视觉组织(空格、空行和移行),35,在设计阶段已经确

15、定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下几点。1)数据说明的次序应当规范化 2)说明语句中变量安排有序化 3)使用注释说明复杂数据结构,2 数据说明,36,数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。例如,在FORTRAN程序中数据说明次序 常量说明 简单变量类型说明 数组说明 公用数据块说明 所有的文件说明在类型说明中还可进一步要求。例,可按如下顺序排列:整型量说明 实型量说

16、明 字符量说明 逻辑量说明,1)数据说明的次序应当规范化,37,当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列。带标号的全程数据(如FORTRAN的公用块)也应当按字母的顺序排列。例如,把integer size,length,width,cost,price写成 cost,integer,length,price,size,width,2)说明语句中变量安排有序化,38,如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。例如,对数据结构的链表结构和VB 中用户自定义的数据类型,都应当在注释中做必要的补充说明。,3)使用注释说明复杂数据结构

17、,39,在设计阶段确定了系统的逻辑流结构,但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。1)在一行内只写一条语句在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。许多程序设计语言允许在一行内写多个语句。但这种方式会使程序可读性变差。因而不可取。,3 语句结构(21点),40,例如,有一段排序程序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

18、;由于一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性变得很差。,3 语句结构(21点),41,FOR I:=1 TO N-1 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,3 语句结构(21点),42,程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。例,有一个用 C 语句写出的程序段:AI=AIAT;AT=AIAT;AI=AIAT;此段程序可能不易看懂,有时还需用实际数据试验一下。实际上,这段

19、程序的功能就是交换AI和AT中的内容。目的是为了节省一个工作单元。如果改一下:WORK=AT;AT=AI;AI=WORK;就能让读者一目了然了。,2)程序编写首先应当考虑清晰性,43,程序编写得要简单,写清楚,直截了当地说明程序员的用意。例如,for(i=1;i=n;i+)for(j=1;j=n;j+)Vij(ij)*(ji)除法运算()在除数和被除数都是整型量时,其结果只取整数部分,而得到整型量。,3)程序要能直截了当地说明程序员的用意,44,当 ij 时,i/j=0 当 ji 时,j/i=0 得到的数组 当ij 时 Vij=(ij)*(ji)=0 当ij 时 Vij=(ij)*(ji)=1

20、这样得到的结果 V 是一个单位矩阵。,3)程序要能直截了当地说明程序员的用意,45,写成以下的形式,就能让读者直接了解程序编写者的意图。for(i1;i=n;i+)for(j1;j=n;j+)if(i=j)Vij 1.0;ELSE Vij 0.0;,3)程序要能直截了当地说明程序员的用意,46,3)程序要能直截了当地说明程序员的用意,47,4)除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。不要为了追求效率而丧失了清晰性。事实上,程序效率的提高主要应通过选择高效的算法来实现。5)首先要保证程序正确,然后才要求提高速度。反过来说,在使程序高速运行时,首先要保证它是正确的。,3 语句结构

21、(21点),48,6)避免使用临时变量而使可读性下降。例,有的程序员为了追求效率,往往喜欢把表达式 AI1AI;写成 AIAI;XAI1AI;这样将一句分成两句写,会产生意想不到的问题。,3 语句结构(21点),49,7)让编译程序做简单的优化。8)尽可能使用库函数9)避免不必要的转移。同时如果能保持程序可读性,则不必用GOTO语句。例,有一个求三个数中最小值的程序:,3 语句结构(21点),50,IF(X Y)GOTO 30 IF(Y Z)GOTO 50 SMALLZ GOTO 6030 IF(X Z)GOTO 60 SMALLZ GOTO 6050 SMALLY GOTO 6060 SMA

22、LLX70 CONTINUE,3 语句结构(21点),51,程序只需编写成:smallx;if(y small)smally;if(z small)smallz;所以程序应当简单,不必过于深奥,避免使用GOTO语句绕来绕去。10)尽量只采用三种基本的控制结构来编写程序。除顺序结构外,使用 if-then-else来实现选择结构;使用do-until或do-while来实现循环结构。,3 语句结构(21点),52,11)避免使用空的ELSE语句和IF THEN IF的语句。这种结构容易使读者产生误解。例如,if(char=a)if(char=z)cout“This is a letter.”;e

23、lse cout“This is not a letter.”;可能产生二义性问题。,3 语句结构(21点),53,12)避免采用过于复杂的条件测试。13)尽量减少使用“否定”条件的条件语句。例如,如果在程序中出现 if(!(char0|char 9)改成 if(char=0&char=9)不要让读者绕弯子想。,3 语句结构(21点),54,14)尽可能用通俗易懂的伪码来描述程序的流程,然后再翻译成必须使用的语言。15)数据结构要有利于程序的简化。16)要模块化,使模块功能尽可能单一化,模块间的耦合能够清晰可见。17)利用信息隐蔽,确保每一个模块的独立性。,3 语句结构(21点),55,18)

24、从数据出发去构造程序。19)不要修补不好的程序,要重新编写。也不要一味地追求代码的复用,要重新组织。20)对太大的程序,要分块编写、测试,然后再集成。21)对递归定义的数据结构尽量使用递归过程。,3 语句结构(21点),56,输入和输出信息是与用户的使用直接相关的。输入和输出的方式和格式应当尽可能方便用户的使用。一定要避免因设计不当给用户带来的麻烦。因此,在信息体统需求分析阶段和设计阶段,就应基本确定输入和输出的风格。系统能否被用户接受,有时就取决于输入和输出的风格。,4 输入和输出,57,不论是批处理的输入输出方式,还是交互式的输入输出方式,在设计和编码时都应考虑下列原则(9个):1)对所有

25、的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息;3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式;,4 输入和输出,58,4)输入数据时,应允许使用自由格式输入;5)应允许缺省值;6)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;7)在交互式输入输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;,4 输入和输出,59,8)当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的

26、要求的一致性;9)给所有的输出加注解,并设计输出报表格式。输入输出风格还受到许多其它因素的影响。如输入输出设备(例如终端的类型,图形设备,数字化转换设备等)、用户的熟练程度、以及通信环境等。,4 输入和输出,60,1 讨论效率的准则程序的效率是指程序的执行速度及程序所需占用的内存的存储空间。程序编码是最后提高运行速度和节省存储的机会,因此在此阶段不能不考虑程序的效率。让我们首先明确讨论程序效率的几条准则。,6.3.4程序效率,61,1)效率是一个性能要求,应当在需求分析阶段给出。系统效率以需求为准,不应以人力所及为准。2)好的设计可以提高效率。3)程序的效率与程序的简单性相关。4)一般说来,任

27、何对效率无重要改善,且对程序的简单性、可读性和正确性不利的程序设计方法都是不可取的。总之,不要牺牲程序的清晰性、可读性或正确性而去追求效率,那是不会有本质的提高。,6.3.4程序效率,62,2 算法对效率的影响,源程序的效率与详细设计阶段确定的算法的效率直接有关。详细设计翻译转换成源程序代码后,算法效率反映为程序的执行速度和存储容量的要求。设计向程序转换过程中的指导原则:,6.3.4程序效率,63,在编程序前,尽可能化简有关的算术表达式和逻辑表达式;仔细检查算法中的嵌套的循环,尽可能将某些语句或表达式移到循环外面;尽量避免使用多维数组;尽量避免使用指针和复杂的表;采用“快速”的算术运算;不要混

28、淆数据类型,避免在表达式中出现类型混杂;尽量采用整数算术表达式和布尔表达式;选用等效的高效率算法;许多编译程序具有“优化”功能,可以自动生成高效率的目标代码。,6.3.4程序效率,64,3影响存储器效率的因素,在大中型计算机系统中,存储限制不再是主要问题。在这种环境下,对内存采取基于操作系统的分页功能的虚拟存储管理。存储效率与操作系统的分页功能直接有关。采用结构化程序设计,将程序功能合理分块,使每个模块或一组密切相关模块的程序体积大小与每页的容量相匹配,可减少页面调度,减少内外存交换,提高存储效率。在微型计算机系统中,存储器的容量对系统设计和编码的制约很大。因此要选择可生成较短目标代码且存储压

29、缩性能优良的编译程序,有时需采用汇编程序。提高存储器效率的关键是程序的简单性。,6.3.4程序效率,65,4 影响输入输出效率的因素,输入输出可分为两种类型:面向人(操作员)的输入输出 面向设备的输入输出如果操作员能够十分方便、简单地录入输入数据,或者能够十分直观、一目了然地了解输出信息,则可以说面向人的输入输出是高效的。,6.3.4程序效率,66,关于面向设备的输入/输出,可以提出一些提高输入/输出效率的指导原则(7):输入/输出的请求应当最小化;对于所有的输入/输出操作,安排适当的缓冲区,以减少频繁的信息交换;对辅助存储(例如磁盘),选择尽可能简单的,可接受的存取方法;,6.3.4程序效率

30、,67,对辅助存储的输入/输出,应当成块传送;对终端或打印机的输入/输出,应考虑设备特性,尽可能改善输入/输出的质量和速度;任何不易理解的,对改善输入/输出效果关系不大的措施都是不可取的;任何不易理解的所谓“超高效”的输入/输出是毫无价值的;,6.3.4程序效率,68,编码阶段的主要任务是将详细设计确定的具体算法用程序设计语言描述出来,生成目标系统对应的源程序。这个阶段在整个系统开发过程中所占用的时间较短,且实现较为容易。虽然系统的质量主要取决于分析与设计阶段的工作,但编码阶段对程序设计语言的选择和编码的风格,也对系统质量具有一定的影响,特别是直接影响着程序的可靠性、可读性、可测试性和可维护性

31、。系统开发人员应根据开发项目的具体特点及语言自身的特性选择使用合适的程序设计语言进行编码,并在编码过程中注意保持良好的编码风格。在系统正确、清晰的前提下,开发人员可以采用一些有效的措施适当地提高系统的效率。,程序编制小结,69,6.4.1 测试的目的和原则 6.4.2 系统测试方法6.4.3 系统测试策略6.4.4 系统测试种类6.4.5 程序调试,6.4系统测试,70,1 系统测试的概念和目的2 系统测试的原则3 系统测试的对象4 测试信息流5 测试的步骤6 测试与系统开发各阶段的关系,6.4.1系统测试的目的和原则,71,1 系统测试的概念和目的,系统测试的概念:所谓系统测试就是为了发现程

32、序中的错误而执行程序的过程。具体地说,系统测试是根据系统开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例(包括测试的数据和预期的输出结果),并利用测试用例来运行程序,以发现程序错误的过程。,6.4.1系统测试的目的和原则,72,1 系统测试的目的,基于不同的立场,存在着两种完全不同的测试目的。从用户的角度出发,普遍希望通过系统测试暴露系统中隐藏的错误和缺陷,以考虑是否可接受该产品。从系统开发者的角度出发,则希望测试成为表明系统产品中不存在错误的过程,验证该系统已正确地实现了用户的要求,确立人们对系统质量的信心。,6.4.1系统测试的目的和原则,73,Myers的系统测试目的,(1)

33、测试是程序的执行过程,目的在于发现错误;(2)一个好的测试用例在于能发现至今未发现的错误;(3)一个成功的测试是发现了至今未发现的错误的测试。,6.4.1系统测试的目的和原则,74,换言之,测试的目的是:想以最少的时间和人力,系统地找出系统中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现系统中的错误。测试的附带收获是,它能够证明系统的功能和性能与需求说明相符合。实施测试收集到的测试结果数据为可靠性分析提供了依据。测试不能表明系统中不存在错误,它只能说明系统中存在错误。,6.4.1系统测试的目的和原则,75,2 系统测试的原则(8个),1)应当把“尽早地和不断地进行系统测试”作为

34、系统开发者的座右铭。2)测试用例应由测试输入数据和对应的预期输出结果这两部分组成。3)程序员应避免检查自己的程序。4)在设计测试用例时,应包括合理的输入条件和不合理的输入条件。,6.4.1系统测试的目的和原则,76,5)充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。6)严格执行测试计划,排除测试的随意性。7)应当对每一个测试结果做全面检查。8)妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。,6.4.1系统测试的目的和原则,77,系统测试并不等于程序测试。系统测试应贯穿于系统定义与开发的整个期间。需求分析、概要设计、详细设计

35、以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为系统测试的对象。,6.4.1系统测试的目的和原则,3 系统测试的对象,78,为把握系统开发各个环节的正确性,需要进行各种确认和验证工作。确认(Validation),是一系列的活动和过程,目的是想证实在一个给定的外部环境中系统的逻辑正确性。需求规格说明确认 程序确认(静态确认、动态确认)验证(Verification),试图证明在系统生存期各个阶段以及阶段间的逻辑协调性、完备性和正确性。,6.4.1系统测试的目的和原则,79,2023/10/21,79,80,4 测试信息流,81,4 测试

36、信息流,系统配置:系统需求规格说明、系统设计规格说明、源代码等;测试配置:测试计划、测试用例、测试程序等;测试工具:测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等等。,6.4.1系统测试的目的和原则,82,测试结果分析:比较实测结果与预期结果,评价错误是否发生。排错(调试):对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。修正后的文档再测试:直到通过测试为止。,6.4.1系统测试的目的和原则,83,通过收集和分析测试结果数据,对系统建立可靠性模型利用可靠性分析,评价系统质量:系统的质量和可靠性达到可以接受的程度;所

37、做的测试不足以发现严重的错误;如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充分,错误仍然潜伏在系统中。,6.4.1系统测试的目的和原则,84,6.4.1系统测试的目的和原则,5 测试的步骤,系统测试是按照与系统开发相反的方向来进行的。依次为:单元测试(模块测试)、集成测试、系统测试和验收测试。,85,设计信息,可运行系统,系统其它元素,单元测试,单元测试,单元测试,集成测试,系统测试,验收测试,软件需求信息,测后软件,测后模块,模块,模块,模块,确认后软件,6.4.1系统测试的目的和原则,管理流程(单元测试)主要指动态测试应用流程,针对测试目标,规定测试任务、资源分配、人员角色、进度

38、安排等。,根据测试计划,设计测试用例,包括:测试步骤、测试场景、测试代码、测试数据(包括预期结果)。,根据测试计划,配置测试环境,并手动或者自动执行测试设计。,根据测试计划,忠实地记录测试执行的过程和结果。,分析测试记录,如果发现与预期结果不同,确定并重现缺陷。,检查测试设计是否全部执行完毕,缺陷是否全部关闭。,记录、分发、评估、关闭缺陷报告。,分析测试过程和缺陷报告,评估测试质量和测试效果,给出是否通过测试的建议。,6.4.1系统测试的目的和原则,测试文档(单元测试)主要指动态测试应用文档,测试计划文档,测试用例文档,测试记录文档,缺陷跟踪报告,测试总结报告,6.4.1系统测试的目的和原则,

39、88,6 测试与系统开发各阶段的关系,系统开发过程是一个自顶向下,逐步细化的过程;系统规划阶段定义系统作用域;系统需求分析建立系统信息域、功能和性能需求、约束等;系统设计阶段构造出物理模型;系统实施把设计用某种程序设计语言转换成程序代码。,6.4.1系统测试的目的和原则,89,测试过程是依相反顺序安排的自底向上,逐步集成的过程。,6.4.1系统测试的目的和原则,90,6.4.2 系统测试方法,1静态测试静态测试是采用人工检测和计算机辅助静态分析的方法对程序进行检测。人工检测是指靠人工走查程序或评审软件。这种走查与评审主要针对编码的质量和软件开发各个阶段的文档,特别是总体设计和详细设计阶段的错误

40、。能发现30%70%的逻辑设计和编码错误。,91,6.4.2 系统测试方法,1.静态测试静态测试是采用人工检测和计算机辅助静态分析的方法对程序进行检测。计算机辅助静态分析是指利用静态分析软件工具对程序进行静态分析,主要检测变量是否用错、参数是否匹配、循环嵌套是否有错、是否有死循环和永远执行不到的死代码等等。同时,它还可对程序的特性进行分析。,92,6.4.2 系统测试方法,2.动态测试 动态测试是指事先设计好一组测试用例,然后通过运行程序来发现错误。动态测试有两种测试技术:1)黑盒测试 2)白盒测试,93,1)黑盒测试,这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和

41、内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试又叫做功能测试或数据驱动测试。,6.4.2 系统测试方法,94,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出,但这是不可能的。,6.4.2 系统测试方法,95,假设一个程序P有输入量X和Y及输出量Z。在字长为3

42、2位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:可能采用的 测试数据组:232232 264 如果测试一组数据需要1毫秒,一年工作365 24小时,完成所有测试需5亿年。,6.4.2 系统测试方法,96,2)白盒测试,此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。,6.4.2 系统测试方法,97,系统人员使用白盒测试方法,主要想对程序模块进行如下的检查:对程序模块的所有独立的执行路径至少测试一

43、次;对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性等。对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图,它包括了一个执行20次的循环。,6.4.2 系统测试方法,98,6.4.2 系统测试方法,包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365 24小时,要想把所有路径测试完,需3160年。,99,3.测试用例为了进行有效的测试而设计的输入数据和预期的输出结果数据。测试用例设计的基本目的是确定一组最有可能发现某个错误或某类错误的测试数据。测试用例的

44、设计只能在周期和经费允许的条件下,使用最少数目的测试用例,发现最大数目可能的错误。,6.4.2 系统测试方法,100,逻辑覆盖:,语句覆盖 判定覆盖 条件覆盖,判定条件覆盖 条件组合覆盖 路径覆盖,逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。,白盒测试的测试用例设计,6.4.2 系统测试方法,101,例,(A1)and(B=0),(A=2)or(X1),X=X/A,X=X+1,T,T,F,F,a,b,d,c,e,6.4.2 系统测试方法,102,L1(a c e)=(A1)and(B=0)and(A=2)or(X/A1)=(A1)and(B=0)and(A=2)or

45、(A1)and(B=0)and(X/A1)=(A=2)and(B=0)or(A1)and(B=0)and(X/A1),6.4.2 系统测试方法,103,L2(a b d)=not(A1)and(B=0)and not(A=2)or(X1)=not(A1)or not(B=0)and not(A=2)and not(X1)=not(A1)and not(A=2)and not(X1)OR not(B=0)and not(A=2)and not(X1),6.4.2 系统测试方法,104,L3(a b e)=not(A1)and(B=0)and(A=2)or(X1)=not(A1)or not(B=

46、0)and(A=2)or(X1)=not(A1)and(A=2)or not(A1)and(X1)or not(B=0)and(A=2)or not(B=0)and(X1),6.4.2 系统测试方法,105,105,L4(a c d)=(A1)and(B=0)and not(A=2)or(X/A1)=(A1)and(B=0)and not(A=2)and not(X/A1),6.4.2 系统测试方法,106,语句覆盖,语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。在图例中,正好所有的可执行语句都在路径L1上,所以选择路径 L1设计测试用例,就可以覆盖所有的可执行

47、语句。,6.4.2 系统测试方法,107,测试用例的设计格式如下【输入的(A,B,X),输出的(A,B,X)】为图例设计满足语句覆盖的测试用例是:【(2,0,4),(2,0,3)】覆盖 ace【L1】,(A=2)and(B=0)or(A1)and(B=0)and(X/A1),6.4.2 系统测试方法,108,判定覆盖,判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。对于图例,如果选择路径L1和L2,就可得满足要求的测试用例:,6.4.2 系统测试方法,109,【(2,0,4),(2,0,3)】覆盖 ace【L1】【(1,

48、1,1),(1,1,1)】覆盖 abd【L2】,(A=2)and(B=0)or(A1)and(B=0)and(X/A1),not(A1)and not(A=2)and not(X1)or not(B=0)and not(A=2)and not(X1),6.4.2 系统测试方法,110,如果选择路径L3和L4,还可得另一组可用的测试用例:【(2,1,1),(2,1,2)】覆盖 abe【L3】【(3,0,3),(3,0,1)】覆盖 acd【L4】,not(A1)and(X1)or not(B=0)and(A=2)or not(B=0)and(X1),(A1)and(B=0)and not(A=2)

49、and not(X/A1),6.4.2 系统测试方法,111,条件覆盖,条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。在图例中,我们事先可对所有条件的取值加以标记。例如:对于第一个判断:条件 A1 取真为,取假为 条件 B0 取真为,取假为,6.4.2 系统测试方法,112,对于第二个判断:条件A2 取真 取假为 条件X1 取真取假为 测试用例 覆盖分支 条件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,0,1),(1,0,1)】L2(b,d)【(2,1,1),(2,1,2)】L3(b,e)或【(1,0,3),(1,0,4)】L

50、3(b,e)【(2,1,1),(2,1,2)】L3(b,e),6.4.2 系统测试方法,113,判定条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,每个判断中的每个分支至少执行一次。,6.4.2 系统测试方法,判定条件覆盖,114,测 试 用 例 覆盖分支 条件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,1,1),(1,1,1)】L2(b,d),(A=2)and(B=0)or(A1)and(B=0)and(X/A1),not(A1)and not(A=2)and not(X1)or not(B=0)and not(A=2)and not(X1),6

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号