收藏 分享(赏)

基于敏捷软件开发方法的Web2.0网站开发——测试驱动方法的应用.doc

上传人:wo7103235 文档编号:6264829 上传时间:2019-04-03 格式:DOC 页数:62 大小:1.33MB
下载 相关 举报
基于敏捷软件开发方法的Web2.0网站开发——测试驱动方法的应用.doc_第1页
第1页 / 共62页
基于敏捷软件开发方法的Web2.0网站开发——测试驱动方法的应用.doc_第2页
第2页 / 共62页
基于敏捷软件开发方法的Web2.0网站开发——测试驱动方法的应用.doc_第3页
第3页 / 共62页
基于敏捷软件开发方法的Web2.0网站开发——测试驱动方法的应用.doc_第4页
第4页 / 共62页
基于敏捷软件开发方法的Web2.0网站开发——测试驱动方法的应用.doc_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、本 科 毕 业 论 文基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 The Web 2.0 website development based on Agile programming Application of Test Driven Development姓 名: 学 号:学 院:软件学院系:软件工程专 业:软件工程年 级: 指导教师: 年 月摘 要敏捷软件开发方法是这几年来软件工程发展的最新成果。敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。测试驱动开发是敏捷开发的最佳实践之一,所谓的测试驱动开发,其重心不在 Test,而在于 Development,测试驱动

2、开发并不是一种测试技术,而是一种富有新意的软件开发方法。本文主要探讨了测试驱动的软件开发方法在 Ruby On Rails 项目中的应用,切实运用测试驱动开发方法来驱动整个拼客网的开发。在拼客网的开发过程中,我们运用测试驱动中的单元测试来完成模型类的构建,从而设计完成数据库的架设;运用功能测试实现对控制器从需求到设计再到编码的整体流程的驱动;最后通过对整个项目的工作流程进行集成测试,既验证了项目的功能,也对项目的需求的完成情况进行了检验。经过实践,发现当熟练运用测试驱动开发方法进行项目的开发后,虽然没有明显的节省开发的时间,但是少了前期繁琐的需求的搜集与整理,项目整体框架的设计,还是令我们雀跃

3、不已。测试驱动代表着一种截然不同的软件开发方法,当习惯了测试驱动开发的思维后,就能够在项目的开发中灵活的进行运用。测试驱动开发提倡测试先行,因此能够尽早、尽可能地发现项目中潜在的错误,这就降低了后期修改代码错误的代价和风险。关键词 敏捷软件开发;测试驱动开发;RailsAbstractOver the years, the latest achievement of the software engineering is Agile programming. Agile programming is a people-centered, iterative, step-by-step deve

4、lopment methodology. Test Driven Development is one of the best practices of agile programming, test driven development is not focus on testing, but the development, it is not a testing technique, but an innovative software development methodology.This article discusses the test driven development m

5、ethodss applications in the Ruby On Rails projects, effective use of test driven development to drive the whole development of pin ke web. In the process of developing the pin ke web, we use unit testing to drive the construction of model, and then completed the framework of the database; we make us

6、e of functional testing to drive the process of controller from the demand to design until coding ; finally, testing the work of the entire project by integration testing, it not only verify the function of the project, but also examine the completion of the demand of the project.It has been found t

7、hat when we are skilled in testing driven development, although the duration of development isnt obviously reduced,but without the cockamamie process to collect and sort the requirements at the beginning.Testing driven development stands for a completely different software development means.When we

8、are familiar with this method,we can use it flexibly during the project development.This method calls for testing firstly.By this means, developers can find potential faults as early as possible.It is better to reduce the risk of reworking the inaccurate code.Key words: Agile programming; Test Drive

9、n Development; Rails目 录第一章 引言 .11.1 研究的背景 .11.2 本文的主要工作 .3第二章 测试驱动开发方法介绍 42.1 测试驱动定义 42.2 测试驱动的本质 .52.3 测试驱动的优势 .72.4 测试驱动的不足 .8第三章 测试驱动开发的过程 103.1 测试驱动开发的流程与模式 103.1.1 测试驱动开发流程 .103.1.2 测试驱动开发模式 .123.1.2.1 相互独立的测试 .123.1.2.2 测试列表 133.1.2.3 测试优先 133.1.2.4 断言优先 143.1.2.5 测试数据 143.1.3 小结 .143.2 测试驱动在基

