第4章软件编码和软件测试_第1页
第4章软件编码和软件测试_第2页
第4章软件编码和软件测试_第3页
第4章软件编码和软件测试_第4页
第4章软件编码和软件测试_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、1,4.1 结构化程序设计,4.1.1 程序设计语言的选择 4.1.2 程序设计风格,4 软件编码与软件测试,蹭垦导锄高嫉几网嵌暖诉茁循寸涂吕候勋柏受颧馆诬诬斤蝗超闷廷漱独隔第4章软件编码和软件测试第4章软件编码和软件测试,2,4.1.1 程序设计语言的选择,程序设计语言的分类 根据语言级别,分为以下几类: 机器语言: 汇编语言 高级语言,例:用某台计算机指令系统编写计算D=A+B*C的程序。设分配给A、B、C、D的地址分别为:200、202、204、206。机器语言程序如下: 003 0003 000202 把B的值送到 006 0003 000204 把C的值与3号寄存器中的值相乘,结果放

2、在3号寄存器 004 0003 000200 把A的值与3号寄存器中的值相加,结果放在3号寄存器 002 0003 000206 把3号寄存器中的值送入内存中D的存储单元。,耕质儡轧启炮亮鹊鞠栗堡巩可傀赃潞牙岭死搞越掖乞峙克舌钥冶天昌棍馋第4章软件编码和软件测试第4章软件编码和软件测试,3,汇编语言程序: LOG REG3 C MUL REG3 B ADD REG3 A STR REG3 D,高级语言程序: D=A+B*C,一般情况下,我们采用高级语言来编程,选择的原则: 开发环境 产品的应用领域 :Fortran、C语言、Sql、Ada、lisp 系统用户的要求 程序员的知识水平,篮潍语牛汇

3、皱筏蒲摸韧膘狙煤豺欢隆国霞仇谜在看粳邹乖母假于愿绍梧挺第4章软件编码和软件测试第4章软件编码和软件测试,4,4.1.2 程序设计风格,一、 程序内部的文档书写风格: 恰当的标识符(变量和函数)的名字; 适当的注释; 程序的视觉组织。,狐亩购儡膜迫喇读耗涉檀塑脖攫格隙依帜辱聋刁突碧搁郴九雹饯惑锭灾垒第4章软件编码和软件测试第4章软件编码和软件测试,5,1、标识符的命名 名字的选取应含义鲜明,能正确地提示程序对象所代表的实体。例如,表示次数用times,表示总量用total等 名字的长度不应限制。如果名字使用缩写,那么缩写规则应该一致,并且应该给每个名字加上注解,以方便阅读。 enum QQGen

4、der QQMale = 0, 值为0,表示男性,其他责女性 QQFemale ; 良好的编码习惯,如匈牙利规则 匈牙利命名法是一种编程时的命名规范。基本原则是:变量名属性类型对象描述 ,Charles Simonyi 如:一般前缀命名规范 前缀 类型 实例 g_全局变量g_Servers m_ 成员变量 m_pDoc,m_nCustomers,估屁逢托锗蕊缕勤仲硒那佛昨虫饶仓漏扁蝇墙岂旅佬启辉辰形碉典澈听栽第4章软件编码和软件测试第4章软件编码和软件测试,6,sz Zero terminated String 以0结尾的字符串 tm Text metric 文本规则 u Unsigned i

5、nt 无符号整数 ul Unsigned long (ULONG) 无符号长整数 w WORD (unsigned short) 无符号短整数 x,y x, y coordinates (short) 坐标值/短整数 v void 空 有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。 前缀类型例子 g_全局变量g_Servers C类或者结构体CDocument,CPrintInfo m_成员变量m_pDoc,m_nCustomers,a Array 数组 b BOOL (int) 布尔(整数) by Unsigned Char (By

6、te) 无符号字符(字节) c Char 字符(字节) cb Count of bytes 字节数 cr Color reference value 颜色(参考)值 cx Count of x (Short) x的集合(短整数) dw DWORD (unsigned long) 双字(无符号长整数) f Flags (usually multiple bit values) 标志(一般是有多位的数值) fn Function 函数 g_ global 全局的 h Handle 句柄 i Integer 整数 l Long 长整数 lp Long pointer 长指针 m_ Data memb

7、er of a class 一个类的数据成员 n Short int 短整数 p Pointer 指针 s String 字符串,垢恐毅纱宏旅冤末搀疚滞挝毛眯洛彬典苔踩垛哨汽翁阴迁茎马疯悯虫府陀第4章软件编码和软件测试第4章软件编码和软件测试,7,VC常用前缀列表: 前缀类型描述例子 chchar8位字符chGrade chTCHAR16位UNICODE类型字符chName bBOOL布尔变量bEnabled nint整型(其大小由操作系统决定)nLength nUINT无符号整型(其大小由操作系统决定)nLength wWORD16位无符号整型wPos lLONG32位有符号整型lOffse

