c语言大学实用教程第5章函数.ppt

上传人:wuy****n92 文档编号:70107007 上传时间:2023-01-16 格式:PPT 页数:79 大小:447.50KB
返回 下载 相关 举报
c语言大学实用教程第5章函数.ppt_第1页
第1页 / 共79页
c语言大学实用教程第5章函数.ppt_第2页
第2页 / 共79页
点击查看更多>>
资源描述

《c语言大学实用教程第5章函数.ppt》由会员分享,可在线阅读,更多相关《c语言大学实用教程第5章函数.ppt(79页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第第第5 5 5 5章章章章 函数与程序结构函数与程序结构函数与程序结构函数与程序结构12023/1/162内容提要内容提要 函数定义、函数调用、函数原型、函数返回值函数定义、函数调用、函数原型、函数返回值函数定义、函数调用、函数原型、函数返回值函数定义、函数调用、函数原型、函数返回值难点:函数的参数传递与返回值难点:函数的参数传递与返回值难点:函数的参数传递与返回值难点:函数的参数传递与返回值 全局变量、自动变量、静态变量、寄存器变量全局变量、自动变量、静态变量、寄存器变量全局变量、自动变量、静态变量、寄存器变量全局变量、自动变量、静态变量、寄存器变量难点:变量的作用域与存储类型难点:变量

2、的作用域与存储类型难点:变量的作用域与存储类型难点:变量的作用域与存储类型 结构设计与模块化结构设计与模块化结构设计与模块化结构设计与模块化 代码风格问题代码风格问题代码风格问题代码风格问题MoeCurlyLarry2023/1/163程序设计的艺术程序设计的艺术程序设计方式程序设计方式A.A.诸葛亮型的主函数诸葛亮型的主函数诸葛亮型的主函数诸葛亮型的主函数19861986年年年年IBMIBM在在在在OS/360OS/360的研究结果:大多数有错误的研究结果:大多数有错误的研究结果:大多数有错误的研究结果:大多数有错误的函数都大于的函数都大于的函数都大于的函数都大于500500行行行行B.B.

3、功能单一,规模较小的若干个函数各司其职功能单一,规模较小的若干个函数各司其职功能单一,规模较小的若干个函数各司其职功能单一,规模较小的若干个函数各司其职19911991年对年对年对年对148,000148,000行代码的研究表明:小于行代码的研究表明:小于行代码的研究表明:小于行代码的研究表明:小于143143行行行行的函数比更长的函数更容易维护的函数比更长的函数更容易维护的函数比更长的函数更容易维护的函数比更长的函数更容易维护2023/1/164程序设计的艺术程序设计的艺术 三国演义三国演义三国演义三国演义中有这样一段描写:中有这样一段描写:中有这样一段描写:中有这样一段描写:懿问曰:懿问曰

4、:懿问曰:懿问曰:“孔明寝食及事之烦简若何?孔明寝食及事之烦简若何?孔明寝食及事之烦简若何?孔明寝食及事之烦简若何?”使者曰:使者曰:使者曰:使者曰:“丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,日不过数升。日不过数升。日不过数升。日不过数升。”懿顾谓诸将曰:懿顾谓诸将曰:懿顾谓诸将曰:懿顾谓诸将曰:“孔明食少事烦,孔明食少事烦,孔明食少事烦,孔明食少事烦,其能久乎?其能久乎?其能久乎?其能久乎?”此话音落不久,诸葛亮果然病故于五丈原。此话音落不久,诸葛亮果然病故

5、于五丈原。此话音落不久,诸葛亮果然病故于五丈原。此话音落不久,诸葛亮果然病故于五丈原。“事无巨细事无巨细事无巨细事无巨细”,“事必躬亲事必躬亲事必躬亲事必躬亲”管理学的观点是极其排斥这种做法的,认为工作必管理学的观点是极其排斥这种做法的,认为工作必管理学的观点是极其排斥这种做法的,认为工作必管理学的观点是极其排斥这种做法的,认为工作必须分工,各司其职须分工,各司其职须分工,各司其职须分工,各司其职其中的思想,在程序设计里也适用其中的思想,在程序设计里也适用其中的思想,在程序设计里也适用其中的思想,在程序设计里也适用 2023/1/165程序设计的艺术程序设计的艺术 结构化程序设计有两大最高级的

6、艺术结构化程序设计有两大最高级的艺术结构化程序设计有两大最高级的艺术结构化程序设计有两大最高级的艺术算法设计艺术算法设计艺术算法设计艺术算法设计艺术结构设计艺术结构设计艺术结构设计艺术结构设计艺术 C C语言为程序的结构提供了两样武器语言为程序的结构提供了两样武器语言为程序的结构提供了两样武器语言为程序的结构提供了两样武器函数和模块函数和模块函数和模块函数和模块 函数函数函数函数(functionfunction)是结构设计的最基本单位)是结构设计的最基本单位)是结构设计的最基本单位)是结构设计的最基本单位“一个程序应该是轻灵自由的,它的一个程序应该是轻灵自由的,它的一个程序应该是轻灵自由的,

