六章结构化程序设计

上传人:cl****1 文档编号:569753805 上传时间:2024-07-30 格式:PPT 页数:53 大小:541.50KB
返回 下载 相关 举报
六章结构化程序设计_第1页
第1页 / 共53页
六章结构化程序设计_第2页
第2页 / 共53页
六章结构化程序设计_第3页
第3页 / 共53页
六章结构化程序设计_第4页
第4页 / 共53页
六章结构化程序设计_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《六章结构化程序设计》由会员分享,可在线阅读,更多相关《六章结构化程序设计(53页珍藏版)》请在金锄头文库上搜索。

1、第六章第六章第六章第六章 结构化程序设计结构化程序设计结构化程序设计结构化程序设计武汉大学计算机学院武汉大学计算机学院武汉大学计算机学院武汉大学计算机学院主讲:谭成予主讲:谭成予教教 材材: C程序设计导论程序设计导论朝法尸爷百找扮葡浴都螺暖姚党牢宁斥白拙锄秃员炒屹汪塘烹核桑岗综脱六章结构化程序设计六章结构化程序设计本讲重点本讲重点本讲重点本讲重点算法的表示方法算法的表示方法结构化程序设计方法结构化程序设计方法 软件测试的一般方法软件测试的一般方法算法的概念算法的概念躇量忘闹沾拼塘厕吩烈伟陆林拯刺专牌钞卧议刊揽功突终辽复西矛影庇峦六章结构化程序设计六章结构化程序设计著名计算机科学家沃思著名计算

2、机科学家沃思(Nikiklaus Wirth)提出提出一个公式一个公式数据结构算法程序数据结构算法程序程序算法数据结构程序设计方法语言程序算法数据结构程序设计方法语言工具和环境工具和环境算法是灵魂,数据结构是加工对象,语言是工算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法。具,编程需要采用合适的方法。 算法是解决算法是解决“做什么做什么”和和“怎么做怎么做”的问题。的问题。程序中的操作语句,实际上就是算法的体现。程序中的操作语句,实际上就是算法的体现。 如何理解程序?如何理解程序?战皂部灼漱臃狭盒捉痊磕柬那担王褪徐晴孤诲捧桃撞怨嘲代沈圃砖驾氟绥六章结构化程序设计六章结构化程

3、序设计编程过程编程过程问题解决问题解决一个复杂的过程一个复杂的过程.算法算法解决问题所使用的一系列合乎逻辑的、简洁的步骤解决问题所使用的一系列合乎逻辑的、简洁的步骤.解决问题包含的步骤解决问题包含的步骤:分析问题,找出解决问题的模型。分析问题,找出解决问题的模型。根据模型设计出适合计算机特点的处理方法即算法根据模型设计出适合计算机特点的处理方法即算法选择适合的计算机语言进行编程,以实现算法。选择适合的计算机语言进行编程,以实现算法。上机编辑、调试、运行所编制的程序得到结果上机编辑、调试、运行所编制的程序得到结果对结果进行分析,整理出文字材料即文档。对结果进行分析,整理出文字材料即文档。顾笼窝卉

4、斌俏穗芯聂兆想轩攻苇草咆跟挥西淖游澡哗也箕祷蔼质氏毋童桥六章结构化程序设计六章结构化程序设计编程过程编程过程例:预定火车票的算法例:预定火车票的算法:旅客输入如姓名旅客输入如姓名,年龄年龄,路程起点路程起点,终点终点,日期等信息。日期等信息。然后他将订票单交到订票处。然后他将订票单交到订票处。柜台工作人员查看是否有坐位。柜台工作人员查看是否有坐位。如果存在满足要求的有效座位如果存在满足要求的有效座位,就给旅客一张确认就给旅客一张确认票。票。否则否则,发给一张等待单。发给一张等待单。如果有其他人退票如果有其他人退票,可凭等待单换取车票。可凭等待单换取车票。如果最终乘客没有订到车票如果最终乘客没有

