[计算机软件及应用]软件工程课件_第1页
[计算机软件及应用]软件工程课件_第2页
[计算机软件及应用]软件工程课件_第3页
[计算机软件及应用]软件工程课件_第4页
[计算机软件及应用]软件工程课件_第5页
已阅读5页,还剩169页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章实现1软件工程 - 2010 - 第七章 实现第七章内容概要编码软件测试基础单元测试集成测试确认测试白盒测试技术黑盒测试技术调试软件可靠性2软件工程 - 2010 - 第七章 实现编码和测试统称为实现编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。软件测试很重要,它对软件可靠性的影响巨大软件测试在软件生命周期中横跨两个阶段测试工作量占软件开发总成本的40%以上测试的目标是发现错误,调试的目的是诊断并改正错误测试是确定可靠性模型的依据实现概述3软件工程 - 2010 - 第七章 实现编码阶段的任务是把详细设计阶段中用伪代码写成的程序转换成用程序设计语言实现的程序。程序设计语言的特

2、性和程序设计风格会深刻地影响软件的质量和可维护性。为保证编码的质量,程序员必须深刻理解、熟练掌握并正确地运用程序设计语言的特性。此外,还要求源程序具有良好的结构性和良好的程序设计风格。从设计向编码过渡4软件工程 - 2010 - 第七章 实现系统用户的要求。可以使用的编译程序。可以得到的软件工具。工程规模。程序员的知识。软件可移植性要求。软件的应用领域。选择程序设计语言的实用标准5软件工程 - 2010 - 第七章 实现好程序的代码逻辑简明清晰、易读易懂:程序的内部文档数据说明语句构造输入输出方法效率问题编码风格6软件工程 - 2010 - 第七章 实现标识符的命名:标识符即符号名,包括模块名

3、、变量名、常量名、标号名、子程序名、数据区名以及缓冲区名等。这些名字应能反映它所代表的实际东西,应有一定实际意义。(例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。)名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要给每一个名字加注释。在一个程序中,一个变量只应用于一种用途。编码风格:程序的内部文档7软件工程 - 2010 - 第七章 实现程序的注解:夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。注释决不是可有可无的。一些正规的程序文本中,注释行的数量占到整个源程序的

4、13到12,甚至更多。注释分为序言性注释和功能性注释。编码风格:程序的内部文档8软件工程 - 2010 - 第七章 实现序言性注释:通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关项目包括:程序标题;有关本模块功能和目的的说明;主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息;模块位置:在哪一个源文件中,或隶属于哪一个软件包;开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。编码风格:程序的内

5、部文档9软件工程 - 2010 - 第七章 实现功能性注释:功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。编码风格:程序的内部文档10软件工程 - 2010 - 第七章 实现视觉组织:空格、空行和缩进。恰当地利用空格,可以突出运算的优先性。自然的程序段之间可用空行隔开。缩进也叫做向右缩格或移行。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰。编码风格:程序的内部文档11软件工程 - 2010 - 第

6、七章 实现在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下几点:数据说明的次序应当规范化;说明语句中变量安排有序化;使用注释说明复杂数据结构。编码风格:数据说明12软件工程 - 2010 - 第七章 实现数据说明的次序应当规范化:数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。例如,在类型说明中可按如下顺序排列: 整型量说明实型量说明字符量说明逻辑量说明编码风格:数据说明1

7、3软件工程 - 2010 - 第七章 实现说明语句中变量安排有序化:当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列。 例如,把integer size, length, width, cost, price写成integer cost, length, price , size, width编码风格:数据说明14软件工程 - 2010 - 第七章 实现使用注释说明复杂数据结构:如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的特点。例如, 对C的链表结构和Pascal中用户自定义的数据类型,都应当在注释中做必要的补充说明。编码风格:数据说明15软件工

