(计算机应用技术专业论文)软件测试方法在mis中的应用研究.pdf_第1页
(计算机应用技术专业论文)软件测试方法在mis中的应用研究.pdf_第2页
(计算机应用技术专业论文)软件测试方法在mis中的应用研究.pdf_第3页
(计算机应用技术专业论文)软件测试方法在mis中的应用研究.pdf_第4页
(计算机应用技术专业论文)软件测试方法在mis中的应用研究.pdf_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华北电力人学硕士学位论文( 摘要) 摘要 随着软件工程技术的发展,软件设计规模的增大,软件测试在软件开发过程中 的作用显得尤为重要。本文对软件测试的基本理论、软件测试的白盒与黑盒测试方 法、测试用例及软件测试的v 、w 、x 、h 模型进行了深入的分析与研究。结合网上 书店m i s 分析了管理信息系统的相关理论,设计了适用于当f i 管理信息系统的改进 v 模型。采用问题模板( q p a t t e r n s ) 理论,给出了使用问题模板来设计软件测试 用例的方法,并依据问题模板,改进了m i s 类设计测试用例的设计方法。结合网上 书店m i s 设计了测试用例。通过j u n i t 测试平台对改进的v 模型与测试用例进行了 单元测试,对测试结果分析表明有效的提高了测试软件对m i s 的测试效率。 关键词:软件测试,测试方法,管理信息系统,v 模型,测试用例 a b s t r a c t w i mt 1 1 ed e v e l o p m e n to fs o 胁a r ee n 百n e e r i n gt e c l u l o l o g y t h el a 唱e rs c a l eo fs o 脚a r e d e s i g n ,t h es o f h a r et e s t i n gp l a y s 锄i m p o r t a n tr o l e i nt h es o 脚a r ed e v e l o p m e n tp r o c e s s p a n i c u l a l l y t h ep a p e rm a l ( ed e 印a n a l y s i sa n dr e s e 疵ht ot h eb 商ct h e o r yo fs o f h v a r e t e s t i n g ,w h i t eb o xa i l d b l a c k b o xt e s t i n gm e t l l o d s ,t e s tc a s 销a 1 1 ds o f t w a r et e s tv w jx ,h m o d e l c o m b i n e dt 1 1 eo n l i n eb 0 0 k s t o r em i s ,锄a l y s i z i n gt l l er e l e v 锄tm e o 巧o f m a j l a g e m e i l t i n f o 咖a t i o ns y s t 锄,d e s i 印i n gt h ei m p r o v e dvm o d e l t h a ta p p l i e dt ot h ep r e s e n tm a n a g e r i l e n t i n f o m a t i o ns y s t e m t h ep 印e ru s et h em e o 巧o fq u e s t i o nt e m p l a t e s ( q p a t t e m s ) ,g i v i n gt h e m e t h o dt h a tu s em eq u e s t i o nt e m p l a t e st 0d e s i g ns o m a r et e s tc a s e ,a 1 1 db a s i n go nq u e s t i o n t e m p l a t e s ,i m p r o v e dt h ed e s i g no fm i s t y p et e s tc a s ed e s i g nm e t h o d c o m b i n a t i o no fo n l i n e b o o k s t o r em i sd e s i g n e dt e s tc a s e s m a k em eu n i tt e s tt ot h ei m p r o v e dvm o d e la n dt e s tc a s e t h r o u g hj u n i tt e s tp l a t f o m ,t h ea n a i y s i so ft e s tr e s u l t ss h o w st h a ta j le f f e c t i v es o r w a r et o i m p r o v et h e t e s te 伍c i e n c yo fm i st e s t y e w e i ( c o m p u t e ra p p l i e dt e c h n o l o g y ) d i r e c t e d b y p r o f z h u y o u c h a n k e y w o r d s :s o f h a r et e s t ,t e s tm e t h o d s ,m i s ,vm o d e l ,t e s tc a s e 华北电力人学硕士学位论文( 摘要) 摘要 随着软件工程技术的发展,软件设计规模的增大,软件测试在软件开发过程中 的作用显得尤为重要。本文对软件测试的基本理论、软件测试的白盒与黑盒测试方 法、测试用例及软件测试的v 、w 、x 、h 模型进行了深入的分析与研究。结合网上 书店m i s 分析了管理信息系统的相关理论,设计了适用于当f i 管理信息系统的改进 v 模型。采用问题模板( q p a t t e r n s ) 理论,给出了使用问题模板来设计软件测试 用例的方法,并依据问题模板,改进了m i s 类设计测试用例的设计方法。结合网上 书店m i s 设计了测试用例。通过j u n i t 测试平台对改进的v 模型与测试用例进行了 单元测试,对测试结果分析表明有效的提高了测试软件对m i s 的测试效率。 关键词:软件测试,测试方法,管理信息系统,v 模型,测试用例 a b s t r a c t w i mt 1 1 ed e v e l o p m e n to fs o 胁a r ee n 百n e e r i n gt e c l u l o l o g y t h el a 唱e rs c a l eo fs o 脚a r e d e s i g n ,t h es o f h a r et e s t i n gp l a y s 锄i m p o r t a n tr o l e i nt h es o 脚a r ed e v e l o p m e n tp r o c e s s p a n i c u l a l l y t h ep a p e rm a l ( ed e 印a n a l y s i sa n dr e s e 疵ht ot h eb 商ct h e o r yo fs o f h v a r e t e s t i n g ,w h i t eb o xa i l d b l a c k b o xt e s t i n gm e t l l o d s ,t e s tc a s 销a 1 1 ds o f t w a r et e s tv w jx ,h m o d e l c o m b i n e dt 1 1 eo n l i n eb 0 0 k s t o r em i s ,锄a l y s i z i n gt l l er e l e v 锄tm e o 巧o f m a j l a g e m e i l t i n f o 咖a t i o ns y s t 锄,d e s i 印i n gt h ei m p r o v e dvm o d e l t h a ta p p l i e dt ot h ep r e s e n tm a n a g e r i l e n t i n f o m a t i o ns y s t e m t h ep 印e ru s et h em e o 巧o fq u e s t i o nt e m p l a t e s ( q p a t t e m s ) ,g i v i n gt h e m e t h o dt h a tu s em eq u e s t i o nt e m p l a t e st 0d e s i g ns o m a r et e s tc a s e ,a 1 1 db a s i n go nq u e s t i o n t e m p l a t e s ,i m p r o v e dt h ed e s i g no fm i s t y p et e s tc a s ed e s i g nm e t h o d c o m b i n a t i o no fo n l i n e b o o k s t o r em i sd e s i g n e dt e s tc a s e s m a k em eu n i tt e s tt ot h ei m p r o v e dvm o d e la n dt e s tc a s e t h r o u g hj u n i tt e s tp l a t f o m ,t h ea n a i y s i so ft e s tr e s u l t ss h o w st h a ta j le f f e c t i v es o r w a r et o i m p r o v et h e t e s te 伍c i e n c yo fm i st e s t y e w e i ( c o m p u t e ra p p l i e dt e c h n o l o g y ) d i r e c t e d b y p r o f z h u y o u c h a n k e y w o r d s :s o f h a r et e s t ,t e s tm e t h o d s ,m i s ,vm o d e l ,t e s tc a s e 声明尸明 本人郑重声明:此处所提交的硕士学位论文软件测试方法在m i s 中的应用研 究,是本人在华北电力大学攻读硕士学位期间,在导师指导下进行的研究工作和取得 的研究成果。据本人所知,除了文中特别加以标注和致谢之处外,论文中不包含其他人 已经发表或撰写过的研究成果,也不包含为获得华北电力大学或其他教育机构的学位或 证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均己在论文中作了 明确的说明并表示了谢意。 学位论文作者签名:过丛晕 日 关于学位论文使用授权的说明 本人完全了解华北电力大学有关保留、使用学位论文的规定,即:学校有权保管、 并向有关部门送交学位论文的原件与复印件;学校可以采用影印、缩印或其它复制手 段复制并保存学位论文;学校可允许学位论文被查阅或借阅;学校可以学术交流为 目的,复制赠送和交换学位论文;同意学校可以用不同方式在不同媒体上发表、传播 学位论文的全部或部分内容。 ( 涉密的学位论文在解密后遵守此规定) 导师签名: 日期:竖巡 蛐4 华北电力人学硕七学位论文 第一章绪论 软件测试己经成为软件产品开发中不可缺少的重要流程,无论是在国内或国外 软件企业中,软件测试都成为提高软件产品质量,降低缺陷的重要途径和手段。 1 1 选题背景 软件测试是伴随着计算机软件的产生而产生的。在早期软件开发过程中,软件 就是由程序员写的简单计算机程序代码。因而,软件测试的含义比较狭窄一一测试 等同于“调试i ij 。软件测试的目的就是为寻找和纠正软件中的故障,这部分工作 常常由开发人员自己完成。 直到上世纪8 0 年代早期,“质量”的号角才开始吹响【2 1 。软件测试定义发生了改 变,测试不单纯是一个发现错误的过程,而且包含软件质量评价的内容。软件开发 人员和测试人员开始坐在一起探讨软件工程和测试问题。制定了各类标准,包括 i e e e ( i n s t i t u t eo fe l e c t r i c a la n de l e c t r o n i ce n 西n e e r s ) 标准、美国a n s i ( a m e r i c a n n a t i o n a ls t a n d a r di n s t i t u t e ) 标准以及l s o 国际标准。g l e n f o r dj m y e r s ( 代表论著 t h ea r to f s o r w a r et e s t i n g ) 认为测试不应该着眼于验证软件是工作的,相反 应该首先认定软件是有错误的,然后用逆向思维去发现尽可能多的错误。他还从人 的心理学角度论证,如果将“验证软件是工作的”作为测试目的,非常不利于测试人 员发现软件错误。于是他于1 9 7 9 年提出了他对软件测试的定义:“测试是为发现错 误而执行的一个程序或者系统的过程。 1 9 8 3 年,软件测试领域的先驱b i l lw e t z e l 博士在软件测试完全指南 ( c o m p l e t eg u i d eo f s o r w a r et e s t i n g ) 一书中指出: “测试是以评价一个程序或者系统属性为目标的任何一种活动。”m y e r s 和w e t z e l 的 定义至今仍被引用。 到了2 0 0 2 年,美国教授r i c k 和s t e f a n 在系统的软件测试( s v s t e m a t i c s o f 1 w a r et e s t i n g ) 中对软件测试做了进一步定义:“测试是为了度量和提高被测软 件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程。”这些经 典论著对软件测试研究的理论化和体系化产生了巨大的影响。 近2 0 年来,随着计算机和软件技术的飞速发展,软件测试技术研究也取得了 很大的突破。测试专家总结了很好的测试模型,比如著名的v 模型、w 模型等, 在测试过程改进方面提出了t m m ( t e s t i n gm a t u r i t ym o d e l ) 的概念,在单元测试、 自动化测试、负载压力测试以及测试管理等方面涌现了大量优秀的软件测试工具。 软件测试( s o f t w a r et e s t i n g ) 是软件生存期( s o r w a r el i f ec y c l e ) 中的一个重要 阶段,是软件质量保证的关键步骤【3 l 。通俗地讲,软件测试就是在软件投入运行前, 华北电力大学硕士学位论文 对软件需求分析、设计规格说明和编码进行最终复审的活动。1 9 8 3 年i e e e 提出的 软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某 个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际 结果之间的差别”【3 1 。这个定义明确指出:软件测试的目的是为了检验软件系统是否 满足需求。 随着软件工程技术的发展,软件设计规模的增大,软件测试在软件开发过程中 的作用显得尤为重要。目前,软件测试技术的研究领域虽然取得了一些成果,但对 具体的开发环境下开发的特定领域的软件系统应采用怎样的测试方法对其进行全 面的、完整的测试,仍没有具体的标准可以遵循。 因此,软件测试技术及方法在m i s 领域的研究,不仅具有方法论上的理论意义, 而且具有一定的使用价值。 1 2 软件测试的国内外研究状况 1 2 1 软件测试的发展 早在5 0 年代,人们刚丌始丌发较大型软件时,从几个大型软件项目的失败中 就意识倒了软件危机的存在。当时测试用例的选取方式是在随机选取的基础上,结 合测试者的经验或测试者的直觉判断,突出重点测试区域。1 9 7 2 年6 月在美国北卡 罗莱纳大学召开了首届软件测试正式技术会议,成为软件测试技术发展中的一个重 要的里程碑【2 1 。1 9 7 5 年美国博士w c h e t z e l 将在北卡罗莱纳大学召丌的软件测试会 议上发表的论文整理出版了p r o g r a mt e s tm e t h o d s 一书,书中纵览了测试方法, 这是专题论述软件测试的第一本著作,从而把软件测试这一实践性很强的学科提高 到理论高度,被认为是软件测试技术发展过程中具有丌创性的工作。此后,美国 w e h o w d e n ,g e r h a n 两位教授进一步总结原有的测试理论并进一步加以完善,使 软件测试成为有理论指导的实验性科学。 6 0 年代术,7 0 年代初,软件的矛盾日益突出,软件工程化的概念逐渐形成。 1 9 6 8 年在北大西洋公约组织的学术会议上提出了“软件工程”的概念。把软件工程 分为需求分析、设计、编码、测试和维护几个开发阶段的软件生存周期的概念【4 】。 同时,在软件开发实践中,人们还认识到,在开发初期发现并排除错误所付出的代 价,远比在完成编码以后经过测试发现错误并加以改j 下的代价小得多。从这个认识 出发,各种有关生存期前几个阶段的测试理论和测试方法应运而生。 1 2 2 国内外的研究现状 软件测试作为软件工程学科的一个重要分支,随着软件的发展而发展。自从2 0 世纪7 0 年代以来,国内外许多学者和组织在软件测试方面进行了大量的研究工作, 2 华北电力大学硕士学位论文 形成许多经典的软件测试技术和软件测试流程管理规范。 美国的i e e e 、a c m 等组织制定了一系列软件测试规范,国外的许多大学( 如卡 梅隆大学、华盛顿大学等) 、研究机构( 如n a t i o n a ls o f ! t w a r et e s t i n gl a b 等) 和公司( 如 s o f t w a r er e s e a r c h 、m e r c u 眄i n t e r a c t i v e 、r a t i o n a lc o 印o r a t i o n 等) 进行了大量软件测 试的研究和应用工作。其中卡梅隆大学侧重于回归测试和c s 测试技术的研究,华 盛顿大学侧重于基于规范的测试、自动生成技术和面向对象测试技术。比较流行的 软件测试工具集有s o f t w a r er e s e a r c h 的t e s t w o r k s 、r a t i o n a l 的r o b o t 、m e r c u r y i n t e r a c t i v e 的w i n r u n n e r l o a d r u n n e r 等引。 国内的软件产品测试技术研究起步晚,在人力、物力上投入与国外相比差距较 大。国内软件企业绝大多数都把软件测试当作软件行业中不重要的工作,并且还有 为数不少的软件企业仍然在没有任何实际测试过程的条件下开发软件。并且在国内 软件企业中,很多工程师不愿意做测试,认为是一种打下手的工作,没有前途,于 是企业从上到f 普遍自觉和不自觉地只重视技术,不重视质量,后果是产品在市场 上竞争力不高,产品售后维护和服务费用偏高。 近年来,我国软件测试行业也得到了迅速的发展,一些高等学校如北京大学、 北京航空航天大学等进行了一系列软件分析和测试工具的研究和开发,研制了一系 列的程序理解工具和测试工具。较有代表性的工具有北京大学的s a f e p r o c c + + ,北 京航空航天大学的s a f e p r o j a v a 。航空计算机研究所、南京大学在嵌入式系统测试 方面进行了较多工作,开发了一些静态分析工具和测试用例自动生成工具。 只有进行专业化和高效的软件测试,才有可能真j 下提高软件产品的质量,国内 的软件水平才能得到提高,国家的信息化建设才能取得成果。 1 3 论文组织结构 论文组织安排如下: 第一章介绍软件测试的国内外发展状况、选题背景。 第二章阐述软件测试相关理论与技术。包括软件测试的相关定义,软件测试模 型及测试用例的设计。 第三章详细介绍了管理信息系统的基本概念,包括管理信息系统的概念、结构 和特征,网上书店m i s 。最后将软件测试与m i s 之间进行联系。 第四章设计了软件测试的改进v 模型、测试用例及实现。 第五章介绍了测试工具及平台,并对网上书店m i s 进行了测试,最后对测试结 果与测试用例进行了分析。 第六章是总结与展望。指出了方案需要改进的地方及下一步的研究工作。 华北电力大学硕士学位论文 第二章软件测试相关理论与技术 2 1 软件测试相关定义 2 1 1 软件测试概念 软件测试的定义有许多种,现列出以下几种: 1 根据软件测试的性质可以定义为:软件测试是为了发现错误而执行程序的过 程。 2 根据软件测试的内容可以定义为:软件测试是根据软件测试各阶段的规格说 明和程序的内部结构而精心设置一批用例即输入数据及其预期输出结果,并利用这 些测试用例去运行程序,以发现程序错误的过程。 3 根据软件测试的基本过程可以有以下两种定义: ( 1 ) 软件测试是一系列可以事先计划并且可以系统的进行管理的活动,包括 为发现错误而根据测试设计选择输入和状态的组合,执行代码、评价其结果的过程, 以及为验证软件需求而进行确认的活动。 ( 2 ) 软件测试是使用人工或自动手段来运行或测定某个系统的过程,其目的 在于检验它是否满足规定的需求或是弄清楚预期结果与实际结果之间的差别。 4 根据软件测试目的可以定义为:软件测试是在软件投入运行之前,对软件需 求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。 2 1 2 软件测试的内容 软件测试的主要工作内容是“验证”( v e r i f i c a t i o n ) 和“确认”( v a l i d a t i o n ) 【”。“验 证 是保证软件j 下确的实现了特定功能的一系列活动,即保证软件做你所期望的事 情( d ot h er i g h tt h i n g ) 。一般包括以下步骤: 1 确定软件生存周期中一个给定阶段的产品是否达到前一阶段确定的需求的 过程。 2 程序正确性的形式证明。即采用形式理论证明程序符号设计规约规定的过 程。 3 评审、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文 件等是否和规定的需求相一致进行判断和提出报告。 “确认一是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件 逻辑正确性。即保证软件以正确的方式来做这件事( d oi tr i g h t ) 。一般包括以下步骤: 4 华北电力火学硕士学位论文 1 静态确认。 的正确性。 2 动态确认。 存在问题。 不在计算机上实际执行程序,通过人工或程序分析来证明软件 通过执行程序做分析,测试程序的动态行为,以证实软件是否 软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期间各个 阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测 试的主要对象还是源程序。 2 1 3 软件测试的目的 软件测试的目的基于不同立场,有着完全不同的测试目的。从用户角度出发, 普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品【6 】。 从软件开发者角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证 该软件已j 下确的实现了用户需求,确立人们对软件质量的信心。软件测试创始人之 一g l e n f o r dj m y e r s 在t h ea r to fs 0 1 f t w a r et e s t i n g 一书中是这样描述软件测试的 目的: 1 软件测试是为了发现错误而执行程序的过程。 2 测试是为了证明程序有错,而不是证明程序无错误。 3 一个好的测试用例是在于它能发现至今未发现的错误。 4 一个成功的测试是发现了至今未发现的错误的测试。 换言之,测试的目的是想以最少的时间和人力,系统地找出软件中潜在的各种 错误和缺陷【7 1 。如果我们成功的实施了测试,我们就能够发现软件中的错误。测试 的附带收获是,它能够证明软件的功能和性能与需求说明相符合。实施测试收集到 的测试结果数据为可靠性分析提供了依据。测试不能表明软件中不存在错误,它只 能说明软件中存在错误。 2 1 4 软件测试的原则 在软件测试过程中,应注意和遵循的具体原则,可以概括为以下十项【7 1 : 1 所有测试的标准都是建立在用户需求之上。众所周知,软件测试的目标就 是验证产品的一致性和确认产品是否满足客户的需求,所以测试人员要始终站在用 户的角度去看问题、去判断软件缺陷的影响,系统中最严重的错误是那些导致程序 无法满足用户需求的缺陷。 2 软件测试必须基于“质量第一 的思想去开展各项工作,当时间和质量冲 突时,时间要服从质量。质量的理念“第一次就把事情做对同样是软件测试工作 的基础。 s 华北电力大学硕士学位论文 3 事先定义好产品的质量标准。有了质量标准,才能依据测试的结果对产品 的质量进行正确的分析和评估,例如,进行性能测试前,应定义好与产品性能相关 的各种指标。同样,测试用例应确定预期输出结果,如果无法确定测试结果,则无 法进行校验。 4 软件项目一启动,软件测试也就是开始了,而不是等到程序写完,才开始 进行测试。在代码完成之前,测试人员要参与需求分析、系统或程序设计的审查工 作,而且要准备测试计划、测试用例、测试脚本和测试环境,测试计划可以在需求 模型一完成就开始,详细的测试用例定义可以在设计模型被确定后开始。应当把“尽 早和不断地测试”作为测试人员的座右铭。 5 穷举测试是不可能的。穷举测试即根据测试的目的,列出所有可能的测试 路径,再进行测试。一个大小适度的程序,其路径排列的数量非常大,因此,在测 试中不可能运行路径的每一种组合。然而,设计和选择一些合适或典型的测试路径, 使其充分覆盖程序设计逻辑,并确保程序设计中使用的所有条件是有可能的。 6 第三方进行测试会更客观,更有效。程序员应避免测试自己的程序,为达 到最佳效果,应由第三方来进行测试。测试是带有“挑剔性”的行为,心理状态是 测试自己程序的障碍。同时对于需求规格说明的理解不够产生的错误也很难在程序 员本人测试时被发现。 7 软件测试计划是做好软件测试工作的前提。在进行实际测试之前,应制定 良好的、切实可行的测试计划并严格执行,特别要确定测试策略和测试目标。 8 测试用例是设计出来的,而不是写出来的。所以要根据测试目的,采用相 应的方法去设计测试用例,从而提高测试效率,更多地发现错误,提高程序的可靠 性。除了检查程序是否做了应该做的事,还要看程序是否做了不该做的事。不仅应 选用合理的输入数据,对于非法的输入也要设计测试用例进行测试。 9 不可将测试用例置之度外,排除随意性。特别是对于做了修改之后的程序 进行重新测试时,如不严格执行测试用例,将有可能忽略由于修改错误而引起的大 量新错误。所以,回归测试的关联性也应引起充分注意,有相当一部分最终发现的 错误是在早期测试结果中遗漏的。 1 0 对发现错误较多的程序段,应进行更深入的测试。一般来说,一段程序中 己发现的错误数越多,其中存在的错误概率也就越大。错误集中发生的现象,可能 和程序员的编程水平和习惯有很大关系。 为了达到上述原则,需要注意以下几点: 1 “尽早和不断地测试 应作为开发者的座右铭。 2 程序员应该避免检查自己的程序,测试工作应该由独立的专业软件测试机 6 华北电力人学硕士学位论文 构来完成。 3 设计测试用例时,应该考虑到合理的输入和不合理的输入,以及各种边界 条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情 况。 4 一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有 很大关系。 5 对测试错误结果一定要有一个确认过程。一般测试出来的错误,一定要有 一个确认,严重错误可以召开评审会进行讨论和分析。 6 制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短时 间内完成一个高水平测试。 7 回归测试的关联性一定要引起充分注意,一个错误的修改而引起更多错误 的出现的情况并不少见。 8 妥善保存一切测试过程文档。测试的重现性往往要靠测试文档。 2 1 5 软件测试的特性 由于程序设计是一种创造性的高智能活动。尤其是大型程序的设计要求由多 人、甚至多个小组合作,经过需求分析、总体设计、编码等一系列活动才能完成。 在这些活动中,开发人员犯错误是不可避免的。软件工程本身的不成熟、每个人的 智力、经验、以及表达和理解对方的能力不可能尽善尽美。这些都将造成开发的产 品具有一定缺陷,最后给用户带来麻烦,甚至是追悔莫及的灾难。例如,一个 f o r t r a n 语言程序中因误将“d o5 i = l ,3 ,l ”写为“d o5 i = 1 3 ,1 ”的一点之差, 竟使美国飞往火星的火箭爆炸,损失一千力美元【l 】。为了保证程序的质量,软件工 程要求把测试作为软件丌发过程中一个非常重要的阶段 8 】。其目标是在精心控制的 环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。具体地说,软件 测试具有以下重要特征【4 】: 1 测试的挑剔性 测试不是为了证明程序是正确的,而是设想在程序有错误的前提下进行的,其 目的就是设法暴露程序中的这些错误和缺陷。这一观点可归纳为三句话:测试是程 序执行的过程,目的在于发现错误:一个好的测试实例在于能发现至今未发现的错 误;一个成功的测试是发现了至今未发现的错误。 2 测试的系统性 软件工程要求在测试之前,先制定测试计划。测试计划包括目的、完成标准、 步骤、进度、岗位责任、测试用例标准、工具、机时、有关规程等。这些内容要事 7 华北电力大学硕士学位论文 先严格规定,测试时要严格执行,以排除测试的随意性,切忌随意找几个数据一试 了事。 3 完全测试的不可能性 测试就是用精心设计的数据,运行软件,从而发现软件中的错误。但是,要想 发现软件的所有缺陷,得到完美的软件,是不可能的。 2 2 软件测试的分类 2 2 1 软件测试方法的分类 1 静态方法与动态方法【2 】 现有的软件测试方法通常分为静态测试和动态测试。静态测试是不执行程序代 码而寻找程序代码中可能存在的缺陷或评估程序代码的过程。静态测试主要包括两 方面的工作:由测试软件人员进行的代码审查、代码走查、桌面检查;由测试人员 通过软件工具自动进行的静态分析。如果广义地理解,静态测试还包括软件需求分 析和设计阶段的技术评审。动态测试通过在抽样测试数据上运行程序来检验程序的 动态行为和运行结果来发现缺陷。动态测试的核心内容包括生成测试用例、运行程 序和验证程序的运行结果三部分,另外还包括文档编制、数据管理、操作规程及工 具应用等辅助性工作。 动态测试最重要的问题是生成测试用例的策略,它是动态测试有效、高效的关 键。测试用例包括输入数据和期望结果。一般说到测试用例生成时,由于期望结果 构造的困难性,都侧重或仅生成输入数据,并称之为测试数据1 7 1 。按照生成测试数 据所根据的信息来源,动态测试分为基于规约的测试又称黑盒测试或功能测试;基 于程序的测试又称白盒测试或结构测试以及程序与规约相结合的测试。基于规约的 测试是指测试人员无须了解程序的内部结构,直接根据应用于管理系统中软件测试 的程序输入和输出之间的关系或程序的需求规约来确定测试数据,推断测试结果的 正确性。基于程序的测试是指测试人员根据程序的内部结构特性和与程序路径相关 的数据特性设计测试数据,它包括控制流测试和数据流测试两类主要技术以及域测 试、符号执行、程序插装和变异测试等其他技术【引。程序与规约相结合的测试则综 合考虑软件的规范和程序的内部结构来生成测试数据。 2 白盒测试及黑盒测试 白盒测试和黑盒测试是当前两种最基本的测试方法。 白盒测试是把测试对象看作一个打开的盒子。利用白盒测试法进行动态测试 时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。白盒测 试也称结构测试或逻辑驱动测试。它是知道软件产品内部工作过程,通过测试来检 8 华北电力大学硕士学位论文 测软件产品内部动作是否按照软件规格说明书的规定正常进行。按照程序内部的结 构测试程序,检验程序中的每条通路是否都能按预定要求正确工作,而不管软件产 品的功能,主要用于软件验证。白盒测试框架如图2 1 所示。 回世j 司 圈 叵 毒豳,习 1 i _ 蔓 图2 1 白盒测试框架1 9 】 白盒测试法软件测试人员需全面了解程序内部逻辑结构、对所有逻辑路径进行 测试。白盒测试是穷举路径测试。在使用这一方案时,软件测试人员必须检查程序 的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天 文数字。但即使每条路径都测试了仍然可能存在下面三种错误: ( 1 ) 穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误程序。 ( 2 ) 穷举路径测试不可能查出程序中因遗漏路径而出错。 ( 3 ) 穷举路径测试可能发现不了一些与数据相关的错误。 黑盒测试是在软件测试人员己知产品所具有的功能基础上,通过测试来检测每 个功能是否都能正常使用。测试时,把程序看作一个不能打开的黑盒子,在完全不 考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程 序功能是否按照需求规格说明书的舰定正常使用,程序是否能适当地接收输入数据 而产生正确的输出信息,并且保持外部信息如数据库或文件的完整性。黑盒测试方 法主要有等价类划分、因果图、判定表、边值分析、正交实验设计、状态测试、事 务流测试等,主要用于软件确认测试【i o 】。 黑盒测试着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功 能进行测试。黑盒测试是穷举输入测试,人们不仅要测试所有合法的输入,而且还 要对那些不合法但是可能的输入进行测试。只有把所有可能的输入都作为测试情况 使用,才能以这种方法查出程序中所有的错误。因此穷举测试通常是不可能的。必 须以某种策略分析软件规格说明,从而得出测试用例集,尽可能全面而又高效地对 软件进行测试。可见,如何选择好测试用例就十分重要。 2 2 2 软件测试的步骤及过程 软件测试通常可分为五个步骤,即单元测试、子系统测试、系统测试、验收测 9 华北电力大学硕士学位论文 试和平行运行测试。 1 单元测试 在设计好的软件系统中,每个模块完成一个清晰定义的子功能,而且每个模块 又是相对独立的。因此,每个模块可以作为一个单独的测试单元,而且也比较容易 设计测试用例。单元测试的目的,是保证每个模块作为一个单元能正确运行。在这 个测试中所发现的错误,往往是编码和详细设计的错误。 一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检 查,便可开始单元测试【7 1 。图2 2 显示了一般情况下程序的单元测试环境。在进行 单元测试时应注意以下两步: 首先应为测试模块开发一个驱动模块( d r i v e r ) 和( 或) 若干个桩模块( s t u b ) ,驱动模 块在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块。 桩模块则为“被动程序 ,用来接收测试数据。驱动模块和桩模块是测试使用的软 件,而不是软件产品的组成部分。若驱动和桩模块比较简单,就有可能完不成某些 模块的测试任务,那这些模块的单元测试只能采用集成测试方法【9 】来弥补。 其次要提高模块的内聚度( c o h e s i o n ) ( 内聚度是模块内部各成份( 语句或语 句段) 之间的联系。显然,模块内部各成份联系越紧,即其内聚度越大,模块独立 性就越强,系统越易理解和维护。) 。提高模块的内聚度可简化单元测试,如果每 个模块只完成一个,所需测试用例数目将显著减少,模块中的错误也更容易发现。 界面 数据结构 边界条件 独立路径 错误处理 路径 图2 2 程序的单元测试环境 2 子系统测试 子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。因此模 块间的相互协调和通信是本测试中的主要任务,而测试模块间接口的正确性是子系 统测试目的。 3 系统测试 1 0 华北电力人学硕士学位论文 系统测试是把经过测试的子系统装配成一个完整的系统来测试。在这个测试中 发现的错误不仅有设计和编码的错误,还可能有需求说明中的错误。因此,它是检 验系统是否确实能提供需求说明书中指定的功能,以及系统的动态特性是否也符合 预定要求的测试。 时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在一起之后 却不能正常工作。主要原因是,模块相互调用时接口会引入许多新问题。例如,数 据经过接口可能丢失;一个模块对另一模块可能造成不应有的影响;几个子功能组 合起来不能实现主功能;误差不断积累达到不可接受的程度;全局数据结构出现错 误等等。综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个 模块组装在一起之后,进行综合测试以便发现与接口有关的各种错误。 设计人员习惯于把所有模块按设计要求一次全部组装起来,然后进行整体测 试,这称为非增量式集成。这种方法容易出现混乱。因为测试时可能发现一大堆错 误,为每个错误定位和纠正非常困难,并且在改正一个错误的同时又可能引入新的 错误,新旧错误混杂,更难断定出错的原因和位置。与之相反的是增量式集成方法, 程序一段一段地扩展,测试的范围一步一步地增大,错误易于定位和纠正,界面的 测试亦可做到完全彻底。 1 自顶向下集成 自项向下集成是构造程序结构的一种增量式集成方法。它从主控模块丌始,按 照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一 起。深度优先策略首先是把主控制路径上的模块集成在一起,至于选择哪一条路径 作为主控制路径,这多少带有随意性,一般根据问题的特性确定。以图2 3 的程序 模块结构为例,若选择了最左一条路径,首先将模块m 1 ,m 2 ,m 5 和m 8 集成在 一起,再将m 6 集成起来,然后考虑中间和右边的路径。广度优先策略则不然,它 沿控制层次结构水平地向下移动。仍以图2 3 的程序模块结构图为例,首先把m 2 、 m 3 和m 4 与主控模块集成在一起,再将m 5 和m 6 和其他模块集成起来。 自顶向下集成的综合测试步骤为: ( 1 ) 以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所 有桩模块用实际模块替代; ( 2 ) 依据所选的深度优先或广度优先集成策略,每次只替代一个桩模块; ( 3 ) 每集成一个模块立即测试一遍; ( 4 ) 只有每组测试完成后,才着手替换下一个桩模块; ( 5 ) 为避免引入新错误,须不断地进行回归测试,即全部或部分地重复已做 过的测试。 华北电力大学硕士学位论文 ( 6 ) 从第二步开始,循环执行上述步骤,直至整个程序结构构造完毕。 如图2 3 所示,实线表示己部分完成的结构,若采用深度优先策略,下一步将 用模块m 7 替换桩模块m 3 ,当然m 7 本身可能又带有桩模块,随后将被对应的实 际模块一一替代。 自顶向下集成的优点:能尽早地对程序的主要控制和决策机制进行检验,因此 可以较早地发现错误。 自顶向下集成的缺点:在测试较高层模块时,低层处理采用桩模块替代,不能 反映真实情况,重要数据不能及时回送到上层模块,因此测试并不充分。 解决这个问题有几种办法: 第一种是把某些测试推迟到用真实模块替代桩模块之后进行; 第二种是开发能模拟真实模块的桩模块; 第三种是自底向上集成模块。 第一种方法又回退为非增量式的集成方法,使错误难于定位和纠正,并且失去 了在组装模块时进行一些特定测试的可能性;第二种方法无疑要大大增加开销;因 而,第三种方法比较切实可行。 l i i 一 m 2 - - 图2 3 模块结构图 2 自底向上集成 自底向上集成测试是从“原子”模块即软件结构最低层的模块丌始组装测试, 因测试到较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。 自底向上集成综合测试的步骤分为: ( 1 ) 把低层模块组织成实现某个子功能的模块群( c l u s t e r ) ; ( 2 ) 开发一个测试驱动模块,控制测试数据的输入和测试结果的输出; 1 2 坚一m 一 华北电力大学硕士学位论文 ( 3 ) 对每个模块群进行测试; ( 4 ) 删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功 能的新模块群。 ( 5 ) 从第一步开始循环执行上述各步骤,直至整个程序构造完毕。 以图2 4 的程序模块结构为例来说明了上述过程,整个过程共分五步: 第一步:将d l 至d 15 与m a 至m c 分成三种模块。其中d l 、d 2 、d 4 、d 5 是 驱动模块,d 3 、d 6 d 1 5 是程序模块,m a 、m b 、m c 是测试模块。 第二步:将“原子”模块分为三个模块群,即模块群l 、模块群2 、模块群3 , 每个模块群引入一个驱动模块进行测试。其中模块群1 包括d 6 、d 7 、d 1 1 和d 1 5 四个程序模块和一个驱动模块d l :模块群2 包括d 2 、d 8 、d 9 、d 1 2 和d 1 3 四个 程序模块和一个驱动模块d 2 ;模块群3 包括m b 、d l o 、d 1 2 和d 1 4 四个程序模 块和一个驱动模块d 5 。 第三步:因模块群l 、模块群2 中的模块均隶属于测试模块m a ,因此在驱动 模块d l 、d 2 去掉后,模块群l 与模块群2 直接与测试模块m a 接口,这时可对 m a 进行集成测试。 第四步:将d 5 被去掉后,测试模块m c 与模块群3 直接接口,可对测试模块 m b 进行集成测试。 第五步:将测试模块m a 、m b 和m c 全部集成在一起进行测试。 自底向上集成方法不用桩模块,测试用例的设计亦相对简单,但缺点是程序最 后一个模块加入时才具有整体形象。它与自顶向下集成综合测试方法优缺点正好相 反。因此,在测试软件系统时,应根据软件的特点和工程进度,选用适当的测试策 略,有时混和使用两种策略更为有效,上层模块用自顶向下的方法,下层模块用自 底向上的方法。 1 3 华北电力大学硕士学位论文 模块辨3 模块群l 图2 4 模块结构图 此外,在综合测试中尤其要注意关键模块,关键模块应尽早测试,并反复进行 回归测试。所谓关键模块一般都具有下述一个或多个特征【5 1 :对应几条需求:具有高 层控制功能;复杂、易出错;有特殊的性能要求。 综上所述软件测试过程如图2 5 所示,测试阶段有两类输入信息: 1 软件:就是待测试的软件,其中包括一些文档资料,如软件需求规格说明书, 设计说明书和源程序代码。 2 测试配置:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论