(计算机应用技术专业论文)基于测试驱动开发的软件测试管理系统的研究.pdf_第1页
(计算机应用技术专业论文)基于测试驱动开发的软件测试管理系统的研究.pdf_第2页
(计算机应用技术专业论文)基于测试驱动开发的软件测试管理系统的研究.pdf_第3页
(计算机应用技术专业论文)基于测试驱动开发的软件测试管理系统的研究.pdf_第4页
(计算机应用技术专业论文)基于测试驱动开发的软件测试管理系统的研究.pdf_第5页
已阅读5页,还剩57页未读 继续免费阅读

(计算机应用技术专业论文)基于测试驱动开发的软件测试管理系统的研究.pdf.pdf 免费下载

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

文档简介

摘要摘要本文主要讲述了测试驱动开发( t d d ) 的理念和相关理论,并结合工程实际开发,从数据库服务层和g u i 图形用户界面两个方面,阐明了如何进行测试设计。本文首先介绍了敏捷软件开发过程的基本概念和理论,之后着重介绍了极限编程的理论和发展状况。对于软件测试管理系统进行了较为详细的需求分析,结合系统开发的实际,提出了保证系统质量的测试驱动开发方法( 极限编程最佳实践之一) 。在对测试驱动开发进行了介绍之后,从系统的数据服务层和g u i图形用户界面两大部分,举例讲述了如何使用测试驱动开发方法进行测试设计和编码的工作过程。最后针对本系统的应用,讨论了使用t d d 方法上进行扩展和完善的方法以及一些重要的技术难点。文章附录了相关领域的一些研究热点,探讨了本课题在相关热点领域进行深入研究的可能性。关键词:软件测试测试驱动开发,数据库服务层,g u i基于测试驱动开发的软件测试管理系统的研究a b s t r a c tt h i st h e s i si n t r o d u c e st h et h e o r i e so fa g i l es o f t w a r ep r o c e s sa n de x t r e m ep r o g r a m m i n g ,a n dt h ed e s i g no ft e s to fd a t aa c c e s sl a y e ra n dg u i ,w h i c ha r et w oi m p o r tp a r t so fz m n t e s t i n g m a n a g e m e n t s y s t e m t h i st h e s i sd e s c r i b e st h eh a s i cc o n c e p t sa n dt h e o r i e so fa g i l es o f t w a r ep r o c e s sa tf i r s t a n dt h e n ,i td e s c r i b e st h et h e o r i e so fe x t r e m ep r o g r a m m i n g a f t e ri ti n t r d u c e st h ez m ns y s t e ms t r u c t u r ea n dz e q u i r e m e n ta n a l y s i s i tb r i n g sf o r w a r dan e wd e v e l o p m e n tm e t h o d t e s t d r i v ed e v e l o p m e n t i tt h e nd e s c r i b e st h et h e o r yo ft d d a 1 s ot h i st h e s i sg i v e ss o m et y p i c a le x a m p l e so fh o wt od e s i g nt e s to fd a t aa c c e s sl a y e ra n dg u ti nd e t a i l i nt h ee n d ,t h i st h e s i sd i s c u s s e ss o m ei m p o r t a n tt e c h n i q u em e t h o d so ft d dt oe x p a n dt mss y s t e m s o m eh o tt o p i c si nr e l a t e da r e a sa r em e n t i o n e di qt h i st h e s i s t h ep r o s p e c to fi m p l e m e n t i n gt h e s tn e wi d e a sa n dm e t h o d o l o g i e si sa l s od i s c u s s e d k e y w o r d s :s o f t w a r et e s t i n g ,t e s t d r i v ed e v e l o p m e n t ( t d d )d a t aa c c e s sl a y e r ,g u i3第一章引言第一章引言航天技术是现代科学技术中发展展快的高技术之一。它将人类活动的领域扩展到太空,使人类认识自然和利用外层空间的能力发生了质的飞跃。航天技术是一项复杂的系统工程,它应用了现代科学技术众多领域的最新成就,是科学技术与国家基础工业紧密结合的产物,是一个国家科学技术水平年【i 工业水平的重要标志。航天技术已经和将要给人类带来的巨大变化,是科学技术史上任何事件都难以相比的。随着计算机软件技术的发展,嵌入式软件越来越广泛的应用于各种系统之中。其规模越来越大,功能也日益复杂。对于应用于航天的专用嵌入式软件,对于软件的质量要求更高,而且由于航天设备的嵌入式软件要运行在太空,其物理环境也是影响软件可靠性的重要因素,因此,软件测试的工作也就尤为重要。传统的软件测试基本上是靠测试人员进行反复的手工操作完成,测试过程往往要重复进行很多次,以确认软件的正确性,因而这样的测试方法往往消耗大量的时间,而且由于人工操作在定程度上具有不可重复性。目前,国内外市场上有刁i 少软件测试和软件配置管理工具的商用软件,嵌入式软件的测试工具多为独立软件的、“插桩式”的白盒测试工具,并且不能直接与配置管理结合:对系统级和集成系统的测试一般需专门定制,因而难以应用已有的经验数据。我们开发的啄木鸟软件测试管理系统( 以下简称z 淋) 就是在上述需求上诞生的一个自动化测试软件。系统的设计目标是集软件测试流程控制和软件测试项目管理为体的系统;系统可将制定测试大纲、测试计划、编写测试用例、实施测试直至产生测试报告的过程全部纳入数据库系统,以便对测试过程、被测项目进行追踪管理;系统可同时针对多个测试对象进行独立测试,可按照指定的测试脚本进行自动测试,并可按照指定格式生成测试文档,随之系统的不断应用,数据库中保存的大量经验数据可重复利用于后续的项目中。如何能够保证z m n 系统本身的质量和高度可靠性是一个摆在开发人员面前的重要课题。由于我们早已认识到测试的重要性,所以系统本身的测试工作也就尤为重要。为了得到一套完整的,可重复的,自动的测试,我们选择了测试驱动开发( 以下简称t d d ) 这种全新的开发方法对系统中一些关键的,容易出错而不易测试的部分进行开发。7基于测试驱动开发的软件测试管理系统的研究本文主要论述了测试驱动开发的相关理论,然后从数据库服务层和图形用户接口( g u i ) 两个重要方面针对系统设计了测试,并根据测试设计出了可运行代码。本文第二章简要介绍了与t d d 相关的软件工程。t d d 是极限编程的最佳实践之一。而极限编程是属于现在正蓬勃发展的敏捷开发方法的一种。第三章主要介绍了整个z m n 系统的功能需求,总体规划和系统结构设计。第四章结合系统的需要,提出了t d d 方法,并对方法及其测试框架做了介绍。第五章讲述了如何使用t o o 方法,为系统的数据服务层进行测试设计和开发。第六章讲述了如何使用t d d 方法,为系统的g u i 进行测试设计和开发。第七章进行了总结和讨论了日后测试设计的扩展和完善e第八章是结束语。第二章敏捷开发过程和极限编程第二章敏捷开发过程和极限编程2 、1 敏捷开发过程介绍软件工程自诞生以来,一直试图通过技术和管理的手段来降低软件项目的不确定性。在这个美好的愿望指导下,专家们发明了结构化、发明了面向对象、发明了c m m ,这些新的技术和方法的确有助于“软件危机”的解决,促进了软件业的发展;然而,超支、超时、低质量的老问题并末得到根本解决。随着互联刚时代的到来,面对不断革新的商业需求,为了适应互联网开发要求,产生了敏捷软件开发。敏捷软件过程可能成为最适应软件开发全球化、个性化、快速化、高质量新格局的先进开发模式。2 1 1 软件的敏捷性需求软件开发全球化、个性化、快速化、高质量的新格局向软件过程提出敏捷性需求,主要表现为以下方面:1 快速适应系统需求的变化。软件开发人员常常对需求的变化而抱怨,但是,在当前业务环境中事实常常就是这样。当项目开始时,软件需求可能是不明确的,甚至是不知道的。同时市场和业务的不断变化导致这些需求在开发过程中不断变化。快速地满足客户不断变化的需求,成为软件开发人员的挑战,和软件成功的关键。2 提高软件生产率。软件的发展速度远不如计算机硬件,其生产率长期以来没有显著的跳跃。随着需求日益增大,软件供不应求的现象越来越突出。提高软件生产率,降低软件成本,建立高效的软件过程是软件业的宿愿。3 突出企业自身特点,体现企业核心能力。在全球化经济时代,和其它现代企业一样,每个软件企业必须拥有核心能力,不求全能,但求有特色的、先进的局部优势。这就要求我们应该针对企业特点,发挥企业自身优势和核心能力,开发企业“自己”的软件过程。4 支持动态联盟。当市场上新的机遇出现时,企业常常需要组织相关合作伙伴,以最快的速度将各自的核心能力达成最优组合,即虚拟组织,最终取得双赢( w j n w i n ) 。因此,动态联盟要求软件过程能和其它过程良好集成,是灵活应变和可扩充的。5 面向业务目标持续改进和重组。软件过程必须和企业的业务目标紧密结9基于测试驱动开发的软件测试管理系统的研究合,随着业务的重组和优化,快速灵活地变化及时支持新业务环境下的软件开发模式。同时能依据c m m 等过程标准,不断实践,持续改进,逐步建成成熟的软件过程。2 1 2 敏捷的定义定量软件管理公司( q u a n t i f i c a t i o n a ls o f t w a r em a n a g e r ) 最近在对2 0 0个软件开发项目进行的研究中指出,有将近一半的项目,研究人员无法与晟初的计划进行对比;其原因是:遵照计划不再是完成的主要目标,而变成了交货时( 而不是项目开始时) 满足客户需求。很多项目中,在生命周期中经常会出现的情况是,需求、范围和技术的重大变化超出了开发小组的控制范围。现在的问题不在于如何在项目开始时阻止变化,而在于如何在生命周期中更好的处理不可避免的变化。传统的方法假定,通过足够的努力,可以尽早我出完整的需求,从而消除了变化。降低了成本。丽现在如果早早消除变化则意味着对于项目环境缺乏可伸缩性。同样的,传统的过程管理,试图通过不断的计量、查锫和过程改进,来消除过程中的变化。这一方法假定变化是源于差错,而现在,尽管过程问题肯定会产生一些差错,外部环境变化却会引起重大变更。我们无法消除这些变化,所以降低应对这些变化所需的成本是唯一可行的策略。新的策略不是去消除返工,而是降低其成本。然而,不论是在适应变化中,还是在包容变化中,我们都要注意保证质量a近年来,事实表明,市场需求在不断增长。市场需要并期待着满足需求的、刨新的高质量软件。“敏捷”( a g i l i t y ) 是为了适应日趋激烈的竞争和生存环境而提出的一种新概念,它要求企业通过提高敏捷性从变化的调整中掌握主动并赢得市场。1 9 9 5年,敏捷竞争者与虚拟组织的作者s t e v e n l g o l d m a n ,r o g e r n n a g e l 和k e n n e t h p r e i s s 给敏捷作了以下定义:“敏捷是动态的、与环境有关的、积极包容更改的并且面向成长的;它不是关于提高效率、减少开支或者安全度过可怕的竞争t 风暴的封仓措施;它是关于成功和胜利的:关于在新兴的竞技场上的成功,关于在现在很多公司所害怕的竞争风暴的中心赢得利润、市场份额和客户的胜利。”这一概念在制造业中已被广泛讨论和实践,以敏捷箭造 m m建目户口b、一) 赴日头m 螭* 缓冲e # * 站月女8二:) # p 糊m m i 4* # 目雕* * $ 糙# 口# ri 镕库日$ m * a m ,缸镕m # 目e m 日# 镕b 蕾毽e 培旅备&、) * 自,# 镕* 发# # 户* 口哇程| 二二) n 月越* e将* ”r 拄# 户二:) 4 m # 包图5 2 新建测试用例序列图1 客户端通过用户界面处理用户输入,并在用户点击功能键后把相应命令和数据( 新建测试用例命令以及测试用例相关数据) 打包发送给应用服务器。应用服务器客户端接口线程接收数据并解包和拼包组合成一个完整的消息放入相应的数据服务层的缓冲区( 接收) 中。2 相应的数据服务层读取缓冲区( 接收) 的内容并进行相应的处理( 查询对照表,把客户端请求变为数据库端请求) 。3 数据服务层把对数据库的请求放入数据库接口缓冲区。4 数据库接口线程从数据库接口缓冲区( 发送) 中读出数据库请求,发往数据库服务器,并得到数据库服务器的返回结果。5 数据库接口线程把返回结果放入数据库接口缓冲区( 接收) 。6 数据服务层从数据库接口缓冲区( 接收) 中读出数据并进行处理,并把处理结果放入客户端接口缓冲区( 发送) 。7 客户端接口线程从客户端接口缓冲区( 发送) 中读出数据并打包发往客户端。8 客户端退出并关闭连接,应用服务器终结与该客户端相对应的客户端接口线程、数据服务层以及数据库接口线程并释放相应的缓冲区和关闭相应的内核同步对象。第五章数据服务层测试设计5 2 测试设计步骤这节以新建用户信息为例,说明我们采用测试驱动开发方法设计测试的步骤。5 2 1 建立一个测试数据库确保进行测试的时候使用的是一个完全与正式数据库分离的测试数据库,它与正式数据库非常相似。测试数据库里只包含一些常用参数表,比如设定的数据字对照表。5 2 2 测试数据的建立和清除我们需要每个测试的数据是独立的。我们确保测试不会改变测试数据库的状态,当测试结束后。清除数据,数据库恢复到它原有状态,不会因为测试而改变,这样我们我们就能反复使用这个数据库,而且保证每次测试出现的问题是因为这个测试用例自身,而不受其它测试的影响。使我们在一个连续、真实的测试环境下测试。这就要求我们在每个测试前,对我们需要的数据进行初始化,在每个测试后,对我们测试用到的数据进行清除。在n u n i t 测试框架中,s e t u p 函数在每个测试进行之前调用,t e a r d o w n 函数在每个测试进行之后调用。所以所有要测试的数据都通过每个测试的s e t u p函数建立,当测试结束时,再通过t e a r d o w n 函数清空,使数据库恢复到可重复使用的状态。在同一组测试用例中,我们经常要在每个测试的s e t u p 和t e a r d o w n 函数中都重复写一下s q l 语句,所以建立两个存储过程t e s t s e t u p 和t e s t t e a r d o w n ,分别用于测试数据的建立和清空。存储过程就是将所需要的工作,预先以s q l程序写好,命名后进行保存,以后需要作这些工作时可以使用e x e c u t e 指令来调用,即可自动完成相应任务。建立t e s t s e t u p 存储过程的s q l 语句如下:器攀一瓣茎王型堕望垫墅垄塑堑堡型蔓笪堡墨堕塑竺窒;一j | cj j i :_ _ _ _ _ ”甥烈一i ”量“一ie x e b 罐鹳篝囊董争鞫酾冀鞋曩l 薹二i 薯i j 鍪i 誊萎i 萋婺鬻囊i 誓毒誊i 爱曩篓j。:i j | 一j 1 。;毫一,州l 。“i i 。墨基囊i i - 薹! 薯。i;纛i 二嚣善二瓤。毒j 誊i 藜。i j :i i 馨i 蓦鎏? :i ii童纛麓曩i | 1 ij i :? j 糍:墨ii 重毒瑟i 雾。懑一薯ii;嬖蘩燮銎攀i _ 篓攀攀粪j = 鎏攀薹一”_ _ = i= 一“一t 一囊囊i 毒童j 一。一;一一= 南毒曩鼍蒜算i i 麓爵;誊雩jj蔓”叫引00其中u s p _ n s e r t u s e r 也是一个存储过程,因为在系统中,经常要用到插入用户信息这些s q l 语句,我们也把它们编写成存储过程:4 0第五章数据服务层测试设计建立t e s t j e a r d o w n 存储过程的s q l 语句如下5 2 3 设计测试在t d d 中,是先根据功能需求写测试,然后根据测试写运行代码。这里我们主要是测试系统中新建用户信息这个方法。设计了两个主要测试用例:1 新建一个原来不存在的用户信息。如果添加成功,则能够提取用户信息浏览;如果添加不成功,则抛出意外。2 新建一个原来存在的用户信息。则添加不成功,抛出意外。5 2 4 测试程序的结构1 建立s e t u p 和t e a r d o w n 函数,用于建立和清除测试数据。函数中,我们调用早已准备好的存储过程t e s t s e t u p 和t e s t t e a r o o w n 。s e t u p 函数中:一墓i 霸| i ! :i i i 麟i 荔辆骥照蘩粪套籀垂自i i 冁蓠蒸囊蓉蠢1 1 f ;_ i 薯| 囊l 瀵;绷黼躐继遴豢纂鏊4 1基于测试驱动开发的软件测试管理系统的研究攀;漂赣黧震鬻t e a r d o w m 函数中只需将第二行中改成:l 攀羔c 簇鞴攀襟i 瓣攀麓羹戮攀。薹:攀誊琴攀j :警12 测试a d d u s e r ( ) 。我们设计运行代码应该有个a d d u s e r ( ) 函数。添加用户信息成功,返回有效的u s e i d ,添加用户信息失败则期望产生一个意步 e x c e p t i o n 。所以测试也分为测试成功和测试失败两种情况。插入一个新用户,测试成功:插入一个已经存在的用户,测试失败:3 根据上一步编写的测试代码,我们正式编写运行代码。在5 2 2 节中,我们就说明了我们在数据库系统中有个u s p _ i n s e r t o s e r 存储过程,用来为数据库新添一条用户记录,现在我们就要用到它。第五章数据服务层测试设计4 用n u n i t 钡 试框架运行,测试结果见图5 3我们对程序进行调试后。直到n u n it 测试框架呈现绿色标记,表示运行代码完全测试通过。图5 3 新建用户信息的测试结果5 3 其它存储操作的测试设计上一节对数据库存储操作的一个典型插入操作做了介绍,由此说明t d d 开发的过程。除此,还进行了其它存储操作的测试设计。下面的三节中,同样以4 3基于测试驱动开发的软件测试管理系统的研究用户信息为例,说明查询、修改和删除存储操作的测试设计。把这些测试设计稍加修改,就能得到其它业务逻辑( 如用户权限、u u t 信息、测试大纲、测试用例、测试脚本、b u g 、执行测试指令等) 的存储操作的测试设计。5 3 1 查询用户信息的测试设计设计三个测试用例:1 当测试提取单个用户信息时,设计运行代码有一个g e t u s e r0 方法,如果没有在数据库中查询到此记录,此方法将抛出异常。因此测试方法t e s t g e t u s e r f a il u r e0 期望抛出异常。2r 0方法返回值u s e r i d ,测试将每个提取的字段与期望值比较。采用a s s e r t i o n a s s e r t e q u a l s ( “提示信息”,期望值,提取值)3 当测试提取多个用户信息时,设计运行代码有一个l i s t u s e r s0 方法,这时除了比较每个提取的字段外,还应对比提取记录的个数是否与期望值相符。,_ ,一童0 。譬_? i j二、i一_ 一:- _ j _ 、第五章数据服务层测试设计图5 4 提取用户信息的测试结果5 3 2 修改用户信息的测试设计当测试修改用户信息肘,设计运行代码有u p d a t e u s e r ( ) 方法,在测试中我们利用已经写好的g e t u s e r 0 方法,提取出用户的新信息,与期望值对比。4 5基于测试驱动开发的软件测试管理系统的研究图5 - 5 修改用户信息的测试结果5 3 3 删除用户信息的测试设计当测试删除用户信息时,设计运行代码有d e l u s e r ( ) 方法。在测试中,我常。第五章数据服务层测试设计图5 6 删除用户信息的测试结果5 :4 数据库连接测试设计除了数据库存储操作之外,还有一个也与软件质量息息相关。就是数据库的连接。实践中,经常因为各种情况( 如管理人员密码不正确,或物理上的断开) 导致数据库无法正常连接。测试数据库连接的代码比较简洁,只需判断数据库的状态是否处于连接打开状态。4 7基于测试驱动开发的软件测试管理系统的研究第六章g u i ( 图形用户接口) 测试设计从系统结构中,我们可以看到客户端的图形界面是z m n 系统中非常重要的部分。几乎任何一条指令都是通过客户端输入的。测试人员通过客户端的操作界面,向应用服务器发送具体的指令并等待结果,应用服务器往往要从数据库服务器中提取数据,然后进行分析,生成结果再返回客户端。因此,保证客户端的正常运行是我们软件质量的保证。6 1 客户端概述6 1 1 客户端接口概述z m n 测试管理系统中存在三大接口模块( 客户端、数据库、前端机) 。见图6 一l 。系统使用传统的瘦客户应用服务数据库服务三层体系结构。客户端具有用户接口,提供人机交互界面,完成数据的输入与输出。客户端为普通w i n d o w s应用,是瘦客户端,仅有用户界面,可访问应用服务器的用户逻辑:客户端可以是本地局域的客户端,也可以是远程的客户端。整个系统的网络连接可由t c p i p上层协议w i n s o c k e t 或者自定义的协议来实现。对于客户端主程序,可以分为本地处理和远程处理( 应用层处理) ,本地处理和远程处理的功能都可以通过组件来实现。所有两个节点间通信的繁琐处理都封装在组件中,对于客户端主程序来说,所有的事务就像是本地处理。笙查皇垡墨! 堕堡旦壁旦! 塑堕望生图6 - 1 基于接口的组件设计框图6 1 2 客户端工作过程见图6 - 2 。吉基于测试驱动开发的软件测试管理系统的研究曰匡勇囤巨囤用户名和密码请衷验证消息,窑户端连接信息古用户名和宙码)i申请教据厍i 蜷iil某戢据库连接ll、检索用户名和密码掌索用户g 和密码、li用户名和密码用户名和密码illl:验证通过消息验证通过消息= = _ = l - 一月p 验证- 7图6 - 2 验证用户信息用例序列图1 客户端通过用户界面处理用户输入,并在用户点击功能键后把相应命令和数据( 用户名和密码) 打包发送给应用服务器。应用服务器接口线程接收数据并解包和拼包组合成一个完整的消息放入相应的数据服务层中。2 相应的数据服务层把接收的内容并进行相应的处理( 查询对照表,把客户端请求变为数据库端请求) 。3 数据库接口线程从接口缓冲区中读出数据库请求,发往数据库服务器,并得到数据库服务器的返回结果。如检验通过则给客户端发回确认信息。4 数据服务层从接口缓冲区中读出数据并进行处理5 应用服务器从数据服务层中读出数据并打包发往客户端。6 2m v c 模式概述z 心系统采用用户界面与应用逻辑分开的m v c ( m o d e l - - v i e w - -c o n t r o l l e r ) 模式。m v c 由t r y g v er e e n s k a u g 提出,首先被应用在s m a l l t a l k 一8 0 环境中,是许多交互和界面系统的构成基础。m v c 结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离。m v c 作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定系统各部分问的组织关系。对于界面设计可变性的需求,m v c ( m o d e 卜v i e r c o n t r o l l e r ) 把交互系统的组成分解成模型、视图、控制器三种部件。5 0第六章g u i ( 图形用户接口) 测试设计视图部件把表示模型数据及逻辑关系和状态的信息以特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。控制器部件是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系:它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。模型部件保存由视图显示,由控制器控制的数据:它封装了问题的核心数据、逻辑和功能的计算关系,它独立于具体的界面表达和i 0 操作。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控铷器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化一传播机制。模型、视图、控制器三者之间的关系和各自的主要功能,如图6 3 所示。图6 - 3m v c 组件类型的关系和功能6 ,3g u i 测试设计在m v c 模式下,我们应当确保用户界面接口是松耦合度,与内部执行的逻辑完全区分开来。具体实践中,界面类只负责显示界面工作,简单的使用存取信息的g e t t i n g s e t t i n g 方法。当用户作了一些动作时( 例如按了一个按钮) ,界面类里的e v e n th a n d l e r 的责任就是单单的把这个动作交给应用逻辑的控制类来处理。这样界面类的任务就简单明了不易出错,我们就把测试的重点放在应用层的控制类上。基于测试驱动开发的软件测试管理系统的研究由于控制类要存取用户界面里的信息,但用户界面是不方便加入我们的单元测试进行测试的。因此我们可以利用模拟对象,它与用户界面拥有相同的接口,在测试中可以完成替代用户界面类。我们使用代码自顶向下开发原则,先遵循测试驱动开发由单元测试生成模拟类,用来代替用户界面协助开发控制类,再从模拟类提取出接口生成一个接口类,最后开发用户界面类,使它继承这个接口,开发出接口吻合的用户界面。6 ,3 1 测试用例分为三个测试用例:1 登录成功,用户名和密码都正确,且匹配。在这个测试用例中,v i e w 是运行代码中模拟视图类l o g m o c k v i e w 类的对象。c o n t r o i i e r 是控制类l o g c o n t r o l l e r 类的对象。l o g m o c k v i e w 类的n a m e 和p w d属性只负责传递用户名和密码的值到控制类l o g c o n t r o l l e r 类,而l o g c o n t r 0 1 1 e r 类负责将接受来的输入反馈给数据库进行查询。2 登录不成功,用户名不正确。在这个测试用例中,输入的用户名不正确,所以在数据库里找不到此用户,l o g c o n t r o l l e r 类的l o g i n 方法返回值为0 。由于还有返回给客户端信息说明,所以设置v i e w 对象的e r r o r m e s s a g e 的值为“错误用户名”。3 登录不成功,用户名正确,但密码不正确。j ,静疆s 堪j 誊。蠢j i 露i 蠹i 藜i 瓤囊棼煮= j 羹篱。毒薯誊| 嘉囊譬董j j ; n ?渤渗第六章g u i ( 图形用户接口) 测试设计在这个测试用例中,输入的用户名正确,但密码不正确,l o g c o n t r o l l e r类的l o gj n ( ) 返回值也为0 。由于还有返回给客户端信息说明,所以设置v i e w 对象的e r r o r m e s s a g e 的值为“错误密码”。6 3 2 运行代码设计根据我们的测试代码,设计出来的控制类l o g c o n t r o l l e r 类和模拟界面显示的模拟视图类l o g m o c k v i e w 类。基于测试驱动开发的软件测试管理系统的研究l o g v i e w l l 较简单,我们只需使它具备可以设置和获l 蚴n a m e 、p w d 和i 一6 3 3 测试通过见图6 4 。慧蕊誉蘩鬻攀攀萎i 攀? 童善! 瑟一二纛- - - 萎蠢1 i _ | 1 7i 蒸鏊鬻灌鬻鬻鬻攀笺;藏囊譬;萋嚣蠹鬈磐羹鍪j 。麓鬻黪。誊蠢:蔓董、嚣j 曩臻委? i ljg 麟i 黧黧誉。鬻紧一薯曩蠹麓。譬i ,i | | 器鬟麓誊鬻囊辫磐j 量一薹萎学j 曩强i 蔓誊麟鬻爹辫豢i 黧。黧辫i 露鬻蠹冀豢纛嚣鬻誊i 雾薹溱溪1,0j嚣;:攀蒸第六章g u ( 图形用户接口) 测试设计6 3 4 提炼接口图6 4 用户登录的测试结果有了这个接口类,我们把在控制类里面用到l o g m o c k v i e w 的代码,改成使用i l o g v i e w 。然後,我们就可以修改l o g m o c k v i e w ,使它执行这个i l o g v i e w 。重构代码以后,我们再执行一下我们的单元测试,确保我们代码的正确性。6 3 5 生成界面如果所以测试都通过了,我们就可以很容易的写一个w i n d o w sf o r m 的用户界面类,此类执行我们的接口类i l o g v i e w 。我们用a s p n e t 来写我们的界面。茎王型堕塑垫茎垄塑鍪堡型垫篁堡墨笙塑塑壅移艇d 用c # 写的绑定代码叠蜥b 1 鬻磷l 囊箨。蹦s s 璃。斑叠i0 。 叠j 崔;一j曩。“二篓蔓薯ii 一?i ,一矗誊? 叠i。童嚣”蠢_ l ?_一:薹纛熹誊童i zi i :;0 。0 = ;霉。:萎薯jj i 曩i 艄l i 女i 囊攀i 瓣n i 童i l 自囊b 辞i 薄e 蒜 g l “叠j :董i 。 | _ - “。蔫蓦曩j ;。一。囊二_ i ;1 膏嘲鬟 _ | 1 ; 二叠誊? 。菇露豢蘸馘弼o l 藤: ;套鬻i 藉囊董_ ? ”i第六章g u i ( 图形用户接口) 测试设计图6 5z 洲管理系统登录界面图6 - 6 登录时输入错误用户名后的界面基于测试驱动开发的软件测试管理系统的研究图6 7 登录时输入错误密码后的界面5 8第七章总结和涮试驱动开发的扩展讨论第七章总结和测试驱动开发的扩展讨论如今测试驱动开发得n t 越来越多人的关注。本文的方法说明了如何测试数据库服务层和用户界面。在软件学科和许多其它领域中,针对同一个问题,通常至少有两种以上的解决方法。想对于传统的以架构设计为中心的自顶向下过程,x p 中的t d d 方法的出现则证明了以代码设计为中心的自底向上过程的合理性和有效性。较之传统的根据详细设计编码,再反复进行测试修改的编程方法,测试驱动开发更有助于提高软件质量,降低b u g 数量,它不但满足了设计需求,而且降低了系统出错的风险。在工作量上,代码量虽然提高了,但后期测试和维护的工作量减少了,而且得到了一套完整的可回馈的测试,为后期维护提供了方便。在时间进度上,测试与编码工作同步完成,虽然编码的时间拉长了,但不妨碍最终产品的提交。实际上,c 帆、x p 等都不是全新的发明,它们是对几十年来国外软件开发实践成功经验的总结、继承和发展。如果我们不懂得结合实际、灵活运用反而囫囵吞枣、盲目照搬,就会冒很大的风险。我们应当注重理解、消化这些先进思想方法的外延和内涵,从中学到最佳实践方法,取长补短、持续改进,逐步建立起一套适合自我、行之有效的过程体系。除了本文论述的几个方而的测试设汁外,还有一些需要进一步扩展的部分和必须考虑的技术问题,在此做简要叙述。在第五章介绍的数据库服务层存储操作的测试设计的基础上,我们几乎可以完成系统大部分的数据库存储操作的测试设计和编码。但仍有一些领域是我们没有涉及到的,如数据库的响应时间。系统是一个实时,对时间响应要求高,如何完成这一部分,还需要进步的探讨。在用户界面的测试设计中,我们应该更注重将界面显示和逻辑处理如何有效的分割开,关注逻辑控制类的测试设计。虽然目前是最小系统,但z t c d q 的最终目标是开发成一个分布式的系统,如何进行分布式系统的测试设计,也是以后要考虑的问题。整个系统的开发是一个非常复杂的任务。大量的测试设计和编码工作还需要在系统的不断扩展和完善过程中完成。第七章测试驱动开发的改进和扩展讨论测试驱动开发在本项目中作为一个尝试,占整个开发的一部分,但是取得了显著的效果,为系统提供了一套完整的可回归的测试,能马上提高代码的质量,减少了后期调试的工作量,减少了b u g 数量,并且设计出可重用和具有可测试性的、简单可行的代码。对于航天软件的开发研究,又提供了一个新的可行的方法。虽然适应它需要花一段时间,但是它是一个很有影响的研究方向。第八章结束语第八章结束语本课题自2 0 0 2 年下半年开题至今日初步完成,历时约一年半,其间包括课题调研,文献阅读,方案评估、实施和实际设计、调试等阶段。整个课题围绕测试管理系统开发中的测试设计来展开,主要工作包括提出需求分析、新技术分析、技术论证、总体设计模式,测试设计并用程序实现。整个测试设计是一个浩大而系统的工程,且是随着项目的进展而进行的。由于时间的限制,目前完成的是最小系统中的数据服务层和客户端的测试设计。本课题涉及知识面较广,覆盖了软件工程,软件测试,软件系统构架及开发方法等方方面面的知识。本课题中许多知识是本领域最新的,有些尚处于探讨阶段。要对它们进行应用的前提是需要将它们完全消化掌握。因此一年半以来,我学习和参阅了大量国内外相关的文献,并从网上获取了一些有用的资料。同时在工作中,不断向身边的老师和同事学习,通过系统的学习和实际工作的锻炼,积累了必要的基础知识和培养了实际的开发技能。由于本课题涉及面较广,本文在编写过程中试图涵盖所有必要的基础知识,另外着重强调了测试设计过程中的一些具体方法和方案。期望能够给相关课题的研究、设计人员提供基本和有用的参考信息。重要相关术语重要相关术语z m n啄木鸟软件测试管理系统的简称,是自行开发的针对嵌入式软件,集软件测试流程控制和软件测试项目管理为一体的系统敏捷软件过程基于时间的、并行的、分布的、演化的快速软件开发过程x pe x t r e m ep r o g r a m m i n g 极限编程的缩写,一种敏捷软件过程i s 0 9 0 0 0是国际标准化组织颁布的在垒世界范围内通用的关于质量管理和质量保证方面的系列标准c 删c a p a c i t ym a t u r i t ym o d e l 软件过程能力成熟度模型的简称g u ig ;a d hu s e ri n t e r f a c e 图形用户界面的缩写t d dt e s t d r i v ed e v e l o p m e n t 测试驱动开发的缩写删lu n i f i e dm o d e ll a n g u a g e 统一建模语言的缩写单元测试软件测试方法的一种,针对每个模块进行的单独测试u u tu n i tu n d e rt e s t 被测单元的缩写主要参考文献主要参考文献 1 郑人杰,殷人昆,陶永雷实用软件工程 m 北京:清华大学出版社,1 9 9 9 2 张海藩软件工程导论 m 北京:清华大学出版社,1 9 9 9 3 s t e v e nl g o l d m a n ,r o g e rn n a g e l ,k e n n e t hp r c i s s 敏捷竞争者与虚拟组织 m ,辽宁:辽宁教育出版社出版,1 9 9 8 4 郑入杰计算机软件测试技术 m 北京:清华大学出版社,1 9 9 2 5 顾玉良,王立福b s 软件测试技术及工具实现 m 北京:人民邮电出版社,2 0 0 1 6 朱鸿,金陵紫软件质量保障与测试 m 科学出版社,1 9 9 7 7 朱海滨面向对象技术原理与设计 m ,国防科技大学出版社,1 9 9 2 8 k e n tb e c k e x t r e m ep r o g r a m m i n ge x p l a i n e d :e m b r a c ec h a n g e m 北京:人民邮电出版社,2 0 0 2 9 k e n tb e c k ,测试驱动开发( 影印版) m 北京:中国电力出版社,2 0 0 3 1 0 s c o t tw a m b l e r 敏捷

温馨提示

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

最新文档

评论

0/150

提交评论