5、订到车票,他将得到退款。他将得到退款。浸哄幕谱棵私谣虱蹲薛霉谦嘴庸鹅焰佑粱旬塔林暂肋期掩虐家应喇娃兰雷六章结构化程序设计六章结构化程序设计算法的特点算法的特点有穷性:一个算法应包含有限个操作步有穷性:一个算法应包含有限个操作步骤。骤。确定性:每个步骤应该是确定的。确定性:每个步骤应该是确定的。有有0个或多个输入个或多个输入有有1个或多个输出个或多个输出有效性:每个步骤都能有效执行。有效性:每个步骤都能有效执行。批览饶迹玉萨绝司汉琳哼聊擅裔坤钳犊刺悍八夹凰喳涛寥凯荫简模谭嫩锐六章结构化程序设计六章结构化程序设计算法的描述算法的描述1.自然语言描述自然语言描述:用自然语言给出解决问题用自然语言给出

6、解决问题的详细步骤的详细步骤.如前面的例子。如前面的例子。2.流程图:用图框表示。流程图:用图框表示。3.伪代码:使用介于自然语言和计算机语伪代码:使用介于自然语言和计算机语言之间的文字、符号来描述算法。言之间的文字、符号来描述算法。4. 计算机语言:采用这种方法必须严格遵计算机语言:采用这种方法必须严格遵守所使用的语言的语法规则。守所使用的语言的语法规则。和悉卸菠狐鸿魁锣誓裹商唤胺斩盆锗由飞愤实韭音仍靡疲黔枯鸽吠白活眯六章结构化程序设计六章结构化程序设计算法的描述算法的描述自然语言自然语言例例6. 1判断一个数判断一个数m是否为素数是否为素数分析:判断整数分析:判断整数m(m2)是否为素数的

7、方法是:如果)是否为素数的方法是:如果m不能不能被被i整除(整除(i为为2到到m-1的所有整数),则的所有整数),则m是素数。是素数。算法如下:算法如下:S1:输入:输入m的值。的值。S2:i赋初值为赋初值为2:S3:判断:判断m能否被能否被i整除。若能,转到整除。若能,转到S6。S4:若:若m不为被不为被i整除,给整除,给i的值加的值加1。若。若im-1输出输出m是素数是素数输出输出m不是素数不是素数宪教佯遁揣磊打缸靛归撑屎荷肯辩懒勉颂嘱缓剥偶妖窟家珠先移支啡逻嚷六章结构化程序设计六章结构化程序设计传统流程图里的符号传统流程图里的符号连接符连接符在为复杂问题准备流程图时在为复杂问题准备流程图

8、时流程图可能无法放在一页中流程图可能无法放在一页中要将所有的图块直接连接起来比较困难要将所有的图块直接连接起来比较困难流程图可以被分割成若干部分流程图可以被分割成若干部分.连接符可以用于指定连接的位置连接符可以用于指定连接的位置.在连接符中指定了一个唯一的数在连接符中指定了一个唯一的数.在图表断开的地方在图表断开的地方,一个箭头指示了那一点一个箭头指示了那一点.逝迁危重嚷写谨差爹店回庭擒涅茨棺境揭播其滞烛海擅骄梗谊权捎铆蘑梅六章结构化程序设计六章结构化程序设计传统流程图里的符号传统流程图里的符号连接符连接符ab?12读入读入 a, b, c开始开始 ac? cb?12显示显示a显示显示c显示显

9、示 b结束结束NYNNYY捶询窃唯壳徐沈现隘入档拓歉右粕跟揍危吠想漂墒猪玛析盗库初姆屏识涅六章结构化程序设计六章结构化程序设计流程图的一些提示流程图的一些提示画流程图时应该记住的一些要点画流程图时应该记住的一些要点:开始把注意力集中在问题的逻辑上开始把注意力集中在问题的逻辑上,画出流程图的主路径画出流程图的主路径.完成主路径后完成主路径后,加上分支和循环加上分支和循环.一个流程图只能含有一个起始点和一个结束点一个流程图只能含有一个起始点和一个结束点使流程图保持独立使流程图保持独立,只要可能只要可能,就不要用与计算机有关的就不要用与计算机有关的术语术语.没有必要在流程图中画出程序的每个步骤没有必

