欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

测试驱动开发与遗留代码的问题

时间:2023-01-08 07:49:17 其他范文 收藏本文 下载本文

下面是小编整理的测试驱动开发与遗留代码的问题,本文共6篇,欢迎阅读分享,希望对大家有所帮助。

测试驱动开发与遗留代码的问题

篇1:测试驱动开发与遗留代码的问题

Allan Baljeu试图在他庞大的、C++遗留代码库中使用TDD,结果遇到了很大的麻烦,因为:

我们后来得到的类不能完全实现希望其具备的功能,当有人使用这些类时,会想要得到更加完整的实现,然而却会发现原有的设计不够完善,要进行新的设计,有些期望(测试)要做出改变,而之前对这些类的使用也得调整,

他在思考前期大规模设计(BDUF)也许有助于解决这个问题。George Dinwiddie是敏捷教练,他认为Alan的设计是在试图告诉他些什么。人们必须要注意“干净代码(clean code)”的基本原则,要注意基本的内聚和耦合性方面的问题(比如SOLID原则)。

Mike “Geepaw” Hill也是Agile Coach,他提到:在他指导敏捷团队的这些年来,下列原因之一可能是类似问题的根本原因:

团队在重构方面做得不够,因此你的类没有做到最小化。

团队在“尽量简单”方面的技能还不够,同样如此。

团队还没有采取具备侵略性和快速度的微测试(microtesting,也就是单元测试),所以改变常常会破坏测试

团队不知道如何处理跨团队、或是公司对公众之间的依赖,比如公布API的情况

团队既没有结对,也没有在开放空间中工作,这极大降低了团队层面的知识理解和传递

团队似乎没有具备快速构建的能力

团队可能还在使用老古董级别的工具

Keith Ray是极限编程教练,他提出:有了遗留代码(也就是欠下很高技术债的系统),实现一个故事的成本完全取决于偿还技术债的成本。接下来,他提出一种解决方式:

要让代码的结构更好(偿还技术债务),不管什么时候,当你需要集成一个新功能时,你应该同时注意新旧代码中的异味,并在发现异味时,马上重构,消除异味。

你可以手工采取小而安全的步骤进行重构(即使使用C++)。要紧跟Martin Fowler《重构》一书中的步骤,除非你能做到得心应手。带有gcc的Eclipse有些重构功能可以使用:“抽取方法”和“重命名”。“重命名”能够知道命名所在的范围,所以要比查找和替换更为安全。“抽取方法”和其他的重构功能可能有bug,使用它们的时候要小心。像改变函数签名这样的东西,“依靠编译器”能够展示出哪里需要改变。

你还需要测试来保证没有破坏现有功能,

管理资料

Michael Feather的《修改代码的艺术》提供了很多向遗留代码中加入测试的技巧。从更高层面来看,代码异味是破坏优秀设计原则的表现。举例而言:单一职责原则(SRP)认为:每个类、方法、模块只应该有一个意图。还有些原则是与耦合、内聚和管理依赖关系相关的。相比使用这些抽象原则,发现代码异味常常更为容易。“大类”和“大方法”可以通过“抽取类”和“抽取方法/移动方法”修改,不过知道SRP有助于判断抽取类或方法的哪一部分。

也许“告知,不要询问”是最重要的设计原则:不要分离功能和数据……恶劣的代码常常把功能实现放在一个地方,从其他地方得到需要的数据,这就造成了依赖性方面的问题,同时代码缺少局部性(locality)。其症状就是:“添加一个新功能,要修改多处代码。”代码异味“散弹枪式手术”、“依恋情结”、“参数列表过长”都是这样造成的。

尽快得到反馈能带来更多重构,这最终将会加快新功能的开发。尝试进行并行构建(分布式编译),尝试让源代码文件和头文件更小,降低头文件的复杂度——可使用前向声明、避免内联代码、尝试让每个类只有一个头文件/源代码文件。大量使用“指向实现的指针(pimpl idiom)”能降低10%的编译时间,但是也可能把“大类”和“依恋情结”这样的代码异味给隐蔽起来。

重构要比重写更好,其优势在于:你总是有可工作的代码。如果你的手工和自动化测试都很好,那你就可以交付代码了,即使目前的状态处于“优秀设计”和“恶劣设计”之间。

Keith还写了“Refactoring: Small Steps Guaranteed to Help You Clean Up Your Code”,该文章发表于Better Software Magazine,讲述如何重构C++代码。

查看英文原文:Test Driven Development and the Trouble with Legacy Code

本文来自:www.infoq.com/cn/news//11/legacy-code

篇2:测试驱动开发(TDD)跟敏捷开发有冲突