8、程 - 2010 - 第七章 实现在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段的任务。语句构造力求简单、直接,不能为了片面追求效率而使语句复杂化。下面是关于语句构造的一些启发规则:编码风格:语句构造16软件工程 - 2010 - 第七章 实现1. 在一行内只写一条语句。2.避免采用过于复杂的条件测试。3.尽量减少 “非”条件的测试。IF NOT (CHAR9) THEN IF (CHAR=0) AND (CHAR=9) THEN 4.避免大量使用循环嵌套和条件嵌套。5.利用括号使逻辑表达式或算术表达式的运算次序清晰直观。编码风格:语句构造17软件工程 - 2010 - 第七章

9、实现6.除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。不要为了追求效率而丧失了清晰性。事实上,程序效率的提高主要应通过选择高效的算法来实现。对比下面两个程序段,哪个更清楚表达了自己的意图?编码风格:语句构造A I =A I A T ;A T =A I A T ;A I =A I A T ;WORK = A T ;A T = A I ;A I = WORK;18软件工程 - 2010 - 第七章 实现7.程序要能直截了当地说明程序员的用意。对比下面两个程序段,哪个更直接地表达了自己的意图?编码风格:语句构造for ( i = 1; i = n; i+ ) for ( j = 1; j

10、 = n; j+ ) Vij = ( ij ) * ( ji )for ( i1; i = n; i+ ) for ( j1; j =A) THEN IF (CHAR=Z) THENPRINT “This is a letter.” ELSE PRINT “This is not a letter.”15. 不要单独进行浮点数的比较,而是采用|x0-x1|1 and B=0X=X/AA=2 or X1X=X+1入口返回s(2,0,4),(2,0,3)sacbed!判断a中and-or判断b中or-and89软件工程 - 2010 - 第七章 实现判定覆盖判定覆盖又叫分支覆盖,它的含义是,不仅每

11、个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次。换言之,就是设计若干个测试用例,运行被测程序,使得程序中每个判定的取真分支和取假分支至少经历一次。90软件工程 - 2010 - 第七章 实现ecFFdTTbaA1 and B=0X=X/AA=2 or X1X=X+1入口返回s(2,0,4),(2,0,3) sacbed(1,1,1),(1,1,1) sabd(3,0,3),(3,0,1) sacbd(2,1,1),(2,1,2) sabed!判断2中x1错写成x1,A1,B0,B0在b点有下述各种结果出现: A2,A2,X1,X1

12、只需要使用下面两组测试数据就可以达到上述覆盖标准: IA2,B0,X4(满足Al,B0,A2和Xl的条件,执行路径sacbed) Al,B1,X1(满足A1,B0,A2和X1的条件,执行路径sabd)93软件工程 - 2010 - 第七章 实现ecFFdTTbaA1 and B=0X=X/AA=2 or X1X=X+1入口返回s94软件工程 - 2010 - 第七章 实现ecFFdTTbaA1 and B=0X=X/AA=2 or X1X=X+1入口返回s(2,1,1),(2,1,2)满足:A1,B0,A=2,X1(1,0,2),(1,0,3)满足:A1,B=0,A2,X1 !条件覆盖通常比判

13、定覆盖强 ,但也可能满足条件覆盖标准而并不满足判定覆盖标准95软件工程 - 2010 - 第七章 实现判定/条件覆盖选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。96软件工程 - 2010 - 第七章 实现ecFFdTTbaA1 and B=0X=X/AA=2 or X1X=X+1入口返回s(2,0,4),(2,0,3)执行路径sacbed,满足条件:A1,B=0,A=2,X1,判定a为真,判定b为真 (1,1,1),(1,1,1)执行路径sabd,满足条件:A1,B0,A2,X1,判定a为假,判定b为假 !由于条件隐藏,使得逻辑

14、表达式中的错误不一定都能查得出来。97软件工程 - 2010 - 第七章 实现条件组合覆盖条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判定中条件的所有可能组合至少出现一次。98软件工程 - 2010 - 第七章 实现 A1, B0 A1, B0 A1, B0 A1, B0 A2, X1 A2, X1 A2, X1 A2, X1 下面的4组测试数据可以使上面列出的8种条件组合每种至少出现一次: IA2,B0,X4 (针对l,5两种组合,执行路径sacbed) A2,Bl,X1 (针对2,6两种组合,执行路径sabed) A1,B0,X2 (针对3,7两种组合,执行路径sabed)