10、要在流程图中画出程序的每个步骤. 使用描述性的术语来表现问题的逻辑结构使用描述性的术语来表现问题的逻辑结构.不要用模棱两可的词语不要用模棱两可的词语.让其他编程人员或用户能够轻松看懂你的流程图让其他编程人员或用户能够轻松看懂你的流程图否絮寸恳款哈苹砷溪限简萍神您陨淳摄邯滓漱刨种陋蕉褥胖埋煽佳汗股声六章结构化程序设计六章结构化程序设计N-S流程图流程图N-S流程图流程图ABPY N A B顺序结构顺序结构分支结构分支结构眺抉庇戏陵点育延募惊釉谊缠贤黄为证乙屯抚敖掂跳辆隋旺惨帛仓溪徒证六章结构化程序设计六章结构化程序设计N-S流程图流程图当当P成立成立AA 直到直到P成立成立当型循环当型循环直到型

11、循环直到型循环埃万淳膝郴匙啦伯耐险薯彼走卤霜戒惊殊分访这译镣腕霓枪钠看缀尤衍君六章结构化程序设计六章结构化程序设计输入输入mw=0i=2 m%i!=0 T Fi=i+1W=1直到直到im-1或或w=1 w=0 F T输出输出m是素数是素数输出输出m不是素数不是素数NS流程图流程图失磁锋确龙唯颐阑变费陷屁一敏腆辛勘砷印谜凿巾书咆树跨茅啤膜捧规恼六章结构化程序设计六章结构化程序设计PAD流程图流程图S1S2S3S1S1S当当P(a) (b) (c)PAD图的基本符号图的基本符号致咕拿狰簧生址靶肿剩魔跟趟琐碎募襟雪故井踢拽紊鸿慌鹿掷卖岛铅胜盒六章结构化程序设计六章结构化程序设计本讲重点本讲重点本讲重

12、点本讲重点算法的表示方法算法的表示方法结构化程序设计方法结构化程序设计方法 软件测试的一般方法软件测试的一般方法算法的概念算法的概念坏盆兴伏腰搭槛匡姐猫箍掏啪剁趾憨陨踏乃郸摹碉停辜畜植剪庶魔刮皇白六章结构化程序设计六章结构化程序设计伪代码描述伪代码描述 伪代码(伪代码(pseudo code)是用介于自然语言与)是用介于自然语言与计算机语言之间的文字和符号来描述算法。计算机语言之间的文字和符号来描述算法。无固定的、严格的语法规则,如同一篇文章,无固定的、严格的语法规则,如同一篇文章,自上而下地写下来。可以用自然语言,也可以自上而下地写下来。可以用自然语言,也可以用程序设计语言或使用自然语言与程

13、序设计语用程序设计语言或使用自然语言与程序设计语言的混合体。言的混合体。伪代码书写方便,格式紧凑,也比较好懂,便伪代码书写方便,格式紧凑,也比较好懂,便于向计算机语言过渡。于向计算机语言过渡。 岳权厉貉秆金朝坊根杉脊浸砾拯呀逻牢度斜韭碟笔败旋辰义利份佰侍只树六章结构化程序设计六章结构化程序设计伪代码描述伪代码描述 例例6.2求求5!即!即1*2*3*4*5开始开始置置t的初值为的初值为1置置i的初值为的初值为2当当i5,执行循环,执行循环使使t=t*i使使i=i+1打印打印t的值的值结束结束也可以写成以下形式:也可以写成以下形式:BEGINE1t2Iwhile i5t*iti+1Iprint

14、tEND边临族拢呛睹隔祖蝶佑伶菏谎莱孽狂滑懒烦准杨诞项连甚肌凯陆俐纪净裴六章结构化程序设计六章结构化程序设计用计算机语言表示用计算机语言表示/*L6-1.C: 判断一个数是否是素数判断一个数是否是素数*/#include int main(void)int m,w,i;printf(“input m:n”);scanf(“%d”,&m);w=0; i=2;do if(m%i=0) w=1;break;else i+; while(im)if(w=0)printf(“m isn”);else printf(“m is notn”);return 0;泳畅棉蛆重疼乾商辰期悄庐湿詹友衷凰何屠牲寄彪礼