10、于敏捷开发的拼客网站的实践 153.2.1 项目简介及初始需求 153.2.2 测试环境的搭建 .163.2.3 模型类的测试驱动 .193.2.4 控制器的测试驱动 .243.2.5 应用程序的测试驱动 313.2.6 小结 .38第四章 结束语 39参考文献 .41致 谢 42ContentsChapter 1 Introduction.11.1 Background11.2 Content 3Chapter 2 Introduction to TDD42.1 Definition of TDD42.2 Essence of TDD 52.3 Advantage of TDD 72.4 L

11、ack of TDD8Chapter 3 TDD Process103.1 TDD Processes and Models .103.1.1 TDD Processes.103.1.2 TDD Models .123.1.2.1 Isolated Test .123.1.2.2 Test List 133.1.2.3 Test First.133.1.2.4 Assert First .143.1.2.5 Test Data.143.1.3 Summary143.2 Practice TDD.153.2.1 Project Profiles and Initial Demand.153.2.

12、2 Construct Test Environment 163.2.3 TDD Apply to Model .193.2.4 TDD Apply to Controller243.2.5 TDD Apply to Application .313.2.6 Summary38Charpter 4 Conclusions39References 41Acknowledgements 42基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 1第一章 引言1.1 研究的背景在社会信息化程度不断提高的今天,一个高效的软件开发过程对于软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,

13、还是不断进步的喜悦。现今的软件行业,从提出需求到开发部署的周期越来越短,而且客户的需求是随时变化的,因此如果仍采用原先繁琐冗长的传统开发方式,前期文档的正确与详尽对后期项目的架构和功能的实现的正确与否起决定作用,显然是无法适应如此多变的需求的。于是,软件开发者也在不断探索着新的软件开发方法,希望能使软件开发更加简单有效,在这种大前提下,敏捷开发应运而生。敏捷软件开发是一个开发软件的管理新模式,用来替代以文件驱动开发的瀑布开发模式。敏捷开发避免了传统瀑布方式的弊端,主要是吸收了各种新型开发模式的“动态”特性,关注点从文档转到开发者,管理方式也从工厂的流水线到团队的自我放松式的组织。强调程序员团队

14、与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效) 、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。敏捷软件开发包括极限编程(eXtreme Programming,XP)、Scrum、动态系统开发方法(Dynamic System Development Method,DSDM)、自适应软件开发(Adaptive Software Development,ASD)、Crstal 方法、特征驱动开发 (Feature- Driven Development, FDD) 、实用程序设计等,其中最重要的是极限

15、编程。 1这些方法可满足对不同于文档驱动的、严格的软件开发过程的新方法的需求。敏捷软件开发过程与传统软件开发过程的不同之处有 4 个:(1) 个体的交互胜过过程与工具;(2) 可以工作的软件胜过面面俱到的文档;(3) 客户合作胜过合同谈判;(4) 响应变化胜过遵循计划。基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 2随着敏捷开发的运用越来越广泛,作为敏捷软件开发的核心的测试驱动,也越来越受到人们的关注,并成功运用于实际的项目开发中。测试驱动开发(Test Driven Development),简称 TDD,由 KentBeck 提出的一种软件开发方式。它以不断地测试推动代

16、码的开发,既简化了代码,又保证了软件质量。测试驱动开发理论最初源于对这些问题的思考(1) 如果我们能够在编写程序代码之前先进行测试方案的设计,会怎样?(2) 如果我们保证除非没有这个功能将导致测试失败,否则就不在程序中实现该功能,会怎样?(3) 换一个角度,如果当侧试时发现必须增加某项功能才能够通过测试时,我们就增加这一功能,会怎样?大师们通过带着这些问题的实践,发现这的确是一个提高软件代码质量,使得效率得到保障的一个很好出发点。以这样的思路进行软件开发,可以保证程序中的每一项功能都有测试来验证它是正确的,而且每当功能被无意修改时,测试程序会发现。同时,也使我们获得了一个新的观察点,从对程序调