7、它的一个程序应该是轻灵自由的,它的子过程子过程子过程子过程就象串就象串就象串就象串在一根线上的珍珠。在一根线上的珍珠。在一根线上的珍珠。在一根线上的珍珠。”Geoffrey JamesGeoffrey James的的的的编程之道编程之道编程之道编程之道 2023/1/166数学函数数学函数(1)(1)自变量自变量因变量因变量函数名函数名2023/1/167数学函数数学函数(2)(2)一个自变量,一个因变量一个自变量,一个因变量两个两个自变量,一个因变量自变量,一个因变量2023/1/168数学函数数学函数(3)(3)自变量自变量因变量因变量2023/1/169数学函数数学函数(4)(4)一个变

8、量一个变量二个变量二个变量N个变量个变量一个变量一个变量二个变量二个变量N个变量个变量自变量自变量与与因变量因变量的关系的关系2023/1/1610数学函数数学函数(5)(5)集合A关系集合B2023/1/1611程序设计中的函数程序设计中的函数 程序设计中的函数不局限于计算程序设计中的函数不局限于计算程序设计中的函数不局限于计算程序设计中的函数不局限于计算计算类,如打印阶乘表的程序计算类,如打印阶乘表的程序计算类,如打印阶乘表的程序计算类,如打印阶乘表的程序判断推理类,如排序、查找判断推理类,如排序、查找判断推理类,如排序、查找判断推理类,如排序、查找2023/1/1612用函数解决问题的要

9、点用函数解决问题的要点 分而治之分而治之分而治之分而治之函数把较大的任务分解成若干个较小的任务,并提炼出函数把较大的任务分解成若干个较小的任务,并提炼出函数把较大的任务分解成若干个较小的任务,并提炼出函数把较大的任务分解成若干个较小的任务,并提炼出公用任务公用任务公用任务公用任务 复用复用复用复用程序员可以在其他函数的基础上构造程序,而不需要从程序员可以在其他函数的基础上构造程序,而不需要从程序员可以在其他函数的基础上构造程序,而不需要从程序员可以在其他函数的基础上构造程序,而不需要从头做起头做起头做起头做起 信息隐藏信息隐藏信息隐藏信息隐藏设计得当的函数可以把具体操作细节对程序中不需要知设计

10、得当的函数可以把具体操作细节对程序中不需要知设计得当的函数可以把具体操作细节对程序中不需要知设计得当的函数可以把具体操作细节对程序中不需要知道它们的那些部分隐藏掉,从而使整个程序结构清楚道它们的那些部分隐藏掉,从而使整个程序结构清楚道它们的那些部分隐藏掉,从而使整个程序结构清楚道它们的那些部分隐藏掉,从而使整个程序结构清楚MoeCurlyLarry2023/1/1613C中的函数中的函数(Function)说明说明说明说明:L一个源程序文件由一个或多个函数组成。一个源程序文件由一个或多个函数组成。一个源程序文件由一个或多个函数组成。一个源程序文件由一个或多个函数组成。LC C程序的执行从程序的

11、执行从程序的执行从程序的执行从mainmain函数开始,调用其他函数后流程函数开始,调用其他函数后流程函数开始,调用其他函数后流程函数开始,调用其他函数后流程回到回到回到回到mainmain函数,在函数,在函数,在函数,在mainmain函数中结束整个程序运行。函数中结束整个程序运行。函数中结束整个程序运行。函数中结束整个程序运行。L所有函数都是平行的,即函数定义时是互相独立的,所有函数都是平行的,即函数定义时是互相独立的,所有函数都是平行的,即函数定义时是互相独立的,所有函数都是平行的,即函数定义时是互相独立的,一个函数并不从属于另一个函数。一个函数并不从属于另一个函数。一个函数并不从属于另