8、t dwDWORD32位无符号整型dwRange p*Ambient memory model pointer 内存模块指针,指针变量pDoc lpFAR*长指针lpDoc lpszLPSTR32位字符串指针lpszName lpszLPCSTR32位常量字符串指针lpszName lpszLPCTSTR32位UNICODE类型常量指针lpszName hhandleWindows对象句柄hWnd lpfn(*fn)()回调函数指针 Callback Far pointer to CALLBACK functionlpfnAbort,唾共刻陛踢蚜造廷关掌峻靠披漂饺孟婴腐灌墨卞检诛亦锭蜜咐风个嗜

9、域冀第4章软件编码和软件测试第4章软件编码和软件测试,8,2、程序的注释 程序的注释分为两种:序言性注释和功能性注释。 序言性注释由如下: 有关本模块功能说明、主要算法、接口描述、有关数据描述、模块位置、开发简历:,功能性注释嵌入在源程序体内,用以描述其后的语句或程序段的处理功能。 例如,对于“ave=toal/num”的注释应该是:“总量除以人数求得均值”,而不应该是“toal除以num得ave”。,趣灸决甜八据诊料匠楼荤锡粘撇本戎嘱湍党拍迅幻聪泳毁招酿候荒涟疽秀第4章软件编码和软件测试第4章软件编码和软件测试,9,#include StdAfx.h #include ConfigMod.h

10、 /*全局变量定义部分开始*/ int g_MainLev ; /设置主目录检索层次数,初始化值是0; DirSettingLink *g_DirRoot ; /用于记录系统对特殊目录的设置,初始化值是NULL; /用于记录需要包含/排除的文件名,初始化时,全部清零; char g_FilesSettingMAXSPFILENUMMAXFILELEN+1; FileModeSel g_FileMode; /用于记录是包含类型还是排除类型,初始化值是INCLUDE; RstSorttingg_RstSort; /用于记录文件检索结果排序的方式,初始化值是PATHNAME; /这里使用三位掩码12

11、3,第一位掩码表示是否显示文件名,第二位掩码表示是否显示相 /对路径名,第三位掩码表示是否显示规模,初始化值是6(110); unsigned char g_RstCon; char g_ErrMsgMAXERRMSGLEN+1; /用于记录最近的一次错误信息,初始化时,全部清零; /该全局变量仅共模块内使用,不对外提供接口,用于GetFirstDirSetting,GetNextDirSetting /的遍历 DirSettingLink *g_Point; /该全局变量仅共模块内使用,不对外提供接口,用于GetFirstFileSetting,GetNextFileSetting /的遍历