17、用者有利的视角来观察我们的程序,这使得我们在关心程序功能的本身还能够对接口予以足够的关注,使得其更容易被调用。另外这种思路下的代码将变得更加易于调用,也就必须使其与其它代码保持低耦合性。并且,当你想复用这些模块时,测试代码给出了很好的示例。这一切,使得软件开发工作的质量一下子变得有保障了。传统软件工程界一直存在这样的看法:程序员不应该测试自己的代码,原因之一是程序员在代码开发中形成的思维定势将导致测试的盲区;其次是从心理学的角度看,个人很难否决自己努力完成的工作成果。这样,专业的测试团队的出现成为可能,在现代软件开发过程中,专业测试团队的介入,使得软件的质量得到了相当程度的保障。测试因此成为对

18、软件质量保证的最后哨卡, 其地位也日渐重要。尽管在传统测试理论中,测试几乎已经伴随了整个开发周期,但更多的情况是: 至少在项目开始集成之前,测试是基本不存在的,测试通常是在集成阶段开始进入的,测试人员就不得不在这个时候再来面对可能的模块质量问题、模块设计问题以及其他许多早在那之前就应该已经解决的问题。而基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 3软件工程的研究显示:在软件开发周期的越早期发现错误,那个错误将带来的损失将越小,后期的修改费用会成指数级上升。显然,采用测试驱动开发方式,让程序员在开发功能代码之前就先编写测试用例,以测试来驱动软件设计的进行,通过频繁地进行测试

19、,不仅完成整个项目功能代码的编写工作,也提前挖掘出项目中可能存在的问题,减少后期修改 bug 的费用,提高工作的效率。测试驱动开发改变了编码的过程, 并且这种改变不仅是可能的, 同时也是值得去做的。在开发的顺序上, 采用先编写测试,再编写代码来满足测试的方法,并在开发过程中不断地通过运行测试代码来获得所开发的代码与所要求的结果之间的差距,在实际中有非常好的效果,在这个过程中,测试工作不再是单纯的测试, 而成为设计的一部分。1.2 本文的主要工作本文的主要工作在于通过实现一个 web2.0 的拼客网站的开发,来研究测试驱动在敏捷开发方法中所起的作用。Ruby on Rails 是一种解释型的方便

20、快捷的面向对象的脚本语言,利用 Ruby 语言和 Rails 的强大功能,可以使 Web 开发更加轻松自如。该项目主要是基于敏捷的开发方式,采用 Ruby on Rails 这种Web 应用程序框架,运用测试驱动的方法来进行开发的。通过将测试驱动技术运用于项目的开发中,从实践中研究测试驱动开发方法对于软件开发的各个阶段的影响,更加深刻的体会测试驱动的开发方法的优点及其存在的缺点。基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 4第二章 测试驱动开发方法介绍2.1 测试驱动定义测试驱动开发(Test Driven Development,英文缩写 TDD)起源于敏捷开发方法中提

21、倡的测试优先实践。测试优先实践重视单元测试,强调程序员除了编写代码,还应该编写单元测试代码,强调在开发过程的早期就进行频繁地测试,让对需求的承诺直接的传递到每个组件的开发之中。它的基本思想就是在开发功能代码之前,先编写用于定义产品功能的测试代码,而所编写的开发功能代码又要以使测试通过为目标。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,其次编写相关的代码满足这些测试用例,并重构代码以消除重复代码以使其更简洁,最后不断迭代地添加其他功能,直到完成全部功能的开发。这种方法在实际中能够起到非常好的效果,通过进行测试,不仅保证了产品的正确性,而且很好地把设计、编

22、码、测试三者融合为一个整体,促进了对整个环境和需求更好地理解。需求向来就是软件开发过程中感觉最不好明确描述、易变的东西。这里说的需求不只是指用户的需求,还包括对代码的使用需求。很多开发人员最害怕的就是后期还要对某个类或者函数的接口进行修改或者扩展,为什么会发生这样的事情,就是因为这部分代码的使用需求没有很好的描述。传统的文档驱动设计方式,因无法达到对需求进行细致描述,因此整个项目的设计根本不可能精细到代码级别,这就容易影响到后期编码内容的正确性。而测试驱动方法则可以精细到代码级别,编写测试代码其实是在制定一个小目标,这个目标非常明确,它规定了需求设计的类、方法以及方法需要满足的结果。直接用代码

