(计算机软件与理论专业论文)面向对象软件的自动化测试框架的研究与设计.pdf_第1页
(计算机软件与理论专业论文)面向对象软件的自动化测试框架的研究与设计.pdf_第2页
(计算机软件与理论专业论文)面向对象软件的自动化测试框架的研究与设计.pdf_第3页
(计算机软件与理论专业论文)面向对象软件的自动化测试框架的研究与设计.pdf_第4页
(计算机软件与理论专业论文)面向对象软件的自动化测试框架的研究与设计.pdf_第5页
已阅读5页,还剩60页未读 继续免费阅读

(计算机软件与理论专业论文)面向对象软件的自动化测试框架的研究与设计.pdf.pdf 免费下载

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

文档简介

摘要 随着信息时代的到来,计算机已经渗透到生活的各个方面,人们也对软件 质量变得越来越关心,软件测试已成为软件生产中必不可少的质量保障手段。虽 然近年来,国内外对面向对象软件测试进行了大量的研究,但目前尚未形成一 套较为成熟与完善的软件测试理论与方法,面向对象技术引入的新的特性为测 试工作带来了新的挑战。另一方面,自动测试工具可以高效地完成大量可重复 性工作,它不但可以大大减少测试开销,而且能在有限的时间内显著增加测试 的工作量。针对这些问题,本文就如何创建一个基于企业j a v a 应用的面向对 象自动化测试框架,使得面向对象软件能够自动、快速地完成测试方面展开了 研究。 首先作者在比较了传统软件测试与面向对象软件测试的异同点之后,分析 了面向对象新特性给软件测试带来的影响,给出了怎样针对这些新特性来进行 软件测试才能更准确、充分的一些观点。接着重点剖析了面向对象自动测试框 架,通过用例图、序列图等u m l 图系统地分析了j u n i t 测试框架的编写规则和 实现机制,并扩展了部分功能。最后,作者采用v s s ( 版本控制) + a n t ( 项目管 理) + j u n i t ( 集成测试) 的模式实现了一个面向对象的自动化测试。该测试系统 主要是以目前比较成熟的自动化测试框架如j u n i t 测试框架为核心,在其基础 上进行封装,生成了一个用于企业j a 、,a 开发的新的面向对象自动化测试框架。 其中主要通过对a n t 的配置,利用a n t 进行快速可重复创建、测试和配置,并 且将源代码放入版本控制工具v s s ( v i s u a ls o u r c e s a f e ) q b ,由持续创建工具及时 频繁地启动自动测试来测试软件源代码的。 相信,本论文的研究可以为以后的面向对象软件自动化测试带来一定的参 考价值。 关键词:面向对象,自动化测试,测试框架,j u n i t ,a n t ,v s s a b s t r a c t a st h ei tp e r i o dc o m e s a l o n g ,t h ec o m p u t e rh a sc o m ei n t op e o p l e sl i f ea n dm e n h a v ep a i dm o r em u c ha t t e n t i o n so ns o f t w a r e sq u a l i t y i nh e n c e ,s o f t w a r et e s t i n gh a s b e c o m ed i s p e n s a b l ef o rs o f t w a r eq u a l i t ya s s u r a n c e o no n e h a n d ,d u r i n gr e c e n ty e a r s , t h ew o r l dd or e s e a r c ho no b j e c t o r i e n t e d ( t o ) s o f t w a r et e s t i n gal o t ,h o w e v e r ,i t h a sn o tf o r m e daw h o l es e to fag o o dt h e o r yo fs o f t w a r et e s t i n go ft o t e s t i n gy e t t h en e wc h a r a c t e r i s t i c sf r o m0 0 t e c h n i q u eb r i n gn e wc h a l l e n g ef o rt e s t i n g o nt h e o t h e rh a n d ,a u t o m a t i ct e s t i n gi sa b l et oa c c o m p l i s hap l e n t yo fr e p e a t a b l ew o r ki n h i g he f f i c i e n c y w i t hr e g a r dt ot h e s ei s s u e s i nt h i sp a p e rt h ea u t h o rd o e sr e s e a r c hf o r h o wt ob u i l da nt oa u t o m a t i ct e s t i n gf r a m e w o r kf o re n t e r p r i s ej a v aa p p l i c a t i o nt h a t c a nm a k et o t e s t i n gp r o c e s sb ea u t o m a t i ca n df a s t f i r s t l y , a f t e rs u m m a r i z i n gt h ec o m m o na n dt h ed i f f e r e n c ea b o u tt e s t i n gb y c o m p a r i n gt h et r a d i t i o n a ls o f t w a r ew i t ht os o f t w a r e ,t h ea u t h o ra n a l y z e st h en e w i n f l u e n c ec a u s e db yn e wc h a r a c t e r i s t i c so nt ot e s t i n g ,a n dt h e np u t sf o r w a r ds o m e p o i n t sa b o u th o w t ot e s tm o r ee x a c t l ya n d f u l l y b e s i d e s ,t h ea u t h o rm a i n l ye x p l a i n s t h et oa u t o m a t i ct e s t i n gf r a m e w o r k ,a n dt h e na n a l y z e st h e + c o d i n gr u l e sa n d i m p l e m e n tp r i n c i p l e ,i n c l u d i n ge x p e n d i n gs o m ep a r tf u n c t i o n s a tl a s t ,t h ea u t h o r r e a l i z e sa nt oa u t o m a t i ct e s t i n gb ya d o p t i n gap a t t e r no fv s s ( v e r s i o nc o n t r o l l e r ) p l u sa n tq r o j e c tm a n a g e m e a t ) p l u sj u n i t ( i n t e g r a t i o nt e s t i n g ) t h et e s t i n gs y s t e mi s b a s e do nt h ec u r r e n tp o p u l a rt e s t i n gf r a m e w o r kl i k ej u n i ta n dt h ea u t h o r e n c a p s u l a t e s t h ef r a m e w o r k a f t e rd e p l o y i n ga n tt h ea u t h o rc r e a t e sa nt o a u t o m a t i ct e s t i n gf r a m e w o r kb yu s i n ga n tt ob u i l do rt e s tr a p i d l y t h e n ,t h ea u t h o r p u tt h es o u r c ec o d ei n t ov s sw h i c hi sak i n do fv e r s i o nc o n t r o l l e rs ot h a ti tc a n s t a r t u pt h ea u t o m a t i ct e s t i n gt o o lt ot e s t i n gt h ep r o d u c tc o d eb yt h ec o n t i n u o u s i n t e g r a t i o nt 0 0 1 t h ea u t h o rb e l i e v e st h er e s e a r c hi nt h i sp a p e rh a sac e r t a i nr e f e r r i n gv a l u e so n 0 0a u t o m a t i ct e s t i n g k e y w o r d s :o b j e c t o r i e n t a t e d ,a u t o m a t i ct e s t i n g ,t e s t i n gf r a m e w o r k ,j u n i t ,a n t ,v s s i i 西北工业大学硕七学位论文 第章绪论 第一章绪论 本章首先介绍论文的研究背景、软件测试的发展及相关理论,接着描述了 面向对象测试理论的发展前景、论文的研究意义和研究内容,最后给出论文工 作安排。 1 1 论文研究背景 1 1 1 软件测试的发展 在信息化建设当中,软件功能薄弱、漏洞众多等问题频频出现,软件质量 理所当然地成为了关注焦点。业界专家认为,不成熟的软件产品是国内信息化 项目失败的一个重要原因,同时,产品质量问题也将成为软件企业能否继续发 展壮大的关键所在。纵观国内和国外的软件产业,技术上的差距当然是存在的, 但更为明显的也是致命的差距就在于产品质量和过程当中的质量控制。软件质 量差、软件成本难以控制、可靠性不能保证等等一系列的问题让软件开发人员 不得不考虑如何来解决这些困难和混乱。 随着软件产业化的发展,人们对软件的质量、成本和进度提出了较高的要 求。质量的控制已经不再是传统意义上的软件测试。传统的软件测试是基于代码 运行的,只有在软件开发的后期才能介入。然而,产业界( 如t r w 、n i p p o ne l e c t r i c 和m i t r ec o r p 以及其他一些公司) 的大量研究表明【1 1 ,设计活动引入的错误占软 件过程中出现所有错误( 和最终的缺陷) 数量的5 0 6 0 。i b m 的研究结果表 明,假定在分析阶段发现的错误其改正成本为1 个单位的话,那么在测试之前 ( 设计编码阶段) 发现一个错误的修改成本约为6 5 个单位,在测试时( 集成 测试,系统测试和验收测试) 发现一个错误的修改成本约为1 5 个单位,而在发 布之后( 已经交到用户手上) 发现一个错误的修改成本约为6 0 到i 0 0 个单位。 同样该比例也适用用于发现一个错误需要的时间。我们可以看图卜1 中的两条曲 线走向【;l 】: 两北工业大学硕士学位论文 第一章绪论 图卜l 缺陷修改成本趋势图 i b m 的研究结果还表明:缺陷存在放大趋势。如果在需求阶段漏过一个错误, 该错误可能会引起1 1 个设计错误,n 成为放大系数。一般而言,不同阶段其n 不同。 经验表明,从概要设计到详细设计的错误放大系数大约为1 5 ,从详细设计到编 码阶段的错误放大系数大约为3 。图卜2 表示了缺陷放大模型的大致状况。 图1 - 2 缺陷放大模型图 因为有上面这些内在因素的制约,就不难想象为什么很多软件产品在其开 发过程中投入了大量的时间和金钱在没完没了的系统测试上,而最后得到的产品 却依然是低质量的软件。 1 1 2 面向对象软件测试的发展 自8 0 年代以来,面向对象技术迅速发展,获得了越来越广泛的应用。丽 向对象技术是种全新的软件开发技术,正逐渐代替被广泛使用的面向过程开 发方法,被看成是解决软件危机的新兴技术。面向对象技术产生了更好的系统 结构,更规范的编程风格,极大地优化了数据使用的安全性,提高了程序代码 的重用,一些人就此认为面向对象技术丌发出的程序无需进行测试。应浚看到, 尽管面向对象技术的基本思想保证了软件应该有更高的质量,但实际情况却并 , 西北工业大学硕士学位论文 第一章绪论 非如此,因为无论采用什么样的编程技术,编程人员的错误都是不可避免的, 而且由于面向对象技术开发的软件代码重用率高,更需要严格测试,避免错误 的繁衍。因此,软件测试并没有因为面向对象编程的兴起而丧失掉它的重要性。 从1 9 8 2 年在美国北卡罗来纳大学召开首次软件测试的正式技术会议至今, 软件测试理论迅速发展,并相应出现了各种软件测试方法,使软件测试技术得 到极大的提高。然而,一度实践证明行之有效的软件测试对面向对象技术开发 的软件多少显得有些力不从心,尤其是面向对象技术所独有的多态,继承,封 装等新特点,产生了传统语言设计所不存在的错误的可能性,或者使得传统软 件测试中的重点不再显得突出,或者使原来测试经验认为和实践证明的次要方 面成为了主要问题i 。 例如:对于函数 y = f u n c t i o n ( x ) ; 在传统的面向过程程序中,你只需要考虑一个函数( f u n c t i o n 0 ) 的行为特 点,而在面向对象程序中,你不得不同时考虑基类函数( b a s e :f u n c t i o n 0 ) 的 行为和继承类函数( d e r i v e d :f u n c t i o n 0 ) 的行为。 面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集 成测试所要求的逐步将开发的模块搭建在一起进行测试的方法已成为不可能。 而且,面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同以往的 要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。 对于这种情况,我们一方面可以借鉴一些传统的软件测试方法,如黑盒测试法, 在它们的基础上加以改进,使之能够应用于面向对象的测试;另一方面也可根 据面向对象软件自身的特点,运用软件工程技术,创造出一套全新的测试方法。 同时,传统的澳4 试模型对面向对象软件已经不再适用。针对面向对象软件的开 发特点,应该有一种新的测试模型。 1 1 3 自动化测试技术介绍 软件测试的工作量很大( 掘统计,会用到4 0 的开发时间;一些可靠性要 求非常高的软件,测试时间甚至占到总开发时间的6 0 ) ,但测试却是在整个软 件过程中极有可能应用计算机进行自动化的工作,原因是测试的许多操作是重 复性的、非智力创造性的、需要集中注意力的工作。计算机就最适合于代替人 类去完成这些任务。企、i p 在这方面的投资,会对整个开发工作的质量、成本、 和周期带来非常明恩的效果。软件测试自动化,已经成为国内软件1 :程领域一 两北工业大学硕士学位论文 第一章绪论 个众所周知的课题,不言而喻,软件测试从业者都意识到软件测试这项工作走 向成熟化、标准化的一个必经之路就是要实施自动化测试。 软件自动化测试的出现,缩短了软件的开发周期,同时节约了人力物力, 保证了软件的质量;尤其,自动化测试提高了过程管理的质量,同时节省了用 于产生统计数据的时间。 在面向对象测试过程中,同样要用到自动化测试,自动化测试和手工测试 的结合,能大大提高了软件测试的效率,减少了开发的费用。所以,在开发中 的产品达到一定程度的时候,就应该开始进行测试的自动化。这种做法能使软 件的开发周期大大缩短,减少了软件开发的费用,提高的软件的质量。 1 2 论文的研究目的和意义 在面向对象的软件开发占主流的今天,人们越来越意识到测试在软件开发 过程中的重要性。做好软件测试,尤其是面向对象的软件测试,是非常不容易 的。近年来,国内外对面向对象软件测试进行了大量的研究,但目前该领域还 处于百家争鸣的阶段,尚未形成一套较为成熟与完善的软件测试理论与方法, 所以有必要开展面向对象软件测试技术的研究。与此同时,测试软件是一项艰 苦的工作。绝大多数的软件在发布之前要经过一个“编码一测试一修复”的过 程,这是一个多次重复的过程。正是由于测试工作在软件开发的整个过程中居 于极为重要的位置,而人工测试又特别困难,所以测试过程的自动化已成为测 试发展的必然方向。故作者制定这个论文题目,旨在通过论文的完成过程来掌 握面向对象软件的自动化测试技术,通过使用一个好的自动测试工具不但可以 满足科学测试的基本要求,而且可以缩短产品开发的整个生命周期,节约大量 的时间、成本、人员和资源,并且使产品的变更易于验证和受控。同时测试脚 本可以重复利用,包括被不同的项目所利用。 1 3 论文的研究内容和组织结构 1 , 3 1 论文的研究内容 本论文研究了软件测试的基础理论以及一些基本的软件测试技术,在此基 础上结合面向对象软件的特点,分析了面向对象软件的特点对软件测试的影响 及其给软件测试提山的难题;然后重点研究了面向对象新特性给软件测试带来 4 曲北工业人学硕士学位论文 第一章绪论 的影响并提出了新的测试要求;另外,本文在全面剖析面向对象自动化测试框 架的基础上,对其进行扩展和封装,来开发一个新的用于企业j a v a 开发的自 动化测试框架,通过持续集成工具来进行持续、频繁、高效地自动化测试,从 而使得开发出的软件产品质量更高,更有利于维护和扩展。 1 3 2 论文的主要工作 1 、比较了传统软件测试和面向对象软件测试的相同和不同,分析了面向 对象软件特点及其对软件测试的影响,提出了一些相关的测试观点。 2 、结合目前比较成熟的自动化测试框架如j u n f f 测试框架,在其基础上进 行封装,架构一个用于企业j a v a 开发的新的面向对象自动化测试框架,并且 研究该应用框架下的设计模式以及重构技术,保证该框架的弹性扩展。 3 、基于研究和设计的面向j a v a 开发的测试框架,用u m l ( 统一建模语 言) 进行建模,开发一个工具用于和该面向对象测试框架的集成。 4 、对软件测试自动化技术进行了研究,结合自动创建工具a n t 和 c v s ( c o n c u r r e mv c r s i o ns y s t e m ) 或v s s ( v i s u a ls o u r c c s a f c ) 等源代码版本控制工 具进行软件的自动化单元测试,使前面提出的面向对象测试框架具有自动化的 特性。 1 3 3 论文的组织结构 第一章绪论。介绍了论文研究的问题背景,包括软件测试的发展状况、 面向对象软件测试和自动化测试的理论基础,以及论文的研究内容和章节安排。 第二章传统软件测试。这一章阐述了软件测试的基本理论和技术,涉及 了测试原则、测试模型和测试方法等基本理论知识。 第三章面向对象的软件测试。本章分析研究了面向对象软件测试的特点 和这些新特点给软件测试所带来的影响,通过与传统软件测试的比较,提出了 面向对象自身的测试方法、测试技巧,以及测试原则。 第四章面向对象自动化测试框架。本章着重围绕当今j a v a 世界最为流行 的自动化单元测试框架j u n i t 来进行展开的。深入分析了j u n i t 框架的结构原理, 核心测试思想和测试流程,并根据该理论该框架完成了一项自动化测试任务。 第五章基于j a v a 开发的新的自动化测试方案的研究与设计。在这一章给 出了新的自动化测试框架,即以j u n i t 测试框架为基础,进而对其部分功能进 西北工业大学硕十学位论文第一章绪论 行扩展,结合a n t 这个开源创建工具以及持续集成工具c r u i s e c o n t l o l 来进行频 繁、高效的自动化测试。 第六章结束语。阐述对论文工作的总结和对后续工作的展望。 旦苎兰:业大学硕士学位论文 第二章软件测试的基本理论和测试方法 ! _ _ = = _ = ! e = = = 目_ _ l _ _ _ _ _ 自_ 自日自e ! = = 一 第二章软件测试的基本理论和测试方法 本章详细叙述了传统软件测试的一些基本理论,包括软件测试的测试目的 和多年来积累的测试原则等,并且依据不同的软件测试模型分析其各自的优缺 点,从而有助于找到适合具体项目的软件测试模型:接着阐述了软件测试的方 法步骤,并重点讨论了自盒测试和黑盒测试这两种最常见的软件测试方法。 2 1 软件测试的目的和原则 1 9 8 3 年,i e e e 提出了软件工程标准术语,软件测试定义为:“使用人工或 自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需 求或是弄清预期结果与实际结果之间的差别。” 该定义明确提出了软件测试以检验是否满足需求为目标。软件测试不以发 现错误为唯一目的,查不出错误的测试并非没有价值。g r e n f o r dj m y c r s 在其所 著的t h ea r to fs o f t w a r et e s t i n g ) ) 【5 l _ 。书中罗列了以下4 条测试观点: ( 1 ) 软件测试是为了发现错误而执行程序的过程; ( 2 ) 测试是为了证明程序有错,而不是证明程序无错误; ( 3 ) 一个好的测试用例在于它能发现至今未发现的错误; ( 4 ) 一个成功的测试是发现了至今未发现的错误的测试。 由软件测试的定义以及上面的4 条观点,我们总结出了软件测试三条最主 要的目的: ( 1 ) 证明我们所作的是客户所需的; ( 2 ) 确保编码人员正确理解设计的意图: ( 3 ) 通过回归测试来保证目前运行的程序在将来仍然可以正常工作。 接着,我们给出软件测试的1 0 大原则【1 l : 原则l :测试是一个持续进行的过程,而不是一个阶段; 原则2 :测试必须被计划、被控制,并且被提供时间和资源: 原则3 :测试应当分级别; 原则4 :测试应当有重点; 原则5 :测试不是为了证明程序的正确性,而是为了证明程序不能工作; 原则6 :测试是不可能穷尽的,当测试出口条件满足时就町以停止测试; 7 两北工业大学硕士学位论文 第二章软件测试的基本理论和测试方法 原则7 :测试是开发的朋友,不是开发的敌人; 原则8 :测试人员应公f 地测试,如实地记录和报告缺陷; 原则9 :测试自动化能解决一部分问题,但不是全部; 原则1 0 :测试不能仅仅包括功能性的验证,还应当包含性能、可靠性、可 维护性、安全性等方面的验证。 最后,我们给出测试前辈们提出的关于软件测试的1 0 个最佳实践【1 ) : 实践1 :尽早地、频繁地进行测试是降低项目成本,提高质量的一个好方 法: 实践2 :尽早产生一个综合的主测试计划: 实践3 :对质量要求较高或大型复杂的产品成立独立的测试组; 实践4 :在每个开发阶段,使用测试和评价的结果作为是否可以通过的标 准; 实践5 :开发和维护一个测试需求和目标的风险优先级列表; 实践6 :把测试件作为产品的一部分等同管理,使用相同的评价标准和过 程: 实践7 :提供集成化的测试工具和测试基础支持; 实践8 :加强测试度量工作和缺陷分析工作,不断地改进测试; 实践9 :加强测试的培训并且为测试人员提供技能发展的通道; 实践1 0 :加强沟通和交流,让项目组内所有人员都了解测试的工作及其重 要性。 2 2 软件测试模型 通常情况下,一个软件模型说明的内容主要包括:在测试过程中你应该考 虑到哪些问题;如何对测试进行计划,测试要达到什么目标,什么时候开始; 在测试中你要用到哪些信息资源等。一个好的模型可以引导软件开发人员对问 题进行思考,而不好的模型则只能使其误入歧途。 2 2 1 瀑布模型( w a t e r f a l lm o d e l ) 瀑布模型【1 1 】f 1 3 1 将软件生命周期的各项活动规定为依照固定顺序连接的若 干阶段工作,形如瀑布流水,最终得到软件产品。如图2l 所示: 西北j 二业大学硕十学位论文 第二章软件测试的基本理论和测试方法 图2 一l 瀑布开发和测试模型 优点: 强调开发的阶段性; 强调早期计划及需求调查; 强调产品测试。 缺点: 依赖于早期进行的唯一的一次需求调查,不能适应需求的变化; 由于是单一流程,开发中的经验教训不能反馈应用于本产品的过程; 风险往往迟至后期的开发阶段才显露,因而失去及早纠正的机会。 在早期的软件开发中和现在很多简单的软件开发项目中,瀑布式开发模型 应用还很普遍。对于需求简单、目标明确的单一部门级应用软件或大型应用软 件的部分简单模块均可采用此种方式,例如简单的办公软件应用或e r p 模块中 简单、单一的物流、财务、库存软件开发可采用此种模型。 2 2 2 v 模型 v 模型【1 3 】最早由已故的p a u l r o o k 在8 0 年代后期提出,v 模型被包含在英 国国家计算中心文献中发布,旨在改进软件开发的效率和效果。在传统开发过 程中,仅仅把测试过程作为在需求分析、概要设计、详细设计及编码之后的一 个阶段,事实上,v 模型的推出也是针对于此而进行的改进。在瀑布模型中, 确实给人们造成了这样的不良影响,即在很多重要开发活动完成后,测试只是 收尾工作,而不是主要的过程,尽管有时测试会占据项目周期一半的时间,很 多项目主管却仍然还是坚持这么认为。 v 模型的价值在于它非常明确地标明了测试过程中存在的不同级别,并且 清楚地描述了这些测试阶段和丌发过程期恻各阶段的对应关系。v 模型图如图 西北工业大学硕士学位论文 第二章软件测试的基本理论和测试方法 2 2 所示。 番求分橱 、蕊 曩熏设计 骑甑嗣试 誉 系甓i 蹦露 漤 毫废稚嚣 。誉 摹元麓试 ;癸 i ,t 魏 图2 - 2v 模型图 v 模型有以下致命的缺陷,其它模型实际上也与此相似: 忽略了这样的事实情况,即软件开发是由一系列的交接所组成,每一 次交接内容都改交了前一次交接的行为。 依赖于开发文档的存在,及文档的精确性、完整性,并且没有对时间 进行限制。 认定一种测试的设计是依据某一个单独的文档,而不包括根据其前后 阶段的文档的修改而作相应修改。 认定这些依赖于某个单独文档的测试一定要在一起执行。 躺 - 最。麓瓢 蟊。霸 两北工业大学硕士学位论文 第二章软件测试的基本理论和测试方法 2 2 3 x 模型 图2 - 3x 模型图 x 模型【1 3 l 的左边描述的是针对单独程序片段所进行的相互分离的编码和 测试,此后将进行频繁的交接,通过集成最终合成为可执行的程序( 右上半部 分) ,这些可执行程序还需要进行测试。已通过集成测试的成品可以进行封装并 提交给用户,也可以作为更大规模和范围内集成的一部分。多条并行的曲线表 示变更可以在各个部分发生。 由上图2 3 可见,x 模型还定位了探索性测试( 右下方) 。这是不进行事 先计划的特殊类型的测试,诸如“我这么测一下结果会怎么样? ”,这一方式 往往能帮助有经验的测试人员在测试计划之外发现更多的软件错误。 2 3 软件测试的基本方法 软件测试的方法和技术是多种多样的。对于软件测试技术,可以从不同的 角度加以分类: 1 、按测试阶段分: 2 、按测试状态分: 3 、按测试方向分: 4 、按测试方法分: 需求测试、单元测试、集成测试和系统测试 静态测试和动态测试; 正向测试和反向测试; 白盒测试和黑盒测试。 西北工业大学硕士学位论文 第二章软件测试的基本理论和测试方法 2 3 1 测试的过程及组织 当设计工作完成以后,就应该着手测试的准备工作了。一般来讲,由一位 对整个系统设计熟悉的设计人员编写测试大纲,明确测试的内容和测试通过的 准则,设计完整合理的测试用例,以便系统实现后进行全面测试。 在实现小组对所开发的程序验证后,提交测试小组,由测试负责人组织测 试,测试一般可按下列方式组织: 1 、首先,测试人员要仔细阅读有关资料,包括规格说明、设计文档、使 用说明书及在设计过程中形成的测试大纲、测试内容及测试的通过准则,全面 熟悉系统,编写测试计划,设计测试用例,作好测试前的准备工作。 2 、为了保证测试的质量,将测试过程分成几个阶段【8 | ,即:单元测试、集 成测试、确认测试和系统测试。测试过程如图2 4 所示: 图2 4 软件的测试过程 ( 1 ) 单元测试 单元测试集中在检查软件设计的最小单位模块上,通过测试发现实现 该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。 由于模块规模小、功能单一、逻辑简单,测试人员有可能通过模块说明书和源 程序,清楚地了解该模块的i o 条件和模块的逻辑结构,采用结构测试( 白盒 法) 的用例,尽可能达到彻底测试,然后辅之以功能测试( 黑盒法) 的用例, 使之对任何合理和不合理的输入都能鉴别和响应。高可靠性的模块是组成可靠 系统的坚实基础。 ( 2 ) 集成测试 集成测试足将模块按照设计要求组装起来同时进行测试,主要目标足发现 西北工业大学硕士学位论文 第二章软件测试的基本理论和测试方法 与接口有关的问题。如数据穿过接口对可能丢失;一个模块与另一个模块可熊 有由于疏忽的问题而造成的有害影响;把子功能组合起来可能不产生预期的主 功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结 构可能有错误等。 ( 3 ) 确认测试( 验收测试) : 确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集 成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误 也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的 任务,即软件的功能和性能如同用户所期待的那样。 ( 4 ) 系统测试 系统测试是将通过测试确认的软件,作为整个基于计算机系统的一个元 素,与计算机硬件、外设、支持软件、数据和人员等其他系统元素组合在一起, 在实际运行( 使用) 环境下对计算机系统进行一系列的集成测试和确认测试。 由此可知,系统测试必须在目标环境下运行,其作用在于评估系统环境下的软 件性能,发现和捕捉软件中潜在的错误。 经过上述的测试过程对软件进行测试后,软件基本满足开发的要求,测试 宣告结束,经验收后,将软件提交用户。 2 3 2 测试的方法 1 、白盒测试( w h i t eb o xt e s t i n g ) 白盒测试【3 1 也称为结构化测试、基于代码的测试,是一种澳4 试用例设计 方法,它从程序的控制结构导出测试用例。它是根据软件产品的内部工作过程, 检查内部操作,以确认每种内部操作符合设计规格要求。白盒测试把测试对象 看作一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息来设 计或选择测试用例,对程序所有的逻辑路径进行测试。通过在不同点检查程序 的状态来了解实际的运行状态是否与预期的一致。所以,白盒测试是在程序内 部进行,主要用于完成软件内部操作的验证。 自盒测试的基本原则是: ( 1 ) 保证一个模块中的所有独立路径至少被使用一次; ( 2 ) 对所有逻辑值均需测试t r u e 和f a l s e ; ( 3 ) 在上下边界及可操作范围内运行所有循环: ( 4 ) 检查内部数据结构以确保其有效性。 西北工业大学硕士学位论文 第二章软件测试的基本理论和测试方法 2 、黑盒测试( b l a c kb o xt e s t i n g ) 黑盒钡l 试p j 注重于测试软件的功能性需求,也即黑盒测试使软件工程师派 生出执行程序所有功能需求的输入条件。黑盒测试是对软件已经实现的功能是 否满足需求进行测试和验证。黑盒测试完全不考虑程序内部的逻辑结构和内部 特性,只依据程序的需求和功能规格说明,检查程序的功能是否符合它的功能 说明。所以,黑盒测试是在软件接口处进行,完成功能验证。黑盒测试只检查 程序功能是否按照需求规格说明书的规定j 下确使用,程序是否能适当地接收输 入数据而产生正确的输出信息并且保持外部信息( 如数据库或文件) 的完整性。 黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错 误。 黑盒测试主要诊断功能不对或遗漏、界面错误、数据结构或外部数据库访 问错误、性能错误、初始化和终止条件错。黑盒测试方法主要有等价类划分法、 边界值分析法、错误推测试法、因果图等,主要用于软件确认测试。 自盒测试在测试的早期采用,而黑盒测试主要用于测试的后期。黑盒测试 故意不考虑控制结构,而是注意信息域。黑盒测试用于回答以下问题: ( d 如何测试功能的有效性? ( 2 ) 何种类型的输入会产生好的测试用例? ( 3 ) 系统是否对特定的输入值尤其敏感? ( 4 ) 如何分隔数据类的边界? ( 5 ) 系统能够承受何种数据率和数据量? ( 6 ) 特定类型的数据组合会对系统产生何种影响? 2 4 本章小结 本章着重介绍了软件软件测试的相关理论和技术。当我们在学习这些软件 测试知识的同时,我们可以发现有些理论仍可以拿来为面向对象软件测试所应 用,而有些理论则不再适合,需要我们思考和研究。 1 4 西北工业大学硕士学位论文 第三章面向对象的软件测试 第三章面向对象的软件测试 本章从面向对象所带来的新特性出发,提出了测试问题和测试技巧,并且 构建了面向对象的软件测试模型,最后阐述了自动化测试的相关理论。 3 1 面向对象新特性的测试分析 从2 0 世纪8 0 年代开始,丽向对象技术与方法已经受到广泛的重视。人们 对面向对象技术的研究已经遍及到计算机软件和各个应用领域。面向对象软件 开发方法被认为是开发大型、复杂软件且保证软件可靠性的一种有效方法,然 而面向对象的继承性、封装性、多态性和动态连接等特性却给测试提出了新的 要求,它使面向对象程序设计比传统语言程序设计产生错误的可能性增大,也 使得软件测试的重点发生了改变,原来的测试经验和实践证明不一定完全行得 通。 我们要研究面向对象的软件测试,就得首先研究一下面向对象技术的概念 和特点,看看这些概念的哪些特征会影响到软件的测试,从而对面向对象的测 试有更好的把握与实施。 下面我们从测试的角度来分析面向对象的新引入的特性【2 】: l 、对象 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单 位。一个对象由一组属性和对这组属性进行操作的一组服务组成。对象是一个 可操作的实体,它既包含了特定的数据,也包含了操作这些数据的代码。 对象是软件开发期间测试的直接i i 标。在程序运行时,对象的行为是否符 合它的说明规定,该对象与它相关的对象是否协同工作,这两方面是面向对象 软件测试所关注的焦点。 关于对象,从测试的角度看,我们认为: ( 1 ) 对象的封装:这使得已定义的对象容易识别,在系统中容易传递,也 容易的操作。 ( 2 ) 对象隐藏了信息:这一点使得对象信息的改变有时很难观察到,因此 也使得测试结果检查的难度加大。 ( 3 ) 对象的状态:在对象的声明周期中,对象都有一个状态。对象的状态 1s 匿北工业大学硕士学位论文 第三章面向对象的软件测试 是多变的,因此也可能是不正常行为的根源。 ( 4 ) 对象的生命周期:对象都有生命周期。在对象生命周期的不同阶段, 为了确定对象的状态是否符合它的生命周期,对象可能会被从各个方面进行检 测。过早的创建一个对象或过早的删除一个对象,都是造成错误的常见原因。 对象中的数据和方法是一个有机的整体,测试过程中不能仅仅检查输入数 据产生的输出结果是否和预期的一样,也还要检查对象的状态是否转换为预期 的设想。图3 - 1 显示了传统软件模型与面向对象模型的不同: 传统软件测试模型 面向对象类的测试模型 图3 1 传统软件模型与面向对象模型的比较 2 、消息 消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象 标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。 关于消息,从测试的角度看,我们认为: ( 1 ) 消息有其发送者:发送者可以决定何时发送消息,并且可能会做出错 误的决定。 ( 2 ) 消息有其接收者:接收者可能接收到非预期的特定消息。当它接收到 条非预期的消息时,接收者可能会对此做出不正确的反应。 ( 3 ) 消息可能包含有实际参数:在处理一条消息时,参数能被接收者使用 更改。如果传递的参数是对象,那么在消息被处理前和处理后,对象必须处于 正确的状态,而且它们必须实现接收者所期望的接口。 3 、接口 接l _ _ 】是行为声明的集合。行为被集中在一起,并通过单个的概念定义一些 相关的动作。 ( 1 ) 接口封装了操作的说明。这些说明逐步形成了诸如类这种形式的更大 分组的规范。如果这一接u 包含的行为和类的行为不相符,那么对这一接口的 西北工业大学硕士学位论文 第三章面向对象的软件测试 说明就不是令人满意的。 ( 2 ) 接口不是孤立的,它与其它的接口和类有一定的关系。一个接口可以 指定个行为的参数类型,使得实现该接口的类可被当作一个参数进行传递。 4 、类 类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提 供了统一的抽象描述,其内部包括属性和服务两个主要部分。在编写面向对象 的程序时,我们更愿意把类本身看作一个集合而不是单个的,明白这一点使得 我们能更清楚类的作用。 类测试是所有测试过程中的一个重要方面,因为面向对象程序主要是由类 构成的,类是所有实例共性的一种抽象。在类测试过程中要保证测试那些具有 代表性的错误原因。 关于类,从测试的角度看,我们认为: ( 1 ) 类的说明包含用来构造实例的一些操作,这些操作也可能会导致不正 确的初始化新实例的属性。 ( 2 ) 类在定义自己的行为和属性时,也依赖于跟它共同协作的其它类。如 果在类的定义中使用了包含有不正确实现的其它类,这就会使类发生错误。 ( 3 ) 类的实现必须满足类本身的说明,但并不保证说明就是正确的。类实 现也可能不遵循更严格的要求,比如满足设计原则等,或者它也可能会不正确 的简化底层的概念模型。 ( 4 ) 类的实现也可能不支持所有要求的操作,或者执行一些错误的操作。 类需要指定每个操作被执行之前应满足的条件。在发送者发送一条消息之前, 它也可能不提供检查前置条件的方法。 8 、继承 继承实际上是存在于面向对象程序中两个类之间的一种关系。当一个类拥 有另一个类的所有数据和操作,就称这两个类之间具有继承关系。被继承的类 称为父类或超类,继承了父类或超类的所有数据和操作的类称为子类。 关于继承,从测试的角度看,我们认为: ( 1 ) 继承提供了一种机制,通过这种机制,潜在的错误能够从一个类传递 到它的派生类中。测试类的时候要尽早消除这种错误,以免这些错误一并传递 到其它类中。 ( 2 ) 继承还提供了另一种机制,这种机制能使我们重复使用相同的测试方 法。因为子类是从它的父类继承过来的,所以子类也就继承了父类的说明郡实 现。因此我们也就可以用测试父类的方法对子类进行测试。 两北工业大学硕士学位论文 第三章面向对象的软件测斌 6 、多态 对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以 具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类 及其各个特殊类中具有不同的语义。例如:“几何图形”的“绘图”方法,“椭 圆”和“多边形”都是“几何图”的子类,其“绘图”方法功能不同。 包含多态是同一个类具有不同表现形式的一种现象。面向对象的编程语言 对包含多态的支持( 也有人把这种支持叫做动态绑定) ,使得参数具有对象替换 的能力。为了响应操作请求,当对象的定义与后续对象的定义相符时,对象就 可以被相互替换。换句话说,面向对象程序中的发送者能够在用对象作为参数 时根据接口进行实现,而不是实现一个完整的类。 关于包含多态,从测试的角度看,我们认为: ( 1 ) 包含多态允许系统通过增加类来进行扩展,而不是修改已经存在的类。 当然在扩展中也会出现出乎预料的交互关系。 ( 2 ) 包含多态允许任何操作都可以包括一个或多个类型不确定的参数,这 样就增加了应该测试的实际参数的种类。 ( 3 ) 包含多态允许操作指定动态引用返回的响应,因为实际引用的类可能 是不正确的,或者不是发送者所期望的。 还有一种是参数多态。参数多态是能够根据一个或多个参数来定义一种类 型的能力。 关于参数多态,从测试的角度看,我们认为: 参数多态支持不同类型的继承关系。如果模板仅用来初始化单个实例的 话,就不能保证它和其它类很好地协作。因为模板的代码可能已经假定正确的 实现了诸如拷贝或删除对象之类的操作,而这些在核对时就应该作检查。也有 可能要编写模板驱动来测试模板的各个部分。 3 2 面向对象软件的测试问题 传统的软件测试策略是从“小型测试”开始,逐步走向“大型测试”。即 我们从单元测试开始,然后逐步进入集成测试,最后是有效性和系统测试。在 传统应用中,单元测试集中在最小的可编译程序单位子程序( 如,模块、子 例程、进程) ,一旦这些单元均被独立测试后,它被集成在程序结构中,这时要 进行一系列的回归测试以发现山于模块的接口所带来的错误和新单元加入所导 致的负作用,最后,系统被作为个整体测试以保证发现在需求中的错误。 西北工业大学硕士学位论文 第三章面向对象的软件测试 面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集 成测试所要求的逐步将开发的模块搭建在起进行测试的方法已成为不可能。 而且,面向对象软件【6 j 抛弃了传统的开发模式,对每个开发阶段都有不同以往 的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结 果。因此,传统的测试模型对面向对象软件已经不再适用。 l 、面向对象测试模型 面向对象的开发模型突破了传统的瀑布模型,将开发分为面向对象分析 ( o o a ) ,面向对象设计( o o d ) ,和面向对象编程( o o p ) 三个阶段。针对这 种开发模型,结合传统的测试步骤的划分,我们把面向对象的软件测试分为: 面向对象分析的测试,面向对象设计的测试,面向对象编程的测试,面向对象 单元测试,面向对象集成测试,面向对象系统测试。 测试模型如图3 2 所示: 面向对象系统测试 面向对象集成测试 面向对象 单元测试 面向对象面向对象 面向对象 分析测试设计测试 编程测试 面向对象 面向对象面向对象 分析测试 设计测试编程测试 图3 - 2 面向对象的测试模型 2 、面向对象分析的测试( o o a ) 传统的面向过程分析是一个功能分解的过程,是把一个系统看成可以分解 的功能的集合。这种传统的功能分解分析法的着眼点在于一个系统需要什么样 的信息处理方法和过程,以过程的抽象来对待系统的需要。而面向对象分析是 “把e r

温馨提示

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

评论

0/150

提交评论