软件工程课件第7章实现_第1页
软件工程课件第7章实现_第2页
软件工程课件第7章实现_第3页
软件工程课件第7章实现_第4页
软件工程课件第7章实现_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

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

文档简介

1、江西师范大学软件学院第7章 实现回顾第6章详细设计详细设计的任务结构程序设计过程设计的工具面向数据结构的设计方法程序复杂度的度量本章目标? 了解编程语言选择的原则?掌握编程应该遵循的规范 ? 了解软件测试的基本概念和原则?掌握单元测试、集成测试、确认测试、系统测试的方法 ?了解调试方法? 了解软件的可靠性测试该怎样实现系统呢?问题所设计的软件符合要求吗?用户满意吗?实现编码和测试统称为实现编码 把软件设计结果翻译成程序 程序的质量主要取决于软件设计的质量 程序设计语言的特点及编码风格测试测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误调试的目的是诊断并改正错误对软件规格说明、

2、设计和编码的最后复审开发总工作量的40%以上,极端情况下,其他开发步骤总成本的3倍到5倍主要内容编码软件测试基础单元测试集成测试确认测试白盒测试技术黑盒测试技术调试软件可靠性内容线索编码编程语言的选择编码风格软件测试基础单元测试集成测试确认测试白盒测试技术黑盒测试技术调试软件可靠性问题有哪些编程语言可供选择呢?编程语言第一代语言机器语言第二代语言汇编语言 第三代语言高级语言 (COBOL,FORTRAN,C+) 第四代语言 (4GLs)一条 3GL 语句可被编译成 510 条汇编语句每条 4GL 语句应当等效于 30 甚至 50 条汇编语句高级语言选择标准(理论标准)有理想的模块化机制可读性好

3、的控制结构和数据结构编译效率高且差错能力强具有独立的编译机制高级语言的选择(实际标准)选择程序设计语言的因素系统用户的要求可以使用的编译程序可以得到的软件工具工程规模程序员的知识软件可移植性要求软件的应用领域案例案例 QQQ 一直在编写 COBOL软件产品,已经有25年多了全部 200 名软件员工都有COBOL的编程经历什么是“最适合的”编程语言?显然是COBOL案例引入新的语言 (C+, java) 将会怎样?雇用新的雇员再次培训现有的职员将来的产品用C+编写维护现有的COBOL产品两类程序员COBOL 维护人员 (不受重视)C+ 开发人员 (薪水较高)需要昂贵的软件和硬件来运行新开发的软件

4、积累了几百人-年的COBOL专长被浪费案例只可能得到如下结论COBOL 是 “最适合的” 编程语言 但是,QQQ公司最近项目的“最适合”的编程语言可能是C+COBOL 仅适合数据处理应用一类的软件产品怎样选择编程语言?成本-效益分析计算所有相关语言的成本、效益编码风格.编码风格是指编程时表现出来的特点、习惯、逻辑思路等。衡量程序好坏的重要标准程序代码的逻辑简明清晰、易读易懂。编码风格使用一致和有意义的标识符名匈牙利标记法:Prefix-BaseTag-Name用缩进显示程序结构用加括号的方式排除二义性避免大量使用循环嵌套和条件嵌套当心运算符的副作用把数定义成常量利用sizeof()计算对象的大

5、小清晰的代码,而非最巧妙的代码使用有意义的变量名“有意义” 意味着从将来维护程序员的角度来看是有意义的举例#define ONE 1#define TEN 10#define TWENTY 20#define INPUT_MODE 1#define INPUT_BUF 10#define OUTPUT_BUF 20标识符选择与命名不直观直观,明了使用一致的变量名“一致” 也是为了有助于将来维护程序员的工作维护(1)选用合适的编量名,不应当用不同的变量名表示同一概念(2)变量名的组成顺序匈牙利命名约定编码风格程序的注释程序的自解释占到整个源程序的13到12序言性注释和功能性注释序言性注释:功能、