这些话来自于我们的软件领袖Jim Coplien—上世纪九十年代最流行的几本C++著作的作者,原话是这样的:

严格的按照YAGNI原则的驱动测试开发(TDD)会导致敏捷开发3次迭代结构的坍塌。

看到反TDD运动已经形成了一定的气候,真是让人感到非常的振奋,我特别喜欢Jim和Bob Martin 之间的争论,Bob Martin,这出了名的TDD极端主义者,认为任何一个程序员,只要所写的任何一行代码没有使用TDD,就不是一个专业的程序员。

Jim 和 Bob 最近的一次非常有趣的辩论,你可以在InfoQ找到他们的辩论记录。我很敬佩Jim在面对Bob时表现出来的礼貌和克制,因为当你的观点和Bob不一致时,他的言论永远都让你难以忍受。

TDD已经让我纠结了很久,你可以从InfoQ上发布的我的一场被叫做Designing for Testability的演讲,或从我最近和Hani Suleiman 一起合著的书里看到我对TDD的某些效果的质疑、甚至是反对。

我已经说过,别指望我会跟Bob Martin 唱对台戏。我绝对没有意思说你要永远别使用TDD,但我相信,TDD所带来的好处被过度的夸大,软件社区的人需要明白,TDD只是一种工具,对于一种工具,并不是所有的情形下都会好用。我特别不喜欢TDD极端主义者们的四处鼓噪、妄图使那些没有使用TDD的程序员感到沮丧,或使他们认为他们现在开发软件所使用的方式有什么不对。

如果让我说,我感觉大多数的TDD极端主义者在各种会议上说的太多太久了,已经不用动脑子就能举例写出一堆的用来计算保龄球得分的类和代码程序。而这些卡通式的小程序很容易,它们让TDD很风光,

管理资料

但是,当这些听众离开会场后挠着头纳闷如何让这种技术应用到自己的真实工作中时,你不要吃惊。如果你使用TDD去开发手机应用程序或去跟需要处理遍布3三大洲的上百万的两阶段提交事务的主框架进行交互的程序时,你算是撞上头彩了。

我不知道你的感觉如何,反正我是有点厌倦了软件社区里的这种危言耸听—无论它是来自TDD狂热分子还是来自那些声称绝不招聘不使用Mac做开发的人的人。

当需要进行测试时,我信守下面的经验主义的做法:

“先测试”还是“后测试”并不重要,只要你是在测试。

在你的开发过程中尽可能早的考虑测试。

不要让某个框框限制了你的行动。例如,不要轻信那些人告诉你的、要写出“尽可能简单的能够运行的程序”—也就是所谓的YAGNI—的话。如果你的经验告诉你,未来你会用到这个额外的类—虽然现在用不着,你应该相信你的判断,加上这个类。

记住,功能测试是真正对用户有意义的测试。单元测试只是为你—开发者—服务的。属于奢侈品。如果你有时间去写单元测试,那最好了:当你的程序出现问题时,它们能帮助你省去很多时间。但如果你没有时间,你要确保功能测试能覆盖到你的产品里用户所期望的所有功能点。

如果你没有做驱动测试开发,不要有任何的不安。有太多的因素都能导致这种开发方法在众多的项目和个人开发习惯中水土不服(有很多因素那些TDD极端主义者们永远都不会提)。

不要让那些极端主义者把测试搞得痛苦不堪,如果你能运用自己的判断来实践它们,这将会成为你职业表现在最有价值的品行。

本文是从 TDD leads to an architectural meltdown around iteration three 这篇文章翻译而来。

篇3:通过测试驱动开发和结对编程提高生产效率

“测试驱动开发”和“结对编程”是最著名的两个敏捷实践,然而许多敏捷团队并没有采用,通常大家找借口说“太忙”,没时间采用测试驱动开发和结对编程这样的实践;实际上,他们的意思是追求高质量的代码会降低生产效率。在这里,Mike Hill解释了这种逻辑有多么错误。

Mike告诉我们,从本质上讲,想要“更快”,必须“更好”:

你牺牲质量,能换来更多的功能吗?不仅不是这样,而且恰恰相反:你追求的效率越高,你越应该提高内部质量标准。

......

想要提高生产水平,首先提高内部质量。

然后他告诉我们为什么会这样:

所以,为什么会这样呢?

因为内部质量和外部质量并不是一回事儿。

因为恰恰就是昨天的产品质量唯一决定了今天的生产水平。

因为打字现在不是,永远也不是编写代码的瓶颈所在。