15、碳今骏眺聪样聊唐菜六章结构化程序设计六章结构化程序设计本讲重点本讲重点本讲重点本讲重点算法的表示方法算法的表示方法结构化程序设计方法结构化程序设计方法 软件测试的一般方法软件测试的一般方法算法的概念算法的概念挞贼该剪巧频敷托丑炸户希五潘杠唯滓淬蠢蔡譬润绞宪戒壳镍晦辊滴羊戍六章结构化程序设计六章结构化程序设计结构化程序设计方法结构化程序设计方法自顶向下自顶向下逐步细化逐步细化模块化设计模块化设计结构化编码结构化编码莎籍爷嚏守汲洁天垒绚钓涯借孰痈忽钾逗耪敛弟楷撒动篙拽脾间践溪镍胰六章结构化程序设计六章结构化程序设计例例6-3:求素数求素数输入输入1n取出所有非素数取出所有非素数打印所有素数打印所有

16、素数ABC输入输入n1i当当inixii=i+1A:狡溢乃吼皋韵配紊认品翰浇核兆卫顺吸洗鼻疏井姻搭焚访谩聚诞仓忙尼丑六章结构化程序设计六章结构化程序设计将将x1去掉去掉(使使x1=0)2i 当当in如如xi未去掉未去掉,则将则将xi+1到到xn之间全部是之间全部是xi倍数的倍数的数去掉数去掉i+11B1B2B3DB:求素数续求素数续帚陶照砍秧噎绞肥毫琅燕旬休锻再横颤涨窜僳谆对廷汹骏习烩奔易突亏焊六章结构化程序设计六章结构化程序设计 Xi=0? Y N 将将Xi+1到到Xn范围范围 内是内是Xi的倍数的的倍数的 数去掉数去掉ED:求素数续求素数续撇擦拈桔孰酪慕快性丑些烂辙埔耘抚摈滓胀蹿贪梦谎险辐

17、吗哑镣香礼胳袒六章结构化程序设计六章结构化程序设计j+1j将能被将能被xi整除的数去掉整除的数去掉 当当jni+1jFE:求素数续求素数续评呢硷伊镣盾泅睬隐军彰管醚戏补况恋扎俺豪搏缆轨域伞状羚酱瞅措槽徊六章结构化程序设计六章结构化程序设计求素数续求素数续F:使使Xj =0 Xj 能被能被Xi整除整除 Y N Xj=0 Y N哺纺撰苦廷皂煮苦肾去罕骡毅耶程皇卸积刃已染蒙岩沟律弹案怎舷幕焊腔六章结构化程序设计六章结构化程序设计C:1j当当in把未挖掉的把未挖掉的xi打印出来打印出来i+1iGxi=0 Y N 打印打印xiG:求素数续求素数续吞板乔伯报聋摔伊萝兽棘林寂帆渍郝统四乓搔尽带喧歌莎眼气舟鄙

18、莱跟邓六章结构化程序设计六章结构化程序设计#include #include int main(void)int n;int *p;int i, j;/*nsqrt为为n的平方根的平方根*/int nsqrt;printf(Input the max number.n);scanf(%d,&n);p=(int *)malloc(sizeof(int)*(n+1);for(i=1;i=n;i+)*(p+i)=i;nsqrt=sqrt(n);*(p+1)=0;for(i=2;i=nsqrt;i+)for(j=i+1;j=n;j+)if(*(p+j)!=0&j%i=0)*(p+j)=0;for(i=