12、一个函数。一个函数并不从属于另一个函数。2023/1/1614例例2.1:一个简单的:一个简单的C程序例子程序例子#includeinclude /*/*函数功能函数功能函数功能函数功能:计算两个整数相加之和计算两个整数相加之和计算两个整数相加之和计算两个整数相加之和 入口参数入口参数入口参数入口参数:整型数据整型数据整型数据整型数据a a和和和和b b 返回值:返回值:返回值:返回值:整型数整型数整型数整型数a a和和和和b b之和之和之和之和*/intint AddAdd(intint a,a,intint b)b)returnreturn(a+b);(a+b);/*/*主函数主函数主函数

13、主函数*/mainmain()()intint x,y,sum=0;x,y,sum=0;printfprintf(Input two integers:);(Input two integers:);scanfscanf(%d%d,&x,&y);/*(%d%d,&x,&y);/*输入两个整型数输入两个整型数输入两个整型数输入两个整型数x x和和和和y*/y*/sum=sum=AddAdd(x,y);/*(x,y);/*调用函数调用函数调用函数调用函数AddAdd计算计算计算计算x x和和和和y y相加之和相加之和相加之和相加之和*/printfprintf(sum=%dn,sum);/*(su

14、m=%dn,sum);/*输出输出输出输出x x和和和和y y相加之和相加之和相加之和相加之和*/并列的两个函数并列的两个函数并列的两个函数并列的两个函数其中一个是其中一个是其中一个是其中一个是程序的入口程序的入口程序的入口程序的入口程序注释程序注释程序注释程序注释2023/1/1615函数的分类函数的分类 标准函数,即库函数标准函数,即库函数标准函数,即库函数标准函数,即库函数 用户自定义函数用户自定义函数用户自定义函数用户自定义函数 2023/1/1616函数定义(函数定义(definition)返回值类型返回值类型返回值类型返回值类型 函数名函数名函数名函数名(类型类型类型类型 参数参数

15、参数参数1,1,类型类型类型类型 参数参数参数参数2,2,)函数体函数体函数体函数体returnreturn 表达式表达式表达式表达式;如果没有参数,则应该用如果没有参数,则应该用如果没有参数,则应该用如果没有参数,则应该用voidvoid注明注明注明注明 函数的返回值只有一个函数的返回值只有一个函数的返回值只有一个函数的返回值只有一个 如果不需要返回值,则应该用如果不需要返回值,则应该用如果不需要返回值,则应该用如果不需要返回值,则应该用voidvoid定义返回值类型定义返回值类型定义返回值类型定义返回值类型 返回值类型与返回值类型与返回值类型与返回值类型与returnreturn语句配合语

16、句配合语句配合语句配合 当函数执行到当函数执行到当函数执行到当函数执行到returnreturn语句时,就中止函数的执行,返回到语句时,就中止函数的执行,返回到语句时,就中止函数的执行,返回到语句时,就中止函数的执行,返回到调用它的地方调用它的地方调用它的地方调用它的地方 函数内部可以定义只能自己使用的变量,称函数内部可以定义只能自己使用的变量,称函数内部可以定义只能自己使用的变量,称函数内部可以定义只能自己使用的变量,称内部变量内部变量内部变量内部变量。参数表里的变量也是内部变量参数表里的变量也是内部变量参数表里的变量也是内部变量参数表里的变量也是内部变量函数的返回值是通过函数的返回值是通过

17、函数中的函数中的 return 语语句获得的。句获得的。2023/1/1617函数参数函数参数 函数参数函数参数:形参形参形参形参(形式参数形式参数形式参数形式参数 ):):在定义函数时,定义函数名后面括号中的变量名在定义函数时,定义函数名后面括号中的变量名在定义函数时,定义函数名后面括号中的变量名在定义函数时,定义函数名后面括号中的变量名实参实参实参实参(实际参数实际参数实际参数实际参数 ):):在主调函数中调用一个函数,调用函数名后面括号在主调函数中调用一个函数,调用函数名后面括号在主调函数中调用一个函数,调用函数名后面括号在主调函数中调用一个函数,调用函数名后面括号中的参数中的参数中的参