6、目的、与其它模块的关系、编写者、数据结构和算法、修改情况功能性注释:插在程序中间与一段程序代码有关的注解,主要解释包含这段代码的功能。对一段程序注释,而不是每一个语句编码风格数据说明数据说明顺序应规范 一个语句说明多个变量时按字母排序对于复杂的数据结构加注释编码风格语句构造(编码阶段主要任务)原则:简单直接,不能为了追求效率而使代码复杂化。例:交换A和B两个变量的内容(数值型)解法1:A = A - B B = A + B A = B - A解法2:C = A A = B B = C解法1不如解法2直截了当。对语句的构造注意事项不要一行多个语句。避免复杂的条件测试。避免多重循环嵌套和条件嵌套。

7、表达式中使用括号以提高运算次序的清晰度。编码风格输入输出对所有输入数据都进行检验检查输入项重要组合的合法性保持输入格式一致应允许缺省值保持输入格式简单使用数据结束标记(EOF、BOF),不要指定数据的数目编码风格效率程序的效率主要指处理机时间和存储器容量两个方面程序的效率以需求为准程序的效率和程序开发与维护效率不要牺牲程序的清晰性和可读性来不必要地提高效率编码规范C#语言编码规范(中文) (VS.80).aspxJava语言编码规范(中文) C+语言编码规范(中文)C+编码规范,人民邮电出版社 1.从下列叙述中选出关于好的程序风格的正确描述A.程序嵌套的层数应加以限制B.尽量多用临时变量C.模

8、块越小越好,一般说来模块的大小都在10行以下D.程序中的注释越少越好E.使用有意义的变量名F.不用可以省略的括号G.尽可能把程序编得短些不利于阅读和理解应50100行 12页短不一定清晰2.将下面程序改写成具有良好风格的程序 IF (XY) GOTO 30 IF (YZ) GOTO 50 SMALL=Z GOTO 7030 IF (XZ) GOTO 60 SMALL=Z GOTO 7050 SMALL=Y GOTO 7060 SMALL=X70 改为:SMALL=XIF YSMALL THEN SMALL=YIF Z1B=05421FTFT3X=X/AX=X+1A=2X1被测试模块的流程图1语

9、句覆盖 设计足够多的测试用例,使被测程序中的每一个语句至少执行一次。若经过路径124(TT),则每个语句至少执行一次。为此,设计测试用例为:a2, b0, x4只测试了表达式为真的情况。如果第一个表达式中的“”错写成“”,或第二个表达式中 “X1”错写成“X1”,都检测不出来。X1B=05421FTFT3X=X/AX=X+1A=2X1若通过路径124(TT) 、135(FF)或125(TF)、134(FT) 则满足判定覆盖标准。满足判定覆盖必满足语句覆盖。但只覆盖了路径的一半,124(TT)、135(FF)没有覆盖。判定1: a1, b0, a1, b0判定2: a2, x1, a2, x1如

10、果能覆盖上述8个条件,则满足条件覆盖。3条件覆盖 使得判定表达式中每个条件的可能取值都至少执行一次。为此设计两组测试用例:a2,b0,x4 (TT)覆盖a1,b0,a2,x1a1,b1,x1 (FF)覆盖a1,b0,a2,x1此用例覆盖了所有判断的取“真”分支和取“假”分支。在这种情况下,条件覆盖强于判定覆盖。 A1B=05421FTFT3X=X/AX=X+1A=2X1再设计两组测试用例:a1,b0,x3(FT) 覆盖a1,b0,a2,x1a2,b1,x1(FT) 覆盖a1,b0,a2,x1A1B=05421FTFT3X=X/AX=X+1A=2X1只覆盖了第一个判定取“真”分支和第二个判定取“

11、假”分支(TF),不满足判定覆盖。所以,满足条件覆盖不一定满足判定覆盖。TFFTX=0Y2X1B=05421FTFT3X=X/AX=X+1A=2X15条件组合覆盖 使得每个判定表达式中,每个条件的各种可能组合至少出现一次。 下面四组测试用例可以满足条件组合覆盖a=2,b=0,x=2 覆盖条件组合和,124(TT)a=2,b=1,x=1 覆盖条件组合和,134(FT)a=1,b=0,x=2 覆盖条件组合和,134(FT)a=1,b=1,x=1 覆盖条件组合和,135(FF) a1 b0 a2 x1 a1 b0 a2 x1 a1 b0 a2 x1 a1 b0 a2 x1满足条件组合覆盖的测试一定满