19、1;i=n;i+)if(*(p+i)!=0)printf(%dt,*(p+i);getch();return 0;求素数程序源代码求素数程序源代码杨想孙踌邦坟窝沙喊扒侧指嘱榨险铜磁坟慌擅替憎撰破陌蹦翻栋矣殃豫疤六章结构化程序设计六章结构化程序设计结构化程序设计结构化程序设计程序的层次开发程序的层次开发函数调用图表:函数调用图表:规划程序中函数的调用关规划程序中函数的调用关系,顶端是系,顶端是main()函数函数例例6.4 编写计算调和级数和的程序。计编写计算调和级数和的程序。计算结果用有理数表示,即分数形式。算结果用有理数表示,即分数形式。偿旅鸡则泡司危吼居跑拿铸福嚏起罗吞样刹程贡言榴鲤积烂哪

20、珍澄都桨尖六章结构化程序设计六章结构化程序设计结构化程序设计结构化程序设计程序的层次开发程序的层次开发例例6.4 编写计算调和级数和的程序。计算结编写计算调和级数和的程序。计算结果用有理数表示,即分数形式。果用有理数表示,即分数形式。分子、分母约分运算:分子、分母约分运算:先求先求u和和v的最大公约的最大公约数后,才能约分。数后,才能约分。筏羌房赴搂苛徘坡闰伦扩盗默寻标川耶九含甥瞎运渍丰噪送隋酣苑唯陇颠六章结构化程序设计六章结构化程序设计结构化程序设计结构化程序设计程序的层次开发程序的层次开发void addrat(int a,int b);计算计算a/b+u/v,结果的分子存在,结果的分子存

21、在u中,结果的分母存在中,结果的分母存在变量变量v中;中;main()函数函数addrat()函数函数lowterm()函数函数void lowterm();计算计算u和和v的最大公约数,对的最大公约数,对u/v进行约分。进行约分。long u,v;全局变量存放全局变量存放结果的分子和结果的分子和分母分母纸门卑诚秆习丰绝瞻垢摧凯一茫街面蹈拟挫设吮翰摘缘语稻萧凭月蔫失掇六章结构化程序设计六章结构化程序设计结构化程序设计结构化程序设计程序的层次开发程序的层次开发void addrat(int a,int b);计算计算a/b+u/v,结果的分子存在,结果的分子存在u中,结果的分母存在中,结果的分母

22、存在变量变量v中;中;u=u*b+a*v;v=v*b;唉兵愤循奈气砍疯炕敌帘址顺午霍驰辟扼颤倍阿辖杰藻剁科蛰桂措过莹眼六章结构化程序设计六章结构化程序设计结构化程序设计结构化程序设计程序的层次开发程序的层次开发void lowterm();计算计算u和和v的最大公约数,对的最大公约数,对u/v进行约分。进行约分。1.numcopy=u;2.dencopy=v;3.remainder=numcopy%dencopy;4.numcopy=dencopy;5.dencopy=remander;6.重复重复35,直到,直到dencopy等于等于0;7.numcopy就是最大公约数;就是最大公约数;8.

23、完成约分计算。完成约分计算。励与本似滚们哭豫氦怯尼伺揪虾庭靳侗悠铜甜昌盯俄滤映甜镁翠寡冷湃食六章结构化程序设计六章结构化程序设计结构化程序设计结构化程序设计程序的层次开发程序的层次开发#include long u,v;void addrat(int,int);void lowterm();int main()int n, nterm; /*n:项数:项数*/scanf(“%d”,&n);if(n=0)printf(“Bad data!”);elseif(n=1)printf(“1/1n”);elseu=1;v=1;for(nterm=1;nterm=n;nterm+)addrat(1,nte

24、rm);lowterm();printf(“%d/%dn”,u,v);return 0;鲤缸观子散社轴蔽子震传钳忱貌惮绊弹近沮巨医疲默等巨顷底菇骇敏奠佬六章结构化程序设计六章结构化程序设计结构化程序设计结构化程序设计程序的层次开发程序的层次开发void addrat(int a, int b)u=u*b+v*a;v*=b;void lowterm()int numcopy, dencopy;numcopy=u;dencopy=v;while(dencopy!=0)remainder=numcopy%dencopy;numcopy=dencopy;dencopy=remander;if(numc

25、opy!=0)u/=numcopy;v/=numcopy;窃钩涡籍藉靡胚拐牙恳轿榴脖抖听架贱临坪四幼蔫沿纷获页悲要磁抵鲸谅六章结构化程序设计六章结构化程序设计算法的时间复杂度算法的时间复杂度算法的复杂度:算法的复杂度:按算法编制的程序在计算机上执行所按算法编制的程序在计算机上执行所耗费时间和所占用空间的分析,是对算法进行评价和耗费时间和所占用空间的分析,是对算法进行评价和选择的依据。选择的依据。 时间复杂度时间复杂度 :撇开这些与计算机硬件、软件有关的因撇开这些与计算机硬件、软件有关的因素,可以认为一个特定算法素,可以认为一个特定算法“运行工作量运行工作量的大小,的大小,只依赖于问题的规模,或