18、数中的参数(或表达式或表达式或表达式或表达式)int Average(int x,int y)int result;result=(x+y)/2;return result;main()int a=12;int b=24;int ave;ave=Average(a,b);printf();数据传递执行顺序实参实参实参实参形参形参形参形参2023/1/1618 实参的数量必须与形参相等,对应的类型必须实参的数量必须与形参相等,对应的类型必须实参的数量必须与形参相等,对应的类型必须实参的数量必须与形参相等,对应的类型必须匹配;匹配;匹配;匹配;实参与形参有各自的存储空间,所以形参值的实参与形参有各

19、自的存储空间,所以形参值的实参与形参有各自的存储空间,所以形参值的实参与形参有各自的存储空间,所以形参值的改变不会影响实参;改变不会影响实参;改变不会影响实参;改变不会影响实参;参数的类型没有限制,也可以定义没有参数的参数的类型没有限制,也可以定义没有参数的参数的类型没有限制,也可以定义没有参数的参数的类型没有限制,也可以定义没有参数的函数;函数;函数;函数;2023/1/1619函数调用(函数调用(call)从实参到形参是从实参到形参是从实参到形参是从实参到形参是单向值传递单向值传递单向值传递单向值传递 调用函数时,必须提供所有的参数(且必须是已调用函数时,必须提供所有的参数(且必须是已调用

20、函数时,必须提供所有的参数(且必须是已调用函数时,必须提供所有的参数(且必须是已赋值的)赋值的)赋值的)赋值的)特例,特例,特例,特例,printfprintf和和和和scanfscanf是采用变长变量表定义的函数,是采用变长变量表定义的函数,是采用变长变量表定义的函数,是采用变长变量表定义的函数,所以变量的个数不固定。所以变量的个数不固定。所以变量的个数不固定。所以变量的个数不固定。提供的参数个数、类型、顺序应与定义时相同提供的参数个数、类型、顺序应与定义时相同提供的参数个数、类型、顺序应与定义时相同提供的参数个数、类型、顺序应与定义时相同形式参数形式参数形式参数形式参数实际参数实际参数实际

21、参数实际参数2023/1/1620例例5.1a 计算两个整数的平均数计算两个整数的平均数/*/*函数功能:函数功能:函数功能:函数功能:计算平均数计算平均数计算平均数计算平均数 函数入口参数:函数入口参数:函数入口参数:函数入口参数:整型整型整型整型x x,存储第一个运算数,存储第一个运算数,存储第一个运算数,存储第一个运算数 整型整型整型整型y y,存储第二个运算数,存储第二个运算数,存储第二个运算数,存储第二个运算数 函数返回值:函数返回值:函数返回值:函数返回值:平均数平均数平均数平均数*/intint Average(Average(intint x,x,intint y)y)inti

22、nt result;result;result=(x+y)/2;result=(x+y)/2;returnreturn result;result;2023/1/1621例例5.1b 使用了使用了Average函数的函数的main()mainmain()()intint a=12;a=12;intint b=24;b=24;intint ave;ave;ave=Average(a,b);ave=Average(a,b);printfprintf(Average of%d and%d is%d.nAverage of%d and%d is%d.n,a,b,ave);a,b,ave);int Av

