首页计算机计算机软件软件工程 07 第七章 实现.pptx

07 第七章 实现.pptx

页数:137页文件大小:469.5 KB来源: 软件工程ppt课件

本课件讲解编码阶段的程序设计语言选择与程序设计风格,系统展开软件测试的目标与准则、单元测试与集成测试策略、白盒与黑盒测试用例设计技术,以及调试途径与软件可靠性估算方法。

第7章实现章节页,指出编码和测试统称为实现并给出编码与测试的定义
程序设计语言分类页,指出其基本上可分为汇编语言与高级语言两大类
高级语言分类页,从应用特点分为基础语言、结构化语言与专用语言三类并给出代表语言
查看本课件的文字版(共 137 页,供检索与复制)

第1页:第7章 实现

第7章 实现:第7章:实现编码和测试统称为实现。编码:把软件设计结果翻译成程序。测试:检测程序并改正错误的过程

第2页:程序设计语言的分类

程序设计语言的分类:计算机

  • 1.汇编语言
  • 2.高级语言。7.1编码

第3页:高级语言的分类

高级语言的分类:从应用特点看

  • 基础语言如BASIC、FORTRAN、COBOL、ALGOL等
  • 结构化语言如ALGOL、PL/1、PASCAL、C、ADA等
  • 专用语言如APL、BLISS、FORTH、LISP、PROLOG等

第4页:选择语言的理论标准

选择语言的理论标准

  • 有理想的模块化机制
  • 可读性好的控制结构和数据结构
  • 便于调试和提高软件可靠性
  • 编译程序发现程序错误的能力强
  • 有良好的独立编译机制

第5页:选择语言的实用标准

选择语言的实用标准:选择语言时除了考虑理论上的标准,还必须同时考虑主要的实用标准

  • 系统用户要求
  • 可以使用的编译程序
  • 可以得到的软件工具
  • 工程规模
  • 程序员知识
  • 软件可移植性要求
  • 软件的应用领域

第6页:程序内部的文档

程序内部的文档:选取含义鲜明的名字,如果使用缩写,缩写规则要一致,并给每个名字加注释;通常在每个模块开始处要有一段注释,描述模块功能、算法、接口特点等;程序清单布局应利用适当的阶梯形式,使程序的层次结构清晰明显。7.1.2写程序的风格

第7页:数据说明的风格

数据说明的风格:数据说明数据说明的次序应该标准化,如按数据类型确定说明的次序;多个变量名在一个语句中说明时,应该按字母顺序排列这些变量;如果设计时使用了复杂的数据结构,应该用注释说明实现该数据结构的方法和特点

第8页:语句构造与效率

语句构造与效率

  • 3.语句构造
  • 4.输入/输出
  • 5.效率A.程序运行时间B.存储器效率C.输入/输出效率

第9页:程序设计工具实例

程序设计工具实例:VisualC++运用VisualC++开发工具需要掌握:C++语言特点、语法;Windows编程基础;MFC相关知识;VisualC++集成开发工具环境的使用

第10页:C++语言的特点

C++语言的特点:一、C++语言特点、语法:C++语言是在C语言的基础是扩展而成的,两种语言的基本语法和语义是相同

第11页:面向对象的三个特征

面向对象的三个特征:C++中加入了面向对象程序设计(OOP)的特征:封装性:通过“类”把属性和函数组合在一起。继承性:派生类可从先前定义的基类中继承函数和属性。多态性:一个函数名,由不同的对象解释执行,可得到不同的执行效果

第12页:Windows编程基础与API

Windows编程基础与API:二、Windows编程基础:API:API是Windows应用程序编程接口。API是一个程序内(或一组相关程序内)的一组函数调用,程序员用它创建其他程序。程序员不必知道函数内部,只要知道API的函数原型及返回值。API的函数原型及返回值形式可由相关的技术规范资料获得

第13页:Win32 API的核心组件

Win32 API的核心组件:现在的Win32 API中,核心部分依靠三个主要组件提供Windows的大部分函数,这三个组件分别是:USER

  • 32.DLL;GDI
  • 32.DLL;KERNEL
  • 32.DLL

第14页:Windows消息机制

Windows消息机制:1)基于消息的事件驱动消息可以是由硬件发来的(存于系统队列),也可以由Windows系统和应用程序发来(存于程序队列中);每一个Windows程序在不停的捕捉各种消息,并进行处理;每个窗口都必须有一个窗口函数,来负责消息的判断与处理

第15页:窗口函数

窗口函数:2)窗口函数对消息的处理窗口函数是一个回调函数,可以处理收到的消息,在程序中不需要用户显式调用。该窗口函数的形式通常为:WndProc(),每个窗口类必须在初始化时指定一个窗口函数

第16页:MFC简介

MFC简介:三、MFC:MFC,即Microsoft基本类,该类库封装了SDK(软件开发工具包)结构、功能及应用程序框架内部技术。它提供了许多可以重用的类,使得Windows程序员避免了许多重复性工作

第17页:Visual C++集成开发环境