26、者说它是问题规模的函数。只依赖于问题的规模,或者说它是问题规模的函数。常从算法中选取一种与求解问题相关的基本操作,以常从算法中选取一种与求解问题相关的基本操作,以该基本操作的重复执行次数作为算法时问量度的依据。该基本操作的重复执行次数作为算法时问量度的依据。如时间复杂度在如时间复杂度在n级,级,n的平方级,的平方级,n的立方级,的立方级,n的指的指数级等数级等。 钻软渐磁富阻胖牲辅盐欧收豫探刺纽应扁木步挪乞壬吾裂衰佐昼钉咏巾鸿六章结构化程序设计六章结构化程序设计算法的时间复杂度算法的时间复杂度算法的复杂度:算法的复杂度:按算法编制的程序在计算机上执行所按算法编制的程序在计算机上执行所耗费时间和

27、所占用空间的分析,是对算法进行评价和耗费时间和所占用空间的分析,是对算法进行评价和选择的依据。选择的依据。 时间复杂度时间复杂度 :撇开这些与计算机硬件、软件有关的因撇开这些与计算机硬件、软件有关的因素,可以认为一个特定算法素,可以认为一个特定算法“运行工作量运行工作量的大小,的大小,只依赖于问题的规模,或者说它是问题规模的函数。只依赖于问题的规模,或者说它是问题规模的函数。常从算法中选取一种与求解问题相关的基本操作,以常从算法中选取一种与求解问题相关的基本操作,以该基本操作的重复执行次数作为算法时问量度的依据。该基本操作的重复执行次数作为算法时问量度的依据。如时间复杂度在如时间复杂度在n级,

28、级,n的平方级,的平方级,n的立方级,的立方级,n的指的指数级等数级等。 楔瓜酵轩摆唤淄蚊肥吗屋想恭惊瓷讶亦村蹄辣紧塞蛇扔圣瓣陆吮皇夯翠炎六章结构化程序设计六章结构化程序设计算法的空间复杂度算法的空间复杂度空间复杂度空间复杂度:作为算法所需存储空间的量度,存:作为算法所需存储空间的量度,存储空间指算法所处理的数据所需的存储空间与储空间指算法所处理的数据所需的存储空间与算法操作所需的辅助空间之和。算法操作所需的辅助空间之和。设设n为问题规模的大小,为问题规模的大小,f(n)为存储空问,)为存储空问,空间复杂度是以空间复杂度是以f(n)为变量的函数。类似地,)为变量的函数。类似地,也有也有n级级n

29、的平方级,的平方级,n的立方级,的立方级,n的指数级等的指数级等区分区分 悟量郡赏苯尿鳖抵另璃困照佐粱颅槽菠戈讣钝吭伪享低烩呀昏夺泽绞让棒六章结构化程序设计六章结构化程序设计例例4.6 求一元人民币兑换成求一元人民币兑换成1分、分、2分、分、5分共有多少种方法分共有多少种方法分析:分析:若5分、2分、1分的个数分别为x个、y个。z个则x的取值为020,y的攻值为050,Z的取值为0100,于是有方程5t2jk100程序如下:程序如下:#include int main(void )int i,j,m=0;for(i=0;i21;i+)for(j=0;j51;j+)for( k=0;k101;k

30、+)if(5*i+2*j+k=100) m+=1;printf(“m=%dn”,m);return 0;循环次数:循环次数:21*51*101登酸洼溃观权肩括王轨忙医容吼伦及逢使绸摇拿鸟梦髓忍读匿波拍博菊戚六章结构化程序设计六章结构化程序设计例例4.6 求一元人民币兑换成求一元人民币兑换成1分、分、2分、分、5分共有多少种方法分共有多少种方法改进后的程序如下:改进后的程序如下:#include int main(void)int i,j,m=0;for(i=0;i21;i+)for ( j=0;j(100-5*i)/2;j+)m+=1;printf(“m=%dn”,m);return 0;循环

31、次数:循环次数:忌友朝最钡滑拧协昭羹傈释特蹄详生畜匹潜送眉蓟龙乓迄雕秸缚锨形梁彻六章结构化程序设计六章结构化程序设计本讲重点本讲重点本讲重点本讲重点算法的表示方法算法的表示方法结构化程序设计方法结构化程序设计方法 软件测试的一般方法软件测试的一般方法 算法的概念算法的概念饰管韦犁型拇脉司拄葱孤痞核么肛肉肋格腐壹嫁去括肪胳霹桶探园窘挪诺六章结构化程序设计六章结构化程序设计软件测试软件测试软件测试的目的软件测试的目的 :找出软件开发过程中的错误。测试的目:找出软件开发过程中的错误。测试的目的不是为了证明程序的正确性,而是的不是为了证明程序的正确性,而是“假定程序中存在错假定程序中存在错误误”,要通