Mike随后展开叙述这3个理由。首先,他用单词“质量”阐述外部质量与内部质量的区别,外部质量可以认为是产品有多少功能,而内部质量指的是实现这些功能的代码。他这样加以区分,是为了说明想缩短市场投放时间,可以降低外部质量,但是决不能降低内部质量。

接下来,Mike描述了“昨天怎样决定今天”,或者说已有代码的内部质量何以影响当前的生产效率。

一整天,每当你开始动手,都要依赖已有的代码。要研究的每一行代码会降低你的速度。每一个对外开放的依赖关系会降低你的速度;每一个糟糕的变量名称会降低你的速度;每一个设计时的错误决定,不论大小,都会降低你的速度,

管理资料

如果你想尽可能快地工作,就需要编写干净整洁的代码。

最后,Mike对这个常见的误区进行了反驳:即很多人认为结对编程和测试驱动开发由于“只有一半的人打字,只有一半代码是产品代码”,所以会降低产出(生产效率)。为此,Mike列举了“编程”时常见的11种活动,然后说道:

请注意往电脑里打字只占列表很小的一部分,因为编程时真正有难度的是思考,而不是打字。列表中所有其它内容(可能扔东西要除外)都是关于思考的,而不是打字。

测试驱动开发可以提高生产效率,因为它有助于思考。它避免了你编写代码时从头再来和对功能的画蛇添足,减少了代码的反复研究和调试。结对编程由于同样的原因也会提高你的生产效率。两个开发者在一块并不能像分开打字那么快,但是我们并不担心:软件开发的瓶颈是思考[不是打字],而结对编程和测试驱动开发都能提高思考效率。

Mike概括总结了3个建议,可以提高团队的生产效率:

如果你想提高团队的生产效率,就照这3条做:

修改任何代码前先编写一个会失败的简短测试

遵循“不结对,不干活”的原则

所有人要认识到内部质量的重要性

如果你知道有人(或者就是你自己)认为他们“没有时间结对或者测试驱动开发”。希望Mike的文章能够有所帮助。

查看英文原文:How TDD and Pairing Increase Production

本文来自:www.infoq.com/cn/news//05/hill-pair-tdd-for-productivity

篇4:产品测试与开发求职简历

产品测试与开发求职简历
姓 名: 性 别: 男 
出生年月: 1986-11-3婚姻状况: 已婚
民 族: 汉族政治面貌: 团员
身 高: 180cm体 重: kg
户 籍: 江苏省宿迁市宿豫区现所在地: 江苏省苏州市虎丘区
最高学历: 大学本科毕业学校: 苏州大学
毕业时间: 2009-6-1职 称: 无线电高级调试工程师
特长概括: 三年产品测试与开发
自我评价

1、乐观向上,大方开朗,热情务实;善与人交流,人际关系良好,待人诚恳;工作认真负责,具有吃苦耐劳、艰苦奋斗的精神;遇事沉着冷静,理智稳重,适应能力强,具备良好的组织协调能力。

2、专业知识扎实,熟悉基本的电路理论和电力电子元器件的相关知识并具有一定的实践经验,开拓能力强。个人特别喜欢看书,在平时工作过程中一直在阅读关于新能源方面的书籍,目前正在看的.书籍是《电源发展》及《太阳能光伏并网发电及其逆变控制》。

求职意向
工作岗位: 电力/电气/能源类 职位性质: 全职
行业类别: 电力/电气/能源月薪要求: 面议
工作地区: 宿迁市-宿豫区到岗时间: 2周以内
其他要求: 工作方面努力积极,很有上进心,和同事相处很融洽。专业方面对电力、电气元件的基本使用和参数的判断有很深的了解,有较好的动手能力,开拓能力强。
教 育
学历学校名称专业时间范围专业描述
大学本科苏州大学电子科学与技术 9月-6月主修课程:

模拟电子技术、数字电子技术、数字信号处理、网络互联技术、单片机原理与应用技术、信号与线性系统、传感器原理与应用、微型计算机控制原理、专业英语、EDA、Protel DXP、MATLAB、PLC等。

培 训
1月-206月 培训课程:模拟电路,PLC控制,单片机
培训机构:苏州市劳动局培训地点:苏州大学
获得证书:苏州市无线电高级调试工程师证书
培训描述:主要学习如何发现问题以及发现问题以后如果去解决。

模拟电路:主要是学习示波器和函数信号发生器,主要是学习它们的工作原理和测试方法。

PLC控制:主要是学习三菱PLC编程控制,例如:交通灯,电动机正反转等等。

单片机:主要是学习编程,以及如何在计算机上进行通信。

