版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章程序调试及测试10.1程序开发流程10.2如何让程序运行 10.3VisualC++6.0集成环境的使用10.4程序错误10.5软件测试与软件调试的概念10.6在IDE中调试程序10.7程序测试10.8本章小结
【主要内容】
•程序调试环境VC6.0介绍;
•程序调试方法;
•程序测试方法。
【学习目标】
•了解典型的软件开发流程,能够按照软件开发流程编写实际的应用程序;
•了解编译、链接的目的与意义;
•初步掌握程序调试的基本方法;
•了解程序测试方法。
无论一个程序的设计结构是如何合理,也无论文档如何完备,如果不能产生正确的结果,则其一文不值。
——《C++程序调试》[美]ChrisH.PappasWilliamH.Murray
任何一个天才都不敢说,他编的程序是完全正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才能完成。
调试:在应用程序中发现并排除错误的过程。
调试是一个程序员应该掌握的最基本的技能,其重要性甚至超过学习一门语言。不会调试,意味着程序员即使会一门编程语言,也不能编制出任何好的软件。几乎没有首次编写就不出错的代码。对一定规模的程序,由读源代码来寻找bug基本不可行,用调试工具找bug是最有效率的方法。
调试有助于程序员了解程序的实际执行过程及检查设计与预想的一致性,提高程序开发效率;熟悉调试过程,可以让程序员编写出适合调试的代码,提高对代码的感知力和控制力。
调试工具是学习计算机系统和其他软硬件知识的好帮手。通过软件调试可以快速地了解一个软件和系统的模块、架构和工作流程。调试方法一旦掌握,长期受用。
“bug”与“debug”
英文bug一词的原意是“臭虫”或“虫子”。但是现在,在电脑系统或程序中,对于一些隐藏着的未被发现的缺陷或问题,人们也叫它“bug”,这是怎么回事呢?
“bug”的命名者是格蕾丝·赫柏(GraceMurrayHopper),她是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。1945年,计算机还是由机械式继电器和真空管驱动的,机器有房间那么大,体现当时技术水平的HarvardMarkⅡ,是由哈佛大学制造的一个庞然大物。一天,当赫柏通过设置MarkⅡ
中的17000个继电器进行编程后,她的工作却毁于一只飞进计算机内部一组继电器的触点而造成短路的飞蛾。在报告中,赫柏用胶条贴上飞蛾,并用“bug”来表示“一个在电脑程序里的错误”,从此“bug”这个说法一直沿用到今天。与bug相对应,人们将发现bug并加以纠正的过程叫做“debug”(中文称做“调试”),意即“捉虫子”或“杀虫子”、排除(程序中的)错误。
编程与调试都是程序开发中的重要环节,那么程序开发的整个流程是怎样的呢?图10.1给出了开发软件的一般流程,图中椭圆框为加工,矩形框为加工的结果。10.1程序开发流程
图10.1程序开发流程用计算机解决问题,我们首先要对待解决的问题进行分析,把其中的信息以及信息间的联系提炼出来,然后确定数据及数据间的逻辑关系并确定它们的存储方式,用编程语言中的数据类型描述出来,这样就确定了数据结构,其后的算法设计是建立在数据的存储结构之上的。
程序员依据算法进行程序设计,完成之后,把源程序交给编译器进行编译,如果有语法错误,编译器会给出错误或告警,这时程序员根据提示找出程序中的错误进行修改,直到程序编译通过,形成可执行程序。之后再运行可执行程序,并根据测试用例进行测试,查看结果是否正确。若结果没有问题,则程序开发工作完成;若结果有问题,则进行调试,找出程序中的错误原因,确定是在问题分析、数据结构设计、算法设计、代码设计的哪一步出的问题,做相应的修改后重新编译成执行程序,重新测试,直至得到正确的结果。
测试用例:为验证程序是否达到设计要求而编制的一组测试数据、预期结果等内容。
源程序:用高级语言或汇编语言编写的程序代码。
用C语言编写好的源程序是不能在机器上直接运行的,实际上任何高级语言源程序都要“翻译”成机器语言才能在机器上运行,“翻译”的过程见图10.2。10.2如何让程序运行
图10.2C语言的翻译执行过程源程序经过“编译程序”的翻译,形成计算机可以识别的二进制代码。
编译的主要步骤是,读取源程序,首先进行预处理,即将其中的宏定义替换,将头文件全部包含进来,然后对其进行词法和语法的分析,没有错误则转换为机器语言,生成目标程序。
尽管目标代码已经是机器指令,但还需要通过“链接程序”将各个目标程序与库函数连接,才能形成完整的可执行程序。
程序上机运行调试步骤如图10.3所示。
图10.3程序上机运行调试步骤
(1)编辑(Edit):录入源程序代码。生成C源程序文件,后缀为.c(在VC6.0环境下为.cpp)。
(2)编译(Compile):执行编译命令。如果有语法错误,根据编译器给出的错误或告警信息,对程序中的错误进行修改,直到程序编译通过。生成目标文件,后缀为.obj。
(3)链接(Link):执行链接命令。生成可执行文件,后缀为.exe(在Windows下)。
(4)运行(Run):执行运行命令。程序运行,产生结果。
(5)查看程序结果:在相应的输出位置如指定的窗口或文件中查看程序的输出结果。
(6)调试(Debug):如程序结果有错误,要通过各种调试方法,找出程序错误的原因并进行修改,直至程序结果正确。
MicrosoftVisualC++(简称VisualC++、MSVC、VC++或VC)是微软公司的C++开发工具,具有集成开发环境(IntegratedDevelopmentEnvironment,IDE),是用于程序开发的应用程序环境,一般包括代码编辑器、编译器、调试器和图形用户界面工具。10.3VisualC++6.0集成环境的使用
VisualC++6.0集成开发环境
VisualC++系列产品是微软公司推出的一款优秀的C++集成开发环境,其产品定位为Windows95/98、NT、2000系列Win32系统程序开发,由于其良好的界面和可操作性,被广泛应用。由于2000年以后,微软全面转向.NET平台,VisualC++6.0成为支持标准C/C++规范的最后版本。
利用VC++6.0提供的一种控制台操作方式,可以建立C语言应用程序,Win32控制台程序(Win32ConsoleApplication)是一类Windows程序,它不使用复杂的图形用户界面,程序与用户间的交互是通过一个标准的正文窗口进行的。
下面对如何使用VisualC++6.0编写简单的C语言应用程序作一个初步的介绍。
1.启动VisualC++6.0环境
安装完VisualC++6.0后,可以选择如下两种方式启动:
(1)单击开始→程序→MicrosoftVisualStudio6.0→MicrosoftVisualC++6.0;
(2)单击开始→运行→输入“msdev”。
启动后的界面如图10.4所示。菜单栏对应的中文含义见表10.1。
表10.1主菜单
图10.4启动界面
2.建立项目
编写一个应用程序首先要创建一个项目(Project),在创建项目的同时将创建项目工作区(Workspace)。项目工作区记录了一个项目的集成开发环境的设置。
项目:在VisualC++IDE中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个项目。VisualC++IDE以项目作为程序开发的基本单位,项目用于管理组成应用程序的所有元素,并由它生成应用程序。
(1)选择菜单命令File→New或使用热键Ctrl+N启动新建向导,界面如图10.5所示。步骤为:①在Projects属性中选择Win32ConsoleApplication(Win32控制台应用程序);②在Projectname中输入项目名称,如demo;③在Location中选择项目存储路径,如D:\TEST\demo,项目所有文件将保存在此路径下;④单击“确定”按钮,进入下一界面,如图10.6所示。
图10.5新建向导
图10.6Win32ConsoleApplication界面特别提醒:若项目项未指定“Win32ConsoleApplication”,可能会出现链接错误。
说明:Win32ConsoleApplication是基于DOS开发平台开发应用程序,不能使用与图形有关的函数,控制台程序入口函数是main。如果编写传统的C程序,必须建立Win32Console程序。
(2)在图10.6所示界面中选择Anemptyproject,然后点击“Finish”按钮,系统显示如图10.7所示的界面。如果想退回上一步,可以选择“Back”按钮。
图10.7NewProjectInformation界面
(3)在图10.7中选择“OK”按钮,系统完成项目的创建,显示如图10.8所示的界面。
3.在项目中新建源程序文件
选择菜单命令File→New,启动新建向导,界面如图10.9所示。
首先在图10.9的Files属性中选择C++SourceFile项,然后在Filename中输入文件名(如MyTest),最后单击“OK”按钮,出现如图10.10所示的界面。
关于文件名,要注意两点:不要输入文件后缀;文件名最好要有特定含义,便于管理。
图10.8完成项目创建
图10.9新建源程序向导
图10.10新建文件
4.编辑源程序
在图10.11所示的文件编辑区中可直接编辑源程序文件。
编辑好后要保存源程序,选择图10.11File菜单中的Save命令即可保存当前文件。图10.11文件编辑
5.编译源程序
可通过菜单命令Build→Compile或热键Ctrl+F7对当前打开的源程序进行编译。
(1)若是首次编译,则系统会弹出一个对话框,提示要建立一个项目工作区(projectworkspace),如图10.12所示。
图10.12建立项目工作区对话框
(2)系统将在如图10.13所示的编译信息输出区显示代码的编译结果。
(3)编译完成后,当程序有错误时,可直接双击输出区中的“error”处,系统将自动跳至编辑区源程序中相应错误的行,并在左侧用箭头指示,如图10.14所示。
(4)修改源程序中的错误,再进行编译,直至编译成功,如图10.15所示。编译成功,将生成目标文件:文件名.obj。图10.13编译信息输出区
图10.14编译错误提示
图10.15编译成功提示注意:编译结果可能有一些问题。如果编译完全成功,会显示“0error(s),0warning(s)”。有时,即使有一些警告,也可能编译成功,这种情形下表示该代码可以运行,但有可能存在潜在的问题,编译器不推荐这么写。
6.链接程序
编译成功后,执行链接命令Build→Build或使用热键F7,系统在输出区显示链接结果,如图10.16所示。
链接成功,生成可执行目标代码文件:项目名.exe。注意此处可执行文件名是“项目名”。
7.运行程序
可通过菜单命令Build(组建)→Excute(执行)或热键Ctrl+F5运行程序。运行成功,在控制台窗口输出执行结果,如图10.17所示。
图10.16链接结果
图10.17程序运行结果注意:如果出现结果错误或结果不令人满意,则应找出问题,并修改源程序文件,然后重新编译、链接和执行。
对于图10.17所示的结果,如果希望“Pressanykeytocontinue”另起一行显示,则需要修改程序,在printf中添加\n,再重新编译、链接,再执行后的结果如图10.18所示。图10.18修改程序后的运行结果
图10.19所示为程序错误的分类。
程序中的错误大体可分为两类:编译期错误和运行期错误。10.4程序错误
图10.19程序错误分类
1.编译期错误
编译期错误又可分为以下两种:
(1)语法错误:由于违反了语言有关语句形式或使用规则而产生的错误。例如,关键字拼错、变量名定义错、没有正确地使用标点符号、分支结构或循环结构语句的结构不完整或不匹配、函数调用缺少参数或传递了不匹配的参数等。
(2)链接错误:链接程序在装配目标程序时发现的错误。例如,库函数名书写错误、缺少包含文件或包含文件的路径错误等。
2.运行期错误
运行期错误又可分为以下两种:
(1)逻辑错误:程序的运行结果和程序员的设想有出入的错误,是程序设计上的错误。这类错误并不在程序的编译期间或运行期间出现,较难发现和排除。程序员的语言功底和编程经验在排除这类错误时很重要。例如,设置的选择条件不合适、循环次数不当等。
(2)运行异常:应用程序运行期间,试图执行不可能执行的操作而产生的错误。例如,执行除法操作时除数为0、无效的输入格式、打开的文件未找到、磁盘空间不足等。
3.编译警告
如果程序包含的内容直接违反C语言的语法规则,编译器会提示一条错误消息。但是,编译器有时只给出一条警告消息,表明代码从技术上来说没有违反语法规则,但因它出乎寻常,所以可能是一个错误。在程序开发阶段,应该将每个警告都视为错误。
一方面,软件缺陷难以避免,另一方面其危害又很大,这使得消除软件缺陷成为软件工程中的一项重要的任务。
发现软件的缺陷,是软件测试的任务;找到软件缺陷的原因,是软件调试的工作。
10.5软件测试与软件调试的概念
软件测试(SoftwareTesting):使用人工或自动手段来运行或测定某个系统的过程,检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
软件调试(SoftwareDebugging):探索软件缺陷的根源并寻求其解决方案的过程。
软件测试的目的是发现软件中的各种缺陷,目标是以较少的用例、时间和人力找出软件中的各种错误和缺陷,以确保软件的质量。
消除软件缺陷的前提是要找到导致缺陷的根本原因。在软件调试的各步骤中,定位根源常常是最困难也是最关键的步骤,它是调试过程的核心和灵魂。
软件调试是软件开发和维护中非常频繁的一项任务。
在复杂的计算机系统中寻找软件缺陷不是一个简单的任务。
应用程序调试很多时候耗费了比设计编码还要多的时间。
——《软件调试》张银奎
Debuggingistwiceashardaswritingthecodeinthefirstplace.Therefore,ifyouwritethecodeascleverlyaspossible,youare,bydefinition,notsmartenoughtodebugit.
(软件调试要比编写代码困难一倍,如果你发挥了最大才智编写代码,那么你的智商便不足以调试这个代码。)
——BrianW.Kernighan
软件调试(SoftwareDebug)
debug直接的意思是就是去除bug,但实际还包含了寻找和定位bug,如何找到bug大都比发现后去除它要难得多。
自20世纪50年代开始,人们用debug来泛指排除错误的过程,包括重现软件故障、定位故障根源,并最终解决软件问题的过程。软件调试的另一种更通俗的解释是——使用调试工具求解各种软件问题的过程,例如跟踪软件的执行过程,探索软件本身或与其配套的其他软件或者硬件系统的工作原理等。
1.调试的基本过程
调试流程见图10.20。
(1)重现故障:通常是在用于调试的系统上重复导致故障的步骤,使要解决的问题出现在被调试的系统中。
(2)定位根源:综合利用各种调试工具,使用各种调试手段寻找导致软件故障的根源。
(3)探索和实现解决方案:根据寻找到的故障根源、资源情况等设计和实现解决方案。
(4)验证方案:在目标环境中测试方案的有效性。
图10.20调试流程
2.调试的基本手段
具体地说,调试就是跟踪和记录CPU执行软件的过程,把动态的瞬间凝固下来供检查和分析。基本的调试方法如表10.2所示。
表10.2调试方法所谓单步执行,就是让程序一步一步地执行,这里的一步可以是一条汇编指令、源代码的一条语句、程序的一个分支、一个任务(线程)等。单步执行是深入诊断软件动态特征的一种有效方法。但从头到尾跟踪执行一段程序乃至一个模块,一般都显得效率太低。常用的方法是先使用断点功能将程序中断到感兴趣的位置,然后再单步执行关键的代码。
程序的调试版与发布版
我们之所以可以使用调试器对项目进行调试,是因为在编译单元之中包含有调试过程所需要的调试信息。因此,应当在使用调试器之前,通过编译器将需要的调试信息嵌入到编译单元之中。
Debug通常称为调试版本,它包含调试信息,可以单步执行、跟踪等,便于程序员调试程序。它不对代码作任何优化,生成的可执行文件比较大,代码运行速度较慢。
Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用,但在其编译条件下无法执行调试功能。
Debug和Release的真正秘密,在于IDE中的一组编译选项,见图10.21。调试版本使用一组编译选项来帮助进行调试;在程序编写、调试完毕准备发布之前,再通过编译选项将调试信息剔出,由此来产生有高效代码的发布版本。
图10.21Debug和Release选项
在软件世界里,螺丝刀、万用表等传统的探测和修理工具都不再适用了,取而代之的是以调试器为核心的各种软件调试工具。
——《软件调试》张银奎10.6在IDE中调试程序
对于程序中错误的查找,系统提供了易用且有效的调试手段。在IDE中是通过各种命令来控制程序的运行节奏,把程序运行动态的瞬间凝固下来,以方便跟踪、检查、分析、记录CPU执行软件的过程。10.6.1进入调试程序环境
选择菜单命令Build→StartDebug→StepInto,系统进入调试程序界面。其中同时提供了多种窗口监视程序运行,如图10.22所示。
注意:在执行“StepInto”后“Build”菜单名变为“Debug”,如图10.23所示。
图10.24是调试工具条,中间的命令图标和图10.23Debug菜单中的命令相对应。
图10.22调试程序界面
图10.23Debug菜单
图10.24调试工具条10.6.2调试命令
常用调试命令见表10.3。
(1)单步跟踪进入子函数(StepInto,F11):每按一次F11键,程序执行一条无法再进行分解的程序行,如果涉及子函数,则会进入子函数内部。
(2)单步跟踪跳过子函数(StepOver,F10):每按一次F10键,程序执行一行;Watch窗口可以显示变量名及其当前值,在单步执行的过程中,可以在Watch窗口中加入需观察的变量,加以辅助监视,随时了解变量当前的情况,如果涉及子函数,则不会进入子函数内部。
表10.3常用调试命令一览表
(3)单步跟踪跳出子函数(StepOut,Shift+F11):按下Shift+F11键后,程序运行至当前函数的末尾,然后从当前子函数跳到上一级主调函数。
(4)运行到当前光标处(RuntoCursor,Ctrl+F10):按下Ctrl+F10键后,程序运行至当前光标处所在的语句。10.6.3程序运行状态的查看
调试过程中最重要的是要观察程序在运行过程中的状态,这样才能找出程序的错误之处。这里所说的状态包括各变量的值、寄存中的值、内存中的值、堆栈中的值等。为此需要利用各种工具来帮助我们查看程序的状态。
选择菜单命令View→DebugWindows,进入Debug窗口菜单,如图10.25所示,各个窗口的含义如表10.4所示。
图10.25Debug窗口菜单
表10.4查看窗口系统支持查看程序运行到当前指令语句时变量、表达式和内存的值,所有这些观察都必须是在单步跟踪或断点中断的情况下进行的。图10.26Watch窗口图10.27Variables窗口
1.Watch(观察)窗口
Watch窗口如图10.26所示。
在Watch窗口中输入想要查看的变量或者表达式,就可以看到相应的值。
单步调试程序的过程中,可以在Watch窗口中看到变量值的动态变化,我们以此判断程序是否在正确运行。图10.28Memory窗口2.Variables(变量)窗口
Variables窗口如图10.27所示。
Variables窗口中会自动显示所有当前执行语句前后可见的变量的值。特别是当前指令语句涉及的变量,将以红色显示。
如果本地变量比较多,自动显示的窗口会比较混乱,这时用Watch窗口查看会比较清晰。
3.Memory(内存)窗口
Memory窗口如图10.28所示。
Memory窗口用于显示某个地址开始处的内存信息,默认地址为0×00000000。
Watch窗口只能查看固定变量长度的内容,而Memory窗口则可以显示连续地址的内容。在Memory窗口中需要输入地址,该地址可以通过Watch窗口查找到。Watch窗口不但显示变量的内容,还会显示每个变量的地址。
4.Registers(寄存器)窗口
Registers窗口用于显示当前所有寄存器的值。
5.CallStack(调用堆栈)
调用堆栈反映了当前断点处函数是被哪些函数按照什么顺序调用的。CallStack窗口中显示了一个调用系列,最上面的是当前函数,往下依次是调用函数的上级函数。单击这些函数名可以跳到对应的函数中。10.6.4断点设置
为方便较大规模程序的跟踪,设置断点(Breakpoints)是最常用的技巧。
断点是调试器在代码中设置的一个位置。当程序运行到断点时,程序中断执行,回到调试器,以便程序员检查程序代码、变量值等。
程序在断点处停止后,可以进一步让程序单步执行,来查看程序是否在按照所预想的方式运行。可以通过菜单命令Edit→Breakpoints或快捷键F9设置一个断点,这里只介绍简
单的快捷方式设置方法,功能见表10.5。
使用快捷方式设置断点,首先把光标移动到需要设置断点的代码行上,然后按快捷键F9或者单击“编译”工具条上的按钮 ,断点处所在的程序行的左侧会出现一个红色圆点,再按一次则清除断点,如图10.29所示。
图10.29断点设置10.6.5程序调试的例子
1.设置断点的跟踪方法
选定printf语句作为断点位置,如图10.30所示。
图10.30断点调试步骤1可以通过菜单命令Build→StartDebug→Go或热键F5使程序运行到断点。程序执行到第一个断点处将暂停执行,调试程序在程序行的左侧添加一个黄色箭头,表示程序将要执行此条语句,此时用户可进行变量等的观察。继续执行该命令,程序运行到下一个相邻的断点,如后面没有断点,则执行到程序结束。
可以通过菜单命令View→DebugWindows→Watch查看变量的值。在图10.31的Watch窗口中输入变量名,就可以看到它的值。Name列为要监控的表达式或变量,Value列为对应的值,通过该窗口可监控在程序运行过程中表达式值的变化。
图10.31
断点调试步骤2
按F5键继续执行程序,得到输出结果,如图10.32所示。
2.单步跟踪的方法
选择菜单命令Build→StartDebug→StepInto或按热键F11,进入程序单步跟踪调试状态。
图10.33所示为跟踪调试步骤1,程序从主函数main开始运行,注意此时Build菜单变为Debug。
可以通过菜单命令Debug→StepOver或热键F10使程序单步运行。
图10.34所示为跟踪调试步骤2,每按一次F10键,程序单步执行一条语句,语句指示箭头下移一行。
图10.32
断点调试步骤3
图10.33跟踪调试步骤1
图10.34跟踪调试步骤2图10.35所示为跟踪调试步骤3,在Watch窗口中可以查看相关的变量。变量b和c并未在程序中赋成显示的值,这是因为还未执行到相应的赋值语句,其变量单元的值是随机的,而非预想的。
可以通过菜单命令Debug→RuntoCursor或热键Ctrl+F10让程序运行到指定的位置。
图10.36所示为跟踪调试步骤4。
图10.35跟踪调试步骤3
图10.36跟踪调试步骤4先把光标设到指定的位置,如return0语句行,按下Ctrl+F10键,程序会运行到return0语句前一条停下来,黄色箭头指在return0语句前,此时可以查看变量的值、变量的地址(变量前加&符号),也可以查看控制台窗口的数据输出情形(如图10.37所示)。
图10.38显示了多个窗口信息,0x12ff7c是变量a的地址,在Memory窗口中也可以查看这个地址的值。
Memory窗口中,最左侧一列为内存地址,依次向右的四列为内存中的内容,以十六进制表示,最后一列为内存内容的文本显示。
图10.37控制台窗口信息
图10.38多个窗口信息10.6.6有关联机帮助
VisualC++6.0提供了详细的帮助信息。MSDN(MicrosoftDeveloperNetwork,微软开发者网络)是微软公司面向软件开发者提供的一种信息服务。程序员可以根据需要选择多种方式使用MSDN,可以安装在自己的机器上,也可以在线使用MSDN。
在机器上安装MSDN后,通过选择“帮助”(Help)菜单下的“帮助目录”(Contents)命令就可以进入帮助系统。在源文件编辑器中把光标定位在一个需要查询的单词处,然后按F1键也可以进入VisualC++6.0的帮助系统。用户通过VisualC++6.0的帮助系统可以获得几乎所有VisualC++6.0的技术信息,这也是VisualC++作为一个非常友好的开发环境所具有的特色之一。
程序测试(ProgramTesting):是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行。
10.7程序测试目前,软件的正确性证明尚未得到根本的解决,软件测试仍是发现软件错误和缺陷的主要手段。软件测试所追求的是以尽可能少的时间和人力发现软件产品尽可能多的错误,高效的测试是指用少量的测试用例发现被测软件尽可能多的错误。
1.测试用例(TestCase)
一个测试用例必须包括两个部分:
(1)对程序的输入数据的描述。
(2)对程序在上述输入数据下应有的正确输出结果的精确描述。
2.测试用例制定的原则
制定测试用例的基本目标是:设计一组发现某个错误或某类错误的测试数据。测试用例要包括欲测试的功能、应输入的数据和预期的输出结果。测试用例应该选用少量、高效的测试数据进行尽可能完备的测试。
程序测试方法
1.
白盒测试
白盒测试也称结构测试或逻辑驱动测试。
白盒的意思是被测试的软件是“可视的”,测试者清楚盒子内部的内容及运作方式。测试人员依据程序内部逻辑结构的相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
白盒测试主要是对程序模块进行如下检查:
(1)对程序模块的所有独立的执行路径至少测试一遍。
(2)对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一遍。
(3)在循环的边界和运行的界限内执行循环体。
(4)测试内部数据结构的有效性。
白盒测试的主要方法有逻辑驱动测试、基本路径测试等。
2.黑盒测试
黑盒测试也称功能测试或数据驱动测试。
在测试时,把程序看做一个不能打开的黑盒子,它不考虑软件的内部结构和处理算法,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。
黑盒测试主要是为了发现以下几类错误:
(1)是否有不正确或遗漏的功能?
(2)在接口上,输入是否能正确地被接收?能否输出正确的结果?
(3)是否有数据结构错误或外部信息(如数据文件)访问错误?
(4)性能上是否能够满足要求?
(5)是否有初始化或终止性错误?
常用的黑盒测试技术包括等价类划分、边值分析、错误推测和因果图等。
3.测试用例主要覆盖方面
(1)正确性测试:输入用户实际数据以验证系统是满足需求规格说明书的要求;测试用例中的测试点应首先保证要至少覆盖需求规格说明书中的各项功能,并且正常。
(2)容错性(健壮性)测试:程序能够接收正确数据输入并且产生正确(预期)的输出,输入非法数据(非法类型、不符合要求的数据、溢出数据等),程序应能给出提示,并进行相应处理。可以把自己想象成一名对产品操作一无所知的客户
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抖音活动策划代运营合同协议
- 项目合同管理与造价控制制度
- 2025年购销合同封面
- 融资担保合同协议书范本(2025年)
- 完整的工厂劳动合同2025年
- 2025年政基础设施工程施工总承包合同
- 探矿权、采矿权拍卖出让合同(2025年)
- 招标合同书格式(2025年)
- 医疗耗材购销合同范文2025年
- 2025年国际贸易合同煤炭CIF湛江港合同
- DB11T 1678-2019 城市轨道交通广告设施设置规范
- 海洋工程设备设施维护与保养
- 职业技术学院《药用植物学》课程标准
- NBT-电力用直流电源系统验收规范编制说明
- 河南天一大联考2025届数学高一上期末复习检测模拟试题含解析
- 2024-2025学年重庆市大渡口区六上数学期末调研模拟试题含解析
- 三年级数学(上)计算题专项练习附答案集锦
- 计算机及外部设备装配调试员理论考试复习题库(含答案)
- 深植心中的劳动教育(2023年黑龙江齐齐哈尔中考语文试卷议论文阅读题及答案)
- 城市合伙人合同协议书
- 完整版金蝶EAS财务系统操作手册
评论
0/150
提交评论