
系统实施测试评价和维护.ppt
235页下页下页末页末页上页上页首页首页目录目录1信息系统的开发思路信息系统的开发思路系统分析系统分析系统设计系统设计系统实施系统实施1下页下页末页末页上页上页首页首页目录目录本章主要内容本章主要内容 :: 6 6 6 6.1.1.1.1 系统实施的概念、任务、特点及步骤系统实施的概念、任务、特点及步骤 6.26.26.26.2 系统软硬件、网络购置和系统的准备系统软硬件、网络购置和系统的准备 6.36.36.36.3 程序编制程序编制6.46.46.46.4 测试测试6.56.56.56.5 系统试运行与切换系统试运行与切换6.66.66.66.6 系统评价和维护系统评价和维护2下页下页末页末页上页上页首页首页目录目录• 系统设计说明书审核通过后,研制工作进系统设计说明书审核通过后,研制工作进入实施阶段入实施阶段这一阶段要把物理模型转换为这一阶段要把物理模型转换为实际可运行的实际可运行的信息系统,交付用户使用也信息系统,交付用户使用也就是在系统分析、系统设计的基础上,完成就是在系统分析、系统设计的基础上,完成程序的程序的编码、测试、数据库系统的建立,系编码、测试、数据库系统的建立,系统的试运行和系统的转换,统的试运行和系统的转换,将系统设计付诸将系统设计付诸实现,形成目标系统的运行环境。
实现,形成目标系统的运行环境3构建系统运行平台构建系统运行平台程序编制程序编制代码实现代码实现数据准备数据准备程序的调试和测试程序的调试和测试系统转换系统转换用户培训用户培训系统实施报告系统实施报告系统的物理模型系统的物理模型4下页下页末页末页上页上页首页首页目录目录具体地讲,这一阶段的任务包括以下几个方面:具体地讲,这一阶段的任务包括以下几个方面:((1 1)硬件、系统的准备)硬件、系统的准备•根据系统分析和系统设计方案的要求,选择与安根据系统分析和系统设计方案的要求,选择与安装符合新系统运行环境要求的硬件及系统装符合新系统运行环境要求的硬件及系统2 2)数据准备)数据准备•按照数据库设计方案的要求,安装调试系统所需按照数据库设计方案的要求,安装调试系统所需要的数据库管理系统收集和整理信息系统运行要的数据库管理系统收集和整理信息系统运行所需的基础数据,建立数据库所需的基础数据,建立数据库5下页下页末页末页上页上页首页首页目录目录((3 3)程序设计)程序设计•制定编程的规范约定;采用结构化程序设制定编程的规范约定;采用结构化程序设计方法;选择合适的程序设计语言进行编计方法;选择合适的程序设计语言进行编程,包括程序的设计、测试、运行和调试。
程,包括程序的设计、测试、运行和调试6下页下页末页末页上页上页首页首页目录目录((4 4)系统测试与调试)系统测试与调试•系统测试系统测试是为了发现系统中所存在的错误是为了发现系统中所存在的错误而运行系统的过程,其目的就是在系统投而运行系统的过程,其目的就是在系统投入运行之前,尽可能多发现系统中的错误,入运行之前,尽可能多发现系统中的错误,以保证系统可靠地、高质量地实现设计功以保证系统可靠地、高质量地实现设计功能;能;系统调试系统调试是将测试出的错误做进一步是将测试出的错误做进一步的诊断和改正的诊断和改正7下页下页末页末页上页上页首页首页目录目录((5 5)系统转换)系统转换•系统经过测试、试运行之后,就可以选择系统经过测试、试运行之后,就可以选择适当的方式,在适宜的时间进行新老的替适当的方式,在适宜的时间进行新老的替换工作,使新系统进入实际运行换工作,使新系统进入实际运行8下页下页末页末页上页上页首页首页目录目录 与系统分析、系统设计阶段相比与系统分析、系统设计阶段相比较,系统实施阶段的较,系统实施阶段的特点特点是:是:时间短、时间短、难度小、工作量大,投入的人力、物力难度小、工作量大,投入的人力、物力多。
多9下页下页末页末页上页上页首页首页目录目录硬件获取硬件获取系统编程系统编程用户准备用户准备人员:聘用和培训人员:聘用和培训机房、场所准备机房、场所准备数据准备数据准备安装安装测试测试试运行试运行系统切换系统切换用户验收用户验收10下页下页末页末页上页上页首页首页目录目录6.2.16.2.1系统软硬件、网络购置系统软硬件、网络购置•1 1)硬件的获取)硬件的获取•根据系统设计的指标要求制作采购的标书根据系统设计的指标要求制作采购的标书•邀请硬件供应商进行技术交流邀请硬件供应商进行技术交流•选择资质好的厂商发放标书选择资质好的厂商发放标书•评标评标•开标及商务谈判开标及商务谈判•签订合同签订合同•执行合同执行合同11下页下页末页末页上页上页首页首页目录目录2 2)网络的获取)网络的获取•局域网络的建设和改造局域网络的建设和改造•————新建网络新建网络•————改造网络改造网络•————自建或外包自建或外包•广域网络的建设广域网络的建设•————传输网络的取得(传输方式的选择、线路的租赁)传输网络的取得(传输方式的选择、线路的租赁)•————网络设备的获取(与硬件同)网络设备的获取(与硬件同)•————自建与承包给系统集成商自建与承包给系统集成商12下页下页末页末页上页上页首页首页目录目录3)系统工具的选取)系统工具的选取选择开发方法选择开发方法选择开发工具及数据库产品选择开发工具及数据库产品13下页下页末页末页上页上页首页首页目录目录1 1)用户准备)用户准备•用户准备主要是指准备好用户准备主要是指准备好信息系统的管理人员、信息系统的管理人员、使用人员等。
使用人员等•用户的培训用户的培训(内部培训与外部培训(内部培训与外部培训)•信息系统的信息系统的ITIT人员的招聘和培训人员的招聘和培训2 2)场所准备)场所准备•新系统的工作场所(空调、电力、办公家具)新系统的工作场所(空调、电力、办公家具)14下页下页末页末页上页上页首页首页目录目录3 3)数据准备)数据准备•将原来的手工数据文件转化成计算机文件将原来的手工数据文件转化成计算机文件•将原来的不同格式的数据文件转换成新系统的将原来的不同格式的数据文件转换成新系统的格式4 4)安装)安装•将计算机设备、网络设备在信息系统场所安装、将计算机设备、网络设备在信息系统场所安装、使其运转使其运转15下页下页末页末页上页上页首页首页目录目录•6.3.1 6.3.1 程序设计语言的分类程序设计语言的分类 •6.3.2 6.3.2 结构化程序设计结构化程序设计•6.3.3 6.3.3 程序设计风格程序设计风格•6.3.4 6.3.4 程序效率程序效率16下页下页末页末页上页上页首页首页目录目录 随着计算机技术的发展,目前已经出现随着计算机技术的发展,目前已经出现了数百种程序设计语言,但被广泛应用的只有了数百种程序设计语言,但被广泛应用的只有几十种几十种。
由于不同种类的语言适用于不同的问由于不同种类的语言适用于不同的问题域和系统环境,题域和系统环境,因此了解程序设计语言的分因此了解程序设计语言的分类可以帮助我们选择出合适的语言通常可将类可以帮助我们选择出合适的语言通常可将程序设计语言分为程序设计语言分为机器语言、汇编语言,高级机器语言、汇编语言,高级语言和第四代语言语言和第四代语言4类类17下页下页末页末页上页上页首页首页目录目录 结构化程序设计主要包括两方面:结构化程序设计主要包括两方面:•在编写程序时,强调在编写程序时,强调使用几种基本控制结构使用几种基本控制结构,,通过组合嵌套,形成程序的控制结构通过组合嵌套,形成程序的控制结构尽可能尽可能避免使用避免使用GOTOGOTO语句•在程序设计过程中,尽量采用自顶向下在程序设计过程中,尽量采用自顶向下和逐步细化的原则,和逐步细化的原则,由粗到细,一步步由粗到细,一步步展开展开18下页下页末页末页上页上页首页首页目录目录•使用语言中的使用语言中的顺序顺序、、选择选择、、循环循环等有限的基本控等有限的基本控制结构表示程序逻辑制结构表示程序逻辑•选用的控制结构只准许有选用的控制结构只准许有一个入口一个入口和和一个出口一个出口。
•程序语句组成程序语句组成容易识别的块容易识别的块,每块只有,每块只有一个入口一个入口和和一个出口一个出口•复杂结构应该用基本控制结构进行组合嵌套来实复杂结构应该用基本控制结构进行组合嵌套来实现19下页下页末页末页上页上页首页首页目录目录自顶向下,逐步求精自顶向下,逐步求精•在详细设计和编码在详细设计和编码阶段,应当采取阶段,应当采取自自顶向下,逐步求精顶向下,逐步求精的的方法•把一个模块的功能把一个模块的功能逐步分解,细化为逐步分解,细化为一系列具体的步骤,一系列具体的步骤,进而翻译成一系列进而翻译成一系列用某种程序设计语用某种程序设计语言写成的程序言写成的程序逐逐步步细细化化20下页下页末页末页上页上页首页首页目录目录例,用筛选法求例,用筛选法求100100以内的素数以内的素数•筛选法就是从筛选法就是从2 2到到100100中去掉中去掉2,3,52,3,5,,7 7的倍的倍数,剩下的就是数,剩下的就是100100以内的素数以内的素数•为了解决这个问题,可先按程序功能写出为了解决这个问题,可先按程序功能写出一个框架一个框架21下页下页末页末页上页上页首页首页目录目录mainmain ( ) { // ( ) { //程序框架程序框架 建立建立2 2到到100100的数组的数组A A[ ][ ],其中,其中A A[ [i i] ]==i i;; ----------------------------------------------------------------------1 1 建立建立2 2到到1010的素数数组的素数数组 B B[ ][ ],其中存放,其中存放2 2 到到1010以内的素数;以内的素数;-----------2-----------2 若若A A[ [i i] ]==i i是是B B[ ][ ]中任一数的倍数,则中任一数的倍数,则 剔除剔除A A[ [i i] ];;---------------------3---------------------3 输出输出A A[ ][ ]中所有没有被剔除的数;中所有没有被剔除的数; ----------------------------------------------------------------------4 4} }22下页下页末页末页上页上页首页首页目录目录mainmain ( ) { ( ) {/*/*建立建立2 2到到100100的数组的数组A A[ ][ ],其中,其中A A[ [i i] ]==i i*/*/for ( for ( i i = 2 = 2;;i i <= 100 <= 100;;i i++ ) ++ ) A A[ [i i] = ] = i i;;/* /* 建立建立2 2到到1010的素数数组的素数数组B B[ ][ ],其中存放,其中存放2 2到到 1010以内的素数以内的素数* */ /B B[1]= 2[1]= 2;;B B[2]= 3[2]= 3;;B B[3]= 5[3]= 5;;B B[4]= 7[4]= 7;;/*/*若若A A[ [i i] ]==i i是是B B[ ][ ]中任一数的倍数,则剔中任一数的倍数,则剔 除除A A[ [i i]*/]*/for ( for ( j j = 1 = 1;;j j <= 4 <= 4;;j j++ )++ ) 检查检查A A[ ][ ]所有的数能否被所有的数能否被B B[ [j j] ]整除并将整除并将 能被整除的数从能被整除的数从A A[ ][ ]中剔除;中剔除; -----3.1-----3.1 /*/*输出输出A[ ]A[ ]中所有没有被剔除的数中所有没有被剔除的数* */ / for ( for ( i i = 2 = 2;;i i <= 100 <= 100;;i i++ )++ ) 若若A A[ [i i] ]没有被剔除,则输出之没有被剔除,则输出之 ---4.1---4.1} }对框架中的局部再做细化,得到整个程序。
对框架中的局部再做细化,得到整个程序23下页下页末页末页上页上页首页首页目录目录mainmain ( ) { ( ) {/*/*建立建立2 2到到100100的数组的数组A A[ ][ ],其中,其中A A[ [i i] ]==i i*/*/for ( for ( i i = 2 = 2;;i i <= 100 <= 100;;i i++ ) ++ ) A A[ [i i] = ] = i i;;/* /* 建立建立2 2到到1010的素数表的素数表B B[ ][ ],其中存放,其中存放2 2到到 1010以内的素数以内的素数* */ /B B[1]= 2[1]= 2;;B B[2]= 3[2]= 3;;B B[3]= 5[3]= 5;;B B[4]= 7[4]= 7;;/*/*若若A A[ [i i] ]==i i是是B B[ ][ ]中任一数的倍数,则剔除中任一数的倍数,则剔除 A A[ [i i]*/]*/for ( for ( j j = 1 = 1;;j j <= 4 <= 4;;j j++ )++ ) /*/*检查检查A A[ ][ ]所有的数能否被所有的数能否被B B[ [j j] ]整除并将能整除并将能 被整除的数从被整除的数从A A[ ][ ]中剔除中剔除* */ / for ( for ( i i = 2 = 2;;i i <= 100 <= 100;;i i++++)) if ( if ( A A[ [i i] ]//B B[ [j j] * ] * B B[ [j j] == ] == A A[ [i i] )] ) A A[ [i i] = 0] = 0;; /*/*输出输出A A[ ][ ]中所有没有被剔除的数中所有没有被剔除的数* */ / for ( for ( i i = 2 = 2;; i i <= 100 <= 100;;i i++++)) /*/*若若A A[ [i i] ]没有被剔除,则输出之没有被剔除,则输出之* */ / if ( if ( A A[i[i] != 0 ] != 0 )) printfprintf ( ( ““A A[%d[%d] ]==% %d\nd\n””, , I, I, A A[ [i i] )] );;} } 24下页下页末页末页上页上页首页首页目录目录自顶向下,逐步求精方法的优点自顶向下,逐步求精方法的优点•符合人们解决复杂问题的普遍规律。
可提高系统开发符合人们解决复杂问题的普遍规律可提高系统开发的成功率和生产率的成功率和生产率•用先全局后局部,先整体后细节,先抽象后具体的逐用先全局后局部,先整体后细节,先抽象后具体的逐步求精的过程开发出来的程序具有步求精的过程开发出来的程序具有清晰的层次结构,清晰的层次结构,程序容易阅读和理解程序容易阅读和理解•程序自顶向下,逐步细化,分解成一个树形结构在程序自顶向下,逐步细化,分解成一个树形结构在同一层的节点上的细化工作相互独立同一层的节点上的细化工作相互独立有利于编码、有利于编码、测试和集成测试和集成•每一步工作仅在上层节点的基础上做不多的设计扩展,每一步工作仅在上层节点的基础上做不多的设计扩展,便于检查便于检查•有利于设计的分工和组织工作有利于设计的分工和组织工作25下页下页末页末页上页上页首页首页目录目录•程序实际上也是一种供人阅读的文章,有程序实际上也是一种供人阅读的文章,有一个一个文章的风格文章的风格问题应该使程序具有良问题应该使程序具有良好的风格好的风格1. 1. 源程序文档化源程序文档化2. 2. 数据说明数据说明3. 3. 语句结构语句结构4. 4. 输入/输出方法输入/输出方法26下页下页末页末页上页上页首页首页目录目录1 1)标识符的命名)标识符的命名2 2)安排注释)安排注释3 3)程序的视觉组织)程序的视觉组织27下页下页末页末页上页上页首页首页目录目录•符号名即标识符,包括符号名即标识符,包括模块名模块名、、变量名变量名、、常量名常量名、、标号名标号名、、子程序名子程序名、、 、、数据区名数据区名以及以及缓冲区名缓冲区名等。
等•这些名字应能反映它所代表的实际东西,这些名字应能反映它所代表的实际东西,应有一定实际意义应有一定实际意义•例如,表示次数的量用例如,表示次数的量用TimesTimes,表示总量的用,表示总量的用TotalTotal,表示平,表示平均值的用均值的用AverageAverage,表示和的量用,表示和的量用SumSum等•名字不是越长越好名字不是越长越好,应当选择精炼的意义明确的名字应当选择精炼的意义明确的名字必要必要时可使用缩写名字时可使用缩写名字,但这时要注意缩写规则要一致,并且要,但这时要注意缩写规则要一致,并且要给每一个名字加注释给每一个名字加注释同时,在一个程序中,一个变量只应同时,在一个程序中,一个变量只应用于一种用途用于一种用途28下页下页末页末页上页上页首页首页目录目录•夹在程序中的注释是夹在程序中的注释是程序员与日后的程序读程序员与日后的程序读者之间通信的重要手段者之间通信的重要手段•注释决不是可有可无的注释决不是可有可无的•一些正规的程序文本中,注释行的数量占到一些正规的程序文本中,注释行的数量占到整个源程序的整个源程序的1 1//3 3到到1 1//2 2,甚至更多。
甚至更多•注释分为注释分为序言性注释序言性注释和和功能性注释功能性注释29下页下页末页末页上页上页首页首页目录目录•通常置于每个程序模块的开头部分,通常置于每个程序模块的开头部分,它应当给出程序的整体说明它应当给出程序的整体说明,对,对于理解程序本身具有引导作用有些系统开发部门对序言性注释做了于理解程序本身具有引导作用有些系统开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出明确而严格的规定,要求程序编制者逐项列出•有关项目包括:有关项目包括:– 程序标题程序标题;;–有关本模块有关本模块功能和目的功能和目的的的说明说明;;– 主要算法主要算法;;– 接口说明接口说明:包括调用形式,参数描述,子程序清单;:包括调用形式,参数描述,子程序清单;– 有关数据描述有关数据描述:重要的变量及其用途,约束或限制条件,以及其:重要的变量及其用途,约束或限制条件,以及其它有关信息;它有关信息;– 模块位置模块位置:在哪一个源文件中,或隶属于哪一个系统包;:在哪一个源文件中,或隶属于哪一个系统包;– 开发简历开发简历:模块设计者,复审者,复审日期,修改日期及有关说:模块设计者,复审者,复审日期,修改日期及有关说明等。
明等30下页下页末页末页上页上页首页首页目录目录•功能性注释嵌在源程序体中,功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样么工作,或是执行了下面的语句会怎么样而不要解释下面怎么做而不要解释下面怎么做例:例: /* ADD AMOUNT TO TOTAL *//* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNT TOTAL = AMOUNT++TOTALTOTAL不好•如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图: /* ADD MONTHLY-SALES TO ANNUAL-TOTAL *//* ADD MONTHLY-SALES TO ANNUAL-TOTAL */TOTAL = AMOUNTTOTAL = AMOUNT++TOTALTOTAL•要点要点– 描述一段程序,描述一段程序,而不是每一个语句;而不是每一个语句;– 用缩进和空行,用缩进和空行,使程序与注释容易区别;使程序与注释容易区别;– 注释要正确。
注释要正确31下页下页末页末页上页上页首页首页目录目录•恰当地利用恰当地利用空格空格,可以,可以突出运算的优先性突出运算的优先性,,避免发生运算的错误避免发生运算的错误•例如例如 ,将表达式,将表达式( (A A<-<-16)16)ANDNOTANDNOT( (B B<=<=49)49)ORCORC写成写成( (A A<-<-16) 16) AND NOTAND NOT ( (B B<=<=49) 49) OR COR C•自然的程序段之间可用自然的程序段之间可用空行空行隔开32下页下页末页末页上页上页首页首页目录目录•移行移行也叫做也叫做向右缩格向右缩格它是指程序中的各行不它是指程序中的各行不必都在左端对齐,都从第一格起排列这样做必都在左端对齐,都从第一格起排列这样做使程序完全分不清层次关系使程序完全分不清层次关系•对于对于选择语句选择语句和和循环语句循环语句,把其中的程序段语,把其中的程序段语句向右做句向右做阶梯式移行阶梯式移行使程序的逻辑结构更加使程序的逻辑结构更加清晰•例如,例如,两重选择结构嵌套,写成下面的移行形两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。
式,层次就清楚得多33下页下页末页末页上页上页首页首页目录目录 IF(…) THEN IF(…) THEN …… ELSE …… ENDIF ……ELSE ……ENDIF34下页下页末页末页上页上页首页首页目录目录•在设计阶段已经确定了数据结构的组织及其在设计阶段已经确定了数据结构的组织及其复杂性在编写程序时,则需要注意数据说复杂性在编写程序时,则需要注意数据说明的风格明的风格•为了使程序中数据说明更易于理解和维护,为了使程序中数据说明更易于理解和维护,必须注意以下几点必须注意以下几点 1 1)数据说明的次序应当规范化)数据说明的次序应当规范化 2 2)说明语句中变量安排有序化)说明语句中变量安排有序化 3 3)使用注释说明复杂数据结构)使用注释说明复杂数据结构35下页下页末页末页上页上页首页首页目录目录•数据说明次序规范化,使数据属性容易查找,也有利于测试,数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护排错和维护•原则上,数据说明的次序与语法无关,其次序是任意的。
但原则上,数据说明的次序与语法无关,其次序是任意的但出于阅读、理解和维护的需要,最好使其规范化,使说明的出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定先后次序固定•例如,在例如,在FORTRANFORTRAN程序中数据说明次序程序中数据说明次序 ① ① 常量说明常量说明② ② 简单变量类型说明简单变量类型说明③ ③ 数组说明数组说明 ④ ④ 公用数据块说明公用数据块说明⑤ ⑤ 所有的文件说明所有的文件说明•在类型说明中还可进一步要求例,在类型说明中还可进一步要求例, 可按如下顺序排列:可按如下顺序排列:①① 整型量说明整型量说明②② 实型量说明实型量说明③③ 字符量说明字符量说明④④ 逻辑量说明逻辑量说明36下页下页末页末页上页上页首页首页目录目录•当当多个变量名在一个说明语句中说明多个变量名在一个说明语句中说明时,应当对这些变量时,应当对这些变量按按字母的顺序排列字母的顺序排列带标号的全程数据带标号的全程数据( (如如FORTRANFORTRAN的公用块的公用块) )也应当按字母的顺序排列也应当按字母的顺序排列。
•例如,把例如,把integer integer sizesize, , lengthlength, , width width, , costcost, , priceprice写成写成 costcost , , integer, integer, lengthlength, , price price , , size size, , widthwidth 37下页下页末页末页上页上页首页首页目录目录•如果设计了一个复杂的数据结构,应当使用注如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特释来说明在程序实现时这个数据结构的固有特点•例如例如, , 对数据结构的对数据结构的链表结构链表结构和和VB VB 中用户自定中用户自定义的数据类型,都应当在注释中做必要的补充义的数据类型,都应当在注释中做必要的补充说明38下页下页末页末页上页上页首页首页目录目录• 在设计阶段确定了系统的逻辑流结构,但构造单在设计阶段确定了系统的逻辑流结构,但构造单个语句则是编码阶段的任务语句构造力求个语句则是编码阶段的任务语句构造力求简单,简单,直接直接,不能为了片面追求效率而使语句复杂化。
不能为了片面追求效率而使语句复杂化•1) 1) 在一行内只写一条语句在一行内只写一条语句•在一行内只写一条语句,并且采取适当的移行格在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确式,使程序的逻辑和功能变得更加明确•许多程序设计语言允许许多程序设计语言允许在一行内写多个语句在一行内写多个语句但这种方式这种方式会使程序可读性变差会使程序可读性变差因而不可取因而不可取39下页下页末页末页上页上页首页首页目录目录•例如,例如,有一段排序程序有一段排序程序FOR I:=1 TO NFOR I:=1 TO N--1 DO BEGIN T:=I1 DO BEGIN T:=I;;FOR J:=IFOR J:=I++1 TO N DO IF A[J]1 TO N DO IF A[J]<<A[T] THEN T:=JA[T] THEN T:=J;;IF T≠I IF T≠I THEN BEGIN WORK:=A[T]THEN BEGIN WORK:=A[T];;A[T]:=A[I]A[T]:=A[I];;A[I]:=WORKA[I]:=WORK;;END END ENDEND;;•由于一行中包括了多个语句,掩盖了程序的由于一行中包括了多个语句,掩盖了程序的循环循环结构结构和和条件结构条件结构,使其可读性变得很差。
使其可读性变得很差40下页下页末页末页上页上页首页首页目录目录FOR I:=1 TO N-1 DO FOR I:=1 TO N-1 DO ////改进布局改进布局 BEGINBEGIN T:=I T:=I;; FOR J:=IFOR J:=I++1 TO N DO1 TO N DO IF A[J] IF A[J]<<A[T] THEN T:=JA[T] THEN T:=J;; IF T≠I THENIF T≠I THEN BEGIN BEGIN WORK:=A[T] WORK:=A[T];; A[T]:=A[I]A[T]:=A[I];; A[I]:=WORKA[I]:=WORK;; ENDEND ENDEND41下页下页末页末页上页上页首页首页目录目录•程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。
程序编写得过于紧凑•例,例,有一个用有一个用 C C 语句写出的程序段:语句写出的程序段: A[I] = A[I]A[I] = A[I]++A[T]A[T];;A[T] = A[I]A[T] = A[I]--A[T]A[T];;A[I] = A[I]A[I] = A[I]--A[T]A[T];;•此段程序可能不易看懂,有时还需用实际数据试验一下此段程序可能不易看懂,有时还需用实际数据试验一下•实际上,这段程序的功能就是实际上,这段程序的功能就是交换交换A[I]A[I]和和A[T]A[T]中中的内容目的是为了节省一个工作单元如果改一下:目的是为了节省一个工作单元如果改一下: WORK = A[T]WORK = A[T];; A[T] = A[I]A[T] = A[I];; A[I] = WORKA[I] = WORK;;就能让读者一目了然了就能让读者一目了然了42下页下页末页末页上页上页首页首页目录目录•程序编写得要简单,写清楚,直截了当地说程序编写得要简单,写清楚,直截了当地说明程序员的用意。
例如,明程序员的用意例如, for ( for ( i i = 1; = 1; i i <= <= n n; ; i i++ )++ ) for ( for ( j j = 1; = 1; j j <= <= n n; ; j j++ )++ ) V V[ [i i][][j j] ] == ( ( i i//j j ) * ( ) * ( j j//i i ) )除法运算(/)在除数和被除数都是除法运算(/)在除数和被除数都是整型量整型量时,时,其结果只取整数部分,而得到整型量其结果只取整数部分,而得到整型量43下页下页末页末页上页上页首页首页目录目录 当当 i i<<j j 时时, , i / j = 0i / j = 0 当当 j j<<i i 时时, , j / i = 0j / i = 0 得到的数组得到的数组 当当i≠ji≠j 时时 V[i][jV[i][j] = ( i] = ( i//j ) * ( jj ) * ( j//i ) = 0i ) = 0 当当i i==j j 时时 V[i][jV[i][j] = ( i] = ( i//j ) * ( jj ) * ( j//i ) = 1i ) = 1这样得到的结果这样得到的结果 V V 是一个单位矩阵。
是一个单位矩阵44下页下页末页末页上页上页首页首页目录目录•写成以下的形式,就能让读者直接了解程序编写写成以下的形式,就能让读者直接了解程序编写者的意图者的意图 for ( for ( i i==1; 1; i i <= <= n n; ; i i++ )++ ) for ( for ( j j==1; 1; j j <= <= n n; ; j j++ )++ ) if ( if ( i == ji == j ) ) V V[ [i i][][j j] ] == 1.0;1.0; ELSE ELSE V V[ [i i][][j j] ] == 0.0;0.0;45下页下页末页末页上页上页首页首页目录目录46下页下页末页末页上页上页首页首页目录目录4)4)除非对效率有特殊的要求除非对效率有特殊的要求, , 程序编写要程序编写要做到做到清晰第一,效率第二。
清晰第一,效率第二不要为了追不要为了追求效率而丧失了清晰性事实上,求效率而丧失了清晰性事实上,程序程序效率的提高主要应通过选择高效的算法效率的提高主要应通过选择高效的算法来实现5)5)首先要保证首先要保证程序正确程序正确, , 然后才要求然后才要求提提高速度反过来说,在使程序高速运行反过来说,在使程序高速运行时,首先要保证它是正确的时,首先要保证它是正确的47下页下页末页末页上页上页首页首页目录目录6)6)避免避免使用临时变量使用临时变量而使可读性下降而使可读性下降例,例,有有的程序员为了追求效率,往往喜欢把表达式的程序员为了追求效率,往往喜欢把表达式 A[I]A[I]++1 1//A[I];A[I]; 写成写成 AIAI==A[I]; A[I]; X X==AIAI++1 1//AI;AI; 这样将一句分成两句写,会产生意想这样将一句分成两句写,会产生意想不到的问题不到的问题48下页下页末页末页上页上页首页首页目录目录7)7)让编译程序做简单的优化让编译程序做简单的优化8)8)尽可能尽可能使用库函数使用库函数9) 9) 避免避免不必要的转移。
不必要的转移同时如果能保持程同时如果能保持程序可读性,则不必用序可读性,则不必用GOTOGOTO语句 例,例,有一个求三个数中最小值的程序:有一个求三个数中最小值的程序: 49下页下页末页末页上页上页首页首页目录目录 IF ( XIF ( X<< Y ) GOTO 30Y ) GOTO 30 IF (Y IF (Y<< Z) GOTO 50Z) GOTO 50 SMALL SMALL==Z Z GOTO 60 GOTO 6030 IF ( X 30 IF ( X << Z Z))GOTO 60GOTO 60 SMALL SMALL==Z Z GOTO 60 GOTO 6050 SMALL50 SMALL==Y Y GOTO 60 GOTO 6060 SMALL60 SMALL==X X70 CONTINUE70 CONTINUE50下页下页末页末页上页上页首页首页目录目录 程序只需编写成:程序只需编写成: smallsmall==x x; ; if ( if ( y y < < smallsmall ) ) smallsmall==y y; ; if ( if ( z z < < smallsmall ) ) smallsmall==z z; ; 所以程序应当简单,不必过于深奥,避免使所以程序应当简单,不必过于深奥,避免使用用GOTOGOTO语句绕来绕去。
语句绕来绕去10)10)尽量只采用尽量只采用三种基本的控制结构三种基本的控制结构来编写程序来编写程序除除顺序结构顺序结构外,外, 使用使用 if-then-elseif-then-else来实现来实现选择结构选择结构;; 使用使用do-untildo-until或或do-whiledo-while来实现来实现循环结构循环结构51下页下页末页末页上页上页首页首页目录目录11)11) 避免使用避免使用空的空的ELSEELSE语句和语句和IFIF…… THEN IF THEN IF……的的语句这种结构容易使读者产生误解例如,语句这种结构容易使读者产生误解例如, ifif ( ( charchar >= >= ‘‘a a ’’) ) ifif ( ( charchar <= <= ‘‘z z’’ ) ) coutcout << << ““This is a letter.This is a letter.””; ; else else coutcout << <<““This is not a letter.This is not a letter.””; ; 可能产生二义性问题。
可能产生二义性问题 52下页下页末页末页上页上页首页首页目录目录12)12)避免采用过于复杂的条件测试避免采用过于复杂的条件测试13)13)尽量尽量减少减少使用使用““否定否定””条件的条件语句条件的条件语句例如,如果在程序中出现例如,如果在程序中出现 if ( !( charif ( !( char<<‘‘0 0’’ || char || char >>‘‘9 9’’ ) ) ) ) …………改成改成 if ( char >= '0if ( char >= '0’’ && char <= '9 && char <= '9’’ ) ) …………不要让读者绕弯子想不要让读者绕弯子想53下页下页末页末页上页上页首页首页目录目录14) 14) 尽可能用尽可能用通俗易懂的伪码通俗易懂的伪码来描述程序的流程,来描述程序的流程,然后再翻译成必须使用的语言然后再翻译成必须使用的语言15)15)数据结构要有利于程序的简化数据结构要有利于程序的简化16)16)要要模块化模块化,使模块功能尽可能单一化,模块间的,使模块功能尽可能单一化,模块间的耦合能够清晰可见。
耦合能够清晰可见17) 17) 利用利用信息隐蔽信息隐蔽,确保每一个模块的独立性确保每一个模块的独立性54下页下页末页末页上页上页首页首页目录目录18)18)从从数据数据出发去构造程序出发去构造程序19) 19) 不要修补不好的程序,要不要修补不好的程序,要重新编写重新编写也不要一味也不要一味地追求代码的复用,要地追求代码的复用,要重新组织重新组织20) 20) 对太大的程序,要对太大的程序,要分块编写、测试,然后再集成分块编写、测试,然后再集成21) 21) 对递归定义的数据结构尽量使用递归过程对递归定义的数据结构尽量使用递归过程55下页下页末页末页上页上页首页首页目录目录•输入和输出信息是与用户的使用直接相关的输入和输出信息是与用户的使用直接相关的输入和输出的方式和格式应当尽可能方便用户输入和输出的方式和格式应当尽可能方便用户的使用一定要避免因设计不当给用户带来的的使用一定要避免因设计不当给用户带来的麻烦•因此,在信息体统需求分析阶段和设计阶段,因此,在信息体统需求分析阶段和设计阶段,就应基本确定输入和输出的风格就应基本确定输入和输出的风格系统能否被系统能否被用户接受,有时就取决于用户接受,有时就取决于输入和输出的风格。
输入和输出的风格56下页下页末页末页上页上页首页首页目录目录•不论是不论是批处理的输入/输出方式批处理的输入/输出方式,还是,还是交互式的输交互式的输入/输出方式入/输出方式,在设计和编码时都应考虑下列原则,在设计和编码时都应考虑下列原则(9(9个个) ):: 1)1)对所有的输入数据都要进行检验,识别错误的输对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;入,以保证每个数据的有效性;2)2)检查输入项的各种重要组合的合理性,必要时报检查输入项的各种重要组合的合理性,必要时报告输入状态信息;告输入状态信息;3)3)使得输入的步骤和操作尽可能简单,并保持简单使得输入的步骤和操作尽可能简单,并保持简单的输入格式;的输入格式;57下页下页末页末页上页上页首页首页目录目录 4) 4) 输入数据时,应允许使用自由格式输入;输入数据时,应允许使用自由格式输入; 5)5)应允许缺省值;应允许缺省值; 6) 6) 输入一批数据时,最好使用输入结束标志,而输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;不要由用户指定输入数据数目; 7) 7) 在交互式输入输入时,要在屏幕上使用提示符在交互式输入输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的明确提示交互输入的请求,指明可使用选择项的种类和取值范围。
同时,在数据输入的过程中和种类和取值范围同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;输入结束时,也要在屏幕上给出状态信息;58下页下页末页末页上页上页首页首页目录目录 8)8) 当程序设计语言对输入/输出格式有严当程序设计语言对输入/输出格式有严格要求时,应保持输入格式与输入语句的要格要求时,应保持输入格式与输入语句的要求的一致性;求的一致性;9) 9) 给所有的输出加注解,并设计给所有的输出加注解,并设计输出报表输出报表格式 输入/输出风格还受到许多其它因素输入/输出风格还受到许多其它因素的影响如的影响如输入/输出设备输入/输出设备(例如终端的类型,(例如终端的类型,图形设备,数字化转换设备等)图形设备,数字化转换设备等)、用户的熟练程度、、用户的熟练程度、以及通信环境等以及通信环境等 59下页下页末页末页上页上页首页首页目录目录1 1 讨论效率的准则讨论效率的准则程序的效率是指程序的效率是指程序的执行速度程序的执行速度及及程序所需占用程序所需占用的内存的存储空间的内存的存储空间 程序编码是最后提高运行速度和节省存储的程序编码是最后提高运行速度和节省存储的机会,因此在此阶段不能不考虑程序的效率。
机会,因此在此阶段不能不考虑程序的效率让让我们首先明确讨论程序效率的几条准则我们首先明确讨论程序效率的几条准则60下页下页末页末页上页上页首页首页目录目录–1)1)效率是一个性能要求,应当在需求分析阶段效率是一个性能要求,应当在需求分析阶段给出系统效率以需求为准系统效率以需求为准,不应以人力所及为,不应以人力所及为准–2)2)好的设计可以提高效率好的设计可以提高效率–3)3)程序的程序的效率与程序的简单性效率与程序的简单性相关–4)4)一般说来,任何对效率无重要改善,且对程一般说来,任何对效率无重要改善,且对程序的序的简单性简单性、、可读性可读性和和正确性正确性不利的程序设计方不利的程序设计方法都是不可取的法都是不可取的 总之总之, ,不要牺牲程序的清晰性、可读性或不要牺牲程序的清晰性、可读性或正确性而去追求效率,那是不会有本质的提高正确性而去追求效率,那是不会有本质的提高61下页下页末页末页上页上页首页首页目录目录2 2 算法对效率的影响算法对效率的影响•源程序的源程序的效率与详细设计阶段确定的算法的效率与详细设计阶段确定的算法的效率直接有关效率直接有关。
详细设计翻译转换成源程序详细设计翻译转换成源程序代码后,算法效率反映为程序的执行速度和代码后,算法效率反映为程序的执行速度和存储容量的要求存储容量的要求•设计向程序转换过程中的指导原则:设计向程序转换过程中的指导原则:62下页下页末页末页上页上页首页首页目录目录 ①① 在编程序前,尽可能在编程序前,尽可能化简化简有关的有关的算术表达式和逻辑表达式;算术表达式和逻辑表达式; ②② 仔细检查算法中的仔细检查算法中的嵌套嵌套的循环,尽可能将某些语句或表达式移到循的循环,尽可能将某些语句或表达式移到循环外面;环外面; ③③ 尽量避免使用尽量避免使用多维多维数组;数组; ④④ 尽量避免使用尽量避免使用指针和复杂指针和复杂的表;的表; ⑤⑤ 采用采用““快速快速””的算术运算;的算术运算; ⑥ ⑥ 不要混淆数据类型,避免在表达式中出现类型不要混淆数据类型,避免在表达式中出现类型混杂混杂;; ⑦ ⑦ 尽量采用尽量采用整数算术表达式和布尔表达式整数算术表达式和布尔表达式;; ⑧ ⑧ 选用等效的高效率算法;选用等效的高效率算法; 许多编译程序具有许多编译程序具有““优化优化””功能,可以自动生成高效率的目标代码。
功能,可以自动生成高效率的目标代码63下页下页末页末页上页上页首页首页目录目录3 3影响存储器效率的因素影响存储器效率的因素 •在大中型计算机系统中,存储限制不再是主要问题在这种在大中型计算机系统中,存储限制不再是主要问题在这种环境下,对环境下,对内存采取基于操作系统的内存采取基于操作系统的分页功能的虚拟存储管分页功能的虚拟存储管理存储效率与操作系统的分页功能直接有关存储效率与操作系统的分页功能直接有关•采用结构化程序设计,采用结构化程序设计,将程序功能合理分块将程序功能合理分块,,使每个模块或使每个模块或一组密切相关模块的程序体积大小与每页的容量相匹配一组密切相关模块的程序体积大小与每页的容量相匹配,可,可减少页面调度,减少内外存交换,提高存储效率减少页面调度,减少内外存交换,提高存储效率•在微型计算机系统中,存储器的容量对系统设计和编码的制在微型计算机系统中,存储器的容量对系统设计和编码的制约很大因此约很大因此要选择可生成较短目标代码且存储压缩性能优要选择可生成较短目标代码且存储压缩性能优良的编译程序良的编译程序,有时需采用汇编程序有时需采用汇编程序•提高存储器效率的关键是提高存储器效率的关键是程序的简单性。
程序的简单性64下页下页末页末页上页上页首页首页目录目录4 4 影响输入/输出效率的因素影响输入/输出效率的因素•输入/输出可分为两种类型:输入/输出可分为两种类型:– 面向人面向人( (操作员操作员) )的输入/输出的输入/输出– 面向设备的输入/输出面向设备的输入/输出•如果操作员能够十分方便、简单地录入输如果操作员能够十分方便、简单地录入输入数据,或者能够十分直观、一目了然地入数据,或者能够十分直观、一目了然地了解输出信息,则可以说了解输出信息,则可以说面向人面向人的输入/的输入/输出是高效的输出是高效的65下页下页末页末页上页上页首页首页目录目录•关于关于面向设备的输入面向设备的输入/ /输出输出,可以提出一些提高,可以提出一些提高输入输入/ /输出效率的指导原则输出效率的指导原则(7)(7)::– 输入输入/ /输出的请求应当最小化;输出的请求应当最小化;– 对于所有的输入对于所有的输入/ /输出操作,输出操作,安排适当的缓安排适当的缓冲区冲区,以减少频繁的信息交换;,以减少频繁的信息交换;– 对辅助存储对辅助存储( (例如磁盘例如磁盘) ),,选择尽可能简单的,选择尽可能简单的,可接受的存取方法;可接受的存取方法;66下页下页末页末页上页上页首页首页目录目录– 对辅助存储的输入对辅助存储的输入/ /输出,应当输出,应当成块传送成块传送;;– 对终端或打印机的输入对终端或打印机的输入/ /输出,应考虑设备特性输出,应考虑设备特性,,尽可能改善输入尽可能改善输入/ /输出的质量和速度;输出的质量和速度;– 任何不易理解的,对改善输入任何不易理解的,对改善输入/ /输出效果关系不输出效果关系不大的措施都是不可取的;大的措施都是不可取的;– 任何不易理解的所谓任何不易理解的所谓““超高效超高效””的输入的输入/ /输出是输出是毫无价值的;毫无价值的;67下页下页末页末页上页上页首页首页目录目录u 编码阶段的主要任务是编码阶段的主要任务是将详细设计确定的具体算法用程序将详细设计确定的具体算法用程序设计语言描述出来,生成目标系统对应的源程序设计语言描述出来,生成目标系统对应的源程序。
这个阶段在这个阶段在整个系统开发过程中所占用的时间较短,且实现较为容易虽整个系统开发过程中所占用的时间较短,且实现较为容易虽然系统的质量主要取决于分析与设计阶段的工作,但编码阶段然系统的质量主要取决于分析与设计阶段的工作,但编码阶段对程序设计语言的选择和编码的风格,也对系统质量具有一定对程序设计语言的选择和编码的风格,也对系统质量具有一定的影响,特别是直接影响着程序的的影响,特别是直接影响着程序的可靠性、可读性、可测试性可靠性、可读性、可测试性和可维护性和可维护性u系统开发人员应根据开发项目的具体特点及语言自身的特性系统开发人员应根据开发项目的具体特点及语言自身的特性选择使用合适的程序设计语言进行编码,并在编码过程中注意选择使用合适的程序设计语言进行编码,并在编码过程中注意保持良好的编码风格在系统正确、清晰的前提下,开发人员保持良好的编码风格在系统正确、清晰的前提下,开发人员可以采用一些有效的措施适当地提高系统的效率可以采用一些有效的措施适当地提高系统的效率68下页下页末页末页上页上页首页首页目录目录Ø 6.4.1 6.4.1 测试的目的和原则测试的目的和原则Ø 6.4.2 6.4.2 系统测试系统测试方法方法Ø6.4.3 6.4.3 系统测试策略系统测试策略Ø6.4.4 6.4.4 系统测试系统测试种类种类Ø6.4.5 6.4.5 程序调试程序调试69下页下页末页末页上页上页首页首页目录目录1 1 系统测试的概念和目的系统测试的概念和目的2 2 系统测试的原则系统测试的原则3 3 系统测试的对象系统测试的对象4 4 测试信息流测试信息流5 5 测试的步骤测试的步骤6 6 测试与系统开发各阶段的关系测试与系统开发各阶段的关系70下页下页末页末页上页上页首页首页目录目录1 1 系统测试的概念和目的系统测试的概念和目的•系统测试的概念:系统测试的概念:ü所谓系统测试就是为了发现程序中的错误而执行程序所谓系统测试就是为了发现程序中的错误而执行程序的过程。
具体地说,系统测试是根据系统开发各阶段的过程具体地说,系统测试是根据系统开发各阶段的规格说明和程序的内部结构而精心设计出一批测试的规格说明和程序的内部结构而精心设计出一批测试用例(用例(包括测试的数据和预期的输出结果包括测试的数据和预期的输出结果),并利用),并利用测试用例来运行程序,以发现程序错误的过程测试用例来运行程序,以发现程序错误的过程 71下页下页末页末页上页上页首页首页目录目录1 1 系统测试的目的系统测试的目的•基于不同的立场,存在着两种完全不同的测试目的基于不同的立场,存在着两种完全不同的测试目的ü从从用户的角度用户的角度出发,普遍希望通过系统测试出发,普遍希望通过系统测试暴露系统暴露系统中隐藏的错误和缺陷中隐藏的错误和缺陷,以考虑是否可接受该产品以考虑是否可接受该产品ü从从系统开发者的角度系统开发者的角度出发,则希望测试成为出发,则希望测试成为表明系统表明系统产品中不存在错误产品中不存在错误的过程,验证该系统已正确地实现的过程,验证该系统已正确地实现了用户的要求,确立人们对系统质量的信心了用户的要求,确立人们对系统质量的信心72下页下页末页末页上页上页首页首页目录目录MyersMyers的的系统测试目的系统测试目的(1) (1) 测试是测试是程序的执行过程,程序的执行过程,目的在于目的在于发现错误;发现错误;(2) (2) 一个好的测试用例在于一个好的测试用例在于能发现至今能发现至今未发现的错误;未发现的错误;(3) (3) 一个成功的测试是一个成功的测试是发现了至今未发现的错误的发现了至今未发现的错误的测试。
测试73下页下页末页末页上页上页首页首页目录目录•换言之,测试的目的是换言之,测试的目的是: :– 想以最少的时间和人力,想以最少的时间和人力,系统地找出系系统地找出系统中潜在的各种错误和缺陷统中潜在的各种错误和缺陷如果我们成如果我们成功地实施了测试,我们就能够发现系统中功地实施了测试,我们就能够发现系统中的错误– 测试的附带收获是,它测试的附带收获是,它能够证明系统的能够证明系统的功能和性能与需求说明相符合功能和性能与需求说明相符合– 实施测试收集到的测试结果数据为可靠实施测试收集到的测试结果数据为可靠性分析提供了依据性分析提供了依据– 测试不能表明系统中不存在错误,它只测试不能表明系统中不存在错误,它只能说明系统中存在错误能说明系统中存在错误74下页下页末页末页上页上页首页首页目录目录2 2 系系统统测测试试的的原原则则(8(8个个) )1)1)应当把应当把““尽早地和不断地进行系统测试尽早地和不断地进行系统测试””作为系作为系统开发者的座右铭统开发者的座右铭2) 2) 测试用例应由测试用例应由测试输入数据测试输入数据和对应的和对应的预期输出预期输出结果结果这两部分组成。
这两部分组成3) 3) 程序员应避免检查自己的程序程序员应避免检查自己的程序4) 4) 在设计测试用例时,应包括在设计测试用例时,应包括合理的输入条件合理的输入条件和和不合理的输入条件不合理的输入条件75下页下页末页末页上页上页首页首页目录目录5)5)充分注意测试中的群集现象充分注意测试中的群集现象经验表明,经验表明,测试后测试后程序中残存的错误数目程序中残存的错误数目与该程序中已发现的错误数目成正比与该程序中已发现的错误数目成正比6)6)严格执行测试计划,严格执行测试计划,排除测试的随意性排除测试的随意性7) 7) 应当对每一个测试结果做全面检查应当对每一个测试结果做全面检查8)8)妥善保存测试计划,测试用例,出错统计妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便和最终分析报告,为维护提供方便76下页下页末页末页上页上页首页首页目录目录•系统测试并不等于程序测试系统测试并不等于程序测试系统测试应贯系统测试应贯穿于系统定义与开发的整个期间穿于系统定义与开发的整个期间•需求分析需求分析、、概要设计概要设计、、详细设计以及程序编详细设计以及程序编码码等各阶段所得到的等各阶段所得到的文档文档,,包括需求规格说包括需求规格说明、概要设计规格说明、详细设计规格说明明、概要设计规格说明、详细设计规格说明以及源程序,以及源程序,都应成为系统测试的对象都应成为系统测试的对象。
3 3 系系统统测测试试的的对对象象77下页下页末页末页上页上页首页首页目录目录Ø为把握系统开发各个环节的正确性,需要进行为把握系统开发各个环节的正确性,需要进行各种各种确认确认和和验证验证工作Ø确认确认( (ValidationValidation) ),是一系列的活动和过程,,是一系列的活动和过程,目的是想证实在一个给定的外部环境中系统目的是想证实在一个给定的外部环境中系统的逻辑正确性的逻辑正确性– 需求规格说明确认需求规格说明确认– 程序确认程序确认 ( (静态确认、动态确认静态确认、动态确认) ) Ø验证验证( (VerificationVerification) ),试图证明在系统生存期,试图证明在系统生存期各个阶段以及阶段间的各个阶段以及阶段间的逻辑协调性、完备性和正逻辑协调性、完备性和正确性78下页下页末页末页上页上页首页首页目录目录8/12/20247979下页下页末页末页上页上页首页首页目录目录80下页下页末页末页上页上页首页首页目录目录4 4 测试信息流测试信息流ü系统配置:系统配置:系统需求规格说明、系统设计规系统需求规格说明、系统设计规格说明、源代码等;格说明、源代码等;ü测试配置:测试配置:测试计划、测试用例、测试程序测试计划、测试用例、测试程序等;等;ü测试工具:测试工具:测试数据自动生成程序、静态分测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等等。
以及驱动测试的测试数据库等等81下页下页末页末页上页上页首页首页目录目录ü测试结果分析:测试结果分析:比较实测结果与预期结果,比较实测结果与预期结果,评价错误是否发生评价错误是否发生ü排错排错( (调试调试) )::对已经发现的错误进行错误定位和对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的确定出错性质,并改正这些错误,同时修改相关的文档ü修正后的文档再测试:修正后的文档再测试:直到通过测试为止直到通过测试为止82下页下页末页末页上页上页首页首页目录目录ü通过收集和分析测试结果数据,对系统建通过收集和分析测试结果数据,对系统建立可靠性模型立可靠性模型ü利用可靠性分析,利用可靠性分析,评价评价系统质量:系统质量:– 系统的质量和可靠性达到可以接受的系统的质量和可靠性达到可以接受的程度;程度;– 所做的测试不足以发现严重的错误;所做的测试不足以发现严重的错误;ü如果测试发现不了错误,可以肯定,测试如果测试发现不了错误,可以肯定,测试配置考虑得配置考虑得不够细致充分,不够细致充分,错误仍然潜伏错误仍然潜伏在系统中在系统中83下页下页末页末页上页上页首页首页目录目录5 5 测试的步骤 系统测试是按照与系统开发相反的方向系统测试是按照与系统开发相反的方向来进行的。
依次为:来进行的依次为:单元测试单元测试( (模块测试模块测试) )、、集成测试、系统测试和验收测试集成测试、系统测试和验收测试84下页下页末页末页上页上页首页首页目录目录 设计信设计信息息可可运运行行系系统统系统其它系统其它元素元素单单元元测试测试单单元元测试测试单单元元测试测试集集成成测试测试系系统统测试测试验验收收测试测试软件需求软件需求信息信息测后软件测后软件测后模块测后模块模块模块模块模块模块模块确认后软件确认后软件 85•管理流程(单元测试)–主要指动态测试应用流程主要指动态测试应用流程测试计划测试计划测试设计测试设计测试执行测试执行测试记录测试记录分析分析测试总结测试总结完毕完毕缺陷跟踪缺陷跟踪针对测试目标,规定测试针对测试目标,规定测试任务、资源分配、人员角任务、资源分配、人员角色、进度安排等色、进度安排等根据测试计划,设计测试根据测试计划,设计测试用例,包括:测试步骤、用例,包括:测试步骤、测试场景、测试代码、测测试场景、测试代码、测试数据试数据(包括预期结果包括预期结果)根据测试计划,配置测试根据测试计划,配置测试环境,并手动或者自动执环境,并手动或者自动执行测试设计。
行测试设计根据测试计划,忠根据测试计划,忠实地记录测试执行实地记录测试执行的过程和结果的过程和结果分析测试记录,如分析测试记录,如果发现与预期结果果发现与预期结果不同,确定并重现不同,确定并重现缺陷检查测试设计是否检查测试设计是否全部执行完毕,缺全部执行完毕,缺陷是否全部关闭陷是否全部关闭记录、分发、记录、分发、评估、关闭缺评估、关闭缺陷报告分析测试过程和缺陷报告,分析测试过程和缺陷报告,评估测试质量和测试效果,评估测试质量和测试效果,给出是否通过测试的建议给出是否通过测试的建议86•测试文档(单元测试)–主要指动态测试应用文档主要指动态测试应用文档测试计划测试计划测试设计测试设计测试执行测试执行测试记录测试记录分析分析测试总结测试总结完毕完毕缺陷跟踪缺陷跟踪测试计划文档测试计划文档测试用例文档测试用例文档测试记录文档测试记录文档缺陷跟踪报告缺陷跟踪报告测试总结报告测试总结报告87下页下页末页末页上页上页首页首页目录目录6 6 测试与系统开发各阶段的关系测试与系统开发各阶段的关系Ø系统开发过程是一个系统开发过程是一个自顶向下,逐步细化自顶向下,逐步细化的过程;的过程;Ø系统规划阶段系统规划阶段定义系统作用域;定义系统作用域;Ø系统需求分析建立系统需求分析建立系统信息域、功能和性能需求、系统信息域、功能和性能需求、约束等;约束等;Ø系统设计阶段构造出系统设计阶段构造出物理模型;物理模型;Ø系统实施把设计用某种程序设计语言转换成程序系统实施把设计用某种程序设计语言转换成程序代码。
代码88下页下页末页末页上页上页首页首页目录目录•测试过程是依相反顺序安排的自底向上,逐步集测试过程是依相反顺序安排的自底向上,逐步集成的过程成的过程89下页下页末页末页上页上页首页首页目录目录1 1.静态测试.静态测试q静静态态测测试试是是采采用用人人工工检检测测和和计计算算机机辅辅助助静静态态分分析的方法对程序进行检测析的方法对程序进行检测人人工工检检测测是是指指靠靠人人工工走走查查程程序序或或评评审审软软件件这这种种走走查查与与评评审审主主要要针针对对编编码码的的质质量量和和软软件件开开发发各各个个阶阶段段的的文文档档,,特特别别是是总总体体设设计计和和详详细细设设计计阶阶段段的的错错误误能能发发现现30%~70%30%~70%的的逻逻辑辑设设计计和和编编码错误90下页下页末页末页上页上页首页首页目录目录1. 1. 静态测试静态测试q静静态态测测试试是是采采用用人人工工检检测测和和计计算算机机辅辅助助静静态态分分析的方法对程序进行检测析的方法对程序进行检测计计算算机机辅辅助助静静态态分分析析是是指指利利用用静静态态分分析析软软件件工工具具对对程程序序进进行行静静态态分分析析,,主主要要检检测测变变量量是是否否用用错错、、参参数数是是否否匹匹配配、、循循环环嵌嵌套套是是否否有有错错、、是是否否有有死死循循环环和和永永远远执执行行不不到到的的死死代代码码等等等等。
同同时时,,它还可对程序的特性进行分析它还可对程序的特性进行分析91下页下页末页末页上页上页首页首页目录目录2.2.动态测试动态测试 动态测试是指事先设计好一组测试用例,动态测试是指事先设计好一组测试用例,然后通过运行程序来发现错误然后通过运行程序来发现错误动态测试有两种测试技术:动态测试有两种测试技术: 1 1)) 黑盒测试黑盒测试 2 2)) 白盒测试白盒测试92下页下页末页末页上页上页首页首页目录目录1 1 )黑盒测试)黑盒测试p这种方法是把这种方法是把测试对象测试对象看做看做一一个黑盒子个黑盒子,测试人,测试人员完全不考虑程序内部的逻辑结构和内部特性,员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明是否符合它的功能说明p黑盒测试又叫做黑盒测试又叫做功能测试功能测试或或数据驱动测试数据驱动测试93下页下页末页末页上页上页首页首页目录目录ü黑盒测试方法是在程序接口上进行测试,主要是为了发现以黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误下错误: :–是否有不正确或遗漏了的功能是否有不正确或遗漏了的功能? ?–在接口上,输入能否正确地接受在接口上,输入能否正确地接受? ? 能否输出正确的结果能否输出正确的结果? ?– 是否有数据结构错误或外部信息是否有数据结构错误或外部信息( (例如数据文件例如数据文件) )访问错访问错误误? ?– 性能上是否能够满足要求性能上是否能够满足要求? ?– 是否有初始化或终止性错误是否有初始化或终止性错误? ? ü用黑盒测试发现程序中的错误,必须在用黑盒测试发现程序中的错误,必须在所有所有可能的输入条件可能的输入条件和输出条件和输出条件中确定中确定测试数据测试数据,来检查程序是否都能产生正确,来检查程序是否都能产生正确的输出的输出,但这是但这是不可能不可能的。
的94下页下页末页末页上页上页首页首页目录目录•假设一个假设一个程序程序P P有有输入量输入量X X和和Y Y及及输出量输出量Z Z在字长为在字长为3232位的计算机上运行若位的计算机上运行若X X、、Y Y取整数,按黑盒方法进行穷举测试:取整数,按黑盒方法进行穷举测试:•可能采用的可能采用的 测试数据组:测试数据组: 2 23232××2 23232 ==2 26464 •如果测试一组数据需要如果测试一组数据需要1 1毫秒,一年工毫秒,一年工作作365365×× 24 24小时,完成所有测试需小时,完成所有测试需5 5亿亿年年95下页下页末页末页上页上页首页首页目录目录2 2 )白盒测试)白盒测试ü此方法此方法把测试对象看做一个透明的盒子把测试对象看做一个透明的盒子,,它允许测试人员利用程序内部的逻辑结它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试对程序所有逻辑路径进行测试ü通过在不同点检查程序的状态,确定实通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
因此际的状态是否与预期的状态一致因此白盒测试又称为白盒测试又称为结构测试或逻辑驱动测结构测试或逻辑驱动测试96下页下页末页末页上页上页首页首页目录目录Ø系统人员使用白盒测试方法,主要想对程序模块进行如下的系统人员使用白盒测试方法,主要想对程序模块进行如下的检查:检查:–对程序模块的对程序模块的所有独立的执行路径所有独立的执行路径至少测试一次;至少测试一次;–对对所有的逻辑判定,取所有的逻辑判定,取““真真””与取与取““假假””的两种情况都至的两种情况都至少测试一次;少测试一次;– 在循环的边界和运行界限内执行循环体;在循环的边界和运行界限内执行循环体;– 测试测试内部数据结构的有效性内部数据结构的有效性等Ø对一个具有对一个具有多重选择和循环嵌套多重选择和循环嵌套的程序,的程序,不同的路径数目可不同的路径数目可能是天文数字能是天文数字给出一个小程序的流程图,它包括了一个执给出一个小程序的流程图,它包括了一个执行行2020次的循环次的循环97下页下页末页末页上页上页首页首页目录目录Ø包含的不同执行路径数达包含的不同执行路径数达520条,对每一条路径进条,对每一条路径进行测试需要行测试需要1毫秒毫秒,假定一年工作,假定一年工作365 × 24小时,要小时,要想把所有路径测试完,需想把所有路径测试完,需3160年年。
98下页下页末页末页上页上页首页首页目录目录3.3.测试用例测试用例————为了进行有效的测试而设计的输入为了进行有效的测试而设计的输入数据和预期的输出结果数据数据和预期的输出结果数据ü 测试用例设计的基本目的是确定一组最有可能测试用例设计的基本目的是确定一组最有可能发现某个错误或某类错误的测试数据发现某个错误或某类错误的测试数据ü 测试用例的设计只能在周期和经费允许的条件测试用例的设计只能在周期和经费允许的条件下,使用最少数目的测试用例,发现最大数目可下,使用最少数目的测试用例,发现最大数目可能的错误能的错误99下页下页末页末页上页上页首页首页目录目录逻辑覆盖:逻辑覆盖:– 语句覆语句覆盖盖– 判定覆判定覆盖盖– 条件覆盖条件覆盖– 判定-条件覆盖判定-条件覆盖– 条件组合覆盖条件组合覆盖– 路径覆盖路径覆盖逻辑覆盖是以逻辑覆盖是以程序内部的逻辑结构为程序内部的逻辑结构为基础基础的设计测试用例的技术它属白的设计测试用例的技术它属白盒测试白盒测试的测试用例设计白盒测试的测试用例设计100下页下页末页末页上页上页首页首页目录目录(A>1) and (B=0)(A=2) or (X>1)X=X/AX=X+1T TT TF FF Fabdce101下页下页末页末页上页上页首页首页目录目录L1 ( a c e )= {(A>1) and (B=0)} and {(A=2) or (X/A>1)}= (A>1) and (B=0) and (A=2) or (A>1) and (B=0) and (X/A>1)= (A=2) and (B=0) or (A>1) and (B=0) and (X/A>1) 102下页下页末页末页上页上页首页首页目录目录L2 ( a b d )= not{(A>1) and (B=0)} and not{(A=2) or (X>1)}= { not (A>1) or not (B=0) } and { not (A=2) and not (X>1) }= not (A>1) and not (A=2) and not (X>1)OR not (B=0) and not (A=2) and not (X>1)103下页下页末页末页上页上页首页首页目录目录L3 ( a b e)= not {(A>1) and (B=0)} and {(A=2) or (X>1)}= { not (A>1) or not (B=0)} and {(A=2) or (X>1)}= not (A>1) and (A=2) or not (A>1) and (X>1) or not (B=0) and (A=2) or not (B=0) and (X>1)104下页下页末页末页上页上页首页首页目录目录105L4 ( a c d )= {(A>1) and (B=0)} and not {(A=2) or (X/A>1)}= (A>1) and (B=0) and not (A=2) and not (X/A>1)105下页下页末页末页上页上页首页首页目录目录语句覆盖语句覆盖 •语句覆盖就是设计若干个测试用例,运行语句覆盖就是设计若干个测试用例,运行被测程序,使得被测程序,使得每一可执行语句至少执行每一可执行语句至少执行一次一次。
•在图例中,正好所有的可执行语句都在在图例中,正好所有的可执行语句都在路路径径L1L1上,所以选择上,所以选择路径路径 L1L1设计测试用例,设计测试用例,就可以覆盖所有的可执行语句就可以覆盖所有的可执行语句106下页下页末页末页上页上页首页首页目录目录•测试用例的设计格式如下测试用例的设计格式如下【【输入的输入的( (A A, , B B, , X X) ),输出的,输出的( (A A, , B B, , X X) )】】•为图例设计满足为图例设计满足语句覆盖语句覆盖的测试用例是的测试用例是: :【【(2, 0, 4)(2, 0, 4),,(2, 0, 3)(2, 0, 3)】】 覆盖覆盖 aceace【【L1L1】】(A=2) and (B=0) or (A>1) and (B=0) and (X/A>1) 107下页下页末页末页上页上页首页首页目录目录 判定覆盖判定覆盖•判定覆盖就是设计若干个测试用例,运行判定覆盖就是设计若干个测试用例,运行被测程序,使得被测程序,使得程序中每个判断的取真分程序中每个判断的取真分支和取假分支至少经历一次支和取假分支至少经历一次。
•判定覆盖又称为判定覆盖又称为分支覆盖分支覆盖•对于图例,如果选择对于图例,如果选择路径路径L1L1和和L2L2,就可得,就可得满足要求的测试用例满足要求的测试用例: :108下页下页末页末页上页上页首页首页目录目录•【(2, 0, 4),(2, 0, 3)】覆盖 ace【L1】【(1, 1, 1),(1, 1, 1)】覆盖 abd【L2】(A=2) and (B=0) or (A>1) and (B=0) and (X/A>1) not (A>1) and not (A=2) and not (X>1) or not (B=0) and not (A=2) and not (X>1)109下页下页末页末页上页上页首页首页目录目录•如果选择路径如果选择路径L3L3和和L4L4,还可得另一组可用,还可得另一组可用的测试用例的测试用例: :【【(2, 1, 1)(2, 1, 1),,(2, 1, 2)(2, 1, 2)】】覆盖覆盖 abeabe【【L3L3】】【【(3, 0, 3)(3, 0, 3),,(3, 0, 1)(3, 0, 1)】】覆盖覆盖 acdacd【【L4L4】】not (A>1) and (X>1) or not (B=0) and (A=2) or not (B=0) and (X>1)(A>1) and (B=0) and not (A=2) and not (X/A>1)110下页下页末页末页上页上页首页首页目录目录条件覆盖条件覆盖•条件覆盖就是设计若干个测试用例,运行条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中被测程序,使得程序中每个判断的每个判断的每个条每个条件的可能取值件的可能取值至少执行一次至少执行一次。
•在图例中,在图例中,我们事先可对所有条件的取值加以标记我们事先可对所有条件的取值加以标记例如:例如:•对于第一个判断:对于第一个判断:– 条件条件 A A>>1 1 取真为取真为 ,取假为,取假为 条件条件 B B==0 0 取真为取真为 ,取假为,取假为111下页下页末页末页上页上页首页首页目录目录•对于第二个判断:对于第二个判断:– 条件条件A A==2 2 取真取真 取假为取假为 条件条件X X>>1 1 取真取假为取真取假为 测试用例测试用例 覆盖分支覆盖分支 条件条件取值取值【【(2, 0, 4)(2, 0, 4),,(2, 0, 3)(2, 0, 3)】】 L1(c, e)L1(c, e) 【【(1, 0, 1)(1, 0, 1),,(1, 0, 1)(1, 0, 1)】】 L2(b, d) L2(b, d) 【【(2, 1, 1)(2, 1, 1),,(2, 1, 2)(2, 1, 2)】】 L3(b, e)L3(b, e)或或【【(1, 0, 3),,(1, 0, 4)】】 L3(b, e)L3(b, e) 【【(2, 1, 1),,(2, 1, 2)】】 L3(b, e)L3(b, e) 112下页下页末页末页上页上页首页首页目录目录 •判定-条件覆盖就是设计足够的测试用例,判定-条件覆盖就是设计足够的测试用例,使得使得判断中每个条件的所有可能取值至少判断中每个条件的所有可能取值至少执行一次执行一次,,每个判断中的每个分支至少执每个判断中的每个分支至少执行一次行一次。
判定-条件覆盖判定-条件覆盖113下页下页末页末页上页上页首页首页目录目录 测测 试试 用用 例例 覆盖分支覆盖分支 条件取值条件取值【【(2, 0, 4)(2, 0, 4),,(2, 0, 3)(2, 0, 3)】】L1(c, e)L1(c, e)【【(1, 1, 1)(1, 1, 1),, (1, 1, 1) (1, 1, 1) 】】L2(b, d) L2(b, d) (A=2) and (B=0) or (A>1) and (B=0) and (X/A>1) not (A>1) and not (A=2) and not (X>1) or not (B=0) and not (A=2) and not (X>1)114下页下页末页末页上页上页首页首页目录目录 andorA>1T TB=0T TX=X/AT TF FF FA=2T TF FX>1F FX=X+1115下页下页末页末页上页上页首页首页目录目录条件组合覆盖条件组合覆盖•条件组合覆盖就是设计足够的测试用例,运行被条件组合覆盖就是设计足够的测试用例,运行被测程序,使得测程序,使得每个判断的所有可能的条件取值组每个判断的所有可能的条件取值组合至少执行一次合至少执行一次。
记记 ① ① A A>>1, B1, B==0 0 作作 ② ② A A>>1, B≠0 1, B≠0 作作 ③ ③ A≯1, BA≯1, B==0 0 作作 ④ ④ A≯1, B≠0 A≯1, B≠0 作作116下页下页末页末页上页上页首页首页目录目录 ⑤⑤ A A==2, X2, X>>1 1 作作 ⑥ ⑥ A A==2, X≯1 2, X≯1 作作 ⑦ ⑦ A≠2, XA≠2, X>>1 1 作作 ⑧ ⑧ A≠2, X≯1 A≠2, X≯1 作作 测测 试试 用用 例例 覆盖条件覆盖条件 覆盖组合覆盖组合【【(2, 0, 4), (2, 0, 3)(2, 0, 4), (2, 0, 3)】】(L1)(L1) ①, ①, ⑤⑤【【(2, 1, 1), (2, 1, 2)(2, 1, 1), (2, 1, 2)】】(L3)(L3) ②, ②, ⑥⑥【【(1, 0, 3), (1, 0, 4)(1, 0, 3), (1, 0, 4)】】(L3)(L3) ③, ③, ⑦⑦【【(1, 1, 1), (1, 1, 1)(1, 1, 1), (1, 1, 1)】】(L2)(L2) ④, ④, ⑧⑧117下页下页末页末页上页上页首页首页目录目录路径覆盖路径覆盖•路径测试就是设计足够的测试用例,路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径覆盖程序中所有可能的路径。
测测 试试 用用 例例 通过路径通过路径 覆盖条件覆盖条件【【(2, 0, 4), (2, 0, 3)(2, 0, 4), (2, 0, 3)】】 ace (L1)ace (L1) 【【(1, 1, 1), (1, 1, 1)(1, 1, 1), (1, 1, 1)】】 abdabd (L2)(L2) 【【(1, 1, 2), (1, 1, 3)(1, 1, 2), (1, 1, 3)】】 abeabe (L3)(L3) 【【(3, 0, 3), (3, 0, 1)(3, 0, 3), (3, 0, 1)】】 acdacd (L4)(L4) 118下页下页末页末页上页上页首页首页目录目录黑盒测试的测试用例设计黑盒测试的测试用例设计– 1 1 等价类划分等价类划分– 2 2 边界值分析边界值分析– 3 3 错误推测法错误推测法– 4 4 因果图因果图119下页下页末页末页上页上页首页首页目录目录Ø等价类划分是一种典型的等价类划分是一种典型的黑盒测试黑盒测试方法,使用这一方法方法,使用这一方法时,时,完全不考虑程序的内部结构完全不考虑程序的内部结构,,只依据程序的规格说只依据程序的规格说明来设计测试用例明来设计测试用例。
Ø等价类划分方法等价类划分方法把所有可能的输入数据把所有可能的输入数据,即程序的输入,即程序的输入域域划分成若干部分划分成若干部分,然后,然后从每一部分中选取少数有代表从每一部分中选取少数有代表性的数据做为测试用例性的数据做为测试用例Ø使用这一方法设计测试用例要经历使用这一方法设计测试用例要经历划分等价类划分等价类(列出等(列出等价类表)和价类表)和选取测试用例选取测试用例两步Ø划分等价类划分等价类等价类是指某个输入域的子集合在该子集合中,等价类是指某个输入域的子集合在该子集合中,各个各个输入数据对于揭露程序中的错误都是等效的输入数据对于揭露程序中的错误都是等效的测试某等测试某等价类的价类的代表值代表值就等价于对这一类其它值的测试就等价于对这一类其它值的测试120下页下页末页末页上页上页首页首页目录目录ü等价类的划分有两种不同的情况:等价类的划分有两种不同的情况:①① 有效等价类有效等价类:是指对于程序的规格说明来:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集说,是合理的,有意义的输入数据构成的集合 ②② 无效等价类无效等价类:是指对于程序的规格说明:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成来说,是不合理的,无意义的输入数据构成的集合。
的集合ü在设计测试用例时,要同时考虑有效等价类在设计测试用例时,要同时考虑有效等价类和无效等价类的设计和无效等价类的设计121下页下页末页末页上页上页首页首页目录目录•划分等价类等价类的原则(划分等价类等价类的原则(5 5个)1) (1) 如果输入条件规定了取值范围,或如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类值的个数,则可以确立一个有效等价类和两个无效等价类和两个无效等价类 122下页下页末页末页上页上页首页首页目录目录•例如,例如,在程序的规格说明中,对输入条在程序的规格说明中,对输入条件有一句话:件有一句话: ““………… 项数可以从项数可以从1 1到到999 999 ……”……” 则有效等价类是则有效等价类是““1≤1≤项数项数≤≤999999””两个无效等价类是两个无效等价类是““项数<项数<1 1””或或““项项数>数>999999””在数轴上表示成在数轴上表示成: :123下页下页末页末页上页上页首页首页目录目录(2) (2) 如果输入条件规定了输入值的集合,如果输入条件规定了输入值的集合,或者是规定了或者是规定了““必须如何必须如何””的条件,这时的条件,这时可确立一个有效等价类和一个无效等价类。
可确立一个有效等价类和一个无效等价类•例如,例如,在在PASCALPASCAL语言中对语言中对变量标识符变量标识符规定规定为为““以字母打头的以字母打头的…………串串””那么所有以那么所有以字母字母打头的构成有效等价类,而不在此集合内打头的构成有效等价类,而不在此集合内(不以(不以字母字母打头)的归于无效等价类打头)的归于无效等价类124下页下页末页末页上页上页首页首页目录目录(3) (3) 如果输入条件是一个布尔量,则可以确如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类定一个有效等价类和一个无效等价类4) 如果规定了输入数据的一组值,而且程序要对如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理每个输入值分别进行处理这时可为这时可为每一个输入值每一个输入值确立一个有效等价类,此外针对这组值确立一个无确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合效等价类,它是所有不允许的输入值的集合125下页下页末页末页上页上页首页首页目录目录•例如,在教师上岗方案中规定对教授、副教授、讲例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。
因此可以师和助教分别计算分数,做相应的处理因此可以确定确定4 4个有效等价类为教授、副教授、讲师和助教个有效等价类为教授、副教授、讲师和助教; ;一个无效等价类,一个无效等价类,它是所有不符合以上身分的人员它是所有不符合以上身分的人员的输入值的集合的输入值的集合5) 如果规定了输入数据必须遵守的规则,则如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(可以确立一个有效等价类(符合规则符合规则)和若)和若干个无效等价类(干个无效等价类(从不同角度违反规则从不同角度违反规则)126下页下页末页末页上页上页首页首页目录目录•例如,例如,C C语言规定语言规定 ““一个语句必须以分号一个语句必须以分号‘‘; ;’’结结束束””这时,可以确定一个有效等价类这时,可以确定一个有效等价类““以以‘‘; ;’’结束结束””; ; 若干个无效等价类若干个无效等价类 ““以以‘‘: :’’结束结束””、、““以以‘‘, ,’’结束结束””、、““以以‘‘ ’’结束结束””、、““以以 END IFEND IF结束结束””等•确立测试用例确立测试用例 在确立了等价类之后,建立等价类表,列出所有划分在确立了等价类之后,建立等价类表,列出所有划分出的等价类。
出的等价类127下页下页末页末页上页上页首页首页目录目录•再从划分出的等价类中按以下原则选择测试再从划分出的等价类中按以下原则选择测试用例:用例:a.a. 为每一个等价类规定一个唯一编号;为每一个等价类规定一个唯一编号;b.b. 设计一个新的测试用例,使其设计一个新的测试用例,使其尽可能多地尽可能多地覆盖尚未被覆盖的有效等价类覆盖尚未被覆盖的有效等价类,重复这一步,,重复这一步,直到所有的有效等价类都被覆盖为止;直到所有的有效等价类都被覆盖为止;c.c. 设计一个新的测试用例,使其设计一个新的测试用例,使其仅覆盖一个仅覆盖一个尚未被覆盖的无效等价类,尚未被覆盖的无效等价类,重复这一步,直重复这一步,直到所有的无效等价类都被覆盖为止到所有的无效等价类都被覆盖为止128下页下页末页末页上页上页首页首页目录目录•用等价类划分法设计测试用例的用等价类划分法设计测试用例的实例实例 在一在一PASCALPASCAL语言版本中规定:语言版本中规定:““标识标识符是由字母开头符是由字母开头,,后跟字母或数字的任意组后跟字母或数字的任意组合构成合构成有效字符数为有效字符数为8 8个个,,最大字符数为最大字符数为8080个个。
并且规定:并且规定:““标识符必须先说明标识符必须先说明,,再使用再使用 ; ““在同一说明语句中在同一说明语句中,,标识标识符至少必须有一个符至少必须有一个129下页下页末页末页上页上页首页首页目录目录用等价类划分方法,建立输入等价类表用等价类划分方法,建立输入等价类表: :接下来选取几个测试用例,使得它们覆盖了所有的接下来选取几个测试用例,使得它们覆盖了所有的等价类130下页下页末页末页上页上页首页首页目录目录Ø边界值分析也是一种边界值分析也是一种黑盒测试黑盒测试方法,是对等价方法,是对等价类划分方法的补充类划分方法的补充Ø人们从长期的测试工作经验得知,人们从长期的测试工作经验得知,大量的错误大量的错误是发生在输入或输出范围的是发生在输入或输出范围的边界上,边界上,而不是而不是在输入范围的内部在输入范围的内部因此针对各种边界情况因此针对各种边界情况设计测试用例,设计测试用例,可以查出更多的错误可以查出更多的错误131下页下页末页末页上页上页首页首页目录目录•比如,在做三角形计算时,要输入三角形的三个边比如,在做三角形计算时,要输入三角形的三个边长:长:A A、、B B和和C C。
我们应注意到这三个数值应当满足我们应注意到这三个数值应当满足 A A>>0 0、、B B>>0 0、、C C>>0 0、、A A++B B>>C C、、A A++C C>>B B、、B B++C C>>A A,,才能构成三角形但如果把六个不等式中的任才能构成三角形但如果把六个不等式中的任何一个大于号何一个大于号““>>””错写成大于等于号错写成大于等于号““≥≥””,那,那就不能构成三角形就不能构成三角形问题恰出现在容易被疏忽的边问题恰出现在容易被疏忽的边界附近132下页下页末页末页上页上页首页首页目录目录•这里所说的这里所说的边界边界是指,相当于输入等价类和是指,相当于输入等价类和输出等价类而言,输出等价类而言,稍高于其边界值及稍低于稍高于其边界值及稍低于其边界值的一些特定情况其边界值的一些特定情况•使用使用边界值边界值分析方法设计测试用例,首先应分析方法设计测试用例,首先应确定边界情况确定边界情况应当选取正好等于,刚刚大应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据于,或刚刚小于边界的值做为测试数据,而,而不是选取等价类中的典型值或任意值做为测不是选取等价类中的典型值或任意值做为测试数据。
试数据 133下页下页末页末页上页上页首页首页目录目录•人们也可以靠人们也可以靠经验和直觉经验和直觉推测程序中推测程序中可能存在的各种错误,从而有针对性可能存在的各种错误,从而有针对性地编写检查这些错误的例子这就是地编写检查这些错误的例子这就是错误推测法错误推测法•错误推测法的基本想法是:错误推测法的基本想法是:列举出程列举出程序中所有可能有的错误和容易发生错序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用误的特殊情况,根据它们选择测试用例例134下页下页末页末页上页上页首页首页目录目录•因果图的适用范围:因果图的适用范围: 如果在测试时必须考虑如果在测试时必须考虑输入条件的各种输入条件的各种组合组合,可使用一种适合于描述对于多种条件,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图试用例,这就需要利用因果图 因果图方法最终生成的就是判定表它因果图方法最终生成的就是判定表它适合于检查程序输入条件的各种组合情况适合于检查程序输入条件的各种组合情况135下页下页末页末页上页上页首页首页目录目录•用因果图生成测试用例的基本步骤(用因果图生成测试用例的基本步骤(5 5步步))(1)(1) 分析系统规格说明描述中,哪些是原因分析系统规格说明描述中,哪些是原因 ( (即即输入条件或输入条件的等价类输入条件或输入条件的等价类) ),哪些是结果,哪些是结果 ( (即即输出条件输出条件) ),并给每个原因和结果赋予一个标识符。
并给每个原因和结果赋予一个标识符2)(2) 分析系统规格说明描述中的语义,找出原因分析系统规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系与结果之间,原因与原因之间对应的是什么关系? ? 根据这些关系,画出因果图根据这些关系,画出因果图 136下页下页末页末页上页上页首页首页目录目录(3)(3) 由于语法或环境限制,有些原因与原因由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出之间,原因与结果之间的组合情况不可能出现为表明这些特殊情况,在因果图上用一为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件些记号标明约束或限制条件4)(4) 把因果图转换成判定表把因果图转换成判定表5)(5) 把判定表的把判定表的每一列每一列拿出来作为依据,设拿出来作为依据,设计测试用例计测试用例137下页下页末页末页上页上页首页首页目录目录•在因果图中出现的基本符号在因果图中出现的基本符号 通常在因果图中用通常在因果图中用CiCi表示原因,用表示原因,用EiEi表示结果,各结点表示表示结果,各结点表示状态状态,可取值,可取值““0 0””或或““1 1””。
0 0””表示某状态不出现,表示某状态不出现,““1 1””表表示某状态出现示某状态出现•主要的原因和结果之间的关系有主要的原因和结果之间的关系有: :c1c1c1c1c2c2138下页下页末页末页上页上页首页首页目录目录•表示约束条件的符号:表示约束条件的符号:为了表示为了表示原因与原因原因与原因之间,之间,结果与结果结果与结果之之间可能存在的约束条件,在因果图中可以间可能存在的约束条件,在因果图中可以附加一些表示约束条件的符号附加一些表示约束条件的符号139下页下页末页末页上页上页首页首页目录目录 •例如,有一个处理单价为例如,有一个处理单价为5 5角钱的饮料的自动角钱的饮料的自动售货机系统测试用例的设计其规格说明如售货机系统测试用例的设计其规格说明如下:下: 若若投入投入5 5角钱或角钱或1 1元钱的硬币,元钱的硬币,押下押下〖〖橙汁橙汁〗〗或或〖〖啤酒啤酒〗〗的按钮,则相应的饮料就的按钮,则相应的饮料就送出来若售货机送出来若售货机没有零钱找没有零钱找,则一个显示,则一个显示〖〖零钱找完零钱找完〗〗的的红灯亮红灯亮,这时再投入,这时再投入1 1元硬币元硬币并押下按钮后,饮料不送出来而且并押下按钮后,饮料不送出来而且1 1元硬币也元硬币也退出来;若退出来;若有零钱找有零钱找,则显示,则显示〖〖零钱找完零钱找完〗〗的的红灯灭红灯灭,在送出饮料的同时退还,在送出饮料的同时退还5 5角硬币。
角硬币140下页下页末页末页上页上页首页首页目录目录(1) (1) 分析这一段说明,列出原因和结果分析这一段说明,列出原因和结果原因原因: : 1.1. 售货机有零钱找售货机有零钱找 2.2. 投入投入1 1元硬币元硬币 3.3. 投入投入5 5角硬币角硬币 4.4. 押下橙汁按钮押下橙汁按钮 5.5. 押下啤酒按钮押下啤酒按钮建立中间结点,表示处理建立中间结点,表示处理中间状态中间状态11.11. 投入投入1 1元硬币且押下饮料按钮元硬币且押下饮料按钮12.12. 押下押下〖〖橙汁橙汁〗〗或或〖〖啤酒啤酒〗〗的按钮的按钮13.13. 应当找应当找5 5角零钱并且售货机有零钱找角零钱并且售货机有零钱找14.14. 钱已付清钱已付清141下页下页末页末页上页上页首页首页目录目录 结果:结果: 21.21. 售货机售货机〖〖零钱找完零钱找完〗〗灯亮灯亮 22.22. 退还退还1 1元硬币元硬币 23.23. 退还退还5 5角硬币角硬币 24.24. 送出橙汁饮料送出橙汁饮料 25.25. 送出啤酒饮料送出啤酒饮料(2) (2) 画出因果图。
画出因果图所有所有原因原因结点列在左结点列在左边,所有边,所有结果结果结点列在右边结点列在右边 (3) (3) 由于由于 2 2 与与 3 3 ,,4 4 与与 5 5 不能同时发生,不能同时发生,分别加上约束条件分别加上约束条件E E4) (4) 因果图因果图 (5) (5) 转换成判定表转换成判定表142下页下页末页末页上页上页首页首页目录目录 • 143下页下页末页末页上页上页首页首页目录目录8/12/2024144 144下页下页末页末页上页上页首页首页目录目录•测试过程按测试过程按4 4个步骤进行,即个步骤进行,即单元测试单元测试、、集成集成((组装)测试组装)测试、、确认测试确认测试和和系统系统测试测试•单元测试单元测试,集中对用源代码实现的每,集中对用源代码实现的每一个程序单元进行测试,检查各个程一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能序模块是否正确地实现了规定的功能145下页下页末页末页上页上页首页首页目录目录•集成(组装)测试集成(组装)测试把已测试过的模块组装起把已测试过的模块组装起来,主要对与设计相关的系统体系结构的构来,主要对与设计相关的系统体系结构的构造进行测试。
造进行测试•确认测试确认测试则是要检查已实现的系统是否满足则是要检查已实现的系统是否满足了需求规格说明中确定了的各种需求,以及了需求规格说明中确定了的各种需求,以及系统配置是否完全、正确系统配置是否完全、正确•系统测试系统测试把已经经过确认的系统纳入实际运把已经经过确认的系统纳入实际运行环境中,与其它系统成份组合在一起进行行环境中,与其它系统成份组合在一起进行测试146下页下页末页末页上页上页首页首页目录目录147下页下页末页末页上页上页首页首页目录目录•单元测试又称模块测试,单元测试又称模块测试,是针对系统设计的是针对系统设计的最小单位最小单位 ─ ─ 程序模块程序模块,,进行正确性检验进行正确性检验的的测试工作其目的在于发现各模块内部可能测试工作其目的在于发现各模块内部可能存在的各种差错存在的各种差错•单元测试需要单元测试需要从程序的内部结构出发设计测从程序的内部结构出发设计测试用例试用例多个模块可以平行地独立进行单元多个模块可以平行地独立进行单元测试148下页下页末页末页上页上页首页首页目录目录•在单元测试时,测试者需要依据详细设计在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的说明书和源程序清单,了解该模块的I/OI/O条件和模块的逻辑结构,主要采用条件和模块的逻辑结构,主要采用白盒测白盒测试的试的测试用例,辅之以黑盒测试的测试用测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。
入,都能鉴别和响应149下页下页末页末页上页上页首页首页目录目录150下页下页末页末页上页上页首页首页目录目录(1) (1) 模块接口测试模块接口测试•在单元测试的开始,应对在单元测试的开始,应对通过被测模块通过被测模块的数据流的数据流进行测试测试项目包括:进行测试测试项目包括:– 调用本模块的输入参数是否正确;调用本模块的输入参数是否正确;– 本模块调用子模块时输入给子模块本模块调用子模块时输入给子模块的参数是否正确;的参数是否正确;– 全局量的定义在各模块中是否一致;全局量的定义在各模块中是否一致; 151下页下页末页末页上页上页首页首页目录目录•在做在做内外存交换内外存交换时要考虑:时要考虑:– 文件属性是否正确;文件属性是否正确;– OPENOPEN与与CLOSECLOSE语句是否正确;语句是否正确;– 缓冲区容量与记录长度是否匹配;缓冲区容量与记录长度是否匹配;– 在进行读写操作之前是否打开了文件;在进行读写操作之前是否打开了文件;– 在结束文件处理时是否关闭了文件;在结束文件处理时是否关闭了文件;– 正文书写/输入错误正文书写/输入错误; ;– I I//O O错误是否检查并做了处理。
错误是否检查并做了处理152下页下页末页末页上页上页首页首页目录目录(2) (2) 局部数据结构测试局部数据结构测试•不正确或不一致的数据类型说明不正确或不一致的数据类型说明•使用尚未赋值或尚未初始化的变量使用尚未赋值或尚未初始化的变量•错误的初始值错误的初始值或错误的缺省值或错误的缺省值•变量名拼写错变量名拼写错或书写错或书写错•不一致的数据类型不一致的数据类型•全局数据对模块的影响全局数据对模块的影响 153下页下页末页末页上页上页首页首页目录目录(3) (3) 路径测试路径测试•选择适当的测试用例,对模块中选择适当的测试用例,对模块中重要的执行重要的执行路径路径进行测试进行测试•应当设计测试用例查找由于应当设计测试用例查找由于错误的计算错误的计算、、不不正确的比较正确的比较或或不正常的控制流不正常的控制流而导致的错误而导致的错误•对基本对基本执行路径和循环执行路径和循环进行测试可以发现大进行测试可以发现大量的路径错误量的路径错误154下页下页末页末页上页上页首页首页目录目录(4) (4) 错误处理测试错误处理测试•出错的描述出错的描述是否难以理解;是否难以理解;•出错的描述出错的描述是否能够对错误定位;是否能够对错误定位;•显示的错误与实际的错误显示的错误与实际的错误是否相符;是否相符;•对错误条件的对错误条件的处理正确与否;处理正确与否;•在对错误进行处理之前,在对错误进行处理之前,错误条件是否错误条件是否已经引起系统的干预等。
已经引起系统的干预等155下页下页末页末页上页上页首页首页目录目录(5) (5) 边界测试边界测试•注意数据流、控制流中注意数据流、控制流中刚好等于刚好等于、、大于或小于大于或小于确定确定的比较值时出错的可能性对这些地方要仔细地选的比较值时出错的可能性对这些地方要仔细地选择测试用例,认真加以测试择测试用例,认真加以测试•如果对模块运行时间有要求的话,还要专门进行关如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素模块运行时间的因素156下页下页末页末页上页上页首页首页目录目录•模块并不是一个独立的程序,在考虑测试模模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些块时,同时要考虑它和外界的联系,用一些辅助模块辅助模块去模拟与被测模块相联系的其它模去模拟与被测模块相联系的其它模块– 驱动模块驱动模块 (driver)(driver) – 桩模块桩模块 (stub)(stub) ── ── 存根模块存根模块157下页下页末页末页上页上页首页首页目录目录158下页下页末页末页上页上页首页首页目录目录•如果一个模块要完成多种功能,可以将这个如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。
必须对其中的模块看成由几个小程序组成必须对其中的每个小程序先进行单元测试要做的工作,对每个小程序先进行单元测试要做的工作,对关键模块还要做关键模块还要做性能测试性能测试•对支持某些标准规程的程序,更要着手进行对支持某些标准规程的程序,更要着手进行互联测试有人把这种情况特别称为互联测试有人把这种情况特别称为模块测模块测试试,以区别单元测试以区别单元测试159下页下页末页末页上页上页首页首页目录目录•组装测试组装测试 ( (集成测试、联合测试)集成测试、联合测试)•通常,在单元测试的基础上,需要将所有模通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统这时需要考块按照设计要求组装成为系统这时需要考虑的问题是虑的问题是(5(5个方面个方面) )::– 在把各个模块连接起来的时侯,在把各个模块连接起来的时侯,穿越模穿越模块接口的数据块接口的数据是否会丢失;是否会丢失;– 一个模块的功能是否会对另一个模块的一个模块的功能是否会对另一个模块的功能产生不利的影响;功能产生不利的影响;160下页下页末页末页上页上页首页首页目录目录– 各个子功能组合起来,能否达到预期要求的父各个子功能组合起来,能否达到预期要求的父功能;功能;– 全局数据结构是否有问题;全局数据结构是否有问题;– 单个模块的误差累积起来,是否会放大,从而单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。
达到不能接受的程度 在单元测试的同时可进行组装测试在单元测试的同时可进行组装测试,发现并,发现并排除在模块连接中可能出现的问题,最终构成要排除在模块连接中可能出现的问题,最终构成要求的系统求的系统 161下页下页末页末页上页上页首页首页目录目录•子系统的组装测试特称为子系统的组装测试特称为部件测试部件测试,它所做,它所做的工作是要找出组装后的的工作是要找出组装后的子系统与系统需求子系统与系统需求规格说明之间规格说明之间的不一致的不一致•通常,把模块组装成为系统的方式有两种通常,把模块组装成为系统的方式有两种– 一次性组装方式一次性组装方式– 增殖式组装方式增殖式组装方式162下页下页末页末页上页上页首页首页目录目录•它是一种非增殖式组装方式也叫做它是一种非增殖式组装方式也叫做整整体拼装•使用这种方式,首先对每个模块分别进使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的系统一起进行测试,最终得到要求的系统163下页下页末页末页上页上页首页首页目录目录•这种组装方式又称这种组装方式又称渐增式组装。
渐增式组装•首先对一个个模块进行模块测试,然后将这首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统些模块逐步组装成较大的系统•在组装的过程中在组装的过程中边连接边测试边连接边测试,以发现连接,以发现连接过程中产生的问题过程中产生的问题•通过增殖逐步组装成为要求的系统通过增殖逐步组装成为要求的系统164下页下页末页末页上页上页首页首页目录目录•确认测试又称确认测试又称有效性测试有效性测试任务是验证系统的功能和性能及其它是验证系统的功能和性能及其它特性是否与用户的要求一致特性是否与用户的要求一致•对系统的功能和性能要求在系统对系统的功能和性能要求在系统需求规格说明书中已经明确规定需求规格说明书中已经明确规定它包含的它包含的信息信息就是系统确认测试的就是系统确认测试的基础165下页下页末页末页上页上页首页首页目录目录166下页下页末页末页上页上页首页首页目录目录•有效性测试是在模拟的环境有效性测试是在模拟的环境 ( (可能就可能就是开发的环境是开发的环境) ) 下,运用黑盒测试的下,运用黑盒测试的方法,验证被测系统是否满足需求规方法,验证被测系统是否满足需求规格说明书列出的需求。
格说明书列出的需求•首先制定测试计划,规定要做测试的首先制定测试计划,规定要做测试的种类还需要制定一组测试步骤,描种类还需要制定一组测试步骤,描述具体的测试用例述具体的测试用例167下页下页末页末页上页上页首页首页目录目录•通过实施预定的测试计划和测试步骤,通过实施预定的测试计划和测试步骤,确定:确定:– 系统的特性是否与需求相符;系统的特性是否与需求相符;– 所有的文档都是正确且便于使用;所有的文档都是正确且便于使用;– 同时,对其它系统需求,同时,对其它系统需求,例如可移植性、例如可移植性、兼容性、出错自动恢复、可维护性等,也兼容性、出错自动恢复、可维护性等,也都要进行测试都要进行测试168下页下页末页末页上页上页首页首页目录目录•在全部系统测试的测试用例运行完后,所有在全部系统测试的测试用例运行完后,所有的测试结果可以分为两类:的测试结果可以分为两类:– 测试结果与预期的结果相符测试结果与预期的结果相符这说明系统的这这说明系统的这部分功能或性能特征与需求规格说明书相符合,部分功能或性能特征与需求规格说明书相符合,从而这部分程序被接受从而这部分程序被接受– 测试结果与预期的结果不符测试结果与预期的结果不符。
这说明系统的这这说明系统的这部分功能或性能特征与需求规格说明书不一致,部分功能或性能特征与需求规格说明书不一致,因此要为它提交一份问题报告因此要为它提交一份问题报告169下页下页末页末页上页上页首页首页目录目录n 系统配置复查的目的是保证系统配置复查的目的是保证u 系统配置的所有成分都齐全;系统配置的所有成分都齐全;u 各方面的质量都符合要求;各方面的质量都符合要求; u 具有维护阶段所必需的细节;具有维护阶段所必需的细节;u 而且已经编排好分类的目录而且已经编排好分类的目录n应当严格遵守应当严格遵守用户手册用户手册和和操作手册操作手册中规定中规定的使用步骤,以便检查这些文档资料的完整性和的使用步骤,以便检查这些文档资料的完整性和正确性170下页下页末页末页上页上页首页首页目录目录•在通过了系统的在通过了系统的有效性测试有效性测试及及系统配置系统配置审查审查之后,就应开始系统的之后,就应开始系统的验收测试验收测试•验收测试验收测试是以用户为主的测试系统开是以用户为主的测试系统开发人员和发人员和QAQA(质量保证)人员也应参加质量保证)人员也应参加•由用户参加设计测试用例,使用生产中由用户参加设计测试用例,使用生产中的实际数据进行测试。
的实际数据进行测试171下页下页末页末页上页上页首页首页目录目录•在测试过程中,除了考虑系统的功能和性能在测试过程中,除了考虑系统的功能和性能外,还应对系统的可移植性、兼容性、可维外,还应对系统的可移植性、兼容性、可维护性、错误的恢复功能等进行确认护性、错误的恢复功能等进行确认•确认测试应交付的文档有:确认测试应交付的文档有:– 确认测试分析报告确认测试分析报告; ;– 最终的用户手册和操作手册最终的用户手册和操作手册; ;– 项目开发总结报告项目开发总结报告172下页下页末页末页上页上页首页首页目录目录•系统测试,是将通过确认测试的系统,系统测试,是将通过确认测试的系统,作为整个基作为整个基于计算机系统的一个元素于计算机系统的一个元素,与计算机硬件、外设、,与计算机硬件、外设、某些支持系统、数据和人员等其它系统元素结合在某些支持系统、数据和人员等其它系统元素结合在一起,一起,在实际运行环境下在实际运行环境下,,对计算机系统进行一系对计算机系统进行一系列的组装测试和确认测试列的组装测试和确认测试•系统测试的目的在于系统测试的目的在于通过与系统的需求定义作比较通过与系统的需求定义作比较, , 发现系统与系统的定义不符合或与之矛盾的地方。
发现系统与系统的定义不符合或与之矛盾的地方173下页下页末页末页上页上页首页首页目录目录α测试和测试和β测试测试•在系统交付使用之后,用户将如何实在系统交付使用之后,用户将如何实际使用程序,对于开发者来说是无法际使用程序,对于开发者来说是无法预测的•α测试测试是由一个是由一个用户在开发环境下进行用户在开发环境下进行的测试,的测试,也可以是也可以是公司内部的用户在公司内部的用户在模拟实际操作环境下进行的测试模拟实际操作环境下进行的测试174下页下页末页末页上页上页首页首页目录目录•αα测试测试的目的是评价系统产品的的目的是评价系统产品的功能、可使功能、可使用性、可靠性、性能和支持性等用性、可靠性、性能和支持性等, ,尤其注重尤其注重产品的界面和特色产品的界面和特色•αα测试测试可以从系统产品编码结束之时开始,可以从系统产品编码结束之时开始,或在或在单元测试单元测试完成之后开始,也可以在确认完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度测试过程中产品达到一定的稳定和可靠程度之后再开始之后再开始175下页下页末页末页上页上页首页首页目录目录•β测试测试是由系统的是由系统的多个用户在实际使用环境下多个用户在实际使用环境下进行的测试。
进行的测试这些用户返回有关错误信息给这些用户返回有关错误信息给开发者•测试时,测试时,开发者通常不在测试现场开发者通常不在测试现场因而,β测试测试是在是在开发者无法控制的环境下开发者无法控制的环境下进行的系统现场进行的系统现场应用•在在β测试中,由用户记下遇到的所有问题,包测试中,由用户记下遇到的所有问题,包括真实的以及主观认定的,定期向开发者报括真实的以及主观认定的,定期向开发者报告176下页下页末页末页上页上页首页首页目录目录•β测试测试主要衡量产品着重于产品的主要衡量产品着重于产品的支持性,包括支持性,包括文档、客户培训和支持产文档、客户培训和支持产品生产能力品生产能力•只有当只有当α测试测试达到一定的可靠程度达到一定的可靠程度时,才能开始时,才能开始β测试测试它处在整个它处在整个测试的最后阶段同时,测试的最后阶段同时,产品的所有产品的所有手册文本也应该在此阶段完全定稿手册文本也应该在此阶段完全定稿177下页下页末页末页上页上页首页首页目录目录•系统测试是由一系列不同的测试组成系统测试是由一系列不同的测试组成主要目的是对以计算机为基础的系统进主要目的是对以计算机为基础的系统进行充分的测试。
行充分的测试 1 1 功能测试功能测试功能测试功能测试是在规定的一段时间内运行系是在规定的一段时间内运行系统系统的所有功能,以验证这个系统系统系统的所有功能,以验证这个系统系统有无严重错误统有无严重错误178下页下页末页末页上页上页首页首页目录目录 2 2 可靠性测试可靠性测试如果系统需求说明书中有对可靠性的要求,如果系统需求说明书中有对可靠性的要求,则需进行可靠性测试则需进行可靠性测试① ① 平均失效间隔时间平均失效间隔时间 是否超过规定时限是否超过规定时限? ?② ② 因故障而停机的时间因故障而停机的时间 在一年中应不超在一年中应不超过多少时间过多少时间179下页下页末页末页上页上页首页首页目录目录 3 3 强度测试强度测试强度测试是要检查强度测试是要检查在系统运行环境不正常乃在系统运行环境不正常乃至发生故障的情况下,系统可以运行到何种至发生故障的情况下,系统可以运行到何种程度的测试程度的测试例如:例如:– 把输入数据速率提高一个数量级,确定把输入数据速率提高一个数量级,确定输入功能将如何响应输入功能将如何响应– 设计需要占用最大存储量或其它资源的设计需要占用最大存储量或其它资源的测试用例进行测试。
测试用例进行测试 180下页下页末页末页上页上页首页首页目录目录– 设计出在虚拟存储管理机制中引起设计出在虚拟存储管理机制中引起““颠簸颠簸””的测试用例进行测试的测试用例进行测试– 设计出会对磁盘常驻内存的数据过度访设计出会对磁盘常驻内存的数据过度访问的测试用例进行测试问的测试用例进行测试•强度测试的一个变种就是强度测试的一个变种就是敏感性测试敏感性测试在程序有效数据界限内序有效数据界限内一个小范围内一个小范围内的一组数据可能引起的一组数据可能引起极端的或不平稳的错误处理出现,或者导致极度的性能下极端的或不平稳的错误处理出现,或者导致极度的性能下降的情况发生此测试用以降的情况发生此测试用以发现可能引起这种不稳定性或发现可能引起这种不稳定性或不正常处理不正常处理的某些数据组合的某些数据组合181下页下页末页末页上页上页首页首页目录目录4 4性能测试性能测试•性能测试是要检查系统是否满足在需求说明性能测试是要检查系统是否满足在需求说明书中规定的性能特别是对于实时系统或嵌书中规定的性能特别是对于实时系统或嵌入式系统入式系统•性能测试常常性能测试常常需要与强度测试结合起来需要与强度测试结合起来进行,进行,并常常要求并常常要求同时进行硬件和系统检测。
同时进行硬件和系统检测•通常,对系统性能的检测表现在以下几个方面:通常,对系统性能的检测表现在以下几个方面:响应时间、吞吐量、辅助存储区、处理精度响应时间、吞吐量、辅助存储区、处理精度等等182下页下页末页末页上页上页首页首页目录目录5 5 恢复测试恢复测试恢复测试恢复测试是要证实在是要证实在克服硬件故障克服硬件故障( (包括掉电、包括掉电、硬件或网络出错等硬件或网络出错等) )后,后,系统能否正常地继续进系统能否正常地继续进行工作行工作,并不对系统造成任何损害并不对系统造成任何损害•为此,可采用各种人工干预的手段,模拟硬为此,可采用各种人工干预的手段,模拟硬件故障,故意造成系统出错并由此检查:件故障,故意造成系统出错并由此检查:– 错误探测功能:错误探测功能:系统能否发现硬件失效与系统能否发现硬件失效与故障;故障;183下页下页末页末页上页上页首页首页目录目录– 能否能否切换或启动备用的硬件;切换或启动备用的硬件;– 在故障发生时能否在故障发生时能否保护正在运行的作业和保护正在运行的作业和系统状态;系统状态;– 在系统恢复后能否在系统恢复后能否从最后记录下来的无错从最后记录下来的无错误状态开始继续执行作业,误状态开始继续执行作业,等等。
等等– 掉电测试:掉电测试:其目的是测试系统系统在发生电源中其目的是测试系统系统在发生电源中断时能否断时能否保护当时的状态且不毁坏数据,保护当时的状态且不毁坏数据,然后在然后在电源恢复时从保留的断点处重新进行操作电源恢复时从保留的断点处重新进行操作184下页下页末页末页上页上页首页首页目录目录6 6 启动/停止测试启动/停止测试 这类测试的目的是验证这类测试的目的是验证在机器启动及在机器启动及关机阶段关机阶段,,系统正确处理的能力系统正确处理的能力这类测试包括一下这类测试包括一下两种两种方法方法: :– 反复启动软件系统反复启动软件系统 ( (例如,操作系统例如,操作系统的启动、应用程序的调用等的启动、应用程序的调用等) )– 在尽可能多的情况下关机在尽可能多的情况下关机185下页下页末页末页上页上页首页首页目录目录7 7 配置测试配置测试•这类测试是要检查这类测试是要检查计算机系统内各个设备计算机系统内各个设备或各种资源之间的相互联结和功能分配中或各种资源之间的相互联结和功能分配中的错误•它主要包括以下三种:它主要包括以下三种:– 配置命令测试配置命令测试:验证全部配置命令的可:验证全部配置命令的可操作性(操作性(有效性有效性);特别对最大配置和最小);特别对最大配置和最小配置要进行测试。
配置要进行测试软件配置和硬件配置都要测软件配置和硬件配置都要测试186下页下页末页末页上页上页首页首页目录目录– 循环配置测试循环配置测试:证明对每个设备物:证明对每个设备物理与逻辑的,逻辑与功能的每次循环理与逻辑的,逻辑与功能的每次循环置换配置都能正常工作置换配置都能正常工作– 修复测试修复测试:检查每种配置状态及哪:检查每种配置状态及哪个设备是坏的并用自动的或手工的个设备是坏的并用自动的或手工的方式进行配置状态间的转换方式进行配置状态间的转换187下页下页末页末页上页上页首页首页目录目录8 8安全性测试安全性测试安全性测试是要检验安全性测试是要检验在系统中已经存在的系在系统中已经存在的系统安全性、保密性措施是否发挥作用,有无统安全性、保密性措施是否发挥作用,有无漏洞•力图破坏系统力图破坏系统的保护机构以进入系统的主要的保护机构以进入系统的主要方法有以下七种:方法有以下七种:– 正面攻击或从侧面、背面攻击系统中易正面攻击或从侧面、背面攻击系统中易受损坏的那些部分;受损坏的那些部分;– 以系统输入为突破口,利用输入的容错以系统输入为突破口,利用输入的容错性进行正面攻击;性进行正面攻击;188下页下页末页末页上页上页首页首页目录目录– 申请和占用过多的资源压垮系统,以破申请和占用过多的资源压垮系统,以破坏安全措施,从而进入系统;坏安全措施,从而进入系统;– 故意使系统出错,利用系统恢复的过程,故意使系统出错,利用系统恢复的过程,窃取用户口令及其它有用的信息;窃取用户口令及其它有用的信息;– 通过浏览残留在计算机各种资源中的垃通过浏览残留在计算机各种资源中的垃圾(无用信息),以获取圾(无用信息),以获取如如口令、安全码、口令、安全码、译码关键字等信息;译码关键字等信息;– 浏览全局数据,期望从中找到进入系统浏览全局数据,期望从中找到进入系统的关键字;的关键字;– 浏览那些逻辑上不存在,但物理上还存浏览那些逻辑上不存在,但物理上还存在的各种记录和资料等。
在的各种记录和资料等 189下页下页末页末页上页上页首页首页目录目录9 9 可使用性测试可使用性测试•可使用性测试主要从使用的可使用性测试主要从使用的合理性合理性和和方便方便性性等角度对系统系统进行检查,发现人为等角度对系统系统进行检查,发现人为因素或使用上的问题因素或使用上的问题•要保证在足够详细的程度下,要保证在足够详细的程度下,用户界面便于使用;用户界面便于使用;对输入量可容错、响应时间和响应方式合理可行、对输入量可容错、响应时间和响应方式合理可行、输出信息有意义、正确并前后一致;出错信息能输出信息有意义、正确并前后一致;出错信息能够引导用户去解决问题;系统文档全面、正规、够引导用户去解决问题;系统文档全面、正规、确切190下页下页末页末页上页上页首页首页目录目录10 10 可支持性测试可支持性测试这类测试是要这类测试是要验证系统的支持策略对于公司验证系统的支持策略对于公司与用户方面是否切实可行与用户方面是否切实可行•它所采用的方法是它所采用的方法是– 试运行支持过程试运行支持过程( (如对有错部分打补丁的如对有错部分打补丁的过程等过程等) );;– 对其结果进行对其结果进行质量分析质量分析;;– 评审诊断工具评审诊断工具;;– 维护过程、内部维护文档维护过程、内部维护文档;;– 修复一个错误所需平均最少时间修复一个错误所需平均最少时间。
191下页下页末页末页上页上页首页首页目录目录1111安装测试安装测试安装测试的目的安装测试的目的不是找系统错误,不是找系统错误,而是而是找安找安装错误•在安装系统系统时,会有多种选择在安装系统系统时,会有多种选择– 要分配和装入文件与程序库要分配和装入文件与程序库– 布置适用的硬件配置布置适用的硬件配置– 进行程序的联结进行程序的联结•安装测试就是要找出在这些安装过程中出现安装测试就是要找出在这些安装过程中出现的错误192下页下页末页末页上页上页首页首页目录目录•安装测试是在系统安装之后进行测试它安装测试是在系统安装之后进行测试它要检验:要检验:– 用户选择的一套任选方案是否相容;用户选择的一套任选方案是否相容;– 系统的每一部分是否都齐全;系统的每一部分是否都齐全;– 所有文件是否都已产生并确有所需要的所有文件是否都已产生并确有所需要的内容;内容;– 硬件的配置是否合理等等硬件的配置是否合理等等193下页下页末页末页上页上页首页首页目录目录12 12 过程测试过程测试•在一些大型的系统中,部分工作由系统自在一些大型的系统中,部分工作由系统自动完成,其它工作则需由各种人员,包括动完成,其它工作则需由各种人员,包括操操作员,数据库管理员,终端用户作员,数据库管理员,终端用户等,按一定规程等,按一定规程同计算机配合,靠人工来完成。
同计算机配合,靠人工来完成•指定由人工完成的过程指定由人工完成的过程也需经过仔细的检也需经过仔细的检查查,这就是所谓的过程测试这就是所谓的过程测试194下页下页末页末页上页上页首页首页目录目录1313互连测试互连测试•互连测试是要验证互连测试是要验证两个或多个不同的系统两个或多个不同的系统之间的互连性之间的互连性1414兼容性测试兼容性测试•这类测试主要想验证这类测试主要想验证系统产品在不同版本系统产品在不同版本之间的兼容性之间的兼容性有两类基本的兼容性测试:有两类基本的兼容性测试:– 向下兼容向下兼容– 交错兼容交错兼容195下页下页末页末页上页上页首页首页目录目录1515容量测试容量测试•容量测试是要检验容量测试是要检验系统的能力最高能达到系统的能力最高能达到什么程度什么程度例如,例如,– 对于编译程序,让它处理特别长的源对于编译程序,让它处理特别长的源程序;程序;– 对于操作系统,让它的作业队列对于操作系统,让它的作业队列““满员满员””;;– 对于信息检索系统,让它使用频率达到最大对于信息检索系统,让它使用频率达到最大 在使系统的在使系统的全部资源达到全部资源达到““满负荷满负荷””的情形下,的情形下,测试系统的承受能力测试系统的承受能力。
196下页下页末页末页上页上页首页首页目录目录1616文档测试文档测试这种测试是检查这种测试是检查用户文档用户文档( (如用户手册如用户手册) )的清晰性和精确性的清晰性和精确性•用户文档中所使用的例子必须在测试中用户文档中所使用的例子必须在测试中一一试过,确保叙述正确无误一一试过,确保叙述正确无误197下页下页末页末页上页上页首页首页目录目录•系统调试是在进行了成功的测试之后才开系统调试是在进行了成功的测试之后才开始的工作它与系统测试不同,调试的任始的工作它与系统测试不同,调试的任务是务是进一步诊断和改正程序中潜在的错误进一步诊断和改正程序中潜在的错误•调试活动由两部分组成:调试活动由两部分组成:– 确定程序中可疑错误的确切性质和位置确定程序中可疑错误的确切性质和位置– 对程序对程序( (设计设计, ,编码编码) )进行修改,排除这进行修改,排除这个错误个错误198下页下页末页末页上页上页首页首页目录目录•调试工作是一个具有很强技巧性的工作调试工作是一个具有很强技巧性的工作•系统运行失效或出现问题,往往只是潜在错系统运行失效或出现问题,往往只是潜在错误的外部表现误的外部表现,,而外部表现与内在原因之间而外部表现与内在原因之间常常没有明显的联系。
如果要找出真正的原常常没有明显的联系如果要找出真正的原因,排除潜在的错误,不是一件易事因,排除潜在的错误,不是一件易事•可以说,可以说,调试是通过现象,找出原因的一个调试是通过现象,找出原因的一个思维分析的过程思维分析的过程199下页下页末页末页上页上页首页首页目录目录(1) (1) 从错误的外部表现形式入手,确定程序从错误的外部表现形式入手,确定程序中出错位置;中出错位置;(2) (2) 研究有关部分的程序,找出错误的内在研究有关部分的程序,找出错误的内在原因;原因;(3) (3) 修改设计和代码,以排除这个错误;修改设计和代码,以排除这个错误;(4) (4) 重复进行暴露了这个错误的原始测试或重复进行暴露了这个错误的原始测试或某些有关测试某些有关测试200下页下页末页末页上页上页首页首页目录目录•从技术角度来看,查找错误的难度在于:从技术角度来看,查找错误的难度在于:– 现象与原因所处的位置可能相距甚远现象与原因所处的位置可能相距甚远– 当其它错误得到纠正时,这一错误所表现出的现象可能当其它错误得到纠正时,这一错误所表现出的现象可能会暂时消失,但并未实际排除会暂时消失,但并未实际排除。
– 现象实际上是由一些非错误原因现象实际上是由一些非错误原因( (如,舍入不精确如,舍入不精确) )引起引起的现象可能是由于一些不容易发现的人为错误引起的现象可能是由于一些不容易发现的人为错误引起的– 错误是由于时序问题引起的,与处理过程无关错误是由于时序问题引起的,与处理过程无关– 现象是由于难于精确再现的输入状态(现象是由于难于精确再现的输入状态(如,实时应用中如,实时应用中输入顺序不确定输入顺序不确定)引起– 现象可能是周期出现的在软、硬件结合的嵌入式系统现象可能是周期出现的在软、硬件结合的嵌入式系统中常常遇到中常常遇到201下页下页末页末页上页上页首页首页目录目录 调试的关键在于调试的关键在于推断程序内部的错误位推断程序内部的错误位置及原因置及原因可以采用以下可以采用以下四种四种方法:方法:((1 1)强行排错)强行排错 这种调试方法目前使用较多,效率较这种调试方法目前使用较多,效率较低它不需要过多的思考,比较省脑筋它不需要过多的思考,比较省脑筋例如:如:– 通过内存全部打印来调试通过内存全部打印来调试,在这大量的,在这大量的数据中寻找出错的位置。
数据中寻找出错的位置202下页下页末页末页上页上页首页首页目录目录– 在程序特定部位设置打印语句,在程序特定部位设置打印语句,把打印语句插在出错的把打印语句插在出错的源程序的各个关键变量改变部位、重要分支部位、子程序源程序的各个关键变量改变部位、重要分支部位、子程序调用部位,跟踪程序的执行,监视重要变量的变化调用部位,跟踪程序的执行,监视重要变量的变化– 自动调试工具自动调试工具利用某些程序语言的调试功能或专门的利用某些程序语言的调试功能或专门的交互式调试工具,分析程序的动态过程,而不必修改程序交互式调试工具,分析程序的动态过程,而不必修改程序 应用以上任一种方法之前,都应当对错误的征兆进行全面应用以上任一种方法之前,都应当对错误的征兆进行全面彻底的分析,得出对出错位置及错误性质的推测,再使用彻底的分析,得出对出错位置及错误性质的推测,再使用一种适当的调试方法来检验推测的正确性一种适当的调试方法来检验推测的正确性203下页下页末页末页上页上页首页首页目录目录((2 2))回溯法调试回溯法调试 这是在小程序中常用的一种有效的调试方法一旦发现了这是在小程序中常用的一种有效的调试方法。
一旦发现了错误,人们先分析错误征兆,确定最先发现错误,人们先分析错误征兆,确定最先发现““症状症状””的位置然后,人工沿程序的控制流程,向回追踪源程序代码,直到找然后,人工沿程序的控制流程,向回追踪源程序代码,直到找到错误根源或确定错误产生的范围到错误根源或确定错误产生的范围p 例如,例如,程序中发现错误处是某个打印语句通过输出程序中发现错误处是某个打印语句通过输出值可推断程序在这一点上变量的值再从这一点出发,值可推断程序在这一点上变量的值再从这一点出发,回溯程序的执行过程,反复考虑:回溯程序的执行过程,反复考虑:““如果程序在这一点如果程序在这一点上的状态(上的状态(变量的值变量的值)是这样,那么程序在上一点的状)是这样,那么程序在上一点的状态一定是这样态一定是这样......””,, 直到找到错误的位置直到找到错误的位置204下页下页末页末页上页上页首页首页目录目录((3 3)归纳法调试)归纳法调试•归纳法是归纳法是一种从特殊推断一般一种从特殊推断一般的系统化思考的系统化思考方法归纳法调试的基本思想是:从一些线方法归纳法调试的基本思想是:从一些线索索( (错误征兆错误征兆) )着手,通过分析它们之间的关着手,通过分析它们之间的关系来找出错误。
系来找出错误•收集有关的数据收集有关的数据 列出所有已知的测试用列出所有已知的测试用例和程序执行结果看哪些输入数据的运例和程序执行结果看哪些输入数据的运行结果是正确的,哪些输入数据的运行结行结果是正确的,哪些输入数据的运行结果有错误果有错误205下页下页末页末页上页上页首页首页目录目录l组织数据组织数据 由于归纳法是从由于归纳法是从特殊到一般特殊到一般的推断过程,所以需要的推断过程,所以需要组织整理数据,以发现规律常以组织整理数据,以发现规律常以3W1H3W1H形式组织可用的数形式组织可用的数据:据:““WhatWhat”” 列出一般现象;列出一般现象;““WhereWhere””说明发现现象的说明发现现象的地点;地点;““WhenWhen”” 列出现象发生时所有已知情况;列出现象发生时所有已知情况;““HowHow”” 说明现象的范围和量级;说明现象的范围和量级;““YesYes””描述出现错误的描述出现错误的3W1H3W1H;;““NoNo””作为比较,描述了没有错误的作为比较,描述了没有错误的3W1H3W1H通过分析找出矛通过分析找出矛盾来。
盾来 206下页下页末页末页上页上页首页首页目录目录l 提出假设提出假设 分析线索之间的关系,利用索结构中分析线索之间的关系,利用索结构中观察到的矛盾现象,设计一个或多个关于出错原观察到的矛盾现象,设计一个或多个关于出错原因的假设如果一个假设也提不出来,归纳过程因的假设如果一个假设也提不出来,归纳过程就需要收集更多的数据此时,应当再设计与执就需要收集更多的数据此时,应当再设计与执行一些测试用例,以获得更多的数据行一些测试用例,以获得更多的数据l 证明假设证明假设 把假设与原始线索或数据进行比较,若它把假设与原始线索或数据进行比较,若它能完全解释一切现象,则假设得到证明;否则,能完全解释一切现象,则假设得到证明;否则,就认为假设不合理,或不完全,或是存在多个错就认为假设不合理,或不完全,或是存在多个错误,以致只能消除部分错误误,以致只能消除部分错误207下页下页末页末页上页上页首页首页目录目录208下页下页末页末页上页上页首页首页目录目录((4 4)演绎法调试)演绎法调试 演绎法是一种演绎法是一种从一般原理或前提出发,从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考经过排除和精化的过程来推导出结论的思考方法。
方法演绎法排错是测试人员首先根据已有的测演绎法排错是测试人员首先根据已有的测试用例,设想及试用例,设想及枚举出所有可能出错的原因做为假枚举出所有可能出错的原因做为假设设;然后再用原始测试数据或新的测试,从中逐个;然后再用原始测试数据或新的测试,从中逐个排除不可能正确的假设;排除不可能正确的假设;最后,再用测试数据验证最后,再用测试数据验证余下的假设确是出错的原因余下的假设确是出错的原因209下页下页末页末页上页上页首页首页目录目录210下页下页末页末页上页上页首页首页目录目录•在调试方面,许多原则本质上是在调试方面,许多原则本质上是心理学心理学方面方面的问题调试由两部分组成,调试原则也分的问题调试由两部分组成,调试原则也分成两组•确定错误的性质和位置的原则确定错误的性质和位置的原则– 用头脑去分析思考与错误征兆有关的信息用头脑去分析思考与错误征兆有关的信息– 避开死胡同避开死胡同 211下页下页末页末页上页上页首页首页目录目录– 只把调试工具当做辅助手段来使用利只把调试工具当做辅助手段来使用利用调试工具,可以帮助思考,但不能代替用调试工具,可以帮助思考,但不能代替思考– 避免用试探法,最多只能把它当做最后避免用试探法,最多只能把它当做最后手段。
手段•修改错误的原则修改错误的原则– 在出现错误的地方,很可能还有别的错在出现错误的地方,很可能还有别的错误212下页下页末页末页上页上页首页首页目录目录– 修改错误的一个常见失误是修改错误的一个常见失误是只修改了这只修改了这个错误的征兆或这个错误的表现,而没有个错误的征兆或这个错误的表现,而没有修改错误的本身修改错误的本身– 当心修正一个错误的同时当心修正一个错误的同时有可能会引入有可能会引入新的错误新的错误– 修改错误的过程将迫使人们暂时回到程修改错误的过程将迫使人们暂时回到程序设计阶段序设计阶段– 修改源代码程序,不要改变目标代码修改源代码程序,不要改变目标代码213下页下页末页末页上页上页首页首页目录目录214下页下页末页末页上页上页首页首页目录目录 系统转换包括:系统转换包括:1.1.新系统和旧系统的切换新系统和旧系统的切换2.2.把旧系统的文件转换成新系统的文件把旧系统的文件转换成新系统的文件3.3.数据的整理和录入数据的整理和录入4.4.人员、设备、组织结构的改造和调整人员、设备、组织结构的改造和调整5.5.有关资料档案的建立和移交有关资料档案的建立和移交215下页下页末页末页上页上页首页首页目录目录1 1、直接转换法、直接转换法在指定的时间点,停止原系统的使用,启动新系统。
在指定的时间点,停止原系统的使用,启动新系统老系统老系统新系统新系统•转换简单,费用最省转换简单,费用最省•风险较大风险较大•适合于处理过程不太复杂的适合于处理过程不太复杂的小型简单系统小型简单系统216下页下页末页末页上页上页首页首页目录目录2 2、并行切换法、并行切换法 新系统投入运行时,老系统并不停止运行,而新系统投入运行时,老系统并不停止运行,而是与新系统同时运行一段时间,对照两者的输出,利用是与新系统同时运行一段时间,对照两者的输出,利用老系统对新系统进行检验老系统对新系统进行检验老系统老系统新系统新系统并行运行并行运行并行运行并行运行–并行切换法的特点是风险小、安全系数大并行切换法的特点是风险小、安全系数大; ;–开销大(需要同时运行开销大(需要同时运行2 2套系统)套系统); ;–用户随着并行期的延长而失去热情,甚至拒绝使用新用户随着并行期的延长而失去热情,甚至拒绝使用新系统系统; ;–隐含假设:隐含假设:原系统是正确的原系统是正确的217下页下页末页末页上页上页首页首页目录目录3 3、、逐步转换法逐步转换法 新系统一部分一部分地替换老系统,直到全部新系统一部分一部分地替换老系统,直到全部替代老系统。
替代老系统老系统老系统 新系统新系统1 新系统新系统2新系统新系统n•避免了直接转换法的危险性,费用也比并行转换法省避免了直接转换法的危险性,费用也比并行转换法省•这种转换方式借口复杂,当新老系统差别太大是不宜这种转换方式借口复杂,当新老系统差别太大是不宜采取该方法采取该方法•一般多采用这种方式进行系统转换一般多采用这种方式进行系统转换218下页下页末页末页上页上页首页首页目录目录一、组织机构的设置一、组织机构的设置1 1、机构设置、机构设置 设置组织机构设置组织机构是保证系统正常运转的基本条件之一是保证系统正常运转的基本条件之一一般设置硬件维护、系统维护、信息维护和行政管理等部一般设置硬件维护、系统维护、信息维护和行政管理等部门2 2、人员配备、人员配备 信息系统的运行管理是一项需要多方协调的系统性工信息系统的运行管理是一项需要多方协调的系统性工作,需要多方面人员的密切配合,并牢固树立作,需要多方面人员的密切配合,并牢固树立为用户服务为用户服务的观点 合理配置运行管理人员包括:合理配置运行管理人员包括:系统运行管理负责人、系统运行管理负责人、系统维护人员、硬件维护人员、操作人员、行政管理人员。
系统维护人员、硬件维护人员、操作人员、行政管理人员219下页下页末页末页上页上页首页首页目录目录二、系统维护二、系统维护1 1、硬件维护、硬件维护–突发性故障维护:突发性故障维护:对于突发性的故障集中人力集中检对于突发性的故障集中人力集中检修或更换修或更换–定期预防性维护:定期预防性维护:按照一定的设备维护理论,定期对按照一定的设备维护理论,定期对系统设备进行检查和保养系统设备进行检查和保养2 2、系统维护、系统维护–正确性维护:正确性维护:改正在系统开发阶段已经发生而在系统改正在系统开发阶段已经发生而在系统测试过程尚未发现的错误测试过程尚未发现的错误–适应性维护:适应性维护:为适应用户外部环境、内部条件发生变为适应用户外部环境、内部条件发生变化,对系统提出新的要求而进行的修改化,对系统提出新的要求而进行的修改220下页下页末页末页上页上页首页首页目录目录–完善性维护:完善性维护:为进一步扩充系统功能和改善性能进行的修为进一步扩充系统功能和改善性能进行的修改–预防性维护:预防性维护:为减少或避免以后需要进行的上述三类维护为减少或避免以后需要进行的上述三类维护而进行的维护而进行的维护。
–系统运行系统环境维护或更新:系统运行系统环境维护或更新:操作系统等系统系统新的操作系统等系统系统新的版本的出现后,对其进行评估,决定是否更新版本的出现后,对其进行评估,决定是否更新3 3、数据维护、数据维护–数据备份:数据备份:经常或定期对重要数据进行备份,对于重要数经常或定期对重要数据进行备份,对于重要数据实时备份据实时备份–存储空间整理:存储空间整理:对系统运行过程中产生的各种临时文件等对系统运行过程中产生的各种临时文件等进行清理,减少存储空间的无谓占用,提高系统运行效率进行清理,减少存储空间的无谓占用,提高系统运行效率221下页下页末页末页上页上页首页首页目录目录三、运行管理规章制度三、运行管理规章制度 除上述各个方面保证系统正常运转外,在系统方面建立健全除上述各个方面保证系统正常运转外,在系统方面建立健全规章制度是必不可少的这些规章制度包括:规章制度是必不可少的这些规章制度包括:–系统安全制度系统安全制度–系统定期维护制度系统定期维护制度–系统运行操作规程系统运行操作规程–用户使用规程用户使用规程–系统信息的安全保密制度系统信息的安全保密制度。
–系统修改规程系统修改规程–系统运行日志及填写规定系统运行日志及填写规定222下页下页末页末页上页上页首页首页目录目录一、系统评价体系一、系统评价体系系统评价体系由系统评价体系由系统建设、系统性能、系统应用系统建设、系统性能、系统应用等方面构成等方面构成1 1、系统建设评价、系统建设评价–系统规划目标的科学性系统规划目标的科学性–规划目标的实现程度规划目标的实现程度–先进性先进性–经济性经济性–资源利用率资源利用率–规范性规范性223下页下页末页末页上页上页首页首页目录目录•2 2、系统性能评价、系统性能评价–可靠性可靠性–系统效率系统效率–可维护性可维护性–可扩充性可扩充性–可移植性可移植性–安全保密性安全保密性•3 3、系统应用评价、系统应用评价–经济效益经济效益–社会效益社会效益–用户满意程度用户满意程度–系统功能应用程度系统功能应用程度224下页下页末页末页上页上页首页首页目录目录二、系统评价文档内容–系统的功能评价系统的功能评价–系统硬件系统、软件系统的评价系统硬件系统、软件系统的评价–系统的应用评价系统的应用评价–系统的效益评价系统的效益评价225下页下页末页末页上页上页首页首页目录目录1 1 程序设计手册程序设计手册 程序设计手册将选定计算机语言或开发工具,来描程序设计手册将选定计算机语言或开发工具,来描述系统的计算机模型,其主要使用者是系统维护人员。
述系统的计算机模型,其主要使用者是系统维护人员–系统采用的术语系统采用的术语 – 程序清单程序清单–每个功能的描述每个功能的描述–系统共享数据系统共享数据–系统接口的实现系统接口的实现–系统的功能描述系统的功能描述–系统开发最小平台系统开发最小平台–系统覆盖的流程系统覆盖的流程–系统全局变量系统全局变量226下页下页末页末页上页上页首页首页目录目录2 2 用户操作手册用户操作手册 用户操作手册为用户提供了系统能够作用户操作手册为用户提供了系统能够作什么和不能作什么的概况和一份详细的安什么和不能作什么的概况和一份详细的安装指南,以及一个贯穿系统详细指南装指南,以及一个贯穿系统详细指南–概况概况–系统运行平台与安装系统运行平台与安装–系统操作描述系统操作描述227下页下页末页末页上页上页首页首页目录目录3 3 系统联机帮助系统联机帮助 228下页下页末页末页上页上页首页首页目录目录問題討論問題討論‧ ‧ ‧人员对系统实施的影响人员对系统实施的影响229下页下页末页末页上页上页首页首页目录目录Ø信息系统失败的一个主要原因是信息系统失败的一个主要原因是用户拒绝使用新系统用户拒绝使用新系统用户拒绝使用新系统用户拒绝使用新系统。
拒绝通常来源于对新的工作方式和任务不熟悉,或者对可拒绝通常来源于对新的工作方式和任务不熟悉,或者对可能发生的改变产生忧虑例如,当计算机文字处理系统进入能发生的改变产生忧虑例如,当计算机文字处理系统进入到办公室时,许多秘书认为自己的工作会被计算机取代,因到办公室时,许多秘书认为自己的工作会被计算机取代,因而拒绝学习和抵制新技术然而,实际上字处理系统不仅没而拒绝学习和抵制新技术然而,实际上字处理系统不仅没有代替秘书的职能,只是完成那些日常重复性、机械化的工有代替秘书的职能,只是完成那些日常重复性、机械化的工作,而且还为秘书创造出新的和更多的管理事务,综合性与作,而且还为秘书创造出新的和更多的管理事务,综合性与分析性的工作大大地增加了分析性的工作大大地增加了230下页下页末页末页上页上页首页首页目录目录ØØ 当新技术被引入组织时,许多习惯于在原有环境下工作的当新技术被引入组织时,许多习惯于在原有环境下工作的当新技术被引入组织时,许多习惯于在原有环境下工作的当新技术被引入组织时,许多习惯于在原有环境下工作的人会觉得受到威胁人会觉得受到威胁人会觉得受到威胁。
人会觉得受到威胁 因为环境改变了,原有的工作岗位、个人地位和人际关因为环境改变了,原有的工作岗位、个人地位和人际关系也都会相应有所改变,因此容易产生一种失落感和不安全感系也都会相应有所改变,因此容易产生一种失落感和不安全感持有这种心态的人员会妨碍新系统的实施并企图恢复原系统持有这种心态的人员会妨碍新系统的实施并企图恢复原系统如果新的工作方式和工作程序不被接受,那么新系统就达不到如果新的工作方式和工作程序不被接受,那么新系统就达不到预定的目标预定的目标拒绝变化的另一个原因是目前的工作环境比较舒拒绝变化的另一个原因是目前的工作环境比较舒适,有关管理人员安于现状如果没有更多的报酬与激励,管适,有关管理人员安于现状如果没有更多的报酬与激励,管理人员会觉得改变工作条件得不偿失,因而产生惰性理人员会觉得改变工作条件得不偿失,因而产生惰性 231下页下页末页末页上页上页首页首页目录目录 总之,要使新系统和新技术的实施成功,企业的最高总之,要使新系统和新技术的实施成功,企业的最高管理者和系统分析与设计人员就必须起变化代理人的作用,管理者和系统分析与设计人员就必须起变化代理人的作用,用动态的观点,采用变化的计划实施策略来引导变化。
当人用动态的观点,采用变化的计划实施策略来引导变化当人们认识到变化的们认识到变化的必要性和紧迫性必要性和紧迫性时,就会产生求变心理,去时,就会产生求变心理,去制定改变现状的计划通过制定改变现状的计划通过管理业务调查、技术培训管理业务调查、技术培训等形式,等形式,能逐步能逐步转变管理人员的观念转变管理人员的观念,完成这项工作需要有耐心和恒,完成这项工作需要有耐心和恒心在系统设计过程中,要注意维持一定的工作满意度,在心在系统设计过程中,要注意维持一定的工作满意度,在此基础上对原有工作予以重定义在系统实施过程中,一旦此基础上对原有工作予以重定义在系统实施过程中,一旦系统出现问题,系统设计人员应迅速作出反应,以免用户产系统出现问题,系统设计人员应迅速作出反应,以免用户产生不满情绪生不满情绪232下页下页末页末页上页上页首页首页目录目录第四次作业第四次作业 …………2013. 4 .22013. 4 .2•(暂时不用提交)(暂时不用提交)1. 1. 怎样区分系统分析与系统设计?怎样区分系统分析与系统设计?2. 2. 系统设计的主要内容包括哪些?系统设计的主要内容包括哪些?3. 3. 解释模块耦合和模块内聚,为什么这些概念很解释模块耦合和模块内聚,为什么这些概念很重要?重要?4. 4. 用户界面设计应该遵循什么原则?用户界面设计应该遵循什么原则?233下页下页末页末页上页上页首页首页目录目录第四次作业第四次作业 …………2013. 4.162013. 4.16•P274P274的课后题的课后题1 1、、7 7、、1111、、1515、、1717、、2121、、2222234下页下页末页末页上页上页首页首页目录目录Good luck!Good luck!Do you have made a progress these Do you have made a progress these days ?days ?﹋謝謝聆聽﹌﹋謝謝聆聽﹌235。