23、erage(int x,int y)int result;result=(x+y)/2;return result;main()int a=12;int b=24;int ave;ave=Average(a,b);printf();数据传递执行顺序2023/1/1622函数调用(函数调用(call)有返回值时有返回值时有返回值时有返回值时放到一个数值表达式中放到一个数值表达式中放到一个数值表达式中放到一个数值表达式中 如如如如 c=max(a,b);c=max(a,b);作为另一个函数调用的参数作为另一个函数调用的参数作为另一个函数调用的参数作为另一个函数调用的参数 如如如如 c=max(ma

24、x(a,b),c);c=max(max(a,b),c);printf(printf(%dn%dn,max(a,b);,max(a,b);无返回值时无返回值时无返回值时无返回值时函数调用表达式函数调用表达式函数调用表达式函数调用表达式 如如如如 display(a,b);display(a,b);返回值返回值返回值返回值 =函数名函数名函数名函数名(实参表列实参表列实参表列实参表列););函数名函数名函数名函数名(实参表列实参表列实参表列实参表列););2023/1/1623函数原型(函数原型(prototype)返回值类型返回值类型返回值类型返回值类型 函数名函数名函数名函数名(类型类型类型类

25、型 参数参数参数参数1,1,类型类型类型类型 参数参数参数参数2,2,););调用一个函数之前,先要对其调用一个函数之前,先要对其调用一个函数之前,先要对其调用一个函数之前,先要对其返回值类型返回值类型返回值类型返回值类型、函数名函数名函数名函数名和和和和参数参数参数参数进行声明(进行声明(进行声明(进行声明(declaredeclare)(不声明也能使用,但运行结果可能不稳定)(不声明也能使用,但运行结果可能不稳定)(不声明也能使用,但运行结果可能不稳定)(不声明也能使用,但运行结果可能不稳定)有助于编译器进行类型检查有助于编译器进行类型检查有助于编译器进行类型检查有助于编译器进行类型检查

26、除了末尾分号外,声明的语法格式与函数定义的首部除了末尾分号外,声明的语法格式与函数定义的首部除了末尾分号外,声明的语法格式与函数定义的首部除了末尾分号外,声明的语法格式与函数定义的首部完全一致;完全一致;完全一致;完全一致;2023/1/1624例例5.1#includeinclude intint AverageAverage(intint x,x,intint y);y);/*/*声明声明声明声明Average()Average()函数函数函数函数*/mainmain()()intint a=12;a=12;intint b=24;b=24;intint ave=Average(a,b);

27、ave=Average(a,b);printfprintf(Average of%d and%d is%d.n,a,b,ave);(Average of%d and%d is%d.n,a,b,ave);/*/*函数功能:函数功能:函数功能:函数功能:计算平均数计算平均数计算平均数计算平均数 函数入口参数:函数入口参数:函数入口参数:函数入口参数:整型整型整型整型x x,存储第一个运算数,存储第一个运算数,存储第一个运算数,存储第一个运算数 整型整型整型整型y y,存储第二个运算数,存储第二个运算数,存储第二个运算数,存储第二个运算数 函数返回值:函数返回值:函数返回值:函数返回值:平均数平均数

28、平均数平均数*/intint Average(Average(intint x,x,intint y)y)intint result;result;result=(x+y)/2;result=(x+y)/2;returnreturn result;result;2023/1/1625例例5.1 intint AverageAverage(intint x,x,intint y);y);/*/*声明声明声明声明Average()Average()函数函数函数函数*/main()main()/*/*主函数主函数主函数主函数*/intint ave=Average(a,b);ave=Average(

29、a,b);/*/*调用函数调用函数调用函数调用函数AverageAverage*/intint Average(Average(intint x,x,intint y)y)/*/*自定义函数自定义函数自定义函数自定义函数AverageAverage*/2023/1/1626例例5.1#includeinclude /*/*函数功能:函数功能:函数功能:函数功能:计算平均数计算平均数计算平均数计算平均数 函数入口参数:函数入口参数:函数入口参数:函数入口参数:整型整型整型整型x x,存储第一个运算数,存储第一个运算数,存储第一个运算数,存储第一个运算数 整型整型整型整型y y,存储第二个运算数,

30、存储第二个运算数,存储第二个运算数,存储第二个运算数 函数返回值:函数返回值:函数返回值:函数返回值:平均数平均数平均数平均数*/intint Average(Average(intint x,x,intint y)y)intint result;result;result=(x+y)/2;result=(x+y)/2;returnreturn result;result;mainmain()()intint a=12;a=12;intint b=24;b=24;intint ave=Average(a,b);ave=Average(a,b);printfprintf(Average of%d

31、 and%d is%d.n,a,b,ave);(Average of%d and%d is%d.n,a,b,ave);当返回值为整型或者函数定义在函当返回值为整型或者函数定义在函数调用前面时,可以省略原型数调用前面时,可以省略原型2023/1/1627main()a();a 函数函数b();return;b函数函数return;在被调函数中,又调用了函数在被调函数中,又调用了函数-嵌套调用嵌套调用函数的嵌套调用函数的嵌套调用函数的嵌套调用函数的嵌套调用2023/1/1628循序渐进式编程循序渐进式编程实验实验4:小学生加法考试题:小学生加法考试题 通过输入两个加通过输入两个加数给学生出一道数给

32、学生出一道加法运算题加法运算题输入答案正确输入答案正确:right错误错误:Not correct!Try again!2023/1/1629只答1次直到做对为止最多给3次机会随机出题连续做10道题统计分数循序渐进式编程循序渐进式编程循序渐进式编程循序渐进式编程实验实验实验实验4 4:小学生加法考试题:小学生加法考试题:小学生加法考试题:小学生加法考试题 2023/1/1630void Print(int flag)void Print(int flag)if(flag)if(flag)printf(Right!n);printf(Right!n);else else printf(Not c

33、orrect!n);printf(Not correct!n);实验实验4:小学生加法考试题:小学生加法考试题/*/*函数功能:函数功能:函数功能:函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回计算两整型数之和,如果与用户输入的答案相同,则返回计算两整型数之和,如果与用户输入的答案相同,则返回计算两整型数之和,如果与用户输入的答案相同,则返回1 1,否则返回,否则返回,否则返回,否则返回0 0 函数参数:函数参数:函数参数:函数参数:整型变量整型变量整型变量整型变量a a和和和和b b,分别代表被加数和加数,分别代表被加数和加数,分别代表被加数和加数,分别代表被加数和加数 函数返

34、回值:当函数返回值:当函数返回值:当函数返回值:当a a加加加加b b的结果与用户输入的答案相同时,返回的结果与用户输入的答案相同时,返回的结果与用户输入的答案相同时,返回的结果与用户输入的答案相同时,返回1 1,否则返回,否则返回,否则返回,否则返回0 0*/*/intint AddTest(AddTest(intint a,a,intint b)b)intint answer;answer;printf(%d+%d=,a,b);printf(%d+%d=,a,b);scanf(%d,&answer);scanf(%d,&answer);ifif(a+b=answer)(a+b=answer

35、)returnreturn 1;1;elseelse returnreturn 0;0;只答1次2023/1/1631main()int a,b,answer;printf(Input a,b:);scanf(%d,%d,&a,&b);answer=AddTest(a,b);Print(answer);do while(answer=0);实验实验实验实验4 4:小学生加法考试题:小学生加法考试题:小学生加法考试题:小学生加法考试题 直到做对为止2023/1/1632main()answer=AddTest(a,b);Print(answer,chance);chance=0;do chanc

36、e+;while(answer=0&chance 3);实验实验实验实验4 4:小学生加法考试题:小学生加法考试题:小学生加法考试题:小学生加法考试题 最多给3次机会2023/1/1633 srand(time(NULL);error=0;score=0;for(i=0;i10;i+)a=rand()%10+1;b=rand()%10+1;answer=AddTest(a,b);Print(answer);if(answer=1)score=score+10;else error+;实验实验实验实验4 4:小学生加法考试题:小学生加法考试题:小学生加法考试题:小学生加法考试题 随机出题连续做1

37、0道题统计分数2023/1/1634作业作业 P162P162,5.75.7,5.85.82023/1/1635软件测试软件测试 测试测试测试测试通过运行测试用例找出软件中的通过运行测试用例找出软件中的通过运行测试用例找出软件中的通过运行测试用例找出软件中的BugBugBugBug 测试的目的测试的目的测试的目的测试的目的发现更多的发现更多的发现更多的发现更多的BugBugBugBug 测试人员的主要任务测试人员的主要任务测试人员的主要任务测试人员的主要任务站在使用者的角度,通过不断使用和攻击,尽量多站在使用者的角度,通过不断使用和攻击,尽量多站在使用者的角度,通过不断使用和攻击,尽量多站在使

38、用者的角度,通过不断使用和攻击,尽量多的找出的找出的找出的找出BugBugBugBug 如何提高可测试性如何提高可测试性如何提高可测试性如何提高可测试性(tesabilitytesability)一条语句写一行才容易测试一条语句写一行才容易测试一条语句写一行才容易测试一条语句写一行才容易测试2023/1/1636软件测试软件测试 测试只能证明程序有错,不能测试只能证明程序有错,不能测试只能证明程序有错,不能测试只能证明程序有错,不能证明程序无错证明程序无错证明程序无错证明程序无错 测试的重要性测试的重要性测试的重要性测试的重要性测试人员水平越高,找到测试人员水平越高,找到测试人员水平越高,找到

39、测试人员水平越高,找到BugBug的时间就越早,软件的时间就越早,软件的时间就越早,软件的时间就越早,软件就越容易修复,产品发行就越稳定就越容易修复,产品发行就越稳定就越容易修复,产品发行就越稳定就越容易修复,产品发行就越稳定越大型的软件开发,测试人员占整个软件产品团队越大型的软件开发,测试人员占整个软件产品团队越大型的软件开发,测试人员占整个软件产品团队越大型的软件开发,测试人员占整个软件产品团队的总人数的比重就越大,甚至一半以上的总人数的比重就越大,甚至一半以上的总人数的比重就越大,甚至一半以上的总人数的比重就越大,甚至一半以上成功的测试在于发现迄今为止尚未发现的成功的测试在于发现迄今为止

40、尚未发现的成功的测试在于发现迄今为止尚未发现的成功的测试在于发现迄今为止尚未发现的BugBug2023/1/1637软件测试方法的分类软件测试方法的分类 从代码和用户使用的角度分类从代码和用户使用的角度分类从代码和用户使用的角度分类从代码和用户使用的角度分类 覆盖性测试覆盖性测试覆盖性测试覆盖性测试从代码特性的角度(即内部)出发的测试从代码特性的角度(即内部)出发的测试从代码特性的角度(即内部)出发的测试从代码特性的角度(即内部)出发的测试单元测试,功能测试,提交测试,基本验证测试,单元测试,功能测试,提交测试,基本验证测试,单元测试,功能测试,提交测试,基本验证测试,单元测试,功能测试,提交

41、测试,基本验证测试,回归测试回归测试回归测试回归测试 使用测试使用测试使用测试使用测试从用户的角度(即外部)出发的测试从用户的角度(即外部)出发的测试从用户的角度(即外部)出发的测试从用户的角度(即外部)出发的测试配置测试,兼容性测试,性能测试,配置测试,兼容性测试,性能测试,配置测试,兼容性测试,性能测试,配置测试,兼容性测试,性能测试,AlphaAlpha和和和和BetaBeta测试,强力测试,文档和帮助文件测试测试,强力测试,文档和帮助文件测试测试,强力测试,文档和帮助文件测试测试,强力测试,文档和帮助文件测试2023/1/1638软件测试方法的分类软件测试方法的分类 第第第第2 2种分

42、类方法种分类方法种分类方法种分类方法 白盒测试(结构测试)白盒测试(结构测试)白盒测试(结构测试)白盒测试(结构测试)在完全了解程序的结构和处理过程的情况下,按照在完全了解程序的结构和处理过程的情况下,按照在完全了解程序的结构和处理过程的情况下,按照在完全了解程序的结构和处理过程的情况下,按照程序内部的逻辑测试程序,检验程序中的每条通路程序内部的逻辑测试程序,检验程序中的每条通路程序内部的逻辑测试程序,检验程序中的每条通路程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作是否都能按预定要求正确工作是否都能按预定要求正确工作是否都能按预定要求正确工作 黑盒测试(功能测试)黑盒

43、测试(功能测试)黑盒测试(功能测试)黑盒测试(功能测试)不考虑程序内部的结构和处理过程不考虑程序内部的结构和处理过程不考虑程序内部的结构和处理过程不考虑程序内部的结构和处理过程2023/1/1639软件测试方法的分类软件测试方法的分类 第第第第3 3种分类方法种分类方法种分类方法种分类方法 手工测试手工测试手工测试手工测试依靠人力来查找依靠人力来查找依靠人力来查找依靠人力来查找BugBug 自动测试自动测试自动测试自动测试编写一些测试工具,让他们自动运行来查找编写一些测试工具,让他们自动运行来查找编写一些测试工具,让他们自动运行来查找编写一些测试工具,让他们自动运行来查找BugBug优点:快,

44、广泛优点:快,广泛优点:快,广泛优点:快,广泛缺点:只能检查一些最重要的问题,如内存泄漏、缺点:只能检查一些最重要的问题,如内存泄漏、缺点:只能检查一些最重要的问题,如内存泄漏、缺点:只能检查一些最重要的问题,如内存泄漏、死机等,无法发现一般性的日常错误,而且编写测死机等,无法发现一般性的日常错误,而且编写测死机等,无法发现一般性的日常错误,而且编写测死机等,无法发现一般性的日常错误,而且编写测试工具的工作量很大试工具的工作量很大试工具的工作量很大试工具的工作量很大2023/1/1640程序中常见的出错原因 编译错误编译错误指在编译过程中发现的错误,通常属于语法错误,指在编译过程中发现的错误,

45、通常属于语法错误,指在编译过程中发现的错误,通常属于语法错误,指在编译过程中发现的错误,通常属于语法错误,即编写的语句不符合即编写的语句不符合即编写的语句不符合即编写的语句不符合C C C C语言的语法规则。语言的语法规则。语言的语法规则。语言的语法规则。Undefined symbol xxx Undefined symbol xxx Undefined symbol xxx Undefined symbol xxx 标识符标识符标识符标识符xxxxxxxxxxxx未定义未定义未定义未定义 Expression syntax error Expression syntax error Exp

46、ression syntax error Expression syntax error 表达式语法错误表达式语法错误表达式语法错误表达式语法错误 Too few parameter in call Too few parameter in call Too few parameter in call Too few parameter in call 函数调用时的实参函数调用时的实参函数调用时的实参函数调用时的实参少于函数的形参少于函数的形参少于函数的形参少于函数的形参2023/1/1641程序中常见的出错原因 运行错误运行错误指在程序运行时发生的错误指在程序运行时发生的错误指在程序运行时发

47、生的错误指在程序运行时发生的错误往往是由于语义上的错误造成的,即语句虽然合往往是由于语义上的错误造成的,即语句虽然合往往是由于语义上的错误造成的,即语句虽然合往往是由于语义上的错误造成的,即语句虽然合乎语法,但要求计算机去做不该做或做不到的事乎语法,但要求计算机去做不该做或做不到的事乎语法,但要求计算机去做不该做或做不到的事乎语法,但要求计算机去做不该做或做不到的事情。情。情。情。例如当用例如当用例如当用例如当用0 0 0 0做除数时,运行后将显示做除数时,运行后将显示做除数时,运行后将显示做除数时,运行后将显示“Division by Division by Division by Divi

48、sion by zero”zero”zero”zero”错误提示信息,并立即返回编辑屏幕。查看错误提示信息,并立即返回编辑屏幕。查看错误提示信息,并立即返回编辑屏幕。查看错误提示信息,并立即返回编辑屏幕。查看运行结果时,可在运行结果时,可在运行结果时,可在运行结果时,可在User screenUser screenUser screenUser screen(用户屏幕)上看到(用户屏幕)上看到(用户屏幕)上看到(用户屏幕)上看到给出的错误提示信息。给出的错误提示信息。给出的错误提示信息。给出的错误提示信息。2023/1/1642程序中常见的出错原因 逻辑错误逻辑错误程序中有逻辑错时,不影响程序

49、运行并得到运行结程序中有逻辑错时,不影响程序运行并得到运行结程序中有逻辑错时,不影响程序运行并得到运行结程序中有逻辑错时,不影响程序运行并得到运行结果,只是运行结果不正确。比较隐蔽,出错后不易果,只是运行结果不正确。比较隐蔽,出错后不易果,只是运行结果不正确。比较隐蔽,出错后不易果,只是运行结果不正确。比较隐蔽,出错后不易查找。查找。查找。查找。累加求和运算时,累加和变量忘记了赋初值;累加求和运算时,累加和变量忘记了赋初值;累加求和运算时,累加和变量忘记了赋初值;累加求和运算时,累加和变量忘记了赋初值;累乘运算时,累乘变量初值赋值为累乘运算时,累乘变量初值赋值为累乘运算时,累乘变量初值赋值为累

50、乘运算时,累乘变量初值赋值为0 0 0 0;函数声明时的返回值数据类型与实际返回的数据类函数声明时的返回值数据类型与实际返回的数据类函数声明时的返回值数据类型与实际返回的数据类函数声明时的返回值数据类型与实际返回的数据类型不一致,导致自动类型转换型不一致,导致自动类型转换型不一致,导致自动类型转换型不一致,导致自动类型转换数组下标越界(即超出了定义的范围);数组下标越界(即超出了定义的范围);数组下标越界(即超出了定义的范围);数组下标越界(即超出了定义的范围);程序中存在死循环;程序中存在死循环;程序中存在死循环;程序中存在死循环;2023/1/1643调试的基本方法调试的基本方法“粗分细找

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