15、A1,B1,X1 (针对4,8两种组合,执行路径sabd)99软件工程 - 2010 - 第七章 实现条件组合覆盖满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定条件覆盖标准。因此,条件组合覆盖是前述几种覆盖标准中最强的。但是,满足条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。例如上述4组测试数据都没有测试到路径sacbd 100软件工程 - 2010 - 第七章 实现点覆盖要求选取足够多的测试数据,使得程序执行路径至少经过流图的每个结点一次,由于流图的每个结点与一条或多条语句相对应,显然,点覆盖标准和语句覆盖标准是相同的。 101软件工程 - 2010 -

16、 第七章 实现边覆盖要求选取足够多测试数据,使得程序执行路径至少经过流图中每条边一次。通常边覆盖和判定覆盖是一致的。 102软件工程 - 2010 - 第七章 实现路径覆盖路径覆盖就是设计足够的测试用例,程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次) 。 103软件工程 - 2010 - 第七章 实现下面给出了用盒图描绘的一个程序内部逻辑,试设计给出分别满足语句覆盖和条件覆盖的测试方案,每个方案必须要写出给定输入的内容和预期输出的内容。104软件工程 - 2010 - 第七章 实现此题答案不唯一,下述答案仅供参考达到语句覆盖:令第一判断(A2)and(B0)和第

17、二判断(CA)or(DB)都为假:给定输入:A1,B1,C0,D2;预期输出:X2,Y2;令第一判断(A2)and(B0)和第二判断(CA)or(DB)都为真:给定输入:A2,B1,C3,D0;预期输出:X1,Y3;达到条件覆盖:第一判断处有如下各种条件取值情形:A2,A2,B0,B0;第二判断处有如下各种条件取值情形:CA,CA,DB,DB;可以使用下面两组测试数据达到条件覆盖的要求:满足A2,B0,CA,DB:给定输入:A2,B1,C3,D0;预期输出:X1,Y3;满足A2,B0,CA,DB:给定输入:A1,B0,C1,D1;预期输出:X1,Y2;本题凡给出具体数据测试用例的先得2分,没有

18、给出具体数据测试用例的不得此2分。该程序有四条语句,每覆盖一条得1分。该程序有四个条件表达式,每个表达式取是与非各一次为覆盖该条件表达式,每覆盖一个得1分。 105软件工程 - 2010 - 第七章 实现控制结构测试控制结构测试是根据程序的控制结构设计测试数据的技术基本路径测试条件测试循环测试106软件工程 - 2010 - 第七章 实现基本路径测试使用这种技术设计测试用例时,首先计算程序的环形复杂度,并用该复杂度为指南定义执行路径的基本集合,从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。 107软件工程 - 2010 - 第七章

19、实现基本路径测试第一步,根据过程设计结果画出相应的流图。 第二步,计算流图的环形复杂度。 第三步,确定线性独立路径的基本集合。 独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径,用流图术语描述,独立路径至少包含一条在定义该路径之前不曾用过的边。 程序的环形复杂度决定了程序中独立路径的数量,而且这个数是确保程序中所有语句至少被执行一次所需的测试数量的上界第四步,设计可强制执行基本集合中每条路径的测试用例。108软件工程 - 2010 - 第七章 实现1: i=1;total.input=total.valid=0;sum=0;2:DO WHILE valuei -9993: AND

20、 total.input=minimum6: AND valuei011: THEN average=sum/total.valid;12: ELSE average=-999;13:ENDIF END average109软件工程 - 2010 - 第七章 实现路径l:l-2-10-11-13路径2:l-2-10-12-13路径3:l-2-3-10-11-13路径4:1-2-3-4-5-8-9-2路径5:1-2-3-4-5-6-8-9-2 路径6:l-2-3-4-5-6-7-8-9-2110软件工程 - 2010 - 第七章 实现路径1: 1-2-10-11-13value k=有效输入值,