Visual C++集成开发环境

  • Visual C++集成开发工具环境
  • 开发工具的使用
  • 掌握Win32程序开发流程;一个win32程序由两大块组成:程序代码;用户接口资源

第18页:用户接口资源

用户接口资源:菜单,对话框,图标,光标等;这些资源的实际内容(二进制代码)由各种工具产生,并以各种扩展名的文件存在

第19页:资源描述与构造

资源描述与构造:资源描述文件(*.rc)中对用户接口资源进行描述;RC编辑器(RC.exe)根据该资源描述文件(*.rc)将所有用户接口资源集中构造一个*.RES文件;*.RES文件与程序代码结合起来,构成一个Win32程序

第20页:动态链接库与头文件

动态链接库与头文件:关于函数库和头文件:动态链接库:应用程序调用的API函数在“执行期间”才链接上的函数库,扩展名可以是.dll,也可以是.exe、.fon、.mod、.drv、.ocx等。静态连接库:.lib头文件:如windows.h,它包含操作系统本身的三大模块gdi

  • 32.dll、user
  • 32.dll和kernel
  • 32.dll中的所有API函数

第21页:软件测试的目标

软件测试的目标:有关测试的一些规则

  • 测试是为了发现程序中的错误而执行程序的过程
  • 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案
  • 成功的测试是发现了至今为止尚未发现的错误的测试

第22页:软件测试准则(上)

软件测试准则(上)

  • 所有测试都应该能追溯到用户需求
  • 应该远在测试前就制定出测试计划
  • 把Pareto原理应用到软件测试中
  • 应该从“小规模”测试开始,并逐步进行“大规模”

第23页:软件测试准则(下)

软件测试准则(下):5)穷举测试是不可能的;穷尽测试:包含所有可能情况的测试称为穷尽测试。程序main()a2a1a3b输入输出a1、a2、a3:Integer16bits输入数据的穷尽测试组合:216×216×216=248≈3×10146)为了达到最佳测试效果,应该由独立的第三方从事测试工作

第24页:黑盒测试

黑盒测试:如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。7.2.3测试方法

第25页:白盒测试

白盒测试:也称结构测试。如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试

第26页:模块测试与子系统测试

模块测试与子系统测试

  • 1.模块测试模块测试又称单元测试,它把每个模块作为单独的实体来测试
  • 2.子系统测试子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。7.2.4软件测试的步骤

第27页:系统测试与验收测试

系统测试与验收测试

  • 3.系统测试系统测试是把经过测试的子系统装配成一个完整的系统来测试
  • 4.验收测试验收测试把软件系统作为单一的实体进行测试(利用用户的实际数据测试)
  • 5.平行运行平行运行是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果

第28页:测试阶段的信息流

测试阶段的信息流:测试评价调试可靠性模型软件配置测试配置测试结果预期结果错误错误率数据正确可靠性预测图

第29页:单元测试的方法

单元测试的方法:单元测试单元测试的一般方法是:首先通过编译系统检查并改正程序中所有的语法错误;然后用详细设计模块说明为指南,对重要的控制路径进行测试,以便发现模块内部的错误。通常,单元测试使用白盒测试方法

第30页:测试重点:模块接口与数据结构

测试重点:模块接口与数据结构

  • 模块接口应该对穿过模块接口的数据流进行检测,以保证正确的输入和输出
  • 局部数据结构这是错误的主要来源,应该设计相应的测试用例,以便发现数据结构方面的错误

第31页:测试重点:执行路径与边界

测试重点:执行路径与边界

  • 重要的执行路径由于不可能进行穷尽测试,因此选择测试路径是非常关键的
  • 出错处理通路
  • 边界条件

第32页:代码审查小组

代码审查小组

  • 组长
  • 程序的设计者
  • 程序的编写者
  • 程序的测试者

第33页:计算机测试

计算机测试:由于软件模块不是一个独立的系统,不能独立运行,要依靠其他模块调用,或需要调用其他模块。因此,必须要为测试的单元开发驱动程序或存根程序

第34页:驱动程序与存根程序

驱动程序与存根程序

  • 驱动程序相当于一个“主程序”,用来把测试数据传送给被测试的模块,并打印有关结果
  • 存根程序用来代替被测试模块所调用的模块,相当于“虚拟子程序”

第35页:驱动与存根模块示例

驱动与存根模块示例:如,测试B模块,设计了A模块和C模块。由A负责传送测试数据,由C负责模拟被B调用的模块。C模块可能没有,这取决于B有没有调用其他程序。A、C都是一次性程序,只在测试时临时使用,应尽量设计得简单一些,以节省费用和时间

第36页:正文加工系统层次图

正文加工系统层次图:例:正文加工系统输入1.0输出2.0编辑3.0加标题4.0存储5.0检索6.0编目录7.0格式化8.0添加3.1删除3.2插入3.3修改3.4合并3.5列表3.6图7.2正文加工系统(H图)

第37页:编辑功能的测试

编辑功能的测试:TESTDRIVER编辑3.0TESTSTUB对“编辑”功能的测试

