版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)第PAGEII页毕业设计(论文)设计论文题目:边界测试方法研究及应用学生姓名:学生学号:专业班级:学院名称:指导老师:学院院长:年 6月6日边界测试方法研究及应用摘要目前虽然软件产业内各方对软件测试越来越关注,但软件测试化理论大部分仍然停留在纸上,人们发现很多的理论很难在实践中得到运用。所以现在人们对软件测试的研究很多都面向那些能在实际项目中得到很好实践的技术的理论研究上。本文以软件测试中黑盒测试的一个方法“边界值测试方法研究”为题目,首先介绍了软件测试的相关理论,并着重介绍了边界测试方法的研究理论,然后根据实际的项目,学生信息管理系统的功能测试对边界值测试方法进行分析,从而得出边界值测试方法作为一个理论研究与实际运用结合得很好的软件测试方法,它为我们在其他软件测试理论的研究与实际运用提供了很好的经验。关键词:软件测试,黑盒测试,边界值测试,等价划分ResearchandApplicationofBoundaryValueTestingAbstractAlthoughsoftwaretestingisconcernedmoreandmorebythesoftwareindustry,softwaretestingtheoryremainsontheories,forlotsoftheoriescannotbeusedinpractice.Atpresentmostresearcharebasedonthetheoriesthatcanmakeuseinpractice.Thistheoryisaboutboundaryvaluetesting.Theoriesonsoftwaretesting,especiallyonboundaryvaluetesting,arefirstlyintroduced.Andthentheboundaryvaluetestingwillbeanalyzedonthebasicof"StudentsInformationManagement".Atlast,wewillrealizethatboundaryvaluetestingisagoodtestingmethod,whichgivegoodexperienceforothertestingtheories.Keyword:softwaretesting,blackboxtesting,boundaryvaluetesting,equivalencepartitioning目录1 绪论 11.1 课题背景 11.2 研究现状及存在的问题 11.3 边界值测试方法及研究意义 11.4 论文简介 22 软件测试理论介绍 32.1 概述 32.2 测试理论 32.2.1 软件测试基础 32.2.2 测试案例设计 72.2.3 黑盒测试理论 82.2.4 测试用例 82.2.5 边界值分析法 93 边界值测试方法分析 113.1 边界测试方法介绍 113.1.1 定义 113.1.2 与等价划分的区别 113.1.3 边界值分析法的考虑 113.1.4 一些常见的边界值 113.1.5 边界值分析 123.1.6 基于边界值分析方法选择测试用例的原则 143.2 实例分析 143.2.1 系统介绍 143.2.2 实例分析 153.2.3 边界值测试方法的运用分析 223.2.4 边界值测试方法的分析结论 23总结…………………24致谢…………………25参考文献……………26附录…………………27A.软件测试术语 27绪论课题背景软件测试作为一门年轻的科学,还处于研究的起步阶段。目前虽然软件产业内各方对软件测试越来越关注,但软件测试理论大部分仍然停留在纸上,对软件测试的研究让人们感觉走到了一种纸上谈兵的窘境,因为在人们发现很多的理论很难在实践中得到运用。边界值测试方法作为一种理论研究与实际运用能够很好结合的测试方法很值得我们去研究。研究现状及存在的问题从六十年代末出现“软件危机”开始,开发者们就开始了从理论上对软件开发规律进行广泛和深入的研究,提出了以“工程”的方法来开发、维护和管理软件,以提高软件的生产效率和质量,产生了软件工程。到60年代初期,软件测试与调试分开来,开始了一些初步的研究工作。1972年,北卡罗米纳大学举行了首届软件测试正式会议。随后,Hetzel及Myers等人的一批专著相继出版,成为研究软件测试过程的里程碑。80年代初期,软件质量得到了普遍的重视,关于软件测试的各种国际标准得到了制订,如IEEE、ANSI和ISO标准,其后关于软件测试的各种理论研究得到了进一步的发展。并且人们对软件测试也进行了详细的分类。从测试的类型来看,测试分为2种:黑盒测试和白盒测试。从测试实际的前后过程来看,软件测试是由一系列不同的测试所组成,这些软件测试的步骤分为:单元测试、组装测试(集成测试)、确认测试和系统测试。现在软件测试已经形成其特有的一系列的理论系统。软件测试作为一门年轻的科学,还处于研究的起步阶段。目前虽然软件产业内各方对软件测试越来越关注,并且人们对软件测试的研究很多都面向那些能在实际项目中得到很好实践的理论的研究。边界值测试方法及研究意义边界值分析法,有较好的测试回报率。该法较简单,仅是用于考察正处于等价划分边界或在边界附近的状态。因此,只需明确边界条件这一定义即可。边界条件,是指输入和输出等价类中那些恰好处于边界、或超过边界、或在边界以下的状态。边界值分析也是一种黑盒测试方法,是对等价划分分析方法的一种补充,由长期的测试工作经验得知,大量的错误是发生在输入或输出的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。选择测试用例的原则:如果输入条件规定了值的范围,则应该取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值作为测试输入数据;如果输入条件规定了值的个数,则用最大个数、最小个数、比最大个数多1格、比最小个数少1个的数作为测试数据;根据规格说明的每一个输出条件,使用规则一;根据规格说明的每一个输出条件,使用规则二;如果程序的规格说明给出的输入域或输出域是有序集合(如有序表、顺序文件等),则应选取集合的第一个和最后一个元素作为测试用例;如果程序用了一个内部结构,应该选取这个内部数据结构的边界值作为测试用例;分析规格说明,找出其他可能的边界条件。实际上边界值测试方法是在实际运用中很常用的一种测试技术,大多数的软件测试人员在某种程度上自发的执行BVA。它是一种理论研究与实际运用能够很好的得以结合的测试技术。在本论文中将结合实际的测试项目分析边界值测试方法理论在实际项目中的运用情况。该课题的研究将对其他软件测试理论与实际项目运用提供帮助。论文简介在本文中我们将在第二章中将对目前比较经典的测试理论做全面的介绍,用来帮助我们对测试概念的理解,加深对软件测试技术各方面的理解。并了解一些软件测试的相关术语帮助我们的测试工作和论文的写作,由于篇幅有限就将其放在附录中。在第三章中,将对边界值测试方法的理论进行详细的介绍,并结合实际项目(学生信息管理系统)的功能测试分析边界值测试方法在软件测试的各个过程的使用情况特别是如何使用边界值分析方法对测试用例的建立,引入一个测试案例并用边界值法对其分析并建立测试用例。最后将提出分析总结。软件测试理论介绍概述软件测试是软件工程的一个重要部分,从测试的类型来看,测试分为2种:黑盒测试和白盒测试。黑盒测试又称为功能测试或数据驱动测试,把系统看成一个黑盒子,不考虑程序的内在逻辑,只根据需求规格说明书的要求来检查程序的功能是否符合它的功能说明。白盒测试又称为结构测试和逻辑驱动测试,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。从测试实际的前后过程来看,软件测试是由一系列的不同测试所组成,这些软件测试的步骤分为:单元测试、组装测试(集成测试)、确认测试和系统测试。单元测试针对每个模块进行的测试,通常在编码阶段进行,必要的时候要制作驱动模块和桩模块。集成测试在单元测试的基础上,将所有模块按照设计要求组装成为系统,必须精心计划,应提交集成测试计划、集成测试规格说明和集成测试分析报告。确认测试验证软件的功能和性能及其它的特性是否与用户的要求一致,系统测试是在实际运行环境下进行一系列的测试。软件开发的过程是自顶向下的,测试则正好相反,以上这些过程就是自底向上,逐步集成的。本章中我们主要是对软件测试的黑盒测试类型的理论进行介绍。黑盒测试又称为功能测试或数据驱动测试,把系统看成一个黑盒子,不考虑程序的内在逻辑,只根据需求规格说明书的要求来检查程序的功能是否符合它的功能说明。黑盒测试常用的方法包括等价划分法,边界值分析法,错误推测法,因果图等方法,在实际测试中我们将综合运用这些测试方法进行测试。最后我们将介绍关于软件测试的术语,由于正文篇幅限制我们将其放在附录A中,这些术语将对我们的研究软件测试和论文写作过程中提供帮助。测试理论软件测试基础(1)测试目标GlenMyers[MYE79]在他关于测试的优秀著作中陈述了一系列可以服务于软件测试目标的规则:测试是一个为了发现错误而执行程序的过程。一个好的测试案例是指很可能找到迄今为止尚未发现的错误的案例。一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。上述目标隐含了一个观点上的戏剧性变化,他们和通常的观点(既一个成功的测试是指没有找到错误的测试)正好相反。我们的目标是设计这样的测试,他们能够系统的揭示不同类型的错误并且耗费最少时间和最小工作量。如果成功构造了测试(根据上面陈述目标),则能够在软件中揭示错误。测试的第二个好处在于他证实了软件依据规约所具有的功能及其性能需求,此外,构造测试时的数据收集提供了软件可靠性以及软件整体质量的一些信息。但是,有一件事测试无法完成:测试无法说明错误和缺陷不存在,它只能表示错误和缺陷已经出现。(2)测试原则在设计有效的测试案例之前,软件工程师必须理解指导软件测试的基本原则。Davis[DAV95]提出了一组测试原则:所有的测试都应可以追溯到客户需求。正如我们所知,软件测试的目标在于发现错误。而最严重的错误(从客户角度看)是那些导致程序无法满足需求的错误。应该在测试工作真正开始前较长时间就进行测试计划。测试计划可以在需求模型一完成就开始,详细的测试案例定义可以在设计模型被确定后立即开始,因此,所有的测试可以在任何代码产生前就被计划和设计。Pareto原则可以应用于软件测试。简单而言,Pareto原则暗示着测试发现的错误中的80%很可能起源于程序模块中的20%。当然,问题在于分离这些有疑点的模块并进行彻底的测试。测试应从“小规模”开始,逐步转向“大规模”。最初的测试通常把焦点放在单个程序模块上,进一步测试的焦点则转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。穷举测试是不可能的。甚至在一个大小适度的程序,其路径排列的数量也非常大,因此,在测试中不可能运行路径的每一种组合,然而,充分覆盖程序逻辑并确保使用程序设计中的所有条件是有可能的。为了达到最有效,应该由独立的第三方来构造测试。“最有效”指发现错误的可能性最高的测试(测试的主要目标)。(3)可测试性在理想的情况下,软件工程师在设计计算机程序、系统或产品时因该考虑可测试性,这就使得负责测试的人能够更容易设计有效的测试案例,但是什么是“可测试性”呢?JamesBach以下面的方式描述可测试性。软件可测试性就是一个计算机程序能够被测试的容易程度。因为测试是如此的困难,因此,需要知道做些什么才能使测试过程理顺。有时,测试员愿意去做对于测试过程有帮助的事,而一个包括可能的设计点、特性等等的检查表对他们是有用的。肯定存在可用于在很多方面测量可测试性的度量,有时可测试性被用来表示一个特定测试集覆盖产品的充分程度。在军方还用它来表示工具被检验和修复的容易程度。这两种意义都略不同于软件可测试性。下面的检查表提供了一组导致可测试软件的特征:可操作性:系统的错误很少(错误增加测试过程中的分析和报告的开销)。没有阻碍测试执行的错误。产品的功能阶段演化(允许同时开发和测试)。可观察性:每个输入有唯一的输出。系统状态和变量可见或在运行中可查询。过去的系统状态和变量可见或在运行中可查询(如:事务日志)。所有影响输出的因素都可见。容易识别错误的输出。通过自测机制自动检测内部错误。自动报告内部错误。可获取原代码。可控制性:所有可能的输出都产生与某种输入组合。通过某种输入组合,所有代码都可能被执行。测试工程师可直接控制硬件和软件的状态及变量。输入和输出格式保持一致且是结构化的。能够便利的对测试进行刻画,自动化和再生。可分解性:软件系统由独立模块构成。能够独立测试各软件模块。简单性:功能简单性。结构简单性。代码简单性。稳定性:软件的变更是不经常的。软件的变更是可控制的。软件的变更不影响已有的测试。软件失效后得到良好恢复。易理解性:设计能够被很好的理解。内部,外部和共享构件之间的依赖性能够被很好的理解。设计的变更被通知。可随时获取技术文档。技术文档组织合理。技术文档明确详细。技术文档保持精确性。软件工程师可以运用JamesBach提出的这些属性来开发可测试的软件配置(即程序,数据和文档)。但关于测试本身呢?Kaner,Falk和Nguyen[KAN93]给出“好”测试的一些属性:一个好的测试发现错误的可能性很高。为了达到这个目标,测试者必须理解软件并尝试设想软件如何才能失败,理想的,故障的类型被探测。一个好的测试并不冗余。测试的时间和资源是有限的,没有必要构造一个与其他测试用途完全相同的测试,每一个测试都应该有不同的用途(哪怕是细微的差别)。一个好的测试应该是“最佳品种”。在一组目的相似的测试中,时间和资源的限制可能只影响其某个子集的执行,此外应该使用最可能找到所有错误的测试。一个好的测试既不会太简单,也不会太复杂。虽然有时会将一组测试组合到一组测试案例中,但是其副作用可能会屏蔽错误。通常,每一个测试应该独立执行。测试案例设计软件和其他工程产品的测试设计与产品本身的设计一样具有挑战性,然而由于已经讨论过的一些原因,软件工程师经常将测试作为一种事后的措施,开发一些“感觉上正确”但是缺乏完整保证的测试案例。再回头看看测试目标,我们必须设计出最可能发现最多错误且耗费最少时间和最少代价的测试。已经出现了大量软件测试案例设计方法,这些方法为开发人员进行测试提供了系统的方法。更重要的是,方法提供了一种有助于确保完全测试的机制,并提供了发现软件错误的最高可能性。能够采用以下两种方法之一对任何工程化产品进行测试:(1)若了解产品已被设计要完成的规定功能,则测试的进行要去验证各功能完全可执行,同时在各功能中寻找错误;(2)若了解产品的内部原理,则测试的进行要确保“所以齿轮吻合”,既内部操作依据规约执行,而且所有的内部构件被充分利用。第一种测试方法被称为黑盒测试,第二种则被称为白盒测试。如果考虑计算机软件,黑盒测试指在软件借口上进行的测试,虽然设计黑盒测试是为了发现错误,它们却被用来证实软件功能的可操作性,证实很好地接收输入并正确地产生输出,以及证实对外部信息完整性(如:数据文件)的保持。黑盒测试检验系统的一些基本特征,很少涉及软件的内部逻辑结构。软件的白黑测试依赖对程序细节的严密检验,提供针对特定条件和/与循环集的测试案例,对软件的逻辑路径进行测试,在不同的点检验“程序的状态”以判定预期状态或待验证状态与真实状态是否相符。黑盒测试理论黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试方法主要有等价类划分、边界值分析、因果图、错误推测等,主要用于软件确认测试。“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。黑盒测试的优点有:比较简单,不需要了解程序内部的代码及实现;与软件的内部实现无关;从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。黑盒测试的缺点有:不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;自动化测试的复用性较低。测试用例测试用例(Testcase)实际上是对软件运行过程中所有可能存在的目标、运动、行动、环境和结果的描述,是对客观世界的一种抽象。设计测试用例即设计针对特定功能或组合功能的测试方案,并编写成文档。测试用例应该体现软件工程的思想和原则。测试用例的选择既要有一般情况,也应有极限情况以及最大和最小的边界值情况。因为测试的目的是暴露应用软件中隐藏的缺陷,所以在设计选取测试用例和数据时要考虑那些易于发现缺陷的测试用例和数据,结合复杂的运行环境,在所有可能的输入条件和输出条件中确定测试数据,来检查应用软件是否都能产生正确的输出。设计测试用例就是针对特定功能或组合功能设计测试方案,并编写成文档。测试用例的选择既要有一般情况,也应有极限情况以及最大和最小的边界值情况。因为测试的目的是暴露应用软件中隐藏的缺陷,所以在设计选取测试用例和数据时要考虑那些易于发现缺陷的测试用例和数据,结合复杂的运行环境,在所有可能的输入条件和输出条件中确定测试数据,来检查应用软件是否都能产生正确的输出。一个典型的测试用例应该包括下列详细信息:测试目标;待测试的功能;测试环境及条件;测试日期;测试输入;测试步骤;预期的输出;评价输出结果的准则。所有的测试用例应该经过专家评审才可以使用。设计与选取测试用例集的第一步是对测试用例进行描述,这种描述是否权威、完整、可理解与规范化,则决定了该测试用例能否或多大程度上可以被操作人员、软件研制人员和试验鉴定人员所理解接受。所以,规范化的测试用例描述在软件测试与评估中具有重要的作用。边界值分析法边界值分析也是一种黑盒测试方法,边界值分析方法是对等价类划分方法的补充.边界值分析方法的考虑:长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误[4]。使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。基于边界值分析方法选择测试用例的原则:如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。根据规格说明的每个输出条件,使用前面的原则1。根据规格说明的每个输出条件,应用前面的原则2。如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。分析规格说明,找出其它可能的边界条件。边界值测试方法分析边界测试方法介绍定义边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。与等价划分的区别边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件[4]。边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况边界值分析法的考虑长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。一些常见的边界值对16-bit的整数而言32767和-32768是边界[4];屏幕上光标在最左上、最右下位置;报表的第一行和最后一行;数组元素的第一个和最后一个循环的第0次、第1次和倒数第2次、最后一次边界值分析边界值分析使用等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。例:测试计算平方根的函数--输入:实数--输出:实数--规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息"平方根非法-输入值小于0"并返回0;库函数Print-Line可以用来输出错误信息。等价划分可以考虑如下划分:(a)输入:(i)<0和(ii)>=0(b)输出:(a)>=0和(b)Error测试用例有两个:输入4,输出2。对应于(ii)和(a)。输入-10,输出0和错误提示。对应于(i)和(b)。(3)边界值分析:划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:输入{最小负实数}。输入{绝对值很小的负数}。输入0。输入{绝对值很小的正数}。输入{最大正实数}。(4)通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、重量、大小、速度、方位、尺寸、空间等。(5)相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、
最短/最长、空/满等情况下。(6)利用边界值作为测试数据:表3.1利用边界值作为测试数据项边界值测试用例的设计思路字符起始-1个字符/结束+1个字符假设一个文本输入区域允许输入1个到255个字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值数值最小值-1/最大值+1假设某软件的数据输入域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的数值作为边界条件空间小于空余空间一点/大于满空间一点例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件(7)内部边界值分析:在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。内部边界值条件主要有下面几种:数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其中ASCII和Unicode是常见的编码方式。下表中列出了一些常用字符对应的ASCII码值。其他边界情况。基于边界值分析方法选择测试用例的原则如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。例如,如果程序的规格说明中规定:"重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……"。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等。如果输入条件规定了值的个数,则用最大个数,最小个数,比最小数少一,比最大个数多一的数作为测试数据。比如,一个输入文件应包括1~255个记录,则测试用例可取1和255,还应取0及256等。根据规格说明的每个输出条件,使用前面的原则1。例如,某程序的规格说明要求计算出"每月保险金扣除额为0至1165.25元",其测试用例可取0.00及1165.24、还可取0.01及1165.26等。再如一程序属于情报检索系统,要求每次"最少显示1条、最多显示4条情报摘要",这时我们应考虑的测试用例包括1和4,还应包括0和5等。根据规格说明的每个输出条件,应用前面的原则2。如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。分析规格说明,找出其它可能的边界条件。实例分析系统介绍本软件系统是一个学生成绩管理系统。该系统有4个功能,包括班级学生成绩管理、年级学生成绩查询、参数设置与库操作和安装。该系统只有一个年级,该年级有五个班级,分别为一班、二班、三班、四班和五班。学生的成绩分五个科目,分别为语文、数学、物理、化学和英语。学生成绩按百分制计。班级成绩统计信息有五项,分别为科目、平均成绩、总成绩、及格人数和优秀人数。年级成绩统计信息有五项,分别为科目、平均成绩、总成绩、及格人数和优秀人数。学生信息有九项,分别为姓名、学号、语文成绩、数学成绩、英语成绩、物理成绩、化学成绩、总成绩和平均成绩。该系统提供增加学生信息的操作界面,包括输入学号、学生姓名以及各科成绩。提供修改学生信息的操作界面,包括修改学生姓名以及各科成绩。提供学生信息组合查询界面,查询项包括语文、数学、英语、物理、化学成绩,查询条件为大于等于、等于、小于等于。提供参数设置与库操作界面,包括优秀分数线和不及格科目数的设置,以及导入样品数据库的操作界面。提供年级学生成绩列表、班级学生成绩列表、各种查询结果列表的显示,包括学号、姓名、各科成绩、总成绩、平均成绩;显示中对于不及格或优秀的分数用不同颜色显示,对于成绩不达标的学生的姓名用不同颜色显示,加以区分。我们在这里将以该系统的一些实例为分析对象进行分析。实例分析有一个学生标准化考试批阅试卷,产生成绩报告的程序。其规格说明如下:程序的输入文件由一些有80个字符的记录组成,所有记录分为三组。如图3.1所示:图3.1学生信息输入文件标题:这一组只有一个记录,其内容为输出成绩报告的名字。试卷各题标准答案记录:每个记录均在第80个字符处标上数字"2"。该组的第一个记录的第1至第3个字符为题目编号(取值为1至999)。第10至第59个字符给出第1至第50题的答案(每个合法字符表示一个答案)。该组的第2,第3……个记录相应为第51至第100,第101至第150,…题的答案。每个学生的答卷描述:该组中每个记录的第80个字符均为数字"3"。每个学生的答卷在若干个记录中给出。如甲的首记录第1至第9字符给出学生姓名及学号,第10至第59字符列出的是甲所做的第1至第50题的答案。若试题数超过50,则第2,第3……纪录分别给出他的第51至第100,第101至第150……题的解答。然后是学生乙的答卷记录。学生人数不超过200,试题数不超过999。程序的输出有4个报告:(a)按学生学号排列成绩单,列出每个学生的成绩、名次。(b)按学生成绩排序的成绩单。(c)平均分数及标准偏差的报告。(d)试题分析报告。按试题号排序,列出各题学生答对的百分比。分别考虑输入条件和输出条件,以及边界条件。给出下表所示的输入条件及相应的测试用例如表3.2。表3.2输入条件及测试用例输入条件测试用例标题没有标题标题只有一个字符标题有80个字符试题数试题数为1试题数为50试题数为51试题数为100试题数为0标准答案记录没有标准答案记录,有标题标准答案记录多于一个标准答案记录少一个学生人数0个学生1个学生200个学生201个学生学生答题某学生只有一个回答记录,但有两个标准答案记录该学生是文件中的第一个学生该学生是文件中的最后一个学生(记录数出错的学生)学生答题某学生有两个回答记录,但只有一个标准答案记录该学生是文件中的第一个学生(记录数出错的学生)该学生是文件中的最后一个学生学生成绩所有学生的成绩都相等每个学生的成绩都不相等部分学生的成绩相同(检查是否能按成绩正确排名次)有个学生0分有个学生100分输出条件及相应的测试用例表如表3.3。表3.3输出条件及测试用例输出条件测试用例输出报告a,b有个学生的学号最小(检查排序号排序是否正确)有个学生的学号最大(检查排序号排序是否正确)适当的学生人数,使产生的报告刚好满一页(检查打印页数)学生人数比刚才多出一个(检查打印换页)输出报告c平均成绩100平均成绩0标准偏差为最大值(有一半的0分,其他一百分)标准偏差为0(所有成绩相等)输出报告d所有学生都答对第一题所有学生都答错第一题所有学生都答对最后一题所有学生都答错最后一题选择适当的试题数,使第四个报告刚好打满一页试题数比刚才多1,使报告打满一页后,刚好剩下一题未打对本系统的一个模块—增加学生信息模块的功能测试。其规格说明如下:一条完整的学生信息包括学生的学号、姓名、语文成绩、数学成绩、英语成绩、物理成绩和化学成绩。学号是学生信息的关键字,不能重复。每个班级的学号范围和学号的数据要求见数据字典。增加重复学号和非数据字典要求的学号时,系统应给出提示。增加信息时,学号是必须输入的,否则,系统应给出提示。增加信息时,姓名是必须输入的,否则,系统应给出提示。姓名的数据要求见数据字典。语文成绩、数学成绩、英语成绩、物理成绩和化学成绩的数据要求见数据字典。其数据字典如表3.4。表3.4学生信息管理系统数据字典序号数据含义输入(I)输出(O)常数(C)类型范围区间约束1姓名I/O文本字母或汉字长度[1,12]个半角字符2各科成绩I/O数字,单精度型[0,100]至多输入一位小数3总成绩O数字,单精度型[0,20000]保留小数点后一位4平均成绩O数字,单精度型[0,100]四舍五入后保留小数点后两位5班级及格人数O数字,长整型[0,40]6班级优秀人数O数字,长整型[0,40]7年级及格人数O数字,长整型[0,200]8年级优秀人数O数字,长整型[0,200]9优秀分数线I数字,长整型[80,90]缺省值为8510及格分数线C数字,长整型6011年级人数O数字,长整型[0,200]12一班学生学号I/O数字,长整型[1,40]13二班学生学号I/O数字,长整型[41,80]14三班学生学号I/O数字,长整型[81,120]15四班学生学号I/O数字,长整型[121,160]16五班学生学号I/O数字,长整型[161,200]17成绩不达标科目数I数字,长整型[2,4]缺省值为218查询条件分数值I数字,单精度型[0,100]至多输入一位小数而根据规格说明书及数据字典建立该模块的测试用例如表3.5和3.6。表3.5依据数据字典建立的测试用例1用例ID号2007-04-XSGL-002测试方法手工设计人杨雪峰日期2007.04.18测试目的测试班级学生成绩管理(增加学生信息)功能是否达到软件规格说明书中的要求前提条件系统中已按照默认方式安装好该软件测试过程顺序测试步骤与数据输入描述期望结果实际结果判定结果1选择一班,点击“显示”按钮点击“新增记录”在弹出学生信息录入窗口中录入学号为“39”,姓名为“测试”,语文、数学、物理、化学、英语的分数依次录入1、2、3、4、5显示一般所有学生信息。弹出学生信息录入窗口增加学号为“39”、姓名为“测试”、语文、数学、物理、化学、英语分数分别为1、2、3、4、5的学生信息能显示一班所有学生信息能弹出学生信息录入窗口,默认学号显示为1能增加学号为39姓名为测试的学生,但是成绩显示为语文“1”、数学“2”、物理“4”、化学“5”、英语“3”不通过2在弹出学生信息录入窗口中录入学号为“39”,姓名为“测试A”,语文、数学、物理、化学、英语的分数依次录入“100”、“85”、“60”、“59.5”、“0”显示“添加的学号重复”能显示“添加的学号重复”通过3在弹出学生信息录入窗口中录入学号为“40”,姓名为“测试”,语文、数学、物理、化学、英语的分数依次录入“105”、“80”、“0”、“0.5”、“0”显示“语文成绩必须为0~100之间的实数”能显示“语文成绩必须为0~100之间的实数”通过4在弹出学生信息录入窗口中录入学号为“41”,姓名为“测试B”,语文、数学、物理、化学、英语的分数依次录入“0”、“0”、“0”、“0”、“0”显示“一班学号在1~40之间”能显示“一班学号在1~40之间”通过5在弹出学生信息录入窗口中录入学号为“0”,姓名为“测试C”,语文、数学、物理、化学、英语的分数依次录入“0”、“0”、“0”、“0”、“0”显示“请输入一个1~200之间的整数”能显示“请输入一个1~200之间的整数”通过测试人日期表3.6依据数据字典建立的测试用例2用例ID号2007-04-XSGL-002测试方法手工设计人杨雪峰日期2007.04.18测试目的测试班级学生成绩管理(增加学生信息)功能是否达到软件规格说明书中的要求前提条件系统中已按照默认方式安装好该软件测试过程顺序测试步骤与数据输入描述期望结果实际结果判定结果1在弹出学生信息录入窗口中录入学号为“40”,姓名为“测试”,语文、数学、物理、化学、英语的分数依次录入“100”、“100”、“100”、“100”、“100”增加学号为“40”、姓名为“测试”、语文、数学、物理、化学、英语分数分别为“100”、“100”、“100”、“100”、“100”的学生信息能增加学号为40姓名为测试的学生,成绩显示为语文“100”、数学“100”、物理“100”、化学“100”、英语“100通过2在删除23号学生后增加学号为23的“张海锋”记录,语文、数学、物理、化学、英语的分数依次输入0.1、0.2、0.3、0.4、0.5增加学号为“23”、姓名为“张海锋”、语文、数学、物理、化学、英语分数分别为0.1、0.2、0.3、0.4、0.5的学生信息能增加学号为“23”、姓名为“张海锋”的学生,但是语文、数学、物理、化学、英语分数分别为0.1、0.2、0.4、0.5、0.3的学生信息不通过3在清空二班数据后,增加学号为41的测试B,语文、数学、物理、化学、英语的分数依次输入1、2、3、4、5增加学号为“41”、姓名为“测试B”、语文、数学、物理、化学、英语分数分别为1、2、3、4、5的学生信息能增加学号为41姓名为测试B的学生,但是成绩显示为语文“1”、数学“2”、物理“4”、化学“5”、英语“3”不通过4重新恢复样品数据库,在一班中点击新增学生信息弹出信息录入窗口,其中学号应该默认为未被占用的学号默认学号始终为1不通过测试人日期在本模块的测试当中必须特别考虑数据字典中所要求的姓名,学号,总成绩,各科成绩各个班级所要求的取值范围要特别的注意。其实也说明了一个很重要的问题,就是测试的时候考虑边界值的情况的话一定要特别的主要规格说明书中的数据字典,对数据字典的透彻的分析将是我们讨论边界值测试的一个重点方面。本模块的测试很能说数据字典对于我们利用边界值的重要处。下面是本模块中对于各个班级学生数的控制要求的测试必须使用的一些测试用例,而它的直接的要求就是来自数据字典做出的规定。例如对于一班学生学号的输入,如表3.7。表3.7学号输入测试用例输入文件测试用例一班学生学号学号为“1”,学号为“39”,学号为“40”,学号为“41”,学号为“20”,边界值测试方法的运用分析边界值测试方法作为一种测试方法,可以从实验项目中看到它有极其广泛的运用。但它的使用也有其使用的一般特点,具体分析结果如下:边界值测试作为一中黑盒测试,它是对等价划分的一个补充,所以说边界值测试是建立在等价划分的基础上的,边界值分析使用与等价类划分法相同的划分。在使用边界值测试方法时候,要对输入和输出的边界值情况进行分别测试,因为对于软件输入范围的边界并不总是能代表输出范围的边界情况。在使用边界值测试方法的过程当中,要求我们在测试的过程中对软件的数据字典必须有很清楚的了解,因为在数据字典中已经详细的规定了一些对于软件输入和输出的范围规定,而那些范围的边界情况是我们在软件测试中必须要关注的重点。在使用边界值法进行测试的过程中,根据工程时间我们对与一个等价域的测试要考虑至少包括七个点:既两个边界点,小于边界下界点,大于边界下界点,小于边界上界点,大于边界上界的点,最后现在一个非边界点测试。在边界值测试过程当中有时我们会发现某些边界条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界条件或子边界条件。如果程序用了一个内部结构,应该选取这个内部数据结构的边界值作为测试用例。边界值测试方法的分析结论由于软件需求的不完整性、软件逻辑路径的组合性、输入数据的大量性及结果多样性等因素,哪怕是一个极其简单的程序,要想穷尽所有逻辑路径,所有输入数据和验证所有结果是非常困难的一件事情。所以就要求我们对软件的测试过程中能寻找出一个使用有限的逻辑路径而达到较大的覆盖度,并寻找出软件的最多的Bug。在软件测试中,对于软件的缺陷同样存在着80-20原则,80%
的软件缺陷常常生存在软件
20%
的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发
“
地段
”
。在那里发现软件缺陷的可能性会大的多。这一原则对于软件测试人员提高测试效率及缺陷发现率有着重大的意义。而根据测试人员长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。从而可以是我们能够使用最少的测试用例寻找出软件更多的缺陷。所以说边界值测试方法是软件测试方面理论研究与实践得到很好结合的一种测试方法。总结软件测试作为一门年轻的科学,还处于研究的起步阶段。目前虽然软件产业内各方对软件测试越来越关注,但软件测试过程优化理论大部分仍然停留在纸上,人们发现很多的理论很难在实践中得到运用。所以现在人们对软件测试的研究很多都面向那些能在实际项目中得到很好实践的理论的研究。边界值测试方法作为一个理论研究与实际运用得到很好结合的软件测试方法,它为我们其他软件测试理论的研究给出了很好的经验。让软件测试理论与测试实际能得到同步的发展,最终促进软件产品质量的提高。本论文以“边界测试方法研究及应用”为题,主要是探讨了边界测试方法的一些理论,并结合边界测试理论方法研究如何在实际的项目中使用边界测试方法,特别是如何建立测试案例,并对比了边界测试方法与其他的测试方法及测试理论有何优点使其理论研究能够与实际的运用结合得如此的紧密。致谢在完成整个毕业设计期间,得到了很多老师和同学的帮助与指导,因为有了他们的指导帮助才能使得这篇论文最终能够顺利的完成。在这里对他们表示由衷的感谢。特别要提出致谢的是我的指导老师xx老师,如果没有他的指导,这篇论文也不可能按期的完成。此外还要感谢同事xx,在我论文实习期间给予了我很大的帮助。在本篇论文完成之际,我要对他们表示衷心的感谢。在以后的工作学习中,我也要再接再厉,不辜负他们对我的期望。参考文献[1]古乐,史九林.软件测试技术概论[M].北京:清华大学出版社,2004:12-50.[2]JohnD.McGregorDavidA.Sykes.面向对象的软件测试[M].北京:机械工业出版社,2002:20-38.[3]RogerS.Pressman.软件工程-实践者的研究方法[M].北京:机械工业出版社,2002:333-341.[4]Vince.测试用例设计白皮书[EB/OL]./vincetest,2003.[5]GlenfordJ.Myers著.TheArtofSoftwaretesting[M].JohnWiley&Sons,Inc,2004:9-11.[6]WilliamE.Perry.软件测试的有效方法[M].北京:机械工业出版社,2002.[7]RonPatton.软件测试[M].北京:机械工业出版社,2002.[8]CSDN.软件测试的主要内容与常用方法[EB/OL].,2005.[9]Tag.边界值分析法实例[EB/OL].,2004.[10]RonPatton著.SoftwareTesting[M].SamsPublishing,2006:30-48.[11]Advin.软件测试的基础知识概要介绍[EB/OL].,2006.[12]张雪萍,张猛,庄雷.面向对象软件测试探讨[J].信息工程大学学报,2003,3(3):72-75.[13]VoasJM,MillerK.Softwaretestability:thenewverification.IEEESoftware,1995:17-28.[14]微软公司.微软公司软件测试理论和测试实践[EB/OL]./china/CTC/Newsletter/06/ctc2.htm,2004.[15]朱少明.软件测试演义-中高级系列[EB/OL].,2005.[16]陈会霞,周利华.关于软件测试的浅议[D].西安:西安电子科技大学,2005.[17]RandallW.Rice,CSQA,CST,CSTM.ThingsITellNewTesters[EB/OL]./,2005.[18]HarryRobinson.PredictingtheFutureofTesting[EB/OL].,2005.[19]邓红艳,武芳,赵敬东,李永红,赵剑峰.GIS软件测试方法[D].河南郑州:信息工程大学测绘学院,2005.[20]刘菲菲,单锦辉,姜瑛.软件的易测试性分析方法评述[D].北京:北京大学软件研究所,2005.附录A.软件测试术语AcceptanceTesting--可接受性测试actualoutcome--实际结果adHocTesting--随机测试algorithm--算法algorithmanalysis--算法分析 alphatesting--Alpha测试analysis--分析anomaly--异常applicationsoftware--应用软件architecture--构架ASQ--自动化软件质量(AutomatedSoftwareQuality)assertion--断言assertionchecking--断言检查audit--审计audittrail--审计跟踪automatedtesting--自动化测试Backus-NaurForm--BNF范式baseline--基线basicblock--基本块basistestset--基本测试集behaviour--行为benchmark--标杆/指标/基准betatesting--Beta测试big-bangtesting--大锤测试/一次性集成测试blackboxtesting--黑盒测试
。bottom-uptesting--由低向上测试boundaryvalue--边界值boundaryvaluecoverage--边界值覆盖boundaryvaluetesting--边界值测试boundaryvalueanalysis--边界值分析branch--分支branchcondition--分支条件branchconditioncombinationcoverage--分支条件组合覆盖branchconditioncombinationtesting--分支条件组合测试branchconditioncoverage--分支条件覆盖branchconditiontesting--分支条件测试branchcoverage--分支覆盖branchoutcome--分支结果branchpoint--分支点branchtesting--分支测试breadthtesting--广度测试bug--缺陷capture/playbacktool--捕获/回放工具Capture/ReplayTool--捕获/回放工具CASE--计算机辅助软件工程(computeraidedsoftwareengineering)CAST--计算机辅助测试cause-effectgraph--因果图certification--证明changecontrol--变更控制codeaudit--代码审计codeCoverage--代码覆盖率codeInspection--代码检视codeWalkthrough--代码走读code-basedtesting--基于代码的测试codingstandards--编程规范compatibilityTesting--兼容性测试completepathtesting--完全路径测试completeness--完整性complexity--复杂性component--组件componentTesting--组件测试computationdatause--计算数据使用computersystemsecurity--计算机系统安全性condition--条件conditioncoverage--条件覆盖conditionoutcome--条件结果configurationcontrol--配置控制configurationmanagement--配置管理conformancecriterion--一致性标准conformanceTesting--一致性测试consistency--一致性consistencychecker--一致性检查器controlflow--控制流controlflowgraph--控制流图conversiontesting--转换测试correctivemaintenance--故障检修correctness--正确性correctness--正确性coverage--覆盖率coverageitem--覆盖项crash--崩溃criticality--关键性criticalityanalysis--关键性分析cycloramiccomplexity--循环复杂度datacorruption--数据污染datadefinition--数据定义datadefinitionC-usecoverage--数据定义C-use覆盖datadefinitionC-usepair--数据定义C-use使用对datadefinitionP-usecoverage--数据定义P-use覆盖datadefinitionP-usepair--数据定义P-use使用对datadefinition-usecoverage--数据定义使用覆盖datadefinition-usepair--数据定义使用对datadefinition-usetesting--数据定义使用测试datadictionary--数据字典dataflowanalysis--数据流分析dataflowcoverage--数据流覆盖dataflowdiagram--数据流图dataflowtesting--数据流测试dataintegrity--数据完整性datause--数据使用datavalidation--数据确认deadcode--死代码Debugging--调试decision--判定Decisioncondition--判定条件decisioncoverage--判定覆盖decisionoutcome--判定结果decisiontable--判定表DepthTesting--深度测试designofexperiments--实验设计design-basedtesting--基于设计的测试deskchecking--桌面检查diagnostic--诊断dirtytesting--肮脏测试disasterrecovery--灾难恢复documentationtesting--文档测试domain--域domaintesting--域测试dynamicanalysis--动态分析DynamicTesting--动态测试embeddedsoftware--嵌入式软件emulator--仿真End-to-Endtesting--端到端测试entityrelationshipdiagram--实体关系图entrypoint--入口点EquivalenceClass--等价类equivalencepartitioncoverage--等价划分覆盖equivalencepartitiontesting--等价划分测试EquivalencePartitioning--等价划分error--错误errorguessing--错误猜测errorseeding--错误播种/错误插值exception--异常/例外executablestatement--可执行语句ExhaustiveTesting--穷尽测试exitpoint--出口点expectedoutcome--期望结果failure--失效fault--故障feasiblepath--可达路径featuretesting--特性测试FMEA--失效模型效果分析(FailureModesandEffectsAnalysis)FMECA--失效模型效果关键性分析(FailureModesandEffectsCriticalityAnalysis)FMEA的一个扩展,它分析了失效结果的严重性FTA--故障树分析(FaultTreeAnalysis)functionaldecomposition--功能分解FunctionalSpecification--功能规格说明书FunctionalTesting--功能测试glassboxtesting--玻璃盒测试IEEE--美国电子与电器工程师学会(InstituteofElectricalandElectronicEngineers)incrementaltesting--渐增测试infeasiblepath--不可达路径inputdomain--输入域inspection--检视installabilitytesting--可安装性测试instrumentation--插装instrumenter--插装器IntegrationTesting--集成测试interface--接口interfaceanalysis--接口分析interfacetesting--接口测试invalidinputs--无效输入isolationtesting--孤立测试Job--工作jobcontrollanguage--工作控制语言LCSAJ--线性代码顺序和跳转(LinearCodeSequenceAndJump)LCSAJcoverage--LCSAJ覆盖LCSAJtesting--LCSAJ测试LoadTesting--负载测试logicanalysis--逻辑分析logic-coveragetesting--逻辑覆盖测试maintainability--可维护性maintainabilitytesting--可维护性测试modifiedcondition/decisioncoverage--修改条件/判定覆盖modifiedcondition/decisiontesting--修改条件/判定测试MonkeyTesting--跳跃式测试MTBF--平均失效间隔实际(meantimebetweenfailures)MTTF--平均失效时间(meantimetofailure)MTTR--平均修复时间(meantimetorepair)multipleconditioncoverage--多条件覆盖mutationanalysis--变体分析NegativeTesting--逆向测试/反向测试/负面测试non-functionalrequirementstesting--非功能性需求测试N-switchcoverage--N切换覆盖N-switchtesting--N切换测试N-transitions--N转换operationaltesting--可操作性测试outputdomain--输出域partitiontesting--分类测试path--路径pathcoverage--路径覆盖pathsensitizing--路径敏感性pathtesting--路径测试performancetesting--性能测试portabilitytesting--可移植性PositiveTesting--正向测试precondition--预置条件predicate--谓词predicatedatause--谓词数据使用programinstrumenter--程序插装progressivetesting--递进测试pseudo-random--伪随机QA--质量保证(qualityassurance)QC--质量控制(qualityco
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论