12、足判定覆盖、条件覆盖和判定/条件覆盖,但不一定覆盖所有的路径。该例中125路径(TF)未被覆盖,如果该路径有错则检查不出来。A1B=05421FTFT3X=X/AX=X+1A=2X1点覆盖选取足够多的测试数据,使得程序执行路径至少经过流图的每个结点一次由于流图的每个结点与一条或多条语句相对应,显然,点覆盖标准和语句覆盖标准是相同的边覆盖要求选取足够多测试数据,使得程序执行路径至少经过流图中每条边一次通常边覆盖和判定覆盖是一致的a=2,b=0,x=4 覆盖路径124(TT)a=2,b=1,x=1 覆盖路径134(FT)a=1,b=1,x=1 覆盖路径135(FF)a=3,b=0,x=1 覆盖路径

13、125(TF)6路径覆盖 覆盖所有可能的路径。条件组合a1, b0 a1, b0 a1, b0 a1, b0 a2, x1 a2, x1 a2, x1 a2, x1和和和和路径覆盖不一定满足条件组合覆盖A1B=05421FTFT3X=X/AX=X+1A=2X1STARTINPUT (A,B,C)IF A5 THEN X=10 ELSE X=1END IFIF B10 THEN Y=20 ELSE Y=2END IF练习:设计下列伪码程序的语句覆盖和路径覆盖测试用例IF C15 THEN Z=30 ELSE Z=3END IFPRINT (X,Y,Z)STOP用语句覆盖设计测试用例 覆盖路径 A

14、=6 B=11 C=16 TTT A=5 B=10 C=15 FFF用路径覆盖设计测试用例 覆盖路径 A=5 B=10 C=15 FFF A=5 B=10 C=16 FFT A=5 B=11 C=15 FTF A=5 B=11 C=16 FTT A=6 B=10 C=15 TFF A=6 B=10 C=16 TFT A=6 B=11 C=15 TTF A=6 B=11 C=16 TTT三个判定:A5; B10; C15 基本路径测试Tom McCabe提出的一种白盒测试技术计算程序的环形复杂度,并用该复杂度为指南定义执行路径的基本集合从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一

15、次,而且每个条件在执行时都将分别取真、假两种值基本路径测试基本路径测试方法把覆盖的路径数压缩到一定限度内,程序中的循环体最多只执行一次。它是在程序控制流图的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,设计测试用例的方法。设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。基本路径测试步骤1. 程序的控制流图符号为控制流图的一个结点,表示一个或多个无分支的PDL语句或源程序语句。箭头为边,表示控制流的方向。基本路径测试步骤2. 程序环路复杂性程序的环路复杂性给出了程序基本路径集中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。从

16、控制流图来看,一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路径。计算流图的环形复杂度(1) 流图中的区域数等于环形复杂度(2) V(G)=E-N+2,其中,E边数,N是结点数(3) V(G)=P+1,其中,P是判定结点的数目环形复杂度 = 4基本路径测试步骤确定线性独立路径的基本集合程序的环路复杂性给出了程序基本路径集中的独立路径条数一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路径基本路径集path1:1 - 11path2:1 - 2 - 3 - 4 - 5 - 10 - 1 - 11path3:1 - 2 - 3 - 6 - 8 - 9 - 10 - 1 - 1

17、1path4:1 - 2 - 3 - 6 - 7 - 9 - 10 - 1 11基本路径测试步骤设计可强制执行基本路径集中每条路径的测试用例导出测试用例,确保基本路径集中的每一条路径的执行。 根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到 用逻辑覆盖方法。每个测试用例执行之后,与预期结果进行比较。如果所有测试用例都执行完毕,则可以确信程序中所有的可执行语句至少被执行了一次。注意,一些独立的路径(如例中的路径1),往往不是完全孤立的,有时它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。条件测试条件测试方法着重测试程序中的每个条件条件测试基础简单