23、本身来说明设计,这个描述是无二义的,可执行验证的。因此,可以说测试驱动是一种细粒度的目标管理方法,通过明确的目标,推动软件开发的进行。以这样的思路开发软件,可保证程序中的每一项功能都有测试来验证它的正确性。基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 52.2 测试驱动的本质测试驱动的本质在于,通过测试定义所要开发的功能的接口,然后实现功能的开发过程。有人曾举例说明测试驱动本质:英国有家公司的一名员工编写了一个软件专门用来对付无测试的代码,方式就是一行行地删除产品代码,如果测试仍然能够通过,这行代码就被删除了。也就是说测试驱动也可以理解为是:在每一行产品代码落笔之前,先写一

24、个测试来给这行代码找一个存在的理由,让你的产品代码不能随便被别人“删除” 。V 测试模型作为最广为人知的测试模型,它强调在需求分析、概要设计、详细设计、编码过程中都应该考虑相对应的测试工作,完成相关的测试用例的设计、测试方案、测试计划的编写。 2从下图很容易看出,V 测试模型是针对古老的瀑布模型,测试是在代码完成后进行的,这样容易将执行测试与测试设计分开对待,最终导致 bug 的修改费用及修改时间成指数上升。图 2-1 V 测试模型X 测试模型的基本思想是由 Marick 提出的,X 模型的左边描述的是针对单独程序片段所进行的相互分离的编码和测试,此后将进行频繁的交接,通过集成最终合成为可执行

25、的程序(右上半部分) 。这些可执行程序还需要进行测试。已通过集成测试的成品可以进行封版并提交给用户,也可以作为更大规模和范基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 6围内集成的一部分。多根并行的曲线表示变更可以在各个部分发生。X 模型还定位了探索性测试(右下方) 。这是不进行事先计划的特殊类型的测试,诸如“我这么测一下结果会怎么样?” ,这一方式往往能帮助有经验的测试人员在测试计划之外发现更多的软件错误。 3图 2-2 X 测试模型测试驱动可以被认为是 X 测试模型的具体运用,它强调测试先行,针对某个初步功能点编写测试用例,然后再编写功能代码,以使测试用例通过,通过测试

26、后再逐步迭代,最终集成整个项目。在不断测试中,挖掘隐藏的软件错误,探寻潜在的软件需求。测试驱动,是一种测试技术,更是一种分析方法 4。在测试驱动中, 需求将完全表述为测试代码。这样,软件设计师的需求工作就不再是编写用例规约来覆盖用户的需要,而是迫使其仔细思考要做什么和不做什么,特别是各种例外的情况,并用程序语言正式的写下来,即编写测试代码来捕获用户的需要。将需求整理为测试代码的形式,只要代码能够通过测试,就代表该代码设计已经能够满足客户需求。当然,这种肯定是有前提的,即测试代码能够完整的、精确的描述需求。另外,因为从使用者的角度写出测试代码,除要关心程序功能的本身外,还要对接口予以足够关注,便

27、于更进一步明确需求。测试驱动,是一种测试技术,更是一种设计方法。其重心不在测试,而在基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 7于驱动软件的开发,是一种以意图来驱动的软件开发方法意图编程。在编写功能代码前,站在功能代码的使用者角度设计测试用例,运用针对接口编程等原则降低耦合度,改进设计。因此,可以说测试驱动保证了功能代码的可测试性,降低了耦合度,改善组件对象模型,使设计在开发过程中逐步完善和改进。测试驱动,是一种测试技术,更是一种质量控制方法。开发者在项目的压力下往往忽略测试, 而没有测试的软件增加了开发者的压力 ,测试驱动有一套完整的单元测试作为回归测试, 保证现在能

28、工作的代码将来也能工作, 也可作为集成测试的检查点。由于功能代码的高质量和完善的测试用例集,增强了开发者信心,从而赢得他人信任。测试驱动,是一种测试技术,更是为功能代码提供了良好的文档。测试驱动是通过写测试来写代码,当用这个视角去实践测试驱动时,测试用例会细化到以什么条件和参数、调用什么方法及会有什么返回值等, 这就是文档, 产生的测试用例代码就是对代码的最好的解释, 说明了代码的运行机制, 而且这种程序自我编档的方式也促进了交流和反馈,并能维护代码和文档的同步。敏捷宣言主张:能够运行的软件胜过面面俱到的文档。测试用例集就是一份准备可靠,且能运行的文档。2.3 测试驱动的优势刚接触测试驱动时,

