测试驱动开发与代码重构 -TDD & Refactoring

Slides:



Advertisements
Similar presentations
模板的使用 教育学 江西教育学院教育系 冯芳 2012 - 10. 第二章 教育学的产生和发展 第一节 教育学的研究对象和任务 第二节 教育学的产生与发展 第三节 学习教育学的意义与方法.
Advertisements

迪士尼公主裙衫变化记. 《白雪公主和七个小孩人》 《白雪公主和七个小矮人》,是世界电影史上第一部长动 画片,也是迪士尼的第一部。《白雪公主》不仅为迪斯尼 带来了第一尊奥斯卡小人,更是拯救迪斯尼于水火的贵 人 —— 在经济大萧条的 1937 年的美国,《白雪公主》为迪 斯尼赚到了 850 万美元,这约等于现在的数亿美元!
用 藥 安 全 用 藥 安 全 護 理 師 張 嘉 芬. 前 言 前 言 正確用藥的方法 藥袋上的秘辛 為了減少重大疾病或是醫療處理、 用藥不當的相關事件發生。
阿尔伯特亲王 阿尔伯特亲王纪念碑 维多利亚女王夫妇 维多利亚女王一家 建造水晶宫 水晶宫初建时的照片.
梦想启航 ——大学生活与职业规划专题讲座.
壹 展会营销方式 在休闲娱乐产业中的分析. 壹 展会营销方式 在休闲娱乐产业中的分析 对于行业、企业、产品的作用 会展营销 的作用 会展营销 集行业资源要素、灵活多变的活动手段、面对面的展览展示等优点,已经发展成为所有行业开展营销工作的首选手段。 1、市场调研功能 5、注意力经济效应 2、产品创新功能.
河北保定外国语学校 高三家长会.
行政执法人员 综合法律知识培训 二OO六年八月.
第2框 文化创新的途径 考点:理解文化创新的重要途径.
以信息化带动教育现代化,打造教育的“南山质量”
指 导:高歌老师 责任编辑:汤杰林 杜峥 供 稿:课代表 班委会 团长 栏目创编:张廷信 技术编辑:汤杰林 杜峥 常务编辑:杜峥
个体税收征管政策讲解 浏阳市地方税务局.
安全自护我能行 ——八年(1)班主题班会.
C语言程序设计 李伟光.
封面 2015易驾考最新分享: 科目二考试方法秘诀 文章来源:易驾考官网.
基于行业的 企业技术创新信息保障体系研究 刘 华 博士 中国科学技术信息研究所.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
第四讲 1949—1991年的中苏关系 及其经验教训.
麵包的秘密 作者:奧亨利.
“鼠标加水泥”的百货公司——武汉中百 朱巧巧 陆嘉怡 田泽宇.
合理控制索道游客流量 确保景区可持续发展 云南丽江玉龙雪山索道 陈加林 二0一五年十一月.
千里挑一的“征途” ——浅谈中国“国考”热.
臺南市104學年度 國民中小學新進教師研習課程 廉政宣導與案例研習 臺南市政府教育局政風室 科員 黃彥雄.
技職教育之人才培育 -以育達商業技術學院為例 王育文 戴美華 育達商業技術學院 吉林大學企業管理系 副校長 博士生
每周物流资讯 苏州得尔达国际物流有限公司 第四十三期.
龙海公寓· 多城一家O2O项目 商业计划书 2015年7月.
99年成語200題庫(21-40).
临沂市华泰工艺美术有限公司 人事管理制度培训.
僑務委員會法規委員會 專門委員兼執行秘書徐佑伶
法務部行政執行署彰化分署 行政執行官李垂章
扬州大学建筑科学与工程学院 青年共产主义学校 第十期暨主要学生干部培训班 二OO八年十二月.
個人投資理財分析 財務狀況匯總表 銀行存款 共同基金 外幣基金 股票投資 保險價值 黃金投資 支出預算 房貸計算 不動產價值 資源變化資料庫
班主任素质提升要走自主发展之路 广 东 技 术 师 范 学 院 外国语学院 英语(翻译)12级1班 李秀云.
引领民族复兴的战略布局 —— 关于“四个全面”若干问题之解读 福建省委党校 福建行政学院 曹敏华教授.
法務部行政執行署彰化分署 行政執行官李垂章
语文阅读领航—— 律师种类介绍 李泽键小组 组员:李泽键、谢力、郑皓、于济铭、江迎.
农作物病虫害图解 阜宁县农业干部学校 二OO九年四月.
克拉玛依职业技术学院klmyzyjsxy
臺北市立松山家商 103學年度第1學期 學校日 教學說明 簡報
報告人: 財政部採購稽核小組稽核委員 台灣菸酒股份有限公司王自來
珍惜时间 提高效率 初二1班
大拇指游戏的类似经历 1、作息时间? 2、 考试成绩? 板书,表情典型性 3、心情?.
Sarah Lottman, SAP September, 2016
AngularJS -- 使用AngularJS进行开发
欢乐玩转单元测试之JUnit 讲师:FREE QQ:
走进编程 程序的顺序结构(二).
Visual Studio Team System 简介
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第九章 測試工具與測試管理系統.
JUnit介绍.
个人简历 PERSONAL RESUME.
第十一讲 测试驱动开发.
JUnit(java单元测试工具)
单元测试工具XUnit 任课老师:黄武 下午2时20分 25.
SOA – Experiment 2: Query Classification Web Service
录制回放工具使用说明 鲁晓宇
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第三組 成員 王郁昀 美術 李孟澤 程式 王子榮 企劃 美術 李奕增 企劃 美術 石名辰 企劃 程式 許登竣 美術.
地質篇 Unit_04_地質年代.
聚合型第一種:隱沒帶、島弧 例子:臺灣東方的琉球海溝、南美洲智利海溝. 聚合型第一種:隱沒帶、島弧 例子:臺灣東方的琉球海溝、南美洲智利海溝.
从“聚焦课堂”到  “关注教育教学全过程” 浙江省教育厅教研室 张 丰 二OO八年十二月.
臺北市私立大同高中105年 地震疏散演練 上午9時21分, 實施防災演練, 9月13日0730實施預演.
明湖國小 文書講習 時間: 地點:總務處.
Module_5_Unit_4_ppt Unit4:非线性系统的描述函数法 东北大学《自动控制原理》课程组.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
方格紙上畫正方形.
DEV310 Microsoft Visual Studio 2005托管代码调试
质量控制(QC)模式 BrookFIELD.
DEV243 Visual Studio Team System 测试深入探讨
Presentation transcript:

测试驱动开发与代码重构 -TDD & Refactoring 2007-03-16 张永吉

技术特质 开放 坦诚 勇气 批评和自我批评 快乐 沟通 团队协作

软件开发的现实 随着时间的改变,软件也会改变。 每个人都愿意去维护整齐优美的代码。 但是: 如何应付软件随时间的改变而改变? 如何编写健壮优美的代码?

没有进行单元测试的软件开发过程 编写代码 编译 修正编译错误 有问题 调试, 肉眼观察 可交付的代码 没问题(自认为)

测试驱动开发过程 编写测试 重构代码 编译 可 交 付 代 码 运行测试, 使其通过 修正编译错误 写点代码 运行测试, 看它失败

不存在不能进行自动测试的程序。[Kent Beck] 测试哲学 不存在不能进行自动测试的程序。[Kent Beck]

测试驱动开发技术 单元测试技术 代码重构 单元测试是重构成功的关键。 重构准则:改变一小步,测试,然后再改变一小步,测试…… 对代码片断外部行为的验证 单元测试应该是交付代码的必不可少的一部分。 代码重构 不改变代码的外部行为而改变其内部结构使其更好理解,更容易扩展的过程 单元测试是重构成功的关键。 重构准则:改变一小步,测试,然后再改变一小步,测试……

单元测试框架 DotNet Java Nunit TestDriven.Net Nmock Rhino Mock Junit Jmock EasyMock

Demo-最简单的一个单元测试 Nunit的Attribute属性说明 [TestFixture] – 表明类 [Ignore] -- 略过一个测试

测试执行过程 执行SetUp 执行测试方法1 执行TearDown 执行测试方法2 ….. 执行测试方法n

JUnit assertTrue(String message, Boolean test) assertFalse(String message, Boolean test) assertNull(String message, Object object) assertNotNull(String message, Object object) assertEquals(String message, Object expected, Object actual) (uses equals method) assertSame(String message, Object expected, Object actual) (uses == operator) assertNotSame(String message, Object expected, Object actual

NUnit Assert.AreEqual(Object o1, Object o2); Assert.AreNotEqual(Object o1, Object o2); Assert.AreSame(Object o1, Object o2); Assert.AreNotSame(Object o1, Object o2); Assert.IsTrue(bool condition); Assert.IsFalse(bool condition); Assert.IsNull(Object o); Assert.IsNotNull(Object o);

编写单元测试的十大理由 测试能减少增加新功能时的bug 测试是最好的程序说明文档 测试能降低改变代码的代价 测试能改善代码的设计 测试是重构成为可能 测试强制你去思考软件实现的细节 测试能加快开发进程 测试能减少编写代码的恐惧,带来自信 测试使你的每一片代码都建立的在扎实的基础之上。 可用于回归测试,提高代码的可维护性, 保证代码长期质量。

xUnit测试家族 Junit Nunit HtmlUnit DbUnit JsUnit …..

Demo-猜数字 关键点分析: 技术和工具 随机生成不重复的4位数字 根据游戏者输入的数字,验证并返回结果 Winform C# Nunit独立版

大话西游之单元测试[转载] “我知道这个项目bug很多,无法按时完成,即使老板把我炒了也是应该的。曾经有一个做单元测试的机会放在我面前,我没有珍惜,等到后来项目雪崩了才后悔。如果上天能给我再来一次机会的话,我会对老板说:我要做单元测试!如果一定要在单元测试上加个日期,我希望是一直。"

可怜的老兄,我早该告诉他应该先测试,再编码.

参考资料-书 测试驱动开发实践指南 Pragmatic Unit Testing in C# with Nunit 从头到尾讲解一个测试驱动开发的实际例子[java] Pragmatic Unit Testing in C# with Nunit 实用程序员系列,短小精悍,简单易懂 Pragmatic Unit Testing in Java with Junit Junit Recipes 全面讲解Junit的各类应用 重构-改善既有代码的设计 [Martin fowler] 第一本全面讲解重构技术的书,作者为OO界的大师Martin fowler

参考资料-在线网址 http://www.junit.org/index.htm http://open.ncsu.edu/se/tutorials/junit/ http://www.cs.umanitoba.ca/~eclipse/10-JUnit.pdf http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/junit/junit.pdf http://junit.sourceforge.net/javadoc/junit/framework/ http://www.xprogramming.com http://www.martinfowler.com http://www.nunit.org http://www.mockobjects.com

Thanks! assertTrue(“你听懂了,并有所收获。”); assertTrue(“马上开始编写你的第一个单元测试。”); assertTrue(“让TDD成为你的软件开发过程。”);