﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BlackStone SOA Group-随笔分类-Book Club</title><link>http://www.blogjava.net/blackstone/category/12596.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:34:14 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:34:14 GMT</pubDate><ttl>60</ttl><item><title>Blackstone Book Club 暂行规则（草案）</title><link>http://www.blogjava.net/blackstone/archive/2006/06/30/55971.html</link><dc:creator>BlackStone SOA</dc:creator><author>BlackStone SOA</author><pubDate>Fri, 30 Jun 2006 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/blackstone/archive/2006/06/30/55971.html</guid><wfw:comment>http://www.blogjava.net/blackstone/comments/55971.html</wfw:comment><comments>http://www.blogjava.net/blackstone/archive/2006/06/30/55971.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/blackstone/comments/commentRss/55971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blackstone/services/trackbacks/55971.html</trackback:ping><description><![CDATA[ <p>初步考虑了一下，我们可以先按照下面的办法来开始我们的活动，然后在活动中来完善规则。</p> <p>一、宗旨：知识共享，互相激励，提高读书效率</p> <p>二、阅读共享方向：暂时先锁定在IT相关领域</p> <p>三、基本活动与规则：</p> <blockquote style="MARGIN-RIGHT: 0px" dir="ltr"> <p>1. 会员每周至少要完成300页之上的阅读，并写出读书摘要（提交截止时间为每周五晚上12：00之前）。摘要内容为自己读书的心得总结。文章不要长篇大论的阐述，只要罗列出要点提示即可（不超过1000字）。会友阅读心得后，可就感兴趣之处进一步交流。摘要的命名方式为：心得标题-技术方向-原著名</p> <p>2. 会员应当仔细阅读他人的读书摘要，并给出评分0-100分</p> <p>3. 隔周的周日晚上9：00 为聚会时间，先在实验室由本轮（两周）得分最高的读书摘要的作者做一个１５分钟的演讲，而后寻找一个好去处继续自由交流（费用ＡＡ）</p> <p>4. 交流中产生的创意与技术要点由大家轮流做记录，整理后贴到Distillate中</p> </blockquote> <p>以上规则均为草案，欢迎大家提出意见，以进一步完善它。</p> <p align="right">王青</p> <p align="right">2006-6-30</p> <img src ="http://www.blogjava.net/blackstone/aggbug/55971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blackstone/" target="_blank">BlackStone SOA</a> 2006-06-30 15:47 <a href="http://www.blogjava.net/blackstone/archive/2006/06/30/55971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Driven By Test...</title><link>http://www.blogjava.net/blackstone/archive/2006/06/28/55543.html</link><dc:creator>BlackStone SOA</dc:creator><author>BlackStone SOA</author><pubDate>Wed, 28 Jun 2006 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/blackstone/archive/2006/06/28/55543.html</guid><wfw:comment>http://www.blogjava.net/blackstone/comments/55543.html</wfw:comment><comments>http://www.blogjava.net/blackstone/archive/2006/06/28/55543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blackstone/comments/commentRss/55543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blackstone/services/trackbacks/55543.html</trackback:ping><description><![CDATA[
		<h1 style="MARGIN: 17pt 0cm 16.5pt; TEXT-ALIGN: center" align="center">Driven By Test…</h1>
		<p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align="right">程启健（Kelvin）</p>
		<p style="MARGIN: 0cm 0cm 0pt">前两天Eric说搞个读书协会，那就让我来写第一篇吧。第一篇是关于Test-Driven Development的。</p>
		<p style="MARGIN: 0cm 0cm 0pt">TDD(Test-Driven Development)顾名思义就是测试驱动的开发。以测试驱动并不是代表以测试人员为中心进行开发，而是把要测试的内容作为软件开发的目标来开发。测试的Case就是我们要达到的目标。其原则如下：</p>
		<ul>
				<li>
						<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> 绝对没有未进行过测试的代码。</div>
				</li>
				<li>
						<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt">没有进行关联测试的代码不会进入产品中。</div>
				</li>
				<li>
						<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt">你必须写测试代码先。</div>
				</li>
				<li>
						<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt">测试决定了你要写的代码。</div>
				</li>
		</ul>
		<p style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">TDD和Refactoring成为XP中最重要的实践。两者相辅相成，重构就是不改变程序内在功能的前提下更改代码的结构。测试才能验证你的重构没有改变其功能。</p>
		<p style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">TDD的具体流程是怎样的呢？为何测试可以在编码先呢？</p>
		<p style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">以下是简单的TDD的Sample(摘自TDD a practical guide by David Astels):</p>
		<p style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">本Sample假设你已了解JUnit等测试软件。</p>
		<p style="MARGIN: 0cm 0cm 0pt">GOAL：做个电影的平均评分的函数。给个例子，假如观众甲给3分，观众乙给5分，平均分为4分。</p>
		<p style="MARGIN: 0cm 0cm 0pt">1.把目标做成测试用例。</p>
		<p style="MARGIN: 0cm 0cm 0pt">public void testRating() {</p>
		<p style="MARGIN: 0cm 0cm 0pt">assertEquals("Bad average rating.",4,starWars.getAverageRating());</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">Make it Simple。就让平均评分为4分先吧。</p>
		<p style="MARGIN: 0cm 0cm 0pt">2.但是总不能都是4分，而且评分的人可是观众阿。加个添加评分的函数。</p>
		<p style="MARGIN: 0cm 0cm 0pt">public void testRating() {</p>
		<p style="MARGIN: 0cm 0cm 0pt">starWars.addRating(3);</p>
		<p style="MARGIN: 0cm 0cm 0pt">starWars.addRating(5);</p>
		<p style="MARGIN: 0cm 0cm 0pt">assertEquals("Bad average rating.",4,starWars.getAverageRating());</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">3.什么电影呢？是星球大战！</p>
		<p style="MARGIN: 0cm 0cm 0pt">public void testRating() {</p>
		<p style="MARGIN: 0cm 0cm 0pt">Movie starWars = new Movie("Star Wars");</p>
		<p style="MARGIN: 0cm 0cm 0pt">starWars.addRating(3);</p>
		<p style="MARGIN: 0cm 0cm 0pt">starWars.addRating(5);</p>
		<p style="MARGIN: 0cm 0cm 0pt">assertEquals("Bad average rating.",4,starWars.getAverageRating());</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">4.编译这些代码的时候发现addRating(int)和getAverageRating()没有定义。赶紧在Movie类中写这些函数。</p>
		<p style="MARGIN: 0cm 0cm 0pt">public void addRating(int newRating) {</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">public int getAverageRating() {</p>
		<p style="MARGIN: 0cm 0cm 0pt">return 0;</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">测试失败？Bad average rating. expected:&lt;4&gt; but was:&lt;0&gt;</p>
		<p style="MARGIN: 0cm 0cm 0pt">5.应该返回4而不是0！那就返回4吧。</p>
		<p style="MARGIN: 0cm 0cm 0pt">public int getAverageRating() {</p>
		<p style="MARGIN: 0cm 0cm 0pt">return 4;</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">重新编译，绿条出现。Yeah。下面我们进入重构阶段了。</p>
		<p style="MARGIN: 0cm 0cm 0pt">6.评分是由3分+5分的和后除以2才得的。直接返回4不符合要求阿。改。</p>
		<p style="MARGIN: 0cm 0cm 0pt">public int getAverageRating() {</p>
		<p style="MARGIN: 0cm 0cm 0pt">return (3 + 5) / 2;</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">7.编译成功。又出绿条。但是算法上应该是总分除以个数才可以阿。继续该吧。</p>
		<p style="MARGIN: 0cm 0cm 0pt">private int totalRating = 0;</p>
		<p style="MARGIN: 0cm 0cm 0pt">private int numberOfRatings = 0;</p>
		<p style="MARGIN: 0cm 0cm 0pt">public void addRating(int newRating) {</p>
		<p style="MARGIN: 0cm 0cm 0pt">totalRating += newRating;</p>
		<p style="MARGIN: 0cm 0cm 0pt">numberOfRatings++;</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">public int getAverageRating() {</p>
		<p style="MARGIN: 0cm 0cm 0pt">return totalRating / numberOfRatings;</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">8.编译运行。绿色的.yeah.成功。写多些用例测试下。大家来评评《哥斯拉》这部电影。</p>
		<p style="MARGIN: 0cm 0cm 0pt">public void testLotsOfRatings()</p>
		<p style="MARGIN: 0cm 0cm 0pt">{</p>
		<p style="MARGIN: 0cm 0cm 0pt">Moviegodzilla = new Movie("Godzilla");</p>
		<p style="MARGIN: 0cm 0cm 0pt">godzilla.addRating(1);</p>
		<p style="MARGIN: 0cm 0cm 0pt">godzilla.addRating(5);</p>
		<p style="MARGIN: 0cm 0cm 0pt">godzilla.addRating(1);</p>
		<p style="MARGIN: 0cm 0cm 0pt">godzilla.addRating(2);</p>
		<p style="MARGIN: 0cm 0cm 0pt">assertEquals("Bad average rating.",2,godzilla.getAverageRating());</p>
		<p style="MARGIN: 0cm 0cm 0pt">}</p>
		<p style="MARGIN: 0cm 0cm 0pt">TDD就是这样一个编写测试、编写代码、再测试、重构、再测试的过程。实现尽量少的功能，不断地对代码进行重构。利用TDD开发出来的代码将会更干净、更安全、更易于重构的。</p>
		<p style="MARGIN: 0cm 0cm 0pt">
		</p>
		<br />
<img src ="http://www.blogjava.net/blackstone/aggbug/55543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blackstone/" target="_blank">BlackStone SOA</a> 2006-06-28 15:09 <a href="http://www.blogjava.net/blackstone/archive/2006/06/28/55543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>