29、大家肯定都有这么一个疑问就是“程序都还没有写出来, 测试什么呀! ”。后来一想,其实这是一个泥瓦匠都明白的道理,却是自己在画地为牢。 5我们来看看两个不同泥瓦匠是如何工作的吧: 工匠一:先拉上一根水平线,砌每一块砖时,都与这根水平线进行比较,使得每一块砖都保持水平。 工匠二:先将一排砖都砌完,然后拉上一根水平线,看看哪些砖有问题,再进行调整。 你会选择哪种工作方法呢?你一定会骂工匠二笨吧!这样多浪费时间呀! 然而我们想想自己平时的编码习惯,我们是怎么做的呢?我们就是按工匠二的方法在干活的呀!甚至有时候比工匠二还笨,是整面墙都砌完了,直接进行基于敏捷软件开发方法的 Web2.0 网站开发测试驱动

30、方法的应用 8“集成测试”,经常让整面的墙倒塌。看到这里,你还觉得自己的方法高明吗?测试驱动要达到的效果就是工匠一对于砌墙通过事先拉一条线所希望达到的结果。通过先进行测试,对后期的编码提供准绳。因此与传统的软件开发方法相比,测试驱动开发方法具有以下的优点 6:(1) 软件开发的初始阶段, 测试驱动就强迫开发人员以测试的角度与用户的观点对软件进行审视,因而更能够对软件有全面的认识和把握,对代码的设计也就更符合后期开发的需求。(2) 测试驱动开发过程中产生的测试用例代码就是对代码的最好的解释,因此可以在无文档指导的情况下继续编码。(3) 测试驱动开发最重要的功能还在于保障代码的正确性,能够迅速发现

31、、定位 bug,因此在软件成品的质量上提供了一定的保障。(4) 由于可以保证编写测试和编写代码的是相同的程序员, 降低了理解代码所花费的成本;也降低了开发小组成员间的交流成本,提高了相互信赖度;程序员也可以清楚的看到自己工作的进展情况。(5) 减轻了测试的工作量。无论是否进行设计工作, 测试工作都是不可避免的, 先进行单元测试, 可以减少后续的测试工作量。(6) 系统可以与详尽的测试集一起发布,从而对程序的将来版本的修改和扩展提供方便。(7) 大部分时间代码处在高质量状态,100的时间里成果是可见的。2.4 测试驱动的不足测试驱动开发毕竟不是软件银弹,也不存在这样的银弹,它也有力不能及的地方:

32、(1) 测试驱动开发不可能让人立即具有设计出优美解决方案的能力,或者说是优秀的分析与解决问题的能力。TDD 是 Test Driven Development 不是Test Driven Design。它只是一个过程,也许可以帮助你发现并帮助你实现优美的解决方案,但是它不能像变魔术一样,只要学会了就能变出一个优美的设计出来,优秀的分析问题与解决问题的能力还是要靠不断地学习与借鉴他人成基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 9就才能得到提高。(2) 测试驱动开发不能节省开发投入,也很少能够节省开发周期。测试开发所编写的大量测试代码都是要投入时间与精力的,即使因为测试驱动

33、开发能得到一个简洁的设计,也不能弥补测试代码的工作量。当然,测试代码可以一定程度保证高质量的实现代码,从而减少后期软件测试与修正缺陷的工作周期,并进一步在软件发布后减少代码修正维护的工作量。但至少在开发阶段,两相抵消,开发周期并不能有明显改善,如果是第一次采纳测试驱动开发,甚至会延长开发周期。(3) 测试驱动开发不能杜绝所有的软件缺陷。尽管测试驱动开发通过测试约束,减少了程序员犯错和遗忘的可能,但是这只是把问题从实现代码部分转移到了测试代码。测试用例的完备与否,测试代码本身逻辑的正确与否都依赖于程序员,糟糕的测试用例设计和测试代码实现可能自顾不暇,也就失去了监督实现代码的能力。在实施测试驱动时

