<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>哇寶部落格 &#187; PHPUnit</title>
	<atom:link href="http://blog.wabow.com/archives/tag/phpunit/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.wabow.com</link>
	<description>Wabow Information Inc. Blog</description>
	<lastBuildDate>Fri, 20 Jan 2012 09:19:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>[心得] 用 PHPUnit 開發體驗II</title>
		<link>http://blog.wabow.com/archives/1856</link>
		<comments>http://blog.wabow.com/archives/1856#comments</comments>
		<pubDate>Fri, 31 Jul 2009 04:12:57 +0000</pubDate>
		<dc:creator>suzy</dc:creator>
				<category><![CDATA[軟體測試]]></category>
		<category><![CDATA[PHPUnit]]></category>

		<guid isPermaLink="false">http://blog.wabow.com/?p=1856</guid>
		<description><![CDATA[這次利用 PHPUnit 開發編碼解碼器... 體驗一下... 我需要 Fu ~~~~ 大致的開發過程應該跟大家都差不多, 有為了是否要再細分更多的小 assert function 猶豫了一下, 不過最後還是統統寫在一起. 我的 Encode 規則/步驟 草稿: 1. 濾掉所有不合法的字元,  字串長度若不等於4:  error 2. 把4個字元分別轉成 ASCII code 3. 轉成ASCII code 之後 再檢查要在這個範圍以內: 48-57, 65-90, 97-122 4. 生成檢查碼(第17碼), 規則為四組數字轉為十位元數字相加總和 的 random 其中一個數字. 規則為四組數字轉為十位元數相加總和的最後一個數字 5. 自訂一個 Binary Key, 增加公式的複雜性 6. 將四組數字 "分別"跟 Binary Key 作 XOR 比較 7. 出來的結果 [...]]]></description>
			<content:encoded><![CDATA[<p>這次利用 PHPUnit 開發<strong>編碼解碼器</strong>... 體驗一下... 我需要 Fu ~~~~<br />
<span id="more-1856"></span><br />
大致的開發過程應該跟大家都差不多, 有為了是否要再細分更多的小 assert function 猶豫了一下, 不過最後還是統統寫在一起.</p>
<h4>我的 Encode 規則/步驟 草稿:</h4>
<p>1. 濾掉所有不合法的字元,  字串長度若不等於4:  error<br />
2. 把4個字元分別轉成 ASCII code<br />
3. 轉成ASCII code 之後 再檢查要在這個範圍以內: 48-57, 65-90, 97-122<br />
4. 生成檢查碼(第17碼), <span style="text-decoration: line-through">規則為四組數字轉為十位元數字相加總和 的 random 其中一個數字. </span>規則為四組數字轉為十位元數相加總和的最後一個數字<span style="text-decoration: line-through"> </span><br />
5. 自訂一個 Binary Key, 增加公式的複雜性<br />
6. 將四組數字 "分別"跟 Binary Key 作 XOR 比較<br />
7. 出來的結果 轉成10位元數以後再*檢查碼</p>
<h4>範例:</h4>
<p>Step1: ABCD<br />
Step 2, 3:  ASCII = 65 66 67 68,<br />
Step 4: SUM: 65 + 66 + 67 + 68 = 266,  <span style="text-decoration: line-through">Random 從中選一個數字: 6</span>. 最後一個數字:6<br />
Step 5: 自訂 Binary Key: 1010001<br />
Step 6: 1000001 XOR 1010001 = 0010000, 1000010 XOR 1010001 = 0010011, 1000011 XOR 1010001 = 0010010, 1000100 XOR 1010001 = 0010101<br />
Step 7: 0010000 = 16, 19, 18, 21  = [0096] [0114] [0108] [0126] [6]</p>
<p>寫完以上推論並人工算完第一個範例, 確定可行之後開始寫 PHPunit 的 測試程式.</p>
<h4>過程中產生了一點疑問:</h4>
<p>1. 若我的 output 會變 (因為檢查碼是活的, random 產生的, 也反推的回來), 那麼 PHPUnit 是否有法處理無唯一解的狀況咧??</p>
<p>還請 Jace 指點迷津 <img src='http://blog.wabow.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wabow.com/archives/1856/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[心得] 用 PHPUnit 開發初體驗</title>
		<link>http://blog.wabow.com/archives/1788</link>
		<comments>http://blog.wabow.com/archives/1788#comments</comments>
		<pubDate>Thu, 23 Jul 2009 06:26:34 +0000</pubDate>
		<dc:creator>suzy</dc:creator>
				<category><![CDATA[軟體測試]]></category>
		<category><![CDATA[PHPUnit]]></category>

		<guid isPermaLink="false">http://blog.wabow.com/?p=1788</guid>
		<description><![CDATA[PHPUnit =  在黑黑的 console 下寫程式 總共花的時間(去除掉安裝 PHPUnit), 大概是 2小時又多一點吧 我感受到使用 PHPUnit 的優點 寫到第九, 第十個條件的時候, 我發現我可以一次測全部十個, 這樣一次到位的感覺還不錯. 在過去我的作法就是一個一個試, 跟 "憑經驗" 囉. 因為寫程式常常會發生: 新增了OOO, 舊的XXX壞了, 只好再重修, 再測試... 有時隔段時間再寫, 遇到這樣的狀況真的還滿頭痛的. 我想等到假如有100條件的時候, 測試先行這個優勢會更明顯. 另外, 我有兩個問題想問 Jace 的是: 第8, 9 一定要用 TDD 的用意是? 還有結果我沒有用到 testBuildImage() 跟 testBuildYoutube() 耶 ..... 那我要怎麼用它們呢? 心得 1. 單元測試 我想可能就像"條列"可以幫助思考一樣吧, 把一個很複雜的東西打散成很多個小部份, 等到全部的小部份完成, 再組合起來即是(接近)完成, 簡單明瞭. 以提升人類處理事件的效能來看, 可能會真的會比較快也不一定喔!? [...]]]></description>
			<content:encoded><![CDATA[<p>PHPUnit =  在黑黑的 console 下寫程式</p>
<p>總共花的時間(去除掉安裝 PHPUnit), 大概是 2小時又多一點吧</p>
<p><a href="http://blog.wabow.com/wp-content/uploads/2009/07/未命名-31.jpg"><img class="alignnone size-full wp-image-1816" src="http://blog.wabow.com/wp-content/uploads/2009/07/未命名-31.jpg" alt="未命名-3" width="829" height="277" /></a></p>
<p><span id="more-1788"></span></p>
<h2>我感受到使用 PHPUnit 的優點</h2>
<p>寫到第九, 第十個條件的時候, 我發現我可以一次測全部十個, 這樣一次到位的感覺還不錯. 在過去我的作法就是一個一個試, 跟 "憑經驗" 囉.</p>
<p>因為寫程式常常會發生: 新增了OOO, 舊的XXX壞了, 只好再重修, 再測試... 有時隔段時間再寫, 遇到這樣的狀況真的還滿頭痛的.</p>
<p><span style="color: #ff6600"><strong>我想等到假如有100條件的時候, 測試先行這個優勢會更明顯.</strong></span><br />
另外, 我有兩個問題想問 Jace 的是:</p>
<ul>
<li>第8, 9 一定要用 TDD 的用意是?</li>
<li>還有結果我沒有用到 testBuildImage() 跟 testBuildYoutube() 耶 <img src='http://blog.wabow.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ..... 那我要怎麼用它們呢?</li>
</ul>
<h2>心得</h2>
<p>1. 單元測試 我想可能就像<span style="color: #ff6600">"條列"可以幫助思考</span>一樣吧, 把一個很複雜的東西打散成很多個小部份, 等到全部的小部份完成, 再組合起來即是(接近)完成, 簡單明瞭. 以提升人類處理事件的效能來看, 可能會真的會比較快也不一定喔!?<br />
2. 第二個我覺得會比較快一些的理由:  當我們單純地只去做某一部份, 以 performance 來說, 如果每次 reload 都快個 2 秒, 那100次就快200秒囉.<br />
或許在這一次的作業, 我們感受不出來很大的差別, 但假如 我們在一個已存在且龐大的 framwork 架構下寫程式, 而每一次 reload 都要連資料庫, 跑 3-5個 sql, 然後才去執行程式, 長期下來就會慢滿多囉.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wabow.com/archives/1788/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[心得] 測試先行感想 Part One</title>
		<link>http://blog.wabow.com/archives/1792</link>
		<comments>http://blog.wabow.com/archives/1792#comments</comments>
		<pubDate>Thu, 23 Jul 2009 06:01:07 +0000</pubDate>
		<dc:creator>abu</dc:creator>
				<category><![CDATA[軟體測試]]></category>
		<category><![CDATA[PHPUnit]]></category>

		<guid isPermaLink="false">http://blog.wabow.com/?p=1792</guid>
		<description><![CDATA[恩，這次的題目『仿噗浪之輸出字串替換』，感覺比較有趣部份，就是替換過程，為了讓流程簡化當然正規式是不二人選，如同阿丹提到的，這是場與正規式的拉力戰，戰勝正規式的就能戰勝噗浪(是這樣說的嗎？)，一方面使用PHPUnit提供的檢測方式，一方面使用傳統的Reload大法檢測，說真的，感覺不出來差別，真的要說就是，一邊是全彩FullHD這樣，畫面很漂亮，瀏覽器五顏六色這樣，一邊是Dos畫面，跟Mud一樣，會出現偶發的Perform(施展外功)帶出來的彩色文字，看到都是綠字的時候代表對方被你打死了或是中毒很深代表檢測通過了，目前有感受到一個好處，就是『看到是對的，不一定是對的』↓ 例如：在試著轉換輸入字串時，網頁上看到的樣式是 Yahoo 看起來是對了，but.....！實際上是錯，因為轉換出來的其實是 &#60;a href=&#34;http://Yahoo&#34;&#62;Yahoo&#60;/a&#62;&#60;a href=&#34;&#34;&#62;&#60;/a&#62; 為什麼輸出字串會發生錯誤呢？因為我程式寫錯了 (廢話) 重點是，網頁上瀏覽的結果是"對的"，實際上卻是錯的，當透過PHPUnit檢測，就能正確的顯示錯誤 所以目前的感受，是PHPUnit在Html檢測上比較實用？！as 阿丹`s talk (誠如阿丹所言) (請suzy小老師幫看文法是否有誤)，我應該也沒那個View....尚不得其單元奧義 囧]]></description>
			<content:encoded><![CDATA[<p>恩，這次的題目『仿噗浪之輸出字串替換』，感覺比較有趣部份，就是替換過程，為了讓流程簡化當然正規式是不二人選<span id="more-1792"></span>，如同阿丹提到的，這是場與正規式的拉力戰，戰勝正規式的就能戰勝噗浪(是這樣說的嗎？)，一方面使用PHPUnit提供的檢測方式，一方面使用傳統的Reload大法檢測，說真的，感覺不出來差別，真的要說就是，一邊是全彩FullHD這樣，畫面很漂亮，瀏覽器五顏六色這樣，一邊是Dos畫面，跟Mud一樣，會出現偶發的Perform(施展外功)帶出來的彩色文字，看到都是綠字的時候<span style="text-decoration: line-through;">代表對方被你打死了或是中毒很深</span>代表檢測通過了，目前有感受到一個好處，就是『看到是對的，不一定是對的』↓</p>
<p>例如：在試著轉換輸入字串時，網頁上看到的樣式是<br />
<a href="http://Yahoo">Yahoo</a><a href=""></a><br />
看起來是對了，but.....！實際上是錯，因為轉換出來的其實是</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://Yahoo&quot;</span>&gt;</span>Yahoo<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span></pre></div></div>

<p>為什麼輸出字串會發生錯誤呢？因為我程式寫錯了 (廢話)<br />
重點是，網頁上瀏覽的結果是"對的"，實際上卻是錯的，當透過PHPUnit檢測，就能正確的顯示錯誤</p>
<p>所以目前的感受，是PHPUnit在Html檢測上比較實用？！as 阿丹`s talk (誠如阿丹所言)  (請suzy小老師幫看文法是否有誤)，我應該也沒那個View....尚不得其單元奧義 囧</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wabow.com/archives/1792/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[心得] 單元測試相關心得：單元測試與軟體開發</title>
		<link>http://blog.wabow.com/archives/1755</link>
		<comments>http://blog.wabow.com/archives/1755#comments</comments>
		<pubDate>Thu, 16 Jul 2009 06:33:09 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[軟體測試]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[單元測試]]></category>

		<guid isPermaLink="false">http://blog.wabow.com/?p=1755</guid>
		<description><![CDATA[上週經過 Jace 介紹 PHPUnit 的教育訓練，稍微了解關於 PHP 在單元測試時，使用 PHPUnit 應該如何運用。雖然開場的時候有簡單解釋一下什麼是「單元測試」，但是因為小弟在下資質駑鈍，完全處於一種有聽沒有懂的狀態；所以後來 Wiki 了一下，才知道單元測試僅是複雜的軟體測試的一小部分，而軟體測試，又只是龐大的軟體開發中的一個環節而已！（暈） 在茫茫網海收集資料的過程中，又發現到「Continuous Integration」這個軟體開發時的一種專案管理方式，它也十分重視測試的重要性；同時整合統一的版本控管系統、以及配合開發人員的撰寫精巧易維護，低耦合性的程式碼、最後經由一定時間自動從版本控管系統把程式拉出來測試，自動 build，自動通知相關人員的全自動化處理，做最完善的軟體專案流程控管。聽起來感覺上是非常理想又完美的軟體開發方式！（夢幻？） 太過深入研究軟體開發，似乎會有一種沒完沒了的感覺...（囧）單純就「單元測試」來說，是對於程式最小單位的類別，針對其內部邏輯正確性的驗證；所以通常一個程式類別，就應該伴隨著一個針對該類別，檢驗其內部方法的測試類別。因為單元測試的特色：徹底性、可重複性、獨立性與專業性，讓需要經由大量資料測試的程式，透過單元測試的方式達到自動化，並有效減少正式上線後錯誤的發生，達到令程式變得更加完美的目的。 然而現實環境通常沒有辦法盡如人意，撰寫單元測試就意味著必須花費額外的工時，在一秒鐘幾十萬上下的台灣似乎是一件不可能的任務；更不用提那夢幻的軟體開發方式 Continuous Integration 了...這樣的現實狀況似乎有呼應到教育訓練結尾的結論：「小案子就放它一馬吧；對 Web 開發而言，一般的 CRUD 並沒有特別需要作測試」。 不過隨著網際網路的發達，Web 的開發好像也愈來愈複雜；在 Google 都放出 Google Operating System 的現在，愈來愈有一種「網路是充滿無限可能，實現夢想（我要成為網路王？）的最佳舞台」的感覺！或許在不久的將來，程式的困難度與複雜度，讓測試變的更加困難時，單元測試的導入會是很好的解決方案...吧？ P.S 另外對於教育訓練中提到的「測試先行開發模式」，我深深的感到困惑；如果說在開始撰寫程式碼前必須先寫測試，那單元測試中需要引入的類別要從何而來啊？不先寫程式類別，要怎麼做 Test case 呢？ 參考資料： Midnight Blog Continuous Integration 當紅炸子雞 Continuous Integration SuiFei 單元測試基礎知識]]></description>
			<content:encoded><![CDATA[<p>上週經過 Jace 介紹 PHPUnit 的教育訓練，稍微了解關於 PHP 在單元測試時，使用 <a href="http://www.phpunit.de/" target="_blank">PHPUnit</a> 應該如何運用。雖然開場的時候有簡單解釋一下什麼是「單元測試」，但是因為小弟在下資質駑鈍，完全處於一種有聽沒有懂的狀態；所以後來 Wiki 了一下，才知道<a href="http://zh.wikipedia.org/w/index.php?title=%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95&amp;variant=zh-tw" target="_blank">單元測試</a>僅是複雜的<a href="http://zh.wikipedia.org/w/index.php?title=%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95&amp;variant=zh-tw" target="_blank">軟體測試</a>的一小部分，而軟體測試，又只是龐大的<a href="http://zh.wikipedia.org/w/index.php?title=%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91&amp;variant=zh-tw" target="_blank">軟體開發</a>中的一個環節而已！（暈）</p>
<p><span id="more-1755"></span></p>
<p>在茫茫網海收集資料的過程中，又發現到「<a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank">Continuous Integration</a>」這個軟體開發時的一種專案管理方式，它也十分重視測試的重要性；同時整合統一的版本控管系統、以及配合開發人員的撰寫精巧易維護，低耦合性的程式碼、最後經由一定時間自動從版本控管系統把程式拉出來測試，自動 build，自動通知相關人員的全自動化處理，做最完善的軟體專案流程控管。聽起來感覺上是非常理想又完美的軟體開發方式！（夢幻？）</p>
<p>太過深入研究軟體開發，似乎會有一種沒完沒了的感覺...（囧）單純就「單元測試」來說，是對於程式最小單位的類別，針對其內部邏輯正確性的驗證；所以通常一個程式類別，就應該伴隨著一個針對該類別，檢驗其內部方法的測試類別。因為單元測試的特色：徹底性、可重複性、獨立性與專業性，讓需要經由大量資料測試的程式，透過單元測試的方式達到自動化，並有效減少正式上線後錯誤的發生，達到令程式變得更加完美的目的。</p>
<p>然而現實環境通常沒有辦法盡如人意，撰寫單元測試就意味著必須花費額外的工時，在一秒鐘幾十萬上下的台灣似乎是一件不可能的任務；更不用提那夢幻的軟體開發方式 Continuous Integration 了...這樣的現實狀況似乎有呼應到教育訓練結尾的結論：「小案子就放它一馬吧；對 Web 開發而言，一般的 CRUD 並沒有特別需要作測試」。</p>
<p>不過隨著網際網路的發達，Web 的開發好像也愈來愈複雜；在 Google 都放出 <a href="http://googlesystem.blogspot.com/" target="_blank">Google Operating System</a> 的現在，愈來愈有一種「網路是充滿無限可能，實現夢想（<a class="wpGallery" href="http://blog.wabow.com/wp-content/uploads/2009/07/one_web.png">我要成為網路王？</a>）的最佳舞台」的感覺！或許在不久的將來，程式的困難度與複雜度，讓測試變的更加困難時，單元測試的導入會是很好的解決方案...吧？</p>
<p>P.S 另外對於教育訓練中提到的「<a href="http://zh.wikipedia.org/w/index.php?title=%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91&amp;variant=zh-tw" target="_blank">測試先行開發模式</a>」，我深深的感到困惑；如果說在開始撰寫程式碼前必須先寫測試，那單元測試中需要引入的類別要從何而來啊？不先寫程式類別，要怎麼做 <a href="http://en.wikipedia.org/wiki/Test_case" target="_blank">Test case</a> 呢？</p>
<p>參考資料：</p>
<ul>
<li>Midnight Blog <a href="http://blog.pbg4.org/2007/4/24/continuous-integration" target="_blank">Continuous Integration</a></li>
<li>當紅炸子雞 <a href="http://www.josephj.com/entry.php?id=251" target="_blank">Continuous Integration</a></li>
<li>SuiFei <a href="http://www.cnblogs.com/chinasf/archive/2008/03/07/1094334.html" target="_blank">單元測試基礎知識</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.wabow.com/archives/1755/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