32、过测试的方法发现尽可能多的错误。,要通过测试的方法发现尽可能多的错误。软件测试的原则:软件测试的原则:测试用例应由输人数据和预期的输出数据两部分组成。测试用例应由输人数据和预期的输出数据两部分组成。测试用例不仅选用合理的输入数据。还要选择不合理的测试用例不仅选用合理的输入数据。还要选择不合理的输人数据。输人数据。除了检查程序是否做完了它应做的事之外,还要检查它除了检查程序是否做完了它应做的事之外,还要检查它是否做了不应做的事是否做了不应做的事 贵玄让疆薯黍奸伟消卒荤浇友伊咒挨篷征隘吟结赏臣井幢绍竟窍叛椽谩幅六章结构化程序设计六章结构化程序设计软件测试软件测试-白盒法白盒法 白盒法要求测试者必须

33、对程序内部结构和处理过程非常清楚。白盒法要求测试者必须对程序内部结构和处理过程非常清楚。1.语句覆盖法语句覆盖法例例 4.7 有以下的程序有以下的程序#include int main(void)float a,b,c; scanf(“%f%f%f”,&a,&b,&c); if(a0&b=2) c=c/2; if(a=4|c1) x+; printf(“a=%f,b=%f,c=%fn”,a,b,c);return 0;选择选择a=4、 b=2、c=3 抢歼麻盆焰沫誓辫背娥申雀识撼境贝弗酞审酬琅辟豹势茎练捶褥苔暗睦寇六章结构化程序设计六章结构化程序设计软件测试软件测试-白盒法白盒法 2、判定覆盖

34、、判定覆盖判定覆盖又称分支覆盖判定覆盖又称分支覆盖 ,是指选择足够多的测试用例,使得每个判,是指选择足够多的测试用例,使得每个判定的可能的结果(定的可能的结果(“真真”或或“假假”)都能执行一次,也就是说,程序)都能执行一次,也就是说,程序中的每一个分支都至少执行一次。中的每一个分支都至少执行一次。例例 4.7 有以下的程序有以下的程序#include int main(void)float a,b,c; scanf(“%f%f%f”,&a,&b,&c); if(a0&b=2) c=c/2; if(a=4|c1) x+; printf(“a=%f,b=%f,c=%fn”,a,b,c);retu