18、条件格式:一个布尔变量或一个关系表达式,在布尔变量或关系表达式之前还可能有一个NOT算符。关系表达式的形式如下E1E2 关系算符:,=复合条件:复合条件由两个或多个简单条件、布尔算符和括弧组成。布尔算符有OR,AND和NOT。不包含关系表达式的条件称为布尔表达式条件成分类型:包括布尔算符、布尔变量、布尔括弧、关系算符及算术表达式条件测试条件错误类型布尔算符错(布尔算符不正确,遗漏布尔算符或有多余的布尔算符)布尔变量错布尔括弧错关系算符错算术表达式错条件测试策略的优点容易度量条件的测试覆盖率 程序内条件的测试覆盖率可指导附加测试的设计条件测试域测试E1E2, 3个测试分别使E1大于、等于或小于E

19、2包含n个变量的布尔表达式需要2n个测试BRO(branch and relational operator)测试利用条件C的条件约束来设计测试用例输出约束布尔变量:真(t)或假(f)关系表达式:符号,=和复合条件C:(D1,D2,Dn),其中Di(0, =, C2的约束集: (t,=),(f,),(t,)C3:(E1E2)&(E3E4)C3的约束集: (,),(, ),(,)条件测试路径选择当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例;对于连锁型分支结构, 若有n个判定语句,需要有2n个测试用例

20、,覆盖它的2n条路径。当n较大时将无法测试。循环测试专注于测试循环结构的有效性3种循环简单循环串接循环嵌套循环简单循环测试法跳过循环只通过循环一次通过循环两次通过循环m次,其中m n-1通过循环n-1,n, n +1次嵌套循环测试法从最内层循环开始测试,把所有其他循环都设置为最小值 对最内层循环使用简单循环测试方法,而使外层循环的迭代参数(例如,循环计数器)取最小值,并为越界值或非法值增加一些额外的测试 由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值 继续进行下去,直到测试完所有循环串接循环测试法各个循环彼此独立:可以使用前述的测试简单法各个循环彼此不

21、独立: 采用嵌套循环测试法内容线索编码软件测试基础单元测试集成测试确认测试白盒测试技术黑盒测试技术调试软件可靠性黑盒测试技术这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试又叫做功能测试或数据驱动测试。黑盒测试技术黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误: 是否有不正确或遗漏了的功能? 在接口上,输入能否正确地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息(例如数据文件)访问错误? 性能上是否能够满足要求? 是否有初始化或终止性错误?黑盒测试技术用黑盒测试发

22、现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的。假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:可能采用的 测试数据组: 232232 264 如果测试一 组数据需要1毫秒,一年工作365 24小时,完成所有测试需5亿年。例如黑盒测试的测试用例设计 等价类划分 边界值分析 错误推测法等价划分把程序的输入域划分成若干个数据类,据此导出测试用例每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同等价划分等价类的划分 有效等价类:是指对于程序的规格说明来说,是合

23、理的,有意义的输入数据构成的集合 无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合在设计测试用例时,要同时考虑有效等价类和无效等价类的设计等价划分划分等价类的原则值范围: 1个有效的等价类,2个无效的等价类个数: 1个有效的等价类,2个无效的等价类N个值而且程序对不同值做不同处理:N个有效等价类,1个无效的等价类遵循的规则:1个有效等价类(符合规则)和若干个无效的等价类(从各种不同角度违反规则)整型:3个有效等价类(正整数、零和负整数)表格:3个有效等价类(空表,一条记录和多条记录)等价划分设计测试用例(1) 设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等

24、价类,重复这一步骤直到所有有效等价类都被覆盖为止(2) 设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止等价划分示例在某一PASCAL语言版本中规定标识符是由字母开头,后跟字母或数字的任意组合构成有效字符数为8个,最大字符数为80个标识符必须先说明,再使用在同一说明语句中,标识符至少必须有一个等价类划分 VAR x,T1234567:REAL; BEGIN x := 3.414; T1234567 := 2.732; END覆盖(1), (2), (4), (8), (9), (12), (14) VAR :REAL; VAR

25、x,:REAL;覆盖(3)覆盖(5)等价划分示例:测试用例设计 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; . END例2:某一报表处理系统,要求用户输入处理报表的日期,假设日期限制在2000年1月至2004年12月,即系统只能对该假设期内的报表进行处理。如果用户输入

26、的日期不在此范围内,则显示输入错误信息。该系统规定:日期由年、月的 6位数字字符组成,前4位代表“年”,后2位代表“月”。现要求用等价类划分法设计测试用例,来测试程序的“日期检查功能”1划分等价类并编号“报表日期”输入条件的等价类表输入数据 有效等价类 无效等价类 有非数字字符 少于6位数字 多于6位数字报表日期 6位数字年份范围 在2000-2004之间 小于2000年 大于2004年月份范围 在1-12之间 等于0 大于122为有效等价类设计测试用例测试数据 预期结果 覆盖范围200005 输入有效 、测试数据 预期结果 覆盖范围00MAY 输入无效 20005 输入无效 2000005

27、输入无效 199912 输入无效 200501 输入无效 200000 输入无效 200013 输入无效 3为每个无效等价类至少设计一个测试用例边界值分析经验表明,处理边界情况时程序最容易发生错误比如,在做三角形计算时,要输入三角形的三个边长:A、B和C。 我们应注意到这三个数值应当满足 A0、B0、C0、 ABC、ACB、BCA,才能构成三角形。但如果把六个不等式中的任何一个大于号“”错写成大于等于号“”,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。边界值分析应该着重测试输入等价类和输出等价类的边界,选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值而不是选取等价类中的典型值或任

28、意值做为测试数据。 边界值分析示例 VAR x,A123456,T1234567:REAL; BEGIN x := 3.414; T1234567 := 2.732;END VAR :REAL; VAR x,:REALVAR T12345678:REAL; 9个字符VAR T12345.:REAL;80个字符VAR T12345. :CHAR;81个字符错误推测列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例很大程度上靠直觉和经验已经发现的错误数目往往和尚未发现的错误数成正比在进一步测试时要着重测试那些已发现了较多错误的程序段利用判定表或判定树,为每一种条件组合至少设

29、计一个测试用例比较黑盒测试白盒测试优点适用于各阶段测试从产品功能角度测试容易入手生成测试数 据可构成测试数据使特定程 序部分得到测试有一定的充分性度量手段可或较多工具支持缺点某些代码得不到测试如果规格说明有误,则无法发现不易进行充分性测试不易生成测试数据(通常)无法对未实现规格说明的部分进行测试工作量大,通常只用于单元测试,有应用局限性质 是一种确认技术,回答“我们在构造一个正确 的系统吗”是一种验证技术,回答“我们在正确地构造一个系统吗?”内容线索编码软件测试基础单元测试集成测试确认测试白盒测试技术黑盒测试技术调试软件可靠性调试(Debug)调试是在测试发现错误之后排除错误的过程调试的目的是

30、诊断并改正错误调试的困难(1) 症状和产生症状的原因可能在程序中相距甚远(2) 当改正了另一个错误之后,症状可能暂时消失了(3) 症状可能实际上并不是由错误引起的(如舍入误差)(4) 症状可能是由不易跟踪的人为错误引起的调试的困难(5) 症状可能是由定时问题引起的(6) 可能很难重新产生完全一样的输入条件(例如,输入顺序不确定的实时应用系统)(7) 症状可能时有时无,这种情况在硬件和软件紧密地耦合在一起的嵌入式系统中特别常见(8) 症状可能是由分布在许多任务中的原因引起的,这些任务运行在不同的处理机上调试途径1.蛮干法这种方法印出内存的内容,激活对运行过程的跟踪,并在程序中到处都写上WRITE(输出)语句,希望在这样生成的信息海洋的某个地方发现错误原因的线索2. 回溯法从发现症状的地方开始,人工沿程序的控制流往回追踪分析源程序代码,直到

温馨提示

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

评论

0/150

提交评论