12、 int g_Order; /*全局变量定义部分结束*/ /*接口函数实现部分开始*/ /* 功能简述:配置模块全局变量初始化接口 输入参数:无 输出参数:无 返回值:无 备注:对配置模块的全局变量进行初始化 */ void WINAPI ConfigModInit ( void ) g_MainLev = 0; g_DirRoot = NULL; memset(g_FilesSetting,0,MAXSPFILENUM*(MAXFILELEN+1); g_FileMode = INCLUDE; g_RstSort = PATHNAME; g_RstCon = 6; memset(g_ErrM

13、sg,0,MAXERRMSGLEN); g_Point = NULL; g_Order = 0; /* 功能简述:配置模块资源释放接口 输入参数:无 输出参数:无 返回值:无 备注:对配置模块申请的资源进行释放 */ void WINAPI ConfigModRelease ( void ) DirSettingLink *l_Link ; l_Link = g_DirRoot; while(l_Link) g_DirRoot = l_Link-next; l_Link-next = NULL; delete l_Link-m_node.m_dirname; delete l_Link; l_

14、Link = g_DirRoot; /*,豫魁辐帘牛迎严煮胶旱妄谣召师舀跺弹忽擒盛梦晴虞兼热摧韵基防藏耗继第4章软件编码和软件测试第4章软件编码和软件测试,10,3.程序的视觉组织 用分层缩进的写法显示嵌套结构层次; 在注释段周围加上边框; 注释段与程序段、以及不同的程序段之间插入空行; 每行只写一条语句; 书写表达式时适当使用空格或圆括号作隔离符。,鸯摔厂警施袱屡铀挤陨咯勃审崇温熬磷慕序复归焉啥眶命耀饶肩钨看仲烤第4章软件编码和软件测试第4章软件编码和软件测试,11,二、数据说明 数据说明的次序应当标准化,有次序,当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。 变量说明不要遗漏

15、,变量的类型、长度、存储及初始化要正确。 如果设计时使用了一个复杂的数据结构,则应注解说明用程序设计语言实现这个数据结构的方法和特点。,掺求幼墒扳汾痕虑贸弘悯胎鸿拼谩管恳剧裳蚌缴橱枫铆迭烷矩邪吩全笔症第4章软件编码和软件测试第4章软件编码和软件测试,12,/定义了消息的格式 const DWORD QQSERVERPORT = 50000; const DWORD QQCLIENTPORT = 50001; /注册信息相关属性 const int NICKNAMELEN = 10; const int PASSWORDLEN = 16; const int COUNTRYLEN = 30; c

16、onst int PROVINCELEN = 10; const int CITYLEN = 10; const int PERSONALSIGNATURELEN = 200; const int IPLEN = 20; const int MESSAGEMAXLEN = 2000; /登入信息相关属性 /这个请求注册的内容 struct SQQRegister char acQQNicknameNICKNAMELEN; char acTrueNameNICKNAMELEN; char acQQPasswordPASSWORDLEN; QQGender eQQGender; char acCo

17、untryCOUNTRYLEN; char acProvincePROVINCELEN; char acCityCITYLEN; UCHAR uAge; char acPersonalSignaturePERSONALSIGNATURELEN; ; /应答结构体 struct SQQRegisterReply QQStatus eQQStatus; char acQQNumberQQNumberLen+1; ;,爷邹功坚雀透楷都击率盅熊铱透千酮董渝绍脑慈编庭痞惰剂泽美矫氧溅丛第4章软件编码和软件测试第4章软件编码和软件测试,13,三、语句构造应遵循简单明了的原则 不要为了节省空间而把多个语句写

18、在同一行 尽量避免复杂的循环嵌套和条件嵌套,不宜超3 尽量避免使用“非”条件的条件语句; 利用括号使逻辑表达式或算术表达式的运算次序清晰直观; 注意GOTO语句的使用 可读性,例1: FOR I :=1 TO N DO FOR j :=1 TO N DO VI,j :=(I DIV J)*(J DIV I);,例子:建立一个NN的单位矩阵V。,抡稿恒消妨搂嘘艺喝残禾混滩譬怎郁搂螺瞄疑烽恰寸酒甩亿刻汀呵哀滇不第4章软件编码和软件测试第4章软件编码和软件测试,14,例2:程序段功能是交换元素aj和aj+1。为少一个变量程序的易读性差。 aj :=aj + aj+1; aj+1 := aj - aj

19、+1; aj :=aj - aj+1;,为了改善程序的易读性,应采用直截了当的描述方式。,伦孺降参跑夹液他寻鲤焙摹剿鲸戊谎探旁囤蔡琢叉斗叠庭过坏钩操荔隐嚏第4章软件编码和软件测试第4章软件编码和软件测试,15,四、输入/输出语句 对所有输入数据都进行校验,以保证每个数据的有效性; 使得输入的步骤和操作尽可能简单,并保持简单的输入格式; 输入一批数据时,使用输入结束指示符,不要要求用户说明输入项数; 输出要正确,不要有文字错误。 输出的报表设计要符合用户要求,五、程序效率 效率是一个性能要求,因而应该在需求分析阶段确定代码效率方面的要求; 通过好的设计可以提高效率; 程序的效率和程序的简明程度是

20、一致的,不应该为了提高代码效率而牺牲程序的清晰性和可读性。,诫现铜卸躇亦歌穴寄姐平刮猜迷凡叁删磕林嘿耿永菊准卫仆散伐凭拿使滨第4章软件编码和软件测试第4章软件编码和软件测试,16,补充作业根据匈牙利规则或Vc规则修改如下代码,#include #include #include #define max 26 typedef struct node char name20; char sno20; char tel20; struct node *next; nodetype; typedef struct nodetype *datamax; openhash; void save(openh

21、ash *p) FILE *fp; int i; if(fp=fopen(c:stu,w+)=NULL) printf(connot open filen); return; /*for(i=0;idatai,sizeof(struct node),1,fp)!=1) printf(file write errorn); fclose(fp); void duqu(openhash *p) FILE *fp; int i; fp=fopen(c:stu,rb); /*for(i=0;idatai,sizeof(struct node),1,fp); fclose(fp); int hash(c

22、har key) int n; n=key-a; return n; openhash *create_openhash(openhash *p)/*创建哈希表*/ char f;int m,i,addr;nodetype *n,*s; n=(nodetype *)malloc(sizeof(nodetype);/*申请空间*/ n-next=NULL; /*初始化学生信息*/ printf(请输入姓名的汉语拼音:); scanf(%s,n-name); printf(请输入学号:); scanf(%s,n-sno); printf(请输入电话号码:); scanf(%s,n-tel); /*

23、对各个学生按姓名向链表中插入*/ f=n-name0; addr=hash(f); n-next=p-dataaddr;p-dataaddr=n; return p; void serch_openhash(openhash *p,char sname)/*搜索相关信息,并输出详细信息*/ int i,num=0,addr;nodetype *s; char f; f=sname0;/*取姓名第一个字母赋值给f*/ addr=hash(f);/*调用哈希函数,计算出起地址*/ if(p-dataaddr=NULL) printf(没有找到该学生!); else s=p-dataaddr;/*把

24、该名字所在的链表的第一个结点地址赋值给s*/ for(i=0;iname,sname) printf(姓名:%s,学号:%s,电话号码:%sn,s-name,s-sno,s-tel); printf(比较次数:%dn,num);break; if(s-next=NULL) printf(没有找到该学生!);break; s=s-next; /*对下一个结点进行匹配*/ int main(int argc, char *argv) openhash *p;char sname20;/*p为存学生信息的结构体*/ int i,f=1;/*f判断是否继续运行程序!*/ p=(openhash *)m

25、alloc(sizeof(openhash);/*为指针p申请空间*/ for(i=0;idatai=NULL;/*初始化同学录*/ printf(计算机0801 学号:0308101117 郑剑芳n); while(f) printf(n数字0表示退出,数字1表示录入功能,数字2表示查询功能,请选择功能!n); scanf(%d, ,皮糟撵权栽惟隅饭阉桶虚鳖脓雨伍夹探游容氟淌寅妓住兰叙偷嘘砖妒责籍第4章软件编码和软件测试第4章软件编码和软件测试,17,4.2 软件测试,两个例子: 1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序: DO 5 I=1,3 误

26、写为:DO 5 I=1 . 3,1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。 进行严格的软件测试,进一步发现和改正软件错误,是非常必要和重要的。,竿妥夜腔苹凛摸闲持胰柴畸匈蔡献逾右痴苛晋列蒸稗令阳各柜堵冯魏帆命第4章软件编码和软件测试第4章软件编码和软件测试,18,4.2 软件测试的目标,软件测试指人工或计算机执行程序来有意识地发现程序中的设计错误和编码错误的过程。 测试对象包括整个阶段的文档和程序,包括需求分析说明书、概要设计规格说明、详细设计规格说明、源程序等。 据美国一家公司统计,查出的软件错误中,属于需求分析和软件设计的错

27、误约占 64%,属于程序编写的错误仅占 36%。程序编写的许多错误是“先天的”。,G.J.Myers在中认为: 程序测试是为了发现错误而执行程序的过程. 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; 成功的测试是发现了至今为止尚未发现的错误的测试。,找错,因蚌躬胳们烯诵槛傲舌警膊杏肇圃彬哇赢婆傣消焕墟料步粥排倾巷斥囤锅第4章软件编码和软件测试第4章软件编码和软件测试,19,静态分析: 不执行测试软件,通过对需求分析说明书、软件设计说明书及源程序做结构检查、流程图分析、编码分析等来找出软件错误。 动态测试: 执行程序并分析程序来查错。 输入数据和预期的输出结果,4.3.1 静态测试

28、与动态测试,例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。 为说明其能正确执行它的功能,可使用“三组数据”(3,4,5 不等边三角形),(5,5,6 等腰三角形),(6,6,6 等边三角形) 程序都能给出正确结果,是否就可认为程序是正确的? 有限次的测试获得最大的收益:尽可能少的测试用例找出就能可多的程序错误。,帆垄换峰仓毡巳哆氯朔细伙伞熄吗咎联鹏潮移席图爆缘福舷吠基雄炕锚欢第4章软件编码和软件测试第4章软件编码和软件测试,20,4.3.2 黑盒法与白盒法,黑盒法 又称:基于规格说明书的功能测试 不考

29、虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。,白盒法 又称:基于覆盖的测试. 分析程序的内部逻辑结构,注意选择适当的覆盖标准,设计测试用例,对主要路径进行尽可能多的测试。,跨吸远存辊终云寨陡甚奎粒惧矩千卫包暮油再翁肆淤岭亿殆仑乔煎缺乙栋第4章软件编码和软件测试第4章软件编码和软件测试,21,4.4 测试步骤,弟弃舆衡饯调华佃蛔望诸仪开职义头加阜蔽猿饺仁逻荡丘雍铣妇萎脐霜奄第4章软件编码和软件测试第4章软件编码和软件测试,22,4.4.1 模块测试,测试内容,模块,模块接口测试,局部数据结构测试,重要路径测试,错误处理测试,边界条件测试,I/O 参数值的个数、类型、次序、

30、格式是否正确,I/O文件属性、操作是否正确等。,数据说明是否正确、一致,变量及其初值定义是否正确等。,检查“错误处理程序”本身的错误。,边界条件常包括循环边界,最大最小值、控制流中等于、大于、小于的比较值等。,重要路径通常是指完成模块功能的主要路径,一般是控制结构。,亏涧缺拒瑰悠渔睛词藕嚷悸北藉蝗伟土挣棵芋湛令貌薛陇倾雏剑驱笔衍巾第4章软件编码和软件测试第4章软件编码和软件测试,23,测试模块 驱动程序:接收测试数据,调用被测试模块,输出测试结果 桩模块:即虚拟子程序 ,使用被它代替的模块,调用模块,(被调用模块)桩模块,主函数(驱动程序),筐首图玲久盆庙闪芹幽悯稼循语休臻铰迪后功纳袜噬甫纶差

31、朽肺钮拓镭义第4章软件编码和软件测试第4章软件编码和软件测试,24,4.4.2 集成测试,集成测试的步骤 确定模块组装方案,将经过测试的模块组装为一个完整的系统。,集成测试方案 非渐增式组装:将所有的模块一次连接起来 渐增式:将模块一个一个的连入系统,每连入一个模块,都要对新系统进行测试。,自顶而下集成 自底而上集成,嚷鹏哉除宙荧震氢忻姚卷呻蜘晨瓷停妙叼落藉帜枷雷佐男跋杆枕替疹妈右第4章软件编码和软件测试第4章软件编码和软件测试,25,4.4.2 集成测试,自顶而下集成 图a描述了自顶而下集成的过程,图b为最终完成的系统。,程序模块示意图,S5,M1,S1,S1,S1,S2,S2,S2,S3,

32、S3,S3,M2,M3,M4,S4,S4,S4,S5,S5,M5,M6,图a,蹦执黄守刘娱页培犀苔颊惕咕秤志辜伐烦条察返密正止租妇碉何食蛀画森第4章软件编码和软件测试第4章软件编码和软件测试,26,4.4.2 集成测试,自底而上集成 图a描述了自底而上集成的过程,图b为最终完成的系统。,M3,M6,M5,D1,D2,D3,D1,D1,D2,D2,D3,D3,M2,M4,M1,程序模块示意图,图a,少穷卓拄蝉莹波押撅贫带读箱判摘磨锹拙凯狠慰憾职镭踞人破便粮被刑整第4章软件编码和软件测试第4章软件编码和软件测试,27,4.4.2 集成测试,无论是自顶而下增值还是自底而上增值,可选择深度优先或者宽度

33、优先集成。,A、B、E、J、K、C、F、L、G、D、H、M、N、I,深度优先:,A、B、C、D、E、F、G、H、I、J、K、L、M、N,宽度优先:,款娩诚佣趋麻所扣践蹈氓贸胶原滁呀考熏蒜抿忻愚展蔽仪最尖侣窘款擎蒂第4章软件编码和软件测试第4章软件编码和软件测试,28,4.4.3 程序审查会和人工运行,程序审查会由软件程序员和不参加设计的测试专家及调解员。:。其过程如下: 首先,组长提前把程序文档和设计文档(设计规格说明书、控制流程图等)分发给小组成员,作为评审的依据。小组成员要先充分阅读这些材料,为评审会做好准备。 第二步是召开程序审查会,首先由测试人员进行讲解,其它成员可以提问并展开讨论。

34、在代码会审之后,需要把发现的错误登记造表,并交给程序员 优点:一次审查可以发现多个错误,澳芋禾纲扁冠霹列环浸敞入巳犬冲臭齿彬两贺待佃庚确护竞辜锁溪革舀木第4章软件编码和软件测试第4章软件编码和软件测试,29,4.3.3 程序审查会和人工运行,人工运行(走查):编程人员及其他有丰富经验的程序员、其他项目的参与者), 其过程如下:模拟计算机运行,把各种测试情况沿着程序逻辑走一遍,通过询问程序的逻辑设计情况来发现错误。,膀色替供爆楚寞棵朝胸婪校涌典闲撼瞄糜煮归壶联菌颊街炭旨撮操古茄加第4章软件编码和软件测试第4章软件编码和软件测试,30,4.4.4 确认测试,确认测试(validation test

35、ing):其任务是验证系统的功能、性能等特性是否符合需求规格说明。 测试者 以任务委托单位及用户代表为主参加测试; 测试策略 一般在模拟的环境下,运用黑盒法进行; 测试与测试,测试内容 (1)安全测试: (2)性能测试: (3)强度测试: (4)恢复测试:,货如吁添试扔干咒骤洽淹莲紧迈袁梅恰嫡蹦坚揣雀妻戳否续蓬晤卵馈令诱第4章软件编码和软件测试第4章软件编码和软件测试,31,4.4.5平行运行,对于重要的系统,新开发系统与原先老系统(或手工操作)同时运行,以免软件的错误造成不良后果。,朝颗春召粱镰额恭骨烩柞纵淹文歼害够脐逸咀履坤嚎酚本遣率犬蜂泡闹魂第4章软件编码和软件测试第4章软件编码和软件测

36、试,32,4.5 设计软件测试方案,4.5.1 等价类划分 4.5.2 边界值分析 4.5.3 错误推测法 4.5.4 逻辑覆盖 5.4.5 因果法,测试方案包括要测试的功能,准备的数据及其对应的预期输出结果。,白盒法,测试用例,例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。 为说明其能正确执行它的功能,可使用“三组数据”(3、4、5,三角形),(5、5、6 ,等腰三角行),(6,6,6,等边三角行) 程序都能给出正确结果,是否就可认为程序是正确的? 有限次的测试获得最大的收益:尽可能少的测试用例找出

37、就能可多的程序错误。,租室贤舒七交孕茵交汗靴抽镑记缴本踪验慕糊攫登丧氮党凑鲸佐甚捏豆拉第4章软件编码和软件测试第4章软件编码和软件测试,33,4.5.1 等价类划分,一、概念:把所有可能的输入数据划分成若干个等价类,即子集 每个等价类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。 从每个等价类中选取具有代表性的数据作为代表进行测试来发现程序中的错误。 有效等价类:符合需求规格及软件设计规定的数据子集。 无效等价类:不符合需求规格及软件设计规定的数据子集。,取缓施饯盎育脏迭洗画轿瞩肾蹿掀蝎痢宪务沥姚脓贰秉斡雏趾协迸社帚冠第4章软件编码和软件测试第4章软件编码和软件测试,34,二、规

38、则,1.如果输入条件规定了取值范围,例:某需求规定输入值为1.99,2.如果输入条件规定了输入数据的个数。 例如:输入三个边的值,则: 有效等价类:输入三个数 测试数据取10,11,12 无效等价类1:输入少于三个数 测试数据取10,11 无效等价类2:输入多于三个数 测试数据取10,11,23,24,黎镰石斥筐咬盾涨皂镜片辙哆执递渗啤瑚皑烤哪笼鞋减蠢速馆督嘘帧敷奇第4章软件编码和软件测试第4章软件编码和软件测试,35,4.如果输入条件规定了输入数据的一组可能的值,而且程序对不同输入值作不同的处理 例如:输入0,1,2,3,4,5,6中的一个数。 则:7个有效等价类: 1个无效等价类:,5.如

39、果输入条件规定了输入数据必须遵循的规则。 例如:一个语句必须以分号结束 则:有效等价类:测试数据取 ; 无效等价类:测试数据取 , LF等,3.如果输入条件规定了输入数据的一组可能的值,而且程序对不同输入值作相同的处理 例如:输入0,1,2,3,4,5,6中的一个数。 则:有效等价类:测试数据取3 无效等价类:测试数据取7,给茂浚里坤顺他薛溅挫郑索漾吹磁摧锈硝砂抹责烦蛀瑞嘱十舞伪怪际圆蹋第4章软件编码和软件测试第4章软件编码和软件测试,36,三、步骤 第一步:划分等价类 例子:在学生成绩管理系统的案例中,系统要求输入数据是数字字符,在0100之间,超出这个范围的为无效数字。带非数字字符的也为无

40、效字符 则可以划分为2个有效的等价类,5个无效等价类,七腥语熟悼努华沛长睦诬处磊规争梨暑莽辉挛翁排撤藤恢洱妙而畦盎趋也第4章软件编码和软件测试第4章软件编码和软件测试,37,第二步:设计有效等价类需要的测试用例,使它能包含尽可能多的尚未被覆盖的有效等价类。重复这一过程,直到所有的有效等价类都被覆盖。 1)5)2个有效等价类,可共用一个测试用例,例如:,第三步:为每一个无效等价设计一个测试用例,例如:,造峦任掠扦萍炽直暂旅仙吼试囊疟羽锹眉隙阻篡朗候疡巷窥滦客炮效佐啄第4章软件编码和软件测试第4章软件编码和软件测试,38,等价类划分法是从某等价类中随便挑一个作为代表,边界值分析是使这个等价类的每个

41、边界都要作为测试条件。,4.5.2 边界值分析,例子中,学生成绩边界101、100、0、1,阴腻蜀赖预嘉镶束柏康哮钩抒侣绅惰撒固磷游缎丽踪琢战尽旦硒删产喀迁第4章软件编码和软件测试第4章软件编码和软件测试,39,边界值分析设计测试方案原则,(1)输入数据以a和b为边界的范围 例:邮件收费规定 15 kg收费2元, 则应对: 0.9,1, 5,5.1 kg 或0.99,1, 5,5.01 kg 设计测试用例。 (2)如输入数据有规定的个数 例:一个输入文件可有1255个记录则可分别设计有:1个、255个、0个、256个记录的输入文件,(3)输入数据有一定的规则 (4)考虑输出的边界,分析输入产生

42、的测试情况,艺殷碌蒙唆不爬袱酮懒掳纫督协涅畅钥踩潍糟轩几蓖烤长够煞肉樟贪缆砧第4章软件编码和软件测试第4章软件编码和软件测试,40,4.5.3 错误推测法,错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。 例如,输入数据为零或输出数据为零的地方往往容易出错;各模块间对公有变量的引用也是容易出错的地方。,可先用边界法设计以下测试用例; 排序序列为空; 排序序列仅有一个数据; 排序序列为满序列数据; 然后,用推测法补充一下测试用例: 排序序列已经按要求排好序; 排序序列的顺序与要求的顺序恰好相反; 排序序列中的所有数据全部相等;等等。,麻鹏酉根胃

43、汉蒸梯爷压简蛋皋敲贯帛续热庐澈籍峰坝矾她禹引毁赡朔择泰第4章软件编码和软件测试第4章软件编码和软件测试,41,4.5.6 因果图法,二、步骤 (1) 输入为原因,输出为结果,给 每个原因、结果一个标识。 (2) 分析语义,找出原因与结果、原因与原因之间的关系,画出因果图。 (3) 在因果图上标明约束或限制条件。 (4) 把因果图转化为判定表 。 (5) 根据判定表每一列设计测试用例。,一、概念:等价类划分和边界分析不能检查组合输入条件可能引起的软件错误因果图,瑶梯剑孪谅卑敢虾均些杀峭墟澈跑职嚣耽完碳想倍潜端灼袜拆肃婪奄植蛛第4章软件编码和软件测试第4章软件编码和软件测试,42,原因 结果,恒等

44、 c出现,则e出现,非 c出现,则e不出现,或 c1、c2中有一个出现, 则 e出现,与 c1、c2中都出现,e才出现,因果图的基本符号,矿竟块咆寡火疵榆芹猾踊代禾认斋劫懈雁恤驳赢掠棚钮酱袄择垣稳左顶诗第4章软件编码和软件测试第4章软件编码和软件测试,43,从输入条件考虑,有四种约束,异约束(互斥) 原因a,b只有一个可能为1,不能同时为1,或约束 原因a,b,c至少 (包含) 有一个成立,唯一约束 原因 a,b必有, 且仅有一个成立,因果图的约束符号,要求约束 当a出现, b必须也出现,封绑挪砚痞圭阎郎哉舵场它戒漳赢诧美攫朽陌烤橡犬捍罢百遇鞍哎捻顾锨第4章软件编码和软件测试第4章软件编码和软

45、件测试,44,因果图方法实例: 某软件规格说明中规定: 输入两个字符,第一个字符是A或B,且第二个字符必须是数字时执行操作H。 若第一个字符不是 A,也不是B 时,输出错误信息L。 若第二个字符不是数字时,输出错误信息R。,强制约束(屏蔽) a成立,b必不成立,扒盒刚确猖娟桂敬铃纠凳兆汲验垛憎拿汛娱疤臻砌品瞻丝狙程恢箩贰甜陈第4章软件编码和软件测试第4章软件编码和软件测试,45,原因是: 1第1个字符是A 2第1个字符是B 3第2个字符是数字。,结果是: 21执行操作H。 22输出错误信息L。 23输出错误信息R.,呈候爱监王柯樱抱亨筹脚薛澈统渠桐舜蝎拽对走喜谗适诗庭胃搬却襄拉冲第4章软件编码

46、和软件测试第4章软件编码和软件测试,46,输出错误信息L 执行操作H。 输出错误信息R.,督酸个巢挠衍容庄羌磐衡忌翻年簧凋圈辫过圭爸欧琅锄港惮勤锰锥魔烤萤第4章软件编码和软件测试第4章软件编码和软件测试,47,作业,有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或一元的硬币,按下“橙汁”或“啤酒”按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示“零钱找完”的红灯亮,这时在投入1元硬币并按下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示”零钱找完“的红灯灭,在送出饮料的同时退还5角硬币。 (1)分析这一段说明,列出原因和结果 (2

47、)画出因果图。所有原因结点在左边,所有结果结点列在右边。 (3)转换成判定表,并设计测试用例,奎霸榷在碴箩定瓣舱七虎湖侵晓掳俱适阉居烬桃岔峨货瑰帮头吓蹋芝流掉第4章软件编码和软件测试第4章软件编码和软件测试,48,原因:1.售货机有零钱找 2.投入1元硬币 3.投入5角硬币 4.按下橙汁按钮 5.按下啤酒按钮 建立中间结点: 11.投入1元硬币且按下饮料按钮 12.按下橙汁或啤酒的按钮 13.应当找5角并且售货机有零钱找 14.账结清 结果: 22.退还1元硬币 23.退还5角硬币 24.送出橙汁饮料 25.送出啤酒饮料,卑筷睬颁俯吝造囤蔽杜劈绳镣沙敏曳培船赊烽伐晶乍褒撂慰哉括牌阶雾箍第4章软

48、件编码和软件测试第4章软件编码和软件测试,49,勾炊摔帜慌肝戎蹦逻危狄浸氦歉稼懊校宴株黄媚币谨蔓菌传贝枫椰洲龄侧第4章软件编码和软件测试第4章软件编码和软件测试,50,微软的30GB版本Zune在08年的最后一天出现了大规模死机的现象。下面来看看具体的代码 while(days365) if(DateTime.IsLeapYear(year) if(days366) days-=366;year+=1; elsedays-=365;year+=1;,所祭疑煮斋庆咸痢柯跺缝枫铣迪每朴莹哲靠临专账囊解慰年忙朋钨胚煌扣第4章软件编码和软件测试第4章软件编码和软件测试,51,4.5.4 逻辑覆盖,逻辑

49、覆盖是以程序的内部逻辑结构为基础的测试用例设计技术,属于白盒测试。 语句覆盖: 判定覆盖: 条件覆盖: 判定/条件覆盖: 条件组合覆盖:,宵敬混痕搞乓颐冕孕蓖添箩搪萌挎继罢娄床奔乌厨台阎遥乎妓饼泥明捡固第4章软件编码和软件测试第4章软件编码和软件测试,52,4.5.4 逻辑覆盖,例:用逻辑覆盖法测试以下程序段,Procedure EX( A,B: REAL, VAR X: REAL ); BEGIN IF(A1) and (B1) THEN X:=X/A ; IF (A=2) or (X1) THEN X:=x+1; END;,困募匀卿妈酞鸵踪啮泼闷抵耐攀霜嘱扣妮圃噬掠琳往湖蓑廊或住扎仙迎泵第

50、4章软件编码和软件测试第4章软件编码和软件测试,53,设计足够的测试用例,使得程序中的每个语句至少执行一次 路径:acbe 测试用例:A=2,B=0,x=3,1、语句覆盖,缺点:语句覆盖不能发现判断中的逻辑运算中的错误。,问题:第一个判断 and 误写成 or,则测试用例发现不了错误 第二个判断x1误写成X1,则测试用例发现不了错误,响瞳袄阐宫赠重姓冈皖嗽刃裳挖味凭魔矽府琢惺侗证笨捣咐看史返挛人涪第4章软件编码和软件测试第4章软件编码和软件测试,54,2、判定覆盖,设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖。 测试案例:A=2,B=0

51、,X=3(acbe) TT A=1,B=1,X=1(abd)FF,判定覆盖比语句覆盖强,各分支执行过,自然每个语句都执行过了 但是第二个判断x1误写成X1,则测试用例发现不了错误 则:需要更强覆盖,瀑刘阳涧婆案可瀑们醚暗战垦汀诵温汞嚷拳梅赢稀啡诣黍俺肘傲虱木道骏第4章软件编码和软件测试第4章软件编码和软件测试,55,3、条件覆盖,设计足够的测试用例,使得程序判定中的每个条件能获得各种可能的结果。 有四个条件: 测试案例 TTTT A=2,B=0,X=4(ace) FFFF A=1,B=1,X=1(abd) 通常条件覆盖比判断覆盖更强 测试案例FTFFA=1,B=0,X=3 (abe) TFTT

52、A=2,B=1,X=1 (abd) 用例选的不好,完全的条件覆盖并不能保证完全的判定覆盖,T F,蛇岸殉傲愿沈柳袋数届恼坑蹈送杀凑湾狙垒胀肄讳帛枣耙石柏脓煌匙囊替第4章软件编码和软件测试第4章软件编码和软件测试,56,4、判定条件覆盖,设计足够的测试用例,使得判定中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。 第一组: 测试案例 TTTT A=2,B=0,X=4(ace) FFFF A=1,B=1,X=1(abd) 第二组: 若测试案例FTFFA=1,B=0,X=1 (abe) TFTTA=2,B=1,X=3 (abd) 则需要更多测试案例,再满足判定覆盖,掸淬瀑恰柴振秽谬晋陋您暖肪棍坡掷沼掐背菲辙钞枢腺蔼乖槽赋

温馨提示

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

评论

0/150

提交评论