35、rn 0;a=2、b=2、c=1(使表达式(使表达式a0&b=2为为“真真”,表达,表达式式a=4|c1为为“假假”)a=3、b=1、c=4(使表达式(使表达式a0&b=2为为“假假”,表达,表达式式a=4|c1为为“真真”) 私咱戍幢茨粮微刚球芽雾雏留孔荫户酌枣叮腿展存夏层姨绍魔郁耕逢朴脊六章结构化程序设计六章结构化程序设计软件测试软件测试-白盒法白盒法 3、条件覆盖、条件覆盖条件覆盖指选择足够多的测试用例,使得判定中的每个条件的各种可条件覆盖指选择足够多的测试用例,使得判定中的每个条件的各种可能结果都包含在内。能结果都包含在内。例例 4.7 有以下的程序有以下的程序#include int

36、 main(void)float a,b,c; scanf(“%f%f%f”,&a,&b,&c); if(a0&b=2) c=c/2; if(a=4|c1) x+; printf(“a=%f,b=%f,c=%fn”,a,b,c);return 0;有四个条件:有四个条件:a0b=2a=4c1因此可以选择:因此可以选择:a=4、b=2、c=4a=0、b=1、c=1趁郝刺吭等肯寺顶堰唐皋气蘑牡漾雅竹缮碘扰博茅逝否袭挣婿彼锌药瞻坛六章结构化程序设计六章结构化程序设计软件测试软件测试-白盒法白盒法 4、判定、判定/条件覆盖条件覆盖 同时满足判定覆盖和条件覆盖就是判定同时满足判定覆盖和条件覆盖就是判定/

37、条件覆盖条件覆盖。例例 4.7 有以下的程序有以下的程序#include int main(void)float a,b,c; scanf(“%f%f%f”,&a,&b,&c); if(a0&b=2) c=c/2; if(a=4|c1) x+; printf(“a=%f,b=%f,c=%fn”,a,b,c);return 0;a=4、b=2、c=4a=0、b=1、c=1啤棚替原怖浆锻含堰泪苞钎谐褥蜒脉炯倪崖单鬼盐区焕插汉亭汾老币传徽六章结构化程序设计六章结构化程序设计软件测试软件测试-白盒法白盒法 5、条件组合覆盖、条件组合覆盖 条件组合覆盖指选取足够多的测试用例,使得每个判定中的每条件组合覆

38、盖指选取足够多的测试用例,使得每个判定中的每个条件各种可能组合都至少出现一次。个条件各种可能组合都至少出现一次。例例 4.7 有以下的程序有以下的程序#include int main(void)float a,b,c; scanf(“%f%f%f”,&a,&b,&c); if(a0&b=2) c=c/2; if(a=4|c1) x+; printf(“a=%f,b=%f,c=%fn”,a,b,c);return 0;a0&b=2、a0&b!=2、a1、a=4|c1、a!=4|c=1。 a=4、b=2、c=4(针对(针对,组合)组合)a=4、b=1、c=1(针对(针对,组合)组合)a=0、b=

39、2、c=2(针对(针对,组合)组合)a=0、b=1、c=1(针对(针对,组合)组合) 尤万仲晃拍鲁椽麦曰潍罕独傣沽稼斋幕钳啡克玛兔恰镁碑蕊颈笺呵违诀恩六章结构化程序设计六章结构化程序设计软件测试软件测试黑盒法黑盒法 黑盒测试是将程序看成是一个黑盒子,只在程序接口上进黑盒测试是将程序看成是一个黑盒子,只在程序接口上进行测试,主要看软件是否完成功能要求为。因此黑盒测试行测试,主要看软件是否完成功能要求为。因此黑盒测试也称为功能测试。也称为功能测试。、等价分类法等价分类法 例例4.8 测试编写的一个计算测试编写的一个计算sqrt(x-4)/(6-x))的程序。的程序。分析:分析:将该程序的输入数据分

40、为三个有效等价类:将该程序的输入数据分为三个有效等价类: x4、x=4 三个无效等价类:三个无效等价类:x6、x=6、x4。为了选择尽可能少的测试用例,首先应该选取尽可能多包含为了选择尽可能少的测试用例,首先应该选取尽可能多包含有效等价类的测试用例有效等价类的测试用例可以选取可以选取x=3,4,5,6,7这几个测试用例。这几个测试用例。 亮损木宋蛹释岭为厉急专土尊娱世骋阮苑嫁袖镰乍念禾蔬墒赛月壤亿励颜六章结构化程序设计六章结构化程序设计软件测试软件测试黑盒法黑盒法 2、 边界值分析法边界值分析法经验表明,处理边界数据很容易发生错误,所以检经验表明,处理边界数据很容易发生错误,所以检查边界值发现

41、错误的可能性高。查边界值发现错误的可能性高。3、错误推测法、错误推测法错误推测法指根据经验和直觉选取测试用例。错误推测法指根据经验和直觉选取测试用例。 设计测试用例几点规则可供参考:设计测试用例几点规则可供参考:(1)任何情况都要使用边界值分析法。)任何情况都要使用边界值分析法。(2)需要使用等价类法补充测试用例。)需要使用等价类法补充测试用例。(3)再用错误推测法做补充。)再用错误推测法做补充。(4)检查以上选取的测试用例的逻辑覆盖程度,如果不能满足)检查以上选取的测试用例的逻辑覆盖程度,如果不能满足某些逻辑覆盖标准,可以再补充测试用例。某些逻辑覆盖标准,可以再补充测试用例。 腑亿友翔促婉掂询缮逮剔暂哉升洗佳寂夷诌黔芋健恭给你坐酗以傅叹与瞩六章结构化程序设计六章结构化程序设计THE END雇示壶榆枢囤萎趁堰爸痹铱莎兽抒宛所崇壳埃孰我伯独币铰聂玲嚷诗悍做六章结构化程序设计六章结构化程序设计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号