34、要避免如下的情况: 4基于各种理由不写测试;测试的跨度过大;测试针对代码而不是针对功能;测试的覆盖面太小;需要人工干预的测试;复杂的测试配置环境;牵一发而动全身的测试代码等。基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 10第三章 测试驱动开发的过程3.1 测试驱动开发的流程与模式测试驱动一改传统开发模式中单元测试在编写代码之后进行,而是将单元测试移到正式编码之前 7,以不断的测试来推动代码的开发,这样,既简化了代码、降低了开销,又保证了软件质量、提高了开发效率。下面我们将对测试驱动的开发流程与模式进行详细介绍。3.1.1 测试驱动开发流程软件的质量不仅是体现在程序的正确性

35、上,它和编码以及所做的需求分析,软件设计密切相关。广义的软件测试实际是由确认、验证 、测试三个方面组成。(1) 确认 确认主要体现在计划阶段、需求分析阶段、也会出现在测试阶段;主要是评估将要开发的软件产品是否是正确无误、可行的和有价值的。包含了对用户需求满足程度的评价,确保一个待开发软件是正确无误的,是对软件开发构想的检测 。(2) 验证 验证主要体现在设计阶段和编码阶段;主要是检测软件开发的每个阶段、每个步骤的结果是否正确无误,是否与软件开发各阶段的要求或期望的结果相一致。验证意味着确保软件开发过程的正确无误。(3) 测试 测试主要体现在编码阶段和测试阶段,通常经过单元测试 、集成测试 、系

36、统测试三个环节。在整个软件生存期,确认、验证 、测试相辅相成,分别有其侧重的阶段。确认无疑会产生验证和测试的标准,而验证和测试通常又会帮助完成一些确认 ,特别是在系统测试阶段。测试驱动是以传统的测试为基础,但它与传统测试的区别在于,它将测试基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 11方案设计工作提前,在编写代码之前先做这一项工作;从测试的角度来验证设计,推导设计;同时将测试方案当作行为的准绳,有效地利用其检验代码编写的每一步,实时验证其正确性,实现软件开发过程中的“小步快走” 。其箴言就是“红、 绿、 重构” 8: 红,创建测试,但无法通过;绿,使测试被任何必要的方法

37、验证通过;重构,修改代码清楚项目中的冗余,在确保所有测试仍然可以通过的情况下修正软件的设计。也可以这么说:“测试失败,测试成功,优化之” 。绿灯(通过所有测试)红灯(测试失败)重构非完整测试代码功能修复重构完整测试没有更多测试编写失败测试图 3-1 测试驱动开发流程图测试驱动一般依照以下步骤执行 9:(1) 明确当前要完成的功能,即完成需求的分析。任何项目,都是从需求的确认开始。在开始写测试用例前,先考虑该项目希望实现哪些操作,要如何在代码中体现出来,并且使程序尽快通过编译。可以创建一个清单,列出我们所了解的最初的需求,以及需要实现的功能,在每一轮编程结束后,重新根据完成情况以及新的需求对清单

38、进行调整。(2) 红:创建一个测试用例,在未完成功能代码之前,测试将失败。考虑一下希望实现的操作要如何在代码中体现出来,然后快速完成针对此功能的测试用例编写,就好像这段代码已经存在一样;运行测试,缺少对象的基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 12测试代码肯定会出现编译不通过,这时一般编译器会出现红色编译错误提示,简称为“红色步骤” 。这是一个标准方法,用来确保测试调用了正确的代码,或者错误的代码不会偶然正常工作,这是一个有意义的失败,也希望它是失败的。(3) 绿: 使测试被任何必要的方法验证通过。尽快地让测试程序可运行是压倒一切的中心任务,可以添加一些代码使测试用

39、例通过编译,这时我们对添加代码没有太多的要求,只要刚刚能通过测试即可。只要测试用例通过了,这时编译器就会显示绿色编译通过的进度条,简称为“绿色步骤” 。如果明显存在一个整洁、简单的解决方案,那么就将其键入,若如期通过测试,那么可告一段落, “ 够用就好” 。(4) 重构: 修改代码以消除冗余。测试驱动开发中的重构,指在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构,提高其可理解性,降低其修改成本,清楚地消除由于新增功能而造成的冗余,最终达到使代码整洁可用的目标。在每次重构后,重新运行所有测试以确保仍被通过。(5) 循环添加其他功能,直至编译通过全部功能的开发。每次重复应该非常