21、其中kivalue i=-999,其中2i100预期结果: 基于k的正确平均值和总数路径2: 1-2-10-12-13value 1=-999预期结果: average=-999,其它都保持初始值111软件工程 - 2010 - 第七章 实现路径3: 1-2-3-10-11-13试图处理101个或更多个值前100个数值是有效输入值预期结果: 前100个数的平均值,总数为100路径4: 1-2-3-4-5-8-9-2value i=有效输入值,其中i100Value kminimun,其中ki预期结果:基于k的正确平均值和总数112软件工程 - 2010 - 第七章 实现路径5: 1-2-3-4

22、-5-6-8-9-2value i=有效输入值,其中imaximun,其中ki预期结果:基于k的正确平均值和总数路径6: 1-2-3-4-5-6-7-8-9-2value i=有效输入值,其中i0)。在这种情况下,这些路径必须作为另一个路径的一部分来测试。 114软件工程 - 2010 - 第七章 实现条件测试用条件测试技术设计出的测试用例,能够检查程序模块中包含的逻辑条件。两个基本概念简单条件:一个简单条件是一个布尔变量或一个关系表达式,在布尔变量或关系表达式之前还可以有一个NOT算符。复合条件:由两个或多个简单条件、布尔算符和括弧组成。布尔算符有OR、AND和NOT。条件错误的类型如下:布

23、尔算符错、布尔变量错、布尔括弧错、关系算符错、算术表达式错。115软件工程 - 2010 - 第七章 实现条件测试分支测试:对于复合条件C来说,C的真分支和假分支以及C中的每个简单条件,都应该至少执行一次。域测试:对于关系表达式 E1E2如果错误而E1和E2正确,需要3个测试分别使E1的值大于、等于或小于E2的值。为了发现E1和E2中的错误,让E1值大于或小于E2值的测试数据应该使这两个值之间的差别尽可能小。 116软件工程 - 2010 - 第七章 实现条件测试BRO(Branch and Relation Operation)如果在条件中所有布尔变量和关系算符都只出现一次而且没有公共变量,