语言能力
外语语种掌握程度
英语熟练
工作经验
201月-3月 :仁宝电子科技昆山有限公司
公司性质:外商独资所属行业:信息技术和互联网(计算机)
所在部门:系统维护部担任职务:电气工程师
工作描述:主要负责生产线,实验室,服务器等一些常用电源的维护和维修。

稳压电源:主要用在SMT生产线、自动插件机、生产制程及控制设备等设备。在生产过程中如果遇到不稳压或者稳压有时好有时坏的情况下我要负责去维修。

UPS:主要用在网络伺服器、光学自动检测仪、SMT等设备。UPS主要有四种工作模式,主要针对这几种工作模式进行监控,定期对电池进行充放电管理。防止电池长时间不用失效。

变频电源:主要用在产品寿命及安全测试、显示器、实验室仪器等设备。主要针对整流和逆变故障及保护板进行维护。

直流电源:主要用在LCD面板测试和自动测试系统(ATE)等设备。主要检测输出的电压和电流是否正常

离职原因:公司搬迁到重庆,成都
2009年3月-现在 :艾普斯电源苏州有限公司
公司性质:外商独资所属行业:电力/电气/能源
所在部门:产品工程部担任职务:产品工程师
工作描述:公司主要的产品包括:直流电源、稳压电源、变频电源、UPS、岸电电源以及提供给光伏行业测试使用的模拟电源。

1 深入发掘老市场,从老市场中发现新的应用领域,探知并发掘新的电源市场。

2 对业务人员进行技术上支持,帮助业务人员完成技术方案或投标文件的技术应答。

3 负责对业务人员要求的厂访客户的接待、参观与产品介绍任务。

5 陪同业务同仁到客户处进行技术支援,向业务同仁提供产品培训。

6 新产品与公司新动态在公司内部EIP的发布,配合行销,并为行销提供相关的资料。

7 及时了解并掌握新产品的规格、特点、市场定位与同类产品的竞争优势。

8 对于产品竞争对手、新领域、新技术、新工艺等方面的资料进行收集、整理与分析。

9 为客户提供产品解决方案与系统解决方案。

10 使用protel DXP画图并且合理布线,减少干扰以及零部件的电气特性的选定。

离职原因:不想再苏州发展了,工资不是太满意
相关证书
(信息来源于大学生个人简历网hTtp://wWw.yJsjl.ORg/请注明)
联系方式

篇5:GNSS地基集成测试与开发环境

GNSS地基集成测试与开发环境

GNSS地基集成测试与开发环境可测试和监测GPS,GLONASS,GALILEO等多种导航星座的空间信号,更重要的'是测试和认证各种新型接收机和应用产品的性能和指标.同时为新的GNSS系统投入运行前进行必要的信号结构试验、接收机试验等.本文从集成测试与开发环境建立动机和目标入手,重点阐述了其运行模式、系统结构、测试区域选择标准,并进行了逼真度分析以及系统规划.以期对我国自主研发GNSS集成测试与开发环境做些探索性工作.

作 者:靳文瑞 战兴群 Jin Wenrui Zhan Xingqun  作者单位:靳文瑞,Jin Wenrui(上海交通大学空天科学技术研究院,上海,30)

战兴群,Zhan Xingqun(上海伽利略导航有限公司,上海,33)

刊 名:航天控制  ISTIC PKU英文刊名:AEROSPACE CONTROL 年,卷(期): 24(6) 分类号:V4 关键词:全球导航卫星系统   地基   集成测试环境   伽利略  

篇6:森林旅游资源开发中问题与对策

森林旅游资源开发中有关问题与对策

针对当前森林旅游资源开发中出现的有关问题,如盲目建设,导致部分森林旅游地美誉度不高;脱离主题,导致森林旅游资源开发性污染;行布失韵,导致森林旅游资源功效低下等,进行了客观的分析,并提出了商榷性建议.

作 者:江传贵 邱尧荣  作者单位:江传贵(福建省猫儿山国家森林公园,泰宁,364400)

邱尧荣(国家林业局华东调查规划设计院,金华,321001)

刊 名:华东森林经理 英文刊名:EAST CHINA FOREST MANAGEMENT 年,卷(期):2001 15(2) 分类号:F59 关键词:森林旅游   旅游地   资源开发   污染  

MSN病毒原理及测试代码

前端开发面试问题

生态旅游开发的问题研究

无线路由器问题怎么测试

试析西部开发中的民族文化多元与一体问题

市场开发与营销个人简历

浅析旅游资源开发与环境保护

智慧故事——开发与行销

任务驱动教学反思与重建报告

《弟子规》测试试卷与答案

《测试驱动开发与遗留代码的问题(共6篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档