40、短, 一个典型的开发时间段内应该包含许多红/绿/重构过程。在经过不断的循环迭代之后,系统已经能够正常工作了,在解决了“可用”的目标后,我们再考虑“代码的整洁”问题。3.1.2 测试驱动开发模式在测试驱动开发中,需要考虑的关键问题如下:什么时候进行测试、哪些功能点是需要进行测试的、如何选择要测试的逻辑、以及如何选择要测试的数据。测试驱动开发模式指导程序员如何解决上述问题。 103.1.2.1 相互独立的测试在测试驱动开发中,所运行的各种测试之间关系的期望状态是没有任何相互影响的。测试时,我们显然不希望因某个测试的早早中断而导致了后续的许多测试的出错,我们希望两个测试失败了,它们对应着的是两个不同

41、的问题,测基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 13试相互之间是互不干扰的。相互独立的测试意味着所有的测试都是不依赖于顺序的,可以随便从这些测试中挑出部分测试来运行,而不必担心因为前导测试不存在而失败。 人们经常引用性能来作为测试要共享数据的理由。相互独立的测试的第二个含义是,程序员必须将自己的问题分解为一些彼此正交的小问题,这样就使得为每个测试搭建环境简单而快捷。独立测试鼓励利用高度内聚、松耦合的对象组合来解决问题。3.1.2.2 测试列表在开始写测试之前,写一个包含所有自认为必须要编写的测试的清单,可以让我们更清楚的明白要测试什么。我们应对编程压力的第一步就是在

42、知道下一步该怎么走之前不要贸然把工作向前推进。当我们要开始进行新一轮的编程时,最好要考虑清楚我们这一轮编程打算完成什么样的工作,即对任务列一个清单,既提醒我们要完成的内容,也使我们更加关注于工作。那么,在测试驱动开发上,我们要记录的就是我们要去实现的测试。首先,可以将我们所知道的需要实现的每种操作的范例都记录到清单上;其次,对于那些目前还不存在的操作,将其空版本记录到清单上;最后,列出所有自认为在这一轮编程结束后为了获得整洁的代码而必须要完成的重构。在每一轮编程结束后,我们需要好好保管列表上剩余的项目。如果其中的某项功能只完成了一半,我们可以继续使用同一张列表。如果发现了超出目前所能完成任务的

43、最大重构需求,那么就把这些项目移到“以后的”列表上去。如果因为实现某项功能而引入新的测试,那么就把这些新的测试记录到列表上,对于所带来的重构也要如此为之。如果认为某个测试可能无法运行通过的话,那么让这个测试工作起来比发布代码更重要。3.1.2.3 测试优先应该在什么时候编写测试呢?答案肯定是在编写要被测试的代码之前,而不是在事后再进行测试。一个程序员的目标是使功能能够实现。然而,在实现功能之前需要一种考虑设计的方式,一种控制规模的方法。测试优先,就能够基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 14完美的满足这两个需求。我们如果先进行测试,则编码过程中的压力就会减少,这样

44、使得我们更乐意去进行测试,在这种良性循环中,测试所带来的好处立竿见影,它为我们提供了一种设计和控制规模的方法,即使在中等压力下我们也能继续运用它。3.1.2.4 断言优先在测试驱动开发中,程序员构建一个系统应该是从其对最终系统的描述开始的。程序员应该从希望最终代码能够通过的测试开始编写一项功能。相应地,程序员应该从测试完成时能够通过的断言开始编写一个测试。使用断言优先进行测试,可以使我们在写一个测试的时候,同时解决好几个问题,如:名字应该怎么起;怎样检查结果的正确性;什么是正确的结果;这个测试是否需要其他的测试;这一功能性属于哪一部分;需要一个方法是通过修改现有方法还是在现有类中构造一个新的方