24、则BRO测试保证能发现该条件中的分支错和关系算符错。 117软件工程 - 2010 - 第七章 实现条件测试包含n个简单条件的条件C的条件约束定义为(D1,D2,Dn),其中Di(0、=或。如果在条件C的一次执行过程中,C中每个简单条件的输出都满足D中对应的约束,则称C的这次执行覆盖了C的条件约束D。118软件工程 - 2010 - 第七章 实现条件测试例子:(1):C1: B1 & B2 BRO测试策略要求,约束集(t,t),(f,t),(t,f)被C1的执行所覆盖。如果C1因布尔算符错误而不正确,则至少上述约束集中的一个约束将迫使C1失败。 (2):C2: B1&(E3=E4) 分别用(t

25、,)和(f,)替换(t,t)和(f,t),并用(t,)替换(t,f),就得到C2的约束集(t,),(f,),(t,)。覆盖上述条件约束集的测试,保证可以发现C2中布尔算符和关系算符的错误。 119软件工程 - 2010 - 第七章 实现条件测试(3)C3:(E1E2)&(E3=E4) 可以通过修改C2的约束集得到C3的约束集,结果为: (,),(,),(,)覆盖上述条件约束集的测试,保证可以发现C3中关系算符的错误120软件工程 - 2010 - 第七章 实现循环测试循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。在结构化的程序中通常只有3种循环,即简单循环、串接循环和嵌套循环。12

26、1软件工程 - 2010 - 第七章 实现122软件工程 - 2010 - 第七章 实现循环测试(1)简单循环应该使用下列测试集来测试简单循环,其中n是允许通过循环的最大次数。跳过循环。只通过循环一次。通过循环两次。通过循环m次,其中mn-1。通过循环n-1,n,n+1次。123软件工程 - 2010 - 第七章 实现循环测试(2)嵌套循环 直接把简单循环测试方法应用于嵌套循环,会使测试数目以几何级数增长。为减少测试数,B.Beizer提出嵌套循环的测试策略:从最内层循环开始测试,把所有其他循环都设置为最小值。对最内层循环使用简单循环测试方法,而使外层循环的迭代参数(例如,循环计数器)取最小值

27、,并为越界值或非法值增加一些额外的测试。由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值。继续进行下去,直到测试完所有循环。 124软件工程 - 2010 - 第七章 实现循环测试(3)串接循环如果串接循环的各个循环都彼此独立,则可以使用前述的测试简单循环的方法来测试串接循环。但是,如果两个循环串接,而且第一个循环的循环计数器值是第二个循环的初始值,则这两个循环并不是独立的。当循环不独立时,建议使用测试嵌套循环的方法来测试串接循环。 125软件工程 - 2010 - 第七章 实现第七章内容概要编码软件测试基础单元测试集成测试确认测试白盒测试技术黑盒测试技

28、术调试软件可靠性126软件工程 - 2010 - 第七章 实现黑盒测试技术黑盒测试力图发现下述类型的错误:功能不正确或遗漏了功能;界面错误;数据结构错误或外部数据库访问错误;性能错误;初始化和终止错误。黑盒测试法与白盒测试法不能互相代替,两者应互为补充。 白盒测试在测试过程的早期阶段进行,黑盒测试主要用于测试过程的后期127软件工程 - 2010 - 第七章 实现黑盒测试技术黑盒测试的方法主要有:等价划分边界值分析错误推测128软件工程 - 2010 - 第七章 实现等价划分等价划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,据此导出测试用例,一个理想的测试用例能够独自发现一类错误

29、。等价划分法的一个假设:每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。在确定输入数据的等价类时,常常还需要确定输出数据的等价类,以便根据输出数据的等价类导出对应的输入数据的等价类。129软件工程 - 2010 - 第七章 实现等价划分等价类的划分有两种不同的情况:有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。130软件工程 - 2010 - 第七章 实现划分等价类的原则如果输入条件规定了取值范围或值的个数,则可以确立一个有效等价类和两个无效等价类。如果输入条件规定了

30、输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。131软件工程 - 2010 - 第七章 实现划分等价类的原则如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。如果规定了输入数据为整型,则可以划分出正整数、零和负整数等3个有效类。 如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。132软件工程 - 2010 -

31、第七章 实现确定测试用例设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。133软件工程 - 2010 - 第七章 实现等价划分实例1假设有一个把数字串转变成整数的函数。被处理的数字串是右对齐的,也就是说,如果数字串比6个字符短,则在它的左边补空格。如果数字串是负的,则负号和最高位数字紧相邻(负号在最高位数字左边一位)。 134软件工程 - 2010 - 第七章 实现等价划分实例1分析这个程序的规格说明,可以划分出如下等价类:有效

32、输入的等价类有(1)l一6个数字字符组成的数字串(最高位数字不是零);(2)最高位数字是零的数字串;(3)最高位数字左邻是负号的数字串;135软件工程 - 2010 - 第七章 实现等价划分实例1无效输入的等价类有(4)空字符串(全是空格);(5)左部填充的字符既不是零也不是空格;(6)最高位数字右面由数字和空格混合组成;(7)最高位数字右面由数字和其他字符混合组成;(8)负号与最高位数字之间有空格;136软件工程 - 2010 - 第七章 实现等价划分实例1合法输出的等价类有(9)在计算机能表示的最小负整数和零之间的负整数;(10)零;(11)在零和计算机能表示的最大正整数之间的正整数;非法

33、输出的等价类有(12)比计算机能表示的最小负整数还小的负整数;(13)比计算机能表示的最大正整数还大的正整数。 137软件工程 - 2010 - 第七章 实现等价划分实例1 根据上面划分出的等价类,可以设计出下述测试方案(注意,每个测试方案由3部分内容组成):(1)16个数字组成的数字串,输出是合法的正整数。 输入: 1 预期的输出:1。(2)最高位数字是零的数字串,输出是合法的正整数。 输入:00000l 预期的输出:1138软件工程 - 2010 - 第七章 实现等价划分实例1(4)最高位数字是零,输出也是零。 输入:000000 预期的输出:0(5)太小的负整数。 输入:-47561 预

34、期的输出:“错误无效输入”(6)太大的正整数。 输入:132767 预期的输出:“错误无效输入”139软件工程 - 2010 - 第七章 实现等价划分实例1(7)空字符串。 输入: 预期的输出:“错误没有数字”(8)字符串左部字符既不是零也不是空格 输入:XXXXXl 预期的输出:“错误填充错” (9)最高位数字后面有空格。 输入: 1 2 预期的输出:“错误无效输入”140软件工程 - 2010 - 第七章 实现等价划分实例1(10)最高位数字后面有其他字符。 输入: 1XX2 预期的输出:“错误无效输入”(11)负号和最高位数字之间有空格。 输入: - 12 预期的输出:“错误负号位置错”

35、 141软件工程 - 2010 - 第七章 实现等价划分实例2在某一PASCAL语言版本中规定:“标识符是由字母开头,后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。” 并且规定:“标识符必须先说明,再使用。” , “在同一说明语句中,标识符至少必须有一个。”142软件工程 - 2010 - 第七章 实现等价划分实例2用等价类划分方法,建立输入等价类表:143软件工程 - 2010 - 第七章 实现等价划分实例2下面选取了9个测试用例,它们覆盖了所有的等价类。 VAR x,T1234567:REAL; BEGIN x := 3.414; T1234567 := 2.732;

36、 . (1), (2), (4), (8), (9), (12), (14) VAR :REAL; (3) VAR x,:REAL; (5)144软件工程 - 2010 - 第七章 实现等价划分实例2 VAR T12345678:REAL; (6) VAR T12345.:REAL; (7) 多于80个字符 VAR T$:CHAR; (10) VAR GOTO:INTEGER; (11) VAR 2T:REAL; (13) VAR PAR:REAL; (15) BEGIN . PAP := SIN (3.14 * 0.8) / 6;145软件工程 - 2010 - 第七章 实现某城市的电话号码

37、由3部分组成。这3部分的名称与内容分别是地区码: 空白或3位数字;前缀:非0或1开头的3位数字;后缀:4位数字。假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的号码,用等价类划分法设计该程序的测试用例课堂练习146软件工程 - 2010 - 第七章 实现输入条件有效等价类无效等价类地区码空白 3位数字有非数字字符少于3位数字多于3位数字前缀从200到999之间的3位数字有非数字字符起始位为0起始位为1少于3位数字多于3位数字后缀4位数字有非数字字符少于4位数字多于4位数字123456789101112131415147软件工程 - 2010 - 第七章 实现边界值分析(Bou

38、ndary Value Analysis)人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。148软件工程 - 2010 - 第七章 实现边界值分析(Boundary Value Analysis)对前面的实例1补充下述测试方案:(12)使输出刚好等于最小的负整数。 输入:-32768 预期的输出为:-32768(13)使输出刚好等于最大的正整数。 输入: 32767 预期的输出:32767原来用等价划分法设计出来的测试方案(5)最好改为:(14)使输出刚刚小于最小的负整数。 输入:-32769

39、 预期的输出;“错误无效输入” 149软件工程 - 2010 - 第七章 实现边界值分析(Boundary Value Analysis)原来的测试方案(6)最好改为:(15)使输出刚刚大于最大的正整数。 输入: 32768 预期的输出:“错误无效输入”150软件工程 - 2010 - 第七章 实现错误推测法人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。这就是错误推测法。错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。经验表明,发现错误多的程序段,往往其中尚未发现的错误也多。利用前一章所讲述的判定表

40、或判定树来设计测试用例。151软件工程 - 2010 - 第七章 实现Myers提出了使用各种测试方法的综合策略:在任何情况下都必须使用边界值分析方法。经验表明用这种方法设计出测试用例发现程序错误的能力最强。必要时用等价类划分方法补充一些测试用例。用错误推测法再追加一些测试用例。对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法(本书未讲述)。152软件工程 - 2010 - 第七章 实现第七章内容概要编码软件测试基础单元测试集成测试确认测试白盒测试技术黑盒测试技术调试软

41、件可靠性153软件工程 - 2010 - 第七章 实现调试软件调试是在进行了成功的测试之后才开始的工作。它与软件测试不同,调试的任务是进一步诊断和改正程序中潜在的错误。154软件工程 - 2010 - 第七章 实现调试从技术角度来看,查找错误的难度在于:现象与原因所处的位置可能相距甚远。当其它错误得到纠正时,这一错误所表现出的现象可能会暂时消失,但并未实际排除。现象实际上是由一些非错误原因(例如,舍入不精确)引起的。现象可能是由于一些不容易发现的人为错误引起的。错误是由于时序问题引起的,与处理过程无关。现象是由于难于精确再现的输入状态(例如,实时应用中输入顺序不确定)引起。现象可能是周期出现的

42、。在软、硬件结合的嵌入式系统中常常遇到。现象可能是由分布在许多任务中的原因引起的,这些任务运行在不同的处理机上。 155软件工程 - 2010 - 第七章 实现几种主要的调试方法蛮干法这种调试方法目前使用较多,效率较低。它不需要过多的思考,比较省脑筋。例如:通过内存全部打印来调试在程序特定部位设置打印语句156软件工程 - 2010 - 第七章 实现几种主要的调试方法回溯法调试这是在小程序中常用的一种有效的调试方法。一旦发现了错误,人们先分析错误征兆,确定最先发现“症状”的位置。然后,人工沿程序的控制流程,向回追踪源程序代码,直到找到错误根源或确定错误产生的范围。157软件工程 - 2010

43、- 第七章 实现几种主要的调试方法原因排除法对分查找法如果已经知道每个变量在程序内若干个关键点的正确值,则可以用赋值语句或输入语句在程序中点附近“注入”这些变量的正确值,然后运行程序并检查所得到的输出。如果输出结果是正确的,则错误原因在程序的前半部分;反之,错误原因在程序的后半部分。对错误原因所在的那部分再重复使用这个方法,直到把出错范围缩小到容易诊断的程度为止。 158软件工程 - 2010 - 第七章 实现几种主要的调试方法原因排除法归纳法是从个别现象推断出一般性结论的思维方法。使用这种方法调试程序时,首先把和错误有关的数据组织起来进行分析,以便发现可能的错误原因。然后导出对错误原因的一个

44、或多个假设,并利用已有的数据来证明或排除这些假设。当然,如果已有的数据尚不足以证明或排除这些假设,则需设计并执行一些新的测试用例,以获得更多的数据。 159软件工程 - 2010 - 第七章 实现几种主要的调试方法原因排除法演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。演绎法排错是测试人员首先根据已有的测试用例,设想及枚举出所有可能出错的原因做为假设;然后再用原始测试数据或新的测试,从中逐个排除不可能正确的假设;最后,再用测试数据验证余下的假设确是出错的原因。160软件工程 - 2010 - 第七章 实现调试在动手改正错误之前,软件工程师应该仔细考虑下述3个问题

45、:(1)是否同样的错误也在程序其他地方存在?(2)将要进行的修改可能会引入的“下一个错误”是什么?(3)为防止今后出现类似的错误,应该做什么?161软件工程 - 2010 - 第七章 实现第七章内容概要编码软件测试基础单元测试集成测试确认测试白盒测试技术黑盒测试技术调试软件可靠性162软件工程 - 2010 - 第七章 实现软件可靠性软件可靠性:是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。 软件可用性:是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。 R(250)=0.95表示100个相同的系统有95个无故障运行250小时,有5个在此期间发生故障A(250)=

46、0.95表示100个相同的系统都运行了250个小时,有95个处于正常运行状态,5个出现故障等待处理.A(t) R(t)163软件工程 - 2010 - 第七章 实现软件可靠性如果在一段时间内,软件系统故障停机时间分别为td1, td2,正常运行时间分别为tu1, tu2.,则系统的稳态可用性为: (7.1)其中,164软件工程 - 2010 - 第七章 实现软件可靠性如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则(7.1)式可以变成:平均维修时间MTTR是修复一个故障平均需要用的时间,它取决于维护人员的技术水平和对系统的熟悉程度,也和系统的可维护性有重要关系,平均无故障时间MTTF是系统按规格说明书规定成功地运行的平均时间,它主要取决于系统中潜伏的错误的数目,因此和测试的关系十分密切。 165

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论