第38页:

第39页:

第40页:集成测试的两种方法

集成测试的两种方法:集成测试集成测试是组装软件的系统化技术,它将经过单元测试的模块联系在一起进行测试。由模块组装成程序时有两种方法:1)非渐增式测试方法先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序

第41页:渐增式测试方法

渐增式测试方法:2)渐增式测试方法每次增加一个待测试模块,把它同已经测试好的那些模块结合起来进行测试,反复进行直到完成所有模块测试的方法

第42页:自顶向下集成

自顶向下集成:使用渐增式测试方法把模块结合到软件系统中去时,有自顶向下和自底向上两种集成方法。自顶向下集成是一种递增的装配软件结构的方法,这种方法应用非常广泛。它需要存根程序,但是不需要驱动程序

第43页:自顶向下集成的思想

自顶向下集成的思想:这种方法的思想是:从主控模块(主程序)开始,沿软件的控制层次向下移动,逐渐把各个模块结合起来。在自顶向下结合方法中,如何将所有模块组装到软件结构中,又有两种方法

第44页:深度优先策略

深度优先策略:1)深度优先策略先组装软件结构的一条主控制通路上的所有模块,选择哪条主控制通路,具有较大的任意性。如图,如果选取左通路,就先把模块M1、M2、M5结合起来测试,然后结合模块M8、M6,再构造中央和右侧的控制通路。M1M2M3M4M6M5M7M8图7.3自顶向下结合实例

第45页:宽度优先策略

宽度优先策略:2)宽度优先策略沿着软件结构水平地移动,把处于同一个层次的所有模块组装起来。如图,首先结合M2、M3、M4和主控模块M1,然后结合下一个控制层次中的模块M5、M6和M7,最后结合模块M8。M1M2M3M4M6M5M7M8图7.3自顶向下结合实例

第46页:自顶向下集成过程(一)

自顶向下集成过程(一):自顶向下集成方法的基本过程如下:1)对主控模块进行测试,测试时用存根程序代替所有直接被主控模块调用的模块;M1M2M3M4M6M5M7M8图7.3自顶向下结合实例

第47页:自顶向下集成过程(二)

自顶向下集成过程(二):M1M2M3M4M6M5M7M8图7.3自顶向下结合实例2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代替一个存根程序(新结合的模块往往又需要新的存根程序)

第48页:自顶向下集成过程(三)

自顶向下集成过程(三)

  • 每结合一个模块,就测试一个
  • 为保证不引入新的错误,需要进行回归测试,即重复以前进行过的部分或全部测试
  • 重复回到第二步,直到构成整个软件结构。M1M2M3M4M6M5M7M8图7.3自顶向下结合实例

第49页:自底向上集成

自底向上集成:方法是从软件结构最底层模块开始进行组装和测试,它与自顶向下结合方法相反,需要驱动程序,不需要存根程序

第50页:自底向上集成过程(一)

自底向上集成过程(一):自底向上集成方法的基本过程如下:1)把底层模块组合成实现一个特定软件子功能的族,如图族1、2、3。McMaMbD2D1D3族1族2族3图

第51页:自底向上集成过程(二)

自底向上集成过程(二):2)为每个模块设计一个驱动程序,作为测试的控制程序,以协调测试用例的输入和输出。图中D1、D2、D3分别是族1、2、3的驱动程序;McMaMbD2D1D3族1族2族3图

第52页:自底向上集成过程(三)

自底向上集成过程(三)

  • 对模块进行测试
  • 用实际模块代替驱动程序组装成新的模块族,在新加入的实际模块上面加上新的驱动程序进行测试;McMaMbD2D1D3族1族2族3图

第53页:自底向上集成过程(四)

自底向上集成过程(四):5)重复第二到第四步,逐渐向上加入实际模块,直至构造出整个软件结构。McMaMbD2D1D3族1族2族3图

第54页:集成测试策略的比较

集成测试策略的比较

  • 1.改进的自顶向下测试方法
  • 2.混合法。M1M2M3M4M5M6

第55页:回归测试

回归测试:指重新执行已经做过的部分测试。回归测试用于保证由于调试或其他原因引起的程序变化,不会导致额外错误的测试活动

第56页:确认测试的范围

确认测试的范围:确认测试(验收测试)也称为验收测试,目标是验证软件的有效性。如果软件的功能和性能符合用户的期待,软件就是有效的。软

第57页:确认测试的特点

确认测试的特点

  • 某些已经测试过的纯粹技术性的测试项可能不需要再次测试,而对用户特别感兴趣的功能或性能,可能需要增加一些测试
  • 通常确认测试主要使用实际生产中的数据来进行测试
  • 确认测试必须有用户的积极参与,甚至以用户为主,可能需要进行一些与用户使用步骤有关的测试

第58页:软件配置复查

软件配置复查:确认测试一般使用黑盒测试法。7.5.2软件配置复查目的:保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,而且已经编好目录

第59页:Alpha与Beta测试

Alpha与Beta测试:Alpha和Beta测试Alpha测试:用户在开发者的场所进行测试,并且在开发者的指导下进行,测试在受控环境中进行,开发者记录发现的错误和问题;Beta测试:用户在一个或多个客户场所进行测试,不受开发者控制,测试者记录发现的问题和错误,定期将问题报告发送给开发者

第60页:逻辑覆盖与语句覆盖

逻辑覆盖与语句覆盖:白盒测试技术1.语句覆盖语句覆盖是指:设计的测试用例能使程序中每条语句至少执行一次

第61页:被测试模块的源程序

被测试模块的源程序:例:一个被测试模块的源程序为(PASCAL语言):PROCEDUREEXAMPLE(A,B:REAL;VARX:REAL);BEGINIF(A&gt

  • AND(B=
  • THENX:=X/A;IF(A=
  • OR(X&gt
  • THENX:=X+1END

第62页:语句覆盖的测试用例

语句覆盖的测试用例:入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图选取测试用例:A=2,B=0,X=4,程序执行路径为:sacbed

第63页:判定覆盖

判定覆盖:判定覆盖是指:选取足够的测试用例,使得程序中每个判断的可能结果都至少执行一次,也就是说使程序的每个判断分支至少通过一次

第64页:判定覆盖的测试用例

判定覆盖的测试用例:入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图对于上例,选取如下测试用例:I.A=3,B=0,X=3(覆盖sacbd)II.A=2,B=1,X=1(覆盖sabed)

第65页:条件覆盖

条件覆盖:条件覆盖是指:选择足够的测试用例,使得程序中每个判定表达式的每个条件都取到各种可能的结果

第66页:条件覆盖的条件取值

条件覆盖的条件取值:入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图上例中,有两个判定表达式,每个表达式有两个条件,为了做到条件覆盖,应该选取测试数据使得a点出现如下结果:A>1,A≤1,B=0,B≠0在b点出现如下结果:A=2,A≠2,X>1,X≤1

第67页:条件覆盖的测试用例

条件覆盖的测试用例:选取如下测试用例:I.A=2,B=0,X=4(满足A>1,B=0,A=2和X>1,执行路径为sacbed)II.A=1,B=1,X=1(满足A≤1,B≠0,A≠2和X≤1,执行路径为sabd)入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图

第68页:条件覆盖与判定覆盖的关系

条件覆盖与判定覆盖的关系:条件覆盖通常比判定覆盖强,但是条件覆盖不一定包含判定覆盖。入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图

第69页:只满足条件覆盖的示例

只满足条件覆盖的示例:如:I.A=2,B=0,X=1(满足A>1,B=0,A=2和X≤1,执行路径为sacbed)II.A=1,B=1,X=2(满足A≤1,B≠0,A≠2和X>1,执行路径为sabed)只满足条件覆盖,并不满足判定覆盖。入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图

第70页:判定/条件覆盖

判定/条件覆盖:判定/条件覆盖是指:选取足够的测试用例使得同时满足判定覆盖和条件覆盖的要求

第71页:判定/条件覆盖的测试用例

判定/条件覆盖的测试用例:对于上例,选取如下测试用例:I.A=2,B=0,X=4(满足A>1,B=0,A=2和X>1,执行路径为sacbed)II.A=1,B=1,X=1(满足A≤1,B≠0,A≠2和X≤1,执行路径为sabd)入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图

第72页:条件组合覆盖

条件组合覆盖:条件组合覆盖指:选取足够的测试用例,使得每个判定表达式中条件的各种可能的组合都至少出现一次

第73页:八种条件组合

八种条件组合:对于上例,共有8

  • A>1,B=
  • A>1,B≠
  • A≤1,B=
  • A≤1,B≠
  • A=2,X&gt
  • A=2,X≤
  • A≠2,X&gt
  • A≠2,X≤1入口返回A>1 andB=0A=2 orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图

第74页:条件组合覆盖用例(上)

条件组合覆盖用例(上):选取如下测试用例:I.A=2,B=0,X=4(满足1、5组合:A>1,B=0,A=2,X>1,执行路径sacbed)II.A=2,B=1,X=1(满足2、6组合:A>1,B≠0,A=2,X≤1,执行路径sabed)入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图

第75页:条件组合覆盖用例(下)

条件组合覆盖用例(下):III.A=1,B=0,X=2(满足3、7组合:A≤1,B=0,A≠2,X>1,执行路径sabed)IV.A=1,B=1,X=1(满足4、8组合:A≤1,B≠0,A≠2,X≤1,执行路径sabd)入口返回A>1andB=0A=2orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图

第76页:点覆盖

点覆盖:如果从对程序路径的覆盖程度分析,可以提出下面一些逻辑覆盖标准:6.点覆盖点覆盖是指:选取足够多的测试用例,使得程序执行路径至少经过程序图中每个节点一次。sabdce1234567图7.5对应的程序图

第77页:边覆盖

边覆盖

  • 7.边覆盖边覆盖是指:选取足够多的测试用例,使得程序执行路径至少经过程序图中每条边一次。sabdce1234567图7.5对应的程序图选取如下测试用例:I.A=3,B=0,X=3(执行路径1—4—5—
  • II.A=2,B=1,X=1(执行路径1—2—6—

第78页:路径覆盖

路径覆盖:路径覆盖是指:选取足够多的测试用例,使得程序的每条可能路径都至少执行一次

第79页:路径覆盖的测试用例

路径覆盖的测试用例:sabdce1234567图7.5对应的程序图选取如下测试用例:I.A=1,B=1,X=1(执行路径1—2—

  • II.A=1,B=1,X=2(执行路径1—2—6—
  • III.A=3,B=0,X=1(执行路径1—4—5—
  • IV.A=2,B=0,X=4(执行路径1—4—5—6—

第80页:更强的测试数据

更强的测试数据

  • A=3,B=0,X=
  • A=2,B=0,X=
  • A=2,B=1,X=
  • A=1,B=0,X=
  • A=1,B=1,X=1更强的测试数据:满足路径覆盖和条件组合覆盖
  • -5)满足条件组合覆盖,执行路径分别是:sacbed、sabed、sabed、sabd入口返回A>1 andB=0A=2 orX>1X=X/AX=X+1sabdceTTFF1234567图7.5被测试模块的流程图路径:sacbd

第81页:控制结构测试

控制结构测试:(自学)

第82页:等价类划分

等价类划分:是一种黑盒测试技术。穷尽的黑盒测试需要使用所有可能的输入数据(有效的和无效的)进行测试,通常是不现实的。因此产生了等价类划分。7.7.1等价划分(等价类划分)7.7黑盒测试技术

第83页:等价类划分的思想

等价类划分的思想:如果将所有可能的输入数据(有效的和无效的)划分为若干个等价类,就可以假定用每一个等价类中的代表值作为测试用例来进行测试时,等价于用该类中所有值进行了测试

第84页:等价类划分的规则(一)

等价类划分的规则(一):用等价类划分设计测试用例时,主要分两步:划分等价类、确定测试用例

  • 等价类划分划分等价类需要经验,以下给出一些规则
  • 如果某输入条件规定了输入的范围,那么可以划分为一个有效的等价类和两个无效的等价类。如X的值的输入范围是[1,99],那么测试X时,可以这样划分:有效等价类为[1,99],无效等价类为(-∞
  • 和(99,+∞)

第85页:等价类划分的规则(二)

等价类划分的规则(二):B.如果某个输入条件规定了一组可能的值,且程序可以对不同的值作出不同的处理,那么可以为每种值确定一个有效的等价类,同时还有一个无效等价类。如,“职称”这个量可能的值是:教授、副教授、讲师、助教。那么可以这样划分:四类有效等价类分别为教授、副教授、讲师、助教,无效等价类为四种职称以外的所有值

第86页:确定测试用例的步骤(上)

确定测试用例的步骤(上)

  • 确定测试用例A.给每个等价类规定一个唯一的编号
  • 设计一个新的测试用例,使其尽可能多地覆盖未被覆盖过的有效等价类。重复此步,直至所有有效等价类被覆盖

第87页:确定测试用例的步骤(下)

确定测试用例的步骤(下):C.设计一个新的测试用例,使其覆盖而且只覆盖一个尚未被覆盖的无效等价类。重复此步,直到所有无效等价类被覆盖。通常程序发现一类错误后,就报出错信息,不再检查其它类错误,所以设计测试用例时,一次只覆盖一个无效等价类

第88页:数字串转整数函数实例

数字串转整数函数实例:实例:一个把数字串变成整数的函数。计算机字长:16bits,函数由PASCAL语言编写。functionstrtoint(dstr:shortstr):integertypeshortstr=array[1..6]ofchar;/字符串6位/(16位字长能表示的整型数范围是[-215,215-1],即[-32768,32767])

第89页:有效输入的等价类

有效输入的等价类

  • 1-6个数字字符组成的数字串(最高位数字不为零);如:[ 0 , 999999 ]
  • 最高位数字是零的数字串;如:“012345”
  • 最高位数字左邻是负号的数字串;如:“-12345”

第90页:无效输入的等价类

无效输入的等价类:有

  • 空字符串(全是空格);如“”
  • 左部填充的字符既不是零,又不是空格;如:“A12345”
  • 最高位数字右面由数字和空格混合而成;如:“123 45”
  • 最高位数字右面由数字和其他字符混合而成;如:“12A345”
  • 负号与最高位数字之间有空格;如:“-1234”

第91页:合法输出的等价类

合法输出的等价类:有

  • 在计算机能表示的最小负整数和零之间的负整数;如:[-32768
  • (10)零
  • 在零和计算机能表示的最大正整数之间的正整数;如:(0,32767 ]

第92页:非法输出的等价类

非法输出的等价类:有

  • 比计算机能表示的最小负整数还小的负整数;如:“-32769”
  • 比计算机能表示的最大正整数还大的正整数;如:“123456”

第93页:测试方案(上)

测试方案(上):根据划分的等价类,设计出测试方案11个

  • 1-6个数字组成的字符串;输入:‘1’预期的输出:1
  • 最高位数字是零的数字串;输入:‘000001’预期的输出:1
  • 负号与最高位数字相邻;输入:‘-00001’预期的输出:-1

第94页:测试方案(中)

测试方案(中)

  • 最高位数字是零的特例;输入:‘000000’预期的输出:0
  • 太小的负整数;输入:‘-47561’预期的输出:错误-无效输入
  • 太大的正整数;输入:‘132767’预期的输出:错误-无效输入

第95页:测试方案(下)

测试方案(下)

  • 空字符串;输入:‘’预期的输出:错误-没有数字
  • 字符串左部字符既不是零又不是空格;输入:‘AAAAA1’预期的输出:错误-非数字
  • 最高位数字后面有空格;输入:‘1 2’预期的输出:错误-无效输入

第96页:测试方案(续)

测试方案(续)

  • 最高位数字后面有其他字符;输入:‘1AAA23’预期的输出:错误-无效输入
  • 负号和最高位数字之间有空格;输入:‘-12’预期的输出:错误-负号位置错

第97页:边界值分析

边界值分析:程序通常在处理边缘情况时容易出现错误,如等价类与等价类之间的边界值。所以在设计测试用例时,使用正好等于、正好大于、正好小于边界值的数据进行测试,发现程序错误的概率较大

第98页:边界值分析与等价划分的结合

边界值分析与等价划分的结合:边界值分析测试法属黑盒测试。在实际设计测试方案时,常常结合使用等价划分和边界值分析两种技术,把一些等价类的边界值作为测试用例进行测试

第99页:边界值补充用例(上)

边界值补充用例(上):上例中设计了11个测试用例

  • 使输出刚好等于最小负整数;输入:‘-32768’预期的输出:-32768
  • 使输出刚好等于最大的正整数;输入:‘32767’预期的输出:32767

第100页:边界值补充用例(下)

边界值补充用例(下)

  • 使输出刚刚小于最小的负整数;输入:‘-32769’预期的输出:错误-无效输入
  • 使输出刚刚大于最大正整数;输入:‘32768’预期的输出:错误-无效输入

第101页:错误推测

错误推测:法在很大程度上靠直觉和经验进行。基本思想:列举出程序中可能的错误和容易发生错误的特殊情况,且根据它们选择测试方案。如:输入、输出为0时容易出错;输出记录为0条时容易出错;等等

第102页:实用测试策略(上)

实用测试策略(上):对软件系统进行实际测试时,应该联合使用各种设计测试方案的方法,形成一种综合策略。具体可以使用如下策略

  • 在任何情况下都应该进行边界值分析
  • 必要时用等价划分法补充测试方案

第103页:实用测试策略(下)

实用测试策略(下)

  • 必要时再用错误推测法补充测试方案
  • 对照程序逻辑,检查已经设计出的测试方案。可以根据对程序可靠性的要求采用不同的逻辑覆盖标准

第104页:TRIANGLE程序实例

TRIANGLE程序实例:实例:程序TRIANGLE读入三个整数值,这三个整数代表同一个三角形三条边的长度,程序根据这三个值判断三角形属于不等边、等腰或是等边三角形

第105页:TRIANGLE程序流程图

TRIANGLE程序流程图:开始停止A<B+CB<A+CC<A+BA=BA=CB=CB=C输出:等边三角形输出:不等边三角形输出:等腰三角形输出:不是三角形abcdefghijklmnop12345678910111213141516171819202122TFTFTFTTFFFTTF图

第106页:应测试的十一种情况(上)

应测试的十一种情况(上):综合使用边界值分析、等价值划分和错误推测等技术,可以设计出11

  • 正常的不等边三角形
  • 正常的等边三角形
  • 正常的等腰三角形,包括两条相等边的三种不同排列方法
  • 退化的三角形(即两边的和等于第三边),包括三种不同排列方法

第107页:应测试的十一种情况(下)

应测试的十一种情况(下)

  • 三条边不能构成三角形(即两边之和小于第三边),包括三种不同排列方法
  • 一条边的长度为零,包括三种不同的排列方法
  • 两条边的长度为零,包括三种不同的排列方法
  • 三条边的长度全为零
  • 输入数据中包含负整数
  • 输入数据不全(不足三个正整数)
  • 输入数据中包含非整数型的数据

第108页:TRIANGLE对应的程序图

TRIANGLE对应的程序图:abcdefghklmnopij1234567891011121314151617181920212223图

第109页:TRIANGLE测试数据(上)

TRIANGLE测试数据(上):程序TRIANGLE的测试数据测试数据测试功能cba-,-,-17,10,1010,12,821,10,105,5,10-,-,-17,0,012,10,0-,-,-10,17,108,12,1010,21,105,10,5-,-,-0,17,012,0,1010,10,1010,10,178,10,1210,10,2110,5,50,0,00,0,70,10,121.等边

  • 2.等腰3.不等边
  • 4.非三角形
  • 5.退化情况
  • 6.零数据

第110页:TRIANGLE测试数据(下)

TRIANGLE测试数据(下):测试数据测试功能cba-,-,-17,-10,-1010,12,8-,-,--,-,10-,8,10-,-,--,-,-A,10,8A , 10.5, 7E332768,8,32767-32769,8,32767-32767,8,-32769-,-,--10,17,-1017,-8,10-,-,--,10,-8,-,10-,-,--,-,-8,A,1010.5, 7E3, A32766,8,3276732768,8,-327698,-32767,-32768-10,-10,-10-10,-10,17-8,10,17-,-,-10,-,-8,10,-A,B,C=,+,*8,10,A7E3 , 10.5 , A32767,32766,8-32768,8,32766-32768,8,-3276

  • 8.遗留数据
  • 9.无效输入
  • 10.边界值

第111页:测试数据的覆盖程度

测试数据的覆盖程度:最后,检查测试数据的覆盖程度,通常应该做到边覆盖。测试数据覆盖程度检验表中列出的四种测试数据已经做到了边覆盖(覆盖所有的22条边)

第112页:覆盖程度检验表

覆盖程度检验表:测试数据覆盖程度检验表覆盖的边测试数据编号1,2,3,4,5,6,7,81,2,3,4,5,15,19,20,81,2,3,4,14,18,19,20,81,2,3,4,14,16,17,19,20,81,2,3,4,14,16,21,22,81,2,3,4,14,16,21,22,81,2,3,4,14,16,21,22,81,2,3,11,12,13,81,2,10,12,13,81,9,12,13,810,10,1010,10,1710,17,1017,10,108,10,128,12,1010,12,810,10,2110,21,1021,10,1012a2b2c3a3b3c4a4b4c

第113页:调试过程

调试过程:调试7.8.1调试过程调试是在测试发现错误之后排除错误的过程。测试用例结果调试附加测试纠正且回归测试已识别原因被怀疑原因

第114页:调试途径

调试途径

  • 1.蛮干法:打印内存的内容,从中寻找错误的线索,是效率最低的程序调试方法
  • 2.回溯法:从发现问题的程序段开始人工地往回追踪分析程序代码,直到找到错误
  • 3.原因排除法包括:对分查找法、归纳法、演绎法

第115页:软件可靠性的定义

软件可靠性的定义:软件可靠性1.软件可靠性定义软件可靠性:是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。7.9.1基本概念

第116页:软件的可用性

软件的可用性:对故障可修复系统,应同时使用可靠性和可用性来衡量。软件可用性是:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。可靠性和可用性的区别是:可靠性是在0到t时间间隔内,系统没有失效的概率。而可用性是在t时刻,系统是正常运行的概率

第117页:t时刻可用的两种可能

t时刻可用的两种可能:如果在t时刻,系统是可用的

  • 在0到t时刻这段时间内,系统一直没有失效(可靠)
  • 在0到t时刻这段时间内失效过,但是系统修复后运行到t时刻时情况良好

第118页:稳态可用性

稳态可用性:如果在一段时间内,软件系统故障停机时间分别为:td1,td2,…,正常运行时间分别为:tu1,tu2,…,则系统的稳态可用性定义为:其中Tup=Σtui,Tdown=Σtdi

第119页:MTTF与MTTR

MTTF与MTTR:如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则上面公式的系统稳态可用性变成:平均维修时间MTTR是修复一个故障平均需要用的时间,取决于维护人员的技术水平和对系统熟悉程度。平均无故障时间MTTF是系统按照规格说明书规定成功地运行的平均时间,取决于系统中潜伏的错误数量

第120页:估算MTTF的符号

估算MTTF的符号:符号估算MTTF时使用到下列符号ET——测试之前程序中故障总数;IT——程序长度(机器指令总数);τ——测试(包括调试)时间;Ed(τ)——在0至τ期间发现的错误数;Ec(τ)——在0至τ期间改正的错误数

第121页:估算MTTF的基本假定

估算MTTF的基本假定

  • 2.基本假定可作出下列假定
  • 单位长度里的故障数ET/IT近似为常数。一些统计数字表明,通常有:0.5×10-2≤ET/IT≤2×10-2
  • 失效率正比于软件中剩余的(潜藏的)故障数,而平均无故障时间MTTF与剩余的故障数成反比
  • 调试过程没有引入新的故障,即Ec(τ)=Ed(τ)

第122页:剩余故障数

剩余故障数:由于系统剩余的故障数为:Er(τ)=ET-Ec(τ)所以单位长度程序中剩余的故障数为:εr(τ)=ET/IT-Ec(τ)/IT

第123页:MTTF的估算公式

MTTF的估算公式:估算平均无故障时间MTTF因为平均无故障时间与单位长度程序中剩余的故障数εr(τ)成反比,所以:其中:K为常数,它的值根据经验选取,经典值是200

第124页:改正错误数的估计

改正错误数的估计:由上式变换后得到程序中改正的错误数:根据对软件平均无故障时间的要求,可以估计需要改正多少个错误后,测试工作就可以结束

第125页:植入故障法

植入故障法

  • 4.估计故障总数ET的方法
  • 植入故障法假设人为地植入的故障数为Ns,经过一段时间的测试之后发现ns个植入的故障,同时还发现了n个原有的故障,则可以估计出程序中原有的故障总数:其中:是故障总数ET的估计值

第126页:分别测试法

分别测试法:植入错误法人为植入的错误与原有程序错误可能性质很不相同,发现它们的难度也不同,用此法估计的错误数有时可能不太准确。2)分别测试法分别测试法随机把程序中一部分原有错误加上标记,根据测试发现的有标记和无标记错误的比例,估计程序错误总数

第127页:分别测试法的符号

分别测试法的符号:分别测试法使用两个测试员,独立地测试同一个程序的两个副本,由另一名分析员分析他们的测试结果,把其中一个测试员发现的故障作为有标记的故障。用τ表示测试时间,假设τ=0时故障总数为B0(即ET);τ=τ1时测试员甲发现的故障数为B1;τ=τ1时测试员乙发现的故障数为B2;τ=τ1时两个测试员发现的相同故障数为bc

第128页:故障总数的估计

故障总数的估计:如果认为测试员甲发现的故障是有标记的,即程序中有标记的故障总数为B1,那么测试员乙发现的B2个故障中有bc个是有标记的。所以可以估计出测试前程序中的故障总数为:其中,是故障总数ET的估计值。每隔一定时间,分析员分析两名测试员的测试结果,来估计错误总数。几次估计结果差不多时,用其平均值作为错误总数的估计值

第129页:日立预测法

日立预测法:预测软件可靠性和衡量软件质量的方法。用测试完成率作为度量软件质量的标准

第130页:测试完成率模型

测试完成率模型:50%100%测试时间使用率第一阶段第二阶段第三阶段100%测试用例完成率测试用例完成率随测试时间变化的情况日立的经验表明,完成软件测试通常需要经历三个阶段,第一阶段故障多,测试完成慢,第二阶段测试完成率提高快,第三阶段错误难改正,完成率提高不快。测试时间使用率=测试所用时间/测试允许使用时间

第131页:第一阶段的时间占比

第一阶段的时间占比:50%100%测试时间使用率第一阶段第二阶段第三阶段100%测试用例完成率测试用例完成率随测试时间变化的情况日立的经验表明

  • 第一个阶段平均占总时间的22%
  • 如果第一个阶段占用的时间超过总时间的55%以上时,该项工程必然失败

第132页:成功与失败工程的时间对比

成功与失败工程的时间对比

  • 成功的工程第一个阶段占用的时间平均为总时间的15%,失败的工程第一个阶段占用的时间高达总时间的97%左右
  • 成功的工程第二阶段占总时间的57%左右,失败的工程第二个阶段只占总时间的29%左右。50%100%测试时间使用率第一阶段第二阶段第三阶段100%测试用例完成率测试用例完成率随测试时间变化的情况

第133页:错误发现率模型

错误发现率模型:错误发现率:单位时间内发现的错误数。峰值时间成功的工程失败的工程极坏的工程时间错误发现率错误发现率曲线7.10.2错误发现率模型经验表明,失败工程的错误发现率曲线的斜率范围是-0.3~0,成功的工程为-1~-0.3

第134页:日立预测法的步骤(上)

日立预测法的步骤(上)

  • 制订测试计划,设计测试方案,确定要完成的测试用例的总数
  • 从集成测试开始,记录测试用例完成数和错误发现数,绘制用例完成率曲线和错误发现率曲线
  • 绘制曲线时,实际的数据是一串离散的点,如果工程不大周期不长的话,连接这些点得不到平滑的曲线时,作平滑处理

第135页:日立预测法的步骤(下)

日立预测法的步骤(下)

  • 每周至少检查一次绘制的曲线,以判断处于哪个阶段,如果第二阶段的到来比计划时间推迟25%,就需要及时采取措施补救
  • 严密注视错误发现率变化情况以确定其峰值,在错误发现率下降时,计算其斜率,如果大于-0.3就产生了严重的问题
  • 每周至少检验一次,以修正上一周作出的阶段性预测

第136页:第7章小结

第7章小结:◇测试计划为做好集成测试和验收测试,需为如何组织测试制订实施计划。计划应包括测试的内容、进度、条件、人员、测试用例的选取原则、测试结果允许的偏差范围等。◇测试分析报告测试工作完成以后,应提交测试计划执行情况的说明,对测试结果加以分析,并提出测试的结论意见

第137页:测试阶段可能用到的软件工具

测试阶段可能用到的软件工具:BugfreeBug处理记录工具。Wiki知识共享工具。LoadRunner负荷(载)测试软件,预测系统行为和性能的负载测试工具,通过模拟多至上千万用户实施并发负载及实时性能监测的方式来查找和确认问题

顶部目录