45、法;运用断言优先,我们可以通过很多微小的步骤构建出测试的轮廓,在很短的时间内根据反馈做出每一个决定。3.1.2.5 测试数据在测试里面使用的数据应该是那种容易让人理解的数据,不要为了编排数据而编排数据。如果数据必须取不同的值,那么这种取法必须要有意义;如果你的系统需要处理多项输入,那么测试就必须能够反映出多项输入;如果包含三条数据项的列表就能指明设计和实现构思的话,就没有必要使用包含十条输入数据项的列表。在测试数据中的一个诀窍是永远不要用同一个常量来表达多个意思。还有就是,有时候真实数据在某些情况下是非常有用的,如:在将目前系统的输出与以前系统的输出进行匹配时(平行测试) ;在使用根据实际运行

46、所采集到的外部事件序列来测试实时系统时;当你对某种仿真系统进行重构而期望在完成时得到完全相同的结果时,特别是在浮点精度有可能存在问题的时候。基于敏捷软件开发方法的 Web2.0 网站开发测试驱动方法的应用 153.1.3 小结测试驱动开发一般遵行:红-绿-重构五步走的开发模式。在明确开发某个功能后,首先思考如何对这个功能进行测试;快速完成针对功能的测试用例编写,缺少对象的测试用例代码这时会出现错误编译不通过;根据错误提示,编写对应的功能代码来满足测试用例直至测试通过;并在此过程中持续进行代码重构,使功能优化、效率提升,日臻完善;然后循环进行添加其他功能,直到编译通过完成全部功能的开发。测试驱动

47、开发模式是测试驱动开发的步骤的基础。根据开发模式,在测试驱动中我们有以下几点建议:(1) 一般从测试列表中选择具有指导意义并且比较有把握实现的测试来进行编写。(2) 当使用一个新类里的一种新的方法时,不直接用它来编写程序,而是编写一个小测试来验证这个 API 的工作是否符合人们的愿望。(3) 当出现某种与当前讨论话题并不直接相关的想法时,那么就在列表中增加一个测试然后重新回到论题上来。(4) 当发现一个错误的时候,首先写一个尽可能小的测试并使其运行,然后再去修复这个错误。3.2 测试驱动在基于敏捷开发的拼客网站的实践Rails 提倡一种敏捷的、迭代的开发方式。它不强求在一开始就把所有事情都做到

48、,而是借助测试来保证所做的正是我们所理解的 11。Rails 框架的最大乐趣之一在于:它从每个项目的一开始就能够把测试融入其中。实际上,从用 rails 命令新建应用程序的那一刻起,Rails 就已经为我们生成了一套测试的基础。当你开始增加功能时,rails 就会自动帮你创建针对这项新功能的测试存根(stub)。下面,我就以自己毕设所做的项目“基于敏捷软件开发方法的拼客网站开发”来作为示例说明如何进行“测试驱动开发” 。本实例是在 Ruby On Rails 框架下,用 Radrail 环境开发的,以及配套使用 Radrail 中自带的 Junit 进行测基于敏捷软件开发方法的 Web2.0

49、网站开发测试驱动方法的应用 16试。3.2.1 项目简介及初始需求本次项目是使用 Ruby 语言在 Rails 平台上采用敏捷软件开发方法构建一个Web2.0 的拼客网站,本网站主要实现:拼信息发布、我的空间、俱乐部、商家信息发布等功能模块。拼信息功能模块,主要是用于发布和归总拼客们所需要的拼房、拼餐、拼玩、拼游、拼购等拼信息。我的空间,则主要是拼客们管理自己的个人信息,如个人资料,自己的图片等;还有管理拼信息的发布。俱乐部,则是提供给拼友们聚集志同道合者交流,聚会的场所。在俱乐部里面,拼客可以创建新的俱乐部来吸引其他有共同的需要或兴趣的人加入,一起参加活动,交流经验,培养感情。拼友也可以给俱乐部留言,发布日志,提议活动,上传活动图片。商家信息发布,主要是罗列商家的优惠信息,为拼友们的拼活动提供信息。3.2.2 测试环境的搭建运用 Ruby On Rails 进行项目的开发的一个优势是,无需烦恼如何将应用程序进行组装,rails 已经帮我们完成了整个应用程序的骨架,并且内建了对测试的支持。因此当我们运用生成器新建模型类时,Rails 会自动创建一个迁移任务和相应的测试用例,并且建立了模型类与数据库表之间的映射关系。在我们的网站的

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报