<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Eric Hu's Weblog : Development</title><link>http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx</link><description>Tags: Development</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>A Powerful Tool to Diagnose Problems in Your Windows System</title><link>http://blogs.msdn.com/erichu/archive/2008/06/08/a-powerful-tool-to-diagnose-problems-in-your-windows-system.aspx</link><pubDate>Sun, 08 Jun 2008 00:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8580317</guid><dc:creator>zheyehu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/erichu/comments/8580317.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=8580317</wfw:commentRss><description>&lt;P&gt;我的專長不是做系統的, 不過前兩天純繂基於好奇, 去聽了一個有關 Windows 安全的講座, 席間的安全大師利用了一個好用的工具檢查電腦上有那些 Process 使用者是誰, 開了那檔案等等的資訊來研究潛在的安全性的問題, 發現原來微軟公司有提供這樣免費的工具: &lt;A class="" href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx" mce_href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process Explorer&lt;/A&gt;. 上網查了一下, 原來這個工具都出到第11版了(In fact, V11.20).&lt;/P&gt;
&lt;P&gt;相信大家一定有個經驗, 在和別人共用的電腦上 (甚至自己的電腦上), 有時某個 File 就是沒辦法打開, 但一時也找不到到底那個傢伙(或那個程序)佔用了這個檔案, 這種情形由其在做 I/O 時最煩,&amp;nbsp;這時這個工具就可以派上用場了. 進來這間公司這麼久了, 從來不知道有這種工具可以用, 用Task Manager 看通常又看不出個所以然來.&amp;nbsp;嗯...這樣說好像 Task Manager&amp;nbsp;很遜的樣子, 其實對一般使用者來說, Task Manager 就很夠用了. 只是如果你是個 Developer, 常搞不清你的程式到底為什麼跑不大動, 或跑不好, 或沒事給你來個 I/O Exception, 甚或你要做一些安全性的檢查, Task Manaher 就不夠用了&lt;/P&gt;
&lt;P&gt;講半天, 其實總歸一句話, 就如這個工具的作者在介紹這個工具的首頁上寫的: &lt;EM&gt;Process Explorer&lt;/EM&gt; shows you information about which handles and DLLs processes have opened or loaded. 而且包含的 Information 非常詳細, 除了我上面提到的, 還包括和 Security 會有關的 Integrity Level, 以及比 Task Manage 詳細很多的 System Information (CPU usage, I/O Bytes, Paging...等等). 更多的資訊可以參考 &lt;A class="" href="http://forum.sysinternals.com/" mce_href="http://forum.sysinternals.com/"&gt;Sysinternals Forum&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;還有, 如果你對 Windows Troubleshooting, Windows Security 有興趣, 可以去逛逛這個工具的作者的部落格: &lt;A class="" href="http://blogs.technet.com/markrussinovich/default.aspx" mce_href="http://blogs.technet.com/markrussinovich/default.aspx"&gt;Mark Russinovich's Blog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;最後, 為什麼我這個對這些東西不懂的門外漢會忽然發現這個東西呢? 因為那個有關 Windows 安全的講座就是這個工具的作者, 馬克先生主講的, 讓我這個孤陋寡聞的人發現這個對我來說很新但其實早就有的好用的東西. 雖然對安全性的這個領域沒有辦法了解太多, 發現這個工具也算是一個收獲.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8580317" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item><item><title>Using MS technologies in Interface-Based Programming</title><link>http://blogs.msdn.com/erichu/archive/2008/06/05/using-ms-technologies-in-interface-based-programming.aspx</link><pubDate>Wed, 04 Jun 2008 23:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8574012</guid><dc:creator>zheyehu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/erichu/comments/8574012.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=8574012</wfw:commentRss><description>&lt;P&gt;前一陣子我同學從台灣來找我, 這位同學之前用 Jave 工作比較多, 但現在的工作用 .Net. 他跟我提到, 在他的公司裏的人, 用 .Net 開發, 但完全不懂 Interface-Based Programming, 所以他要跟那些資深同事們溝通時都很挫折, 他問我, 難道用 .Net 的人都不管這個嗎? 是不是因為 Visual Studio 太好用, 隨便拖拉一下就可以寫出可以用的程式所以用 .Net 開發的人都不管架構...&lt;/P&gt;
&lt;P&gt;嗯, 關於這個 "Customer Feedback", 我就當成是個讚美, 感謝他肯定 "Visual Studio" 相較於 Java 世界的其它開發工具是 "太好用". 這樣我們每天辛苦的測試 Visual Studio, 總算沒有白費力氣.&lt;/P&gt;
&lt;P&gt;可是, 對於廣大的 .Net 開發者社群而言, 我想他的疑問應該沒有反映真實狀況, 所以我就在此分享一些 MSDN 上的文章, 希望對好奇怎麼利用 MS 技術做 Interface-Based Programming 的人有點幫助. &lt;/P&gt;
&lt;P&gt;首先, Interface-Based Programming, 這其實不是什麼新觀念. 以下這篇文章是用 VB6 來討論什麼是 Interface-Based Programming. 文章是1999年六用發表的, 也就是將近十年前, 在MSDN 上就有人開始講這個概念了:&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://msdn.microsoft.com/en-us/library/aa260635(VS.60).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa260635(VS.60).aspx"&gt;Understanding Interface-based Programming&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;再來,&amp;nbsp;以下這個 web cast 則是用 .Net 來解釋這個概念:&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032300798%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e" mce_href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032300798%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;MSDN Architecture Webcast: .NET Interface-Based Programming (Level 200)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;所以在 .Net 裏, 其實這個概念不是什麼新鮮事, 這其實也是所有用 OOP 開發應該要做的事. 所以我覺得我同學遇到情形應該只是個案.&lt;/P&gt;
&lt;P&gt;最後, 再次謝謝他肯定 Visual Studio 是個很好用的工具. 只是很好用的工具並不保證能開發很好用的產品, 重點還是在使用工具的人.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8574012" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item><item><title>Useful whitepaper for IIS7 and ASP.NET intergration</title><link>http://blogs.msdn.com/erichu/archive/2007/07/31/useful-whitepaper-for-iis7-and-asp-net-intergration.aspx</link><pubDate>Tue, 31 Jul 2007 08:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4142931</guid><dc:creator>zheyehu</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/erichu/comments/4142931.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=4142931</wfw:commentRss><description>&lt;P&gt;可能有很多人已經知道 IIS 7 和 ASP.NET 2.0 有更好的整合. 可是真正在開發時卻不一定知道要如何利用 IIS 7 的新功能, 或找不到好的參考文件.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.catalystss.com/blogs/scott_seely/archive/2007/06/12/128.aspx"&gt;Scott Seely&lt;/A&gt;&amp;nbsp;針對這一點發表了一 Whitepaper, 裏面包含了 IIS 7 架構, 功能介紹以及很多 Sample Code. 有興趣的話, 可以連結過去下載這個 Whitepaper.&lt;/P&gt;
&lt;P&gt;另外, 您也可以在 IIS 7 官方網頁上的 "&lt;A class="" href="http://www.iis.net/articles/view.aspx/IIS7/Hosting-Web-Applications/ASP-NET/ASP-NET-Integration-with-IIS7" mce_href="http://www.iis.net/articles/view.aspx/IIS7/Hosting-Web-Applications/ASP-NET/ASP-NET-Integration-with-IIS7"&gt;ASP.NET Integration with IIS 7&lt;/A&gt;" 這一篇文章裏面找到針對&amp;nbsp;IIS 7 如何整合 ASP.NET 的簡介.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4142931" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item><item><title>VS 2005 Team Edition for Database Professionals Service Release 1 is available</title><link>http://blogs.msdn.com/erichu/archive/2007/07/31/vs-2005-team-edition-for-database-professionals-service-release-1-is-available.aspx</link><pubDate>Tue, 31 Jul 2007 07:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4141938</guid><dc:creator>zheyehu</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/erichu/comments/4141938.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=4141938</wfw:commentRss><description>&lt;P&gt;VS 2005 Team Edition for Database Professionals 出 Service Release 1 了, 在這個&amp;nbsp;Service Release&amp;nbsp;裏增加了一些很有用的新功能, 以下就是三個在這個版本裏最重要的新功能:&lt;/P&gt;
&lt;P&gt;1. 跨資料庫參考&lt;/P&gt;
&lt;P&gt;藉由使用資料庫專案參考或參考資料庫中繼檔 (.dbmeta)，在不同的資料庫中參考物件。此支援將能減少或排除資料庫專案中出現的跨資料庫參考警告。&lt;/P&gt;
&lt;P&gt;2. 更好的 SQL Server 檔案群組檔案支援&lt;/P&gt;
&lt;P&gt;&amp;nbsp;您可以在檔案群組中定義檔案做為資料庫專案屬性，而不須在預先部署儲存指令碼中建立檔案與檔案群組&lt;/P&gt;
&lt;P&gt;3. 新增資料庫專案屬性中的變數頁&lt;BR&gt;&lt;BR&gt;資料庫專案屬性中新增了變數頁。這個新的頁面可用來定義部署指令中使用的&amp;nbsp;SQLCMD setvar 變數。SQLCMD 變數可以被 mapped 到 MSBuild&amp;nbsp;的屬性整合進專案建置系統裏.除此之外，SR1 支援 以上三項重要的新功能都可以在安裝 SR1 後在專案屬性頁中找到設定UI.&lt;/P&gt;
&lt;P&gt;另外這個&amp;nbsp;SR1 也支援更多的平台如 Microsoft SQL Server 2005 (SP2) 的最新版本更新服務和 Windows Vista 作業系統。&lt;/P&gt;
&lt;P&gt;如果您是 VS 2005 Database Professionals 的使用者, 建議您現在就可以到下列連結去下載這個更新以使用這些新功能:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=9810808c-9248-41a5-bdc1-d8210a06ed87" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=9810808c-9248-41a5-bdc1-d8210a06ed87"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=9810808c-9248-41a5-bdc1-d8210a06ed87&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4141938" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item><item><title>Unit Test in VS Pro</title><link>http://blogs.msdn.com/erichu/archive/2007/04/23/unit-test-in-vs-pro.aspx</link><pubDate>Mon, 23 Apr 2007 10:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2242872</guid><dc:creator>zheyehu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/erichu/comments/2242872.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=2242872</wfw:commentRss><description>&lt;P&gt;在 Orcas, 將 VS 2005 中只有 VSTS 才有的 unit test 放到 VS Pro 中了, 對於使用 VS Pro 開發程式的 developer, 往後做 unit test 就方便了.&lt;/P&gt;
&lt;P&gt;但是 unit test 在 VS Pro 中和 VSTS 還是有許不同, 例如 test list 的管理就不在 VS Pro 中, 詳細的情形, 請參考下列的 blog:&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://blogs.msdn.com/nnaderi/archive/2007/03/27/unit-testing-trickling-into-pro.aspx" mce_href="http://blogs.msdn.com/nnaderi/archive/2007/03/27/unit-testing-trickling-into-pro.aspx"&gt;Unit Testing Trickling into Pro&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2242872" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/Test/default.aspx">Test</category><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item><item><title>Some Useful Links of Windows Vista Global Development</title><link>http://blogs.msdn.com/erichu/archive/2007/03/15/some-useful-links-of-windows-vista-global-development.aspx</link><pubDate>Thu, 15 Mar 2007 02:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1883446</guid><dc:creator>zheyehu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/erichu/comments/1883446.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=1883446</wfw:commentRss><description>&lt;P&gt;大家或許都知道在 Vista 中, 對 I18N, 或口語一點的 International 環境有更好的支援. 我發現以下這個 blog 收集了一些 Windows Vista Global Development 的 links, 對想多瞭解 Vista 在這方面支援的人, 或需要在 Vista 上開發的人, 應該是很好的參考文件:　&lt;/P&gt;
&lt;P&gt;&lt;A class="" title="Aaron Stebner's Blog: Link to Windows Vista global development information" href="http://blogs.msdn.com/astebner/archive/2007/03/05/links-to-windows-vista-global-development-information.aspx" target=_blank mce_href="http://blogs.msdn.com/astebner/archive/2007/03/05/links-to-windows-vista-global-development-information.aspx"&gt;Aaron Stebner's Blog: Links to Windows Vista global development information&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1883446" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/General/default.aspx">General</category><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item><item><title>How to create a localize ASP.NET 2.0 web page in Visual Studio 2005 - II</title><link>http://blogs.msdn.com/erichu/archive/2006/08/12/696287.aspx</link><pubDate>Sat, 12 Aug 2006 09:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:696287</guid><dc:creator>zheyehu</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/erichu/comments/696287.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=696287</wfw:commentRss><description>&lt;P&gt;&lt;FONT size=2&gt;在上一篇 &lt;/FONT&gt;&lt;A href="http://http://blogs.msdn.com/erichu/archive/2006/08/01/685220.aspx"&gt;&lt;FONT size=2&gt;How to create a localize ASP.NET 2.0 web page in Visual Studio 2005 &lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;中, 我們用 .resx 檔來儲存所有在 web page 上要 localize 的 data, 但要是我要 localize 從某個 event 中傳回的 data, 例如最簡單的 "Hello World", 這個字串不在頁面上, 縱然我們也可以把 "Hello World"&amp;nbsp; 儲存在資源檔, 但要如何從事件中把這個字串中把這個字串取出來呢?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;在以前 .net 1.1 時, 我們可以把字串儲在 xxx.resources 檔中, 然後用 ResourceManager 把字串取出來, 但在我上一篇的作法, 我利用 VS 2005 generate 一個 xxx.resx 檔, 這個檔案基本上是以 xml 格式來儲存 &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconresourcesinresxfileformat.asp"&gt;&lt;FONT size=2&gt;resources&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;, 所以如果要用&amp;nbsp;ResourceManager, 我們必需用 &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpgrfResourceFileGeneratorUtilityResgenexe.asp"&gt;&lt;FONT size=2&gt;Resgen.exe &lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;這個工具將 xxx.resx 轉成 xxx.resources 我們才能利用 ResourceManager 來取出我們要的字串.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;現在在 .net 2.0, 我們有一個新的 method 在 System.Web.UI namespace 中 TemplateControl 這個 class 中: &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms153597.aspx"&gt;&lt;FONT size=2&gt;GetLocalResourceObject (string resourcekey)&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;, 所以上述的問題, 假設我的 "Hello World" 是要在按下 button 的 event 中去 update 某個 label 的 text value, 只要在 event handler 中加下列一行 code 就好啦:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Label1.Text = GetLocalResourceObject("HelloWorld").ToString();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;當然, 要記得在 xxx.resx 檔中加入 "HelloWorld" 這個 resource key 並指定它的value. 簡言之, 在 .net 2.0 中要 localize asp.net 2.0 的網站是越來越簡單了.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=696287" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item><item><title>How to create a localize ASP.NET 2.0 web page in Visual Studio 2005</title><link>http://blogs.msdn.com/erichu/archive/2006/08/01/685220.aspx</link><pubDate>Tue, 01 Aug 2006 15:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:685220</guid><dc:creator>zheyehu</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/erichu/comments/685220.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=685220</wfw:commentRss><description>&lt;P&gt;&lt;FONT size=2&gt;大家在瀏覽網頁時, 應該常會看到一個 link, 或 dropdown list 給 user 選擇網頁的語系或 user 所在的地區, 例如繁體中文, 英文, ...等等. 而利用 VS 2005, 我們現在可以在幾個簡單的步驟內做到不需要 user 多一個步驟去選擇, 即可依 user browser 的設定, 叫出我們存放在網站 resource file 裏的字串而達到 localize 網站的效果. 以下即為簡單設定網頁及建立資源檔的步驟:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;1. 在 VS 2005 中開啟要 localize 的網站&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;2. 選取 Tools -&amp;gt; Generate Local Resource&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;3. 這時 Visual Studio 會在 Solution Explorer 的網站這個節點底下自動 generate 出一個 App_LocalResources 的資料夾, 並生成一個選取網頁的資源檔, 例如 Default.aspx.resx&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;4. 複製一個所需文化特性的資源檔並 localize 所有資源檔中的字串, 例如我要將網頁 localize 成繁體中文, 就可將上個步驟生成的資源檔複製成 Default.aspx.&lt;FONT color=#0000ff size=3&gt;&lt;STRONG&gt;zh-tw&lt;/STRONG&gt;&lt;/FONT&gt;.resx, 這裏要注意藍色的部分是依不同文化特性而定, 例如我如果要 localize 成西班牙文可能就要另外複製一個 Default.aspx.es-es.resx 資源檔.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;5. 按 F5 測試你的網頁. 到這裏為止應該就完成所有 localize 的工作了, 依不同的 browser 顯示語言, 網頁即會自動顯示不同的 localized 頁面, 我們無需再另外寫 code 去呼叫或改變網頁的文化特性.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;如果我們在 VS 2005 中打開 Default.aspx 的 html 程式碼頁面, 我們會發現在我們為此頁面的資源檔後, 我們會發現 Visual Studio 後自動幫我們把 meta:resourcekey 塞進我們的網頁控制項中, 例如:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true"&amp;nbsp; CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" &lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#0000ff&gt;&lt;STRONG&gt;meta:resourcekey="PageResource1"&lt;/STRONG&gt;&lt;/FONT&gt; UICulture="auto" %&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;lt;asp:Button ID="Button1" runat="server" &lt;STRONG&gt;&lt;FONT color=#0000ff&gt;meta:resourcekey="Button1Resource1"&lt;/FONT&gt;&lt;/STRONG&gt; /&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;當然我們在資源檔中亦必需 localize 所有相關的字串, 例如以上的例子如果要設定原來 Button1 的中文 Text , 就必需在 Default.aspx.zh-tw.resx 中找到 Button1Resource1.Text 將其值填入我們想要在中文環境顯示的中文.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=685220" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item><item><title>Test-Driven Development and Visual Studio Team System</title><link>http://blogs.msdn.com/erichu/archive/2005/07/19/440037.aspx</link><pubDate>Mon, 18 Jul 2005 21:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:440037</guid><dc:creator>zheyehu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/erichu/comments/440037.aspx</comments><wfw:commentRss>http://blogs.msdn.com/erichu/commentrss.aspx?PostID=440037</wfw:commentRss><description>&lt;DIV class=Section1 style="LAYOUT-GRID:  18pt none"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;Test-Driven Development (TDD)&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;是一個在軟體開發週期中比較容易掌控軟體品質的開發方法&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;這種開發模式可以確保所有的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;requirement&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;都有相對應的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functional code, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;也不會有多餘而不必要的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;code&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;存在於產品中&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;. TDD&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;也是實行&lt;/SPAN&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="http://www.xprogramming.com/xpmag/whatisxp.htm#test"&gt;Extreme Programming&lt;/A&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;的其中一種&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;core practice. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;而利用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Team System&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;中的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test framework, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;就可以幫助開發團隊實行&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;TDD. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;所謂的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Test-Driven Development, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;顧名思義&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;就是先有&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;利用這些&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;去驅動各種&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functionality development. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;依照&lt;/SPAN&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/0321146530/ref=ase_ambysoftinc/002-5549212-6407238?v=glance&amp;amp;s=books"&gt;Kent Beck&lt;/A&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;的定義&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;有兩個基本的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;rules: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN lang=EN-US&gt;1.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Write new code only if an automated test has failed&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN lang=EN-US&gt;2.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Eliminate duplication&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;其實行的方法&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;大致上是由&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test team&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;先由&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;requirements&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;中開發出&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;然後&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;developer (&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;或&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;development team) &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;再去開發&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functions&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;來滿足這些&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;讓所有&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test cases pass. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;接著&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test team&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;再針對&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functions&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;寫新的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;這些新的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;可以根據修改過的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;requirement&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;和現存的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;function&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;來寫&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;並確定這些新增加的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test cases&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;會&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;fail. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;然後&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;developer&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;根據這些&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;failed test cases&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;來修改原來的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functions. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;這樣的過程不斷循環直至最後沒有&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test cases fail&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;為止&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;所以我們可以歸納出以下簡單的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;TDD&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;步驟&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN lang=EN-US&gt;1.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;撰寫&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN lang=EN-US&gt;2.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;撰寫或修改&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functional code&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN lang=EN-US&gt;3.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;撰寫新的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN lang=EN-US&gt;4.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;利用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;1.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;和&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;3.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;步驟中&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;測試&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functional code. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;反覆執行&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;2.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;到&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;4.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;步驟直到所有&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case pass&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;為止&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN lang=EN-US&gt;5.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;重整&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt; (refactor) functional code&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;以去除不必要的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;code.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;這樣的開發模式&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;讓&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;developer&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;能專注於解決&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;requirement, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;也確保每一段&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;code&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;都有相對的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;unit test, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;而經由&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;automated test framework, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;每一個&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;都是可以重覆實行的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;最終產品開發完成時品質也相對穩定&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;值得注意的是&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;並非實行了&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;TDD, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;其它的測試就不用做了&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;諸如&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;load test, integration test, functional test&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;還是要在開發過程中同時執行才能確保產品品質&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;所以要有效率的執行這樣的開發流程&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;自動化測試的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;framework&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;是有力且必要的工具&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;. VSTS&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;中就提供了一組好用的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;framework&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;來幫助開發團隊實行&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;TDD. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;在&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;VSTS&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;裏&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;現在多增加了一組&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;project template: Test Project. Create&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;一個新的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test project&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;後&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;就可以依照&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;requirement&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;來撰寫&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test method. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;例如我的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;requirement&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;要撰寫一個回傳&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;hello world&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;method, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;我可以先在我的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test project&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;裏&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;填入以下的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test class&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;和&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test mehotd:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;B&gt;&lt;SPAN style="COLOR: navy"&gt;TestClass&lt;/SPAN&gt;&lt;/B&gt;]&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;public class&lt;/SPAN&gt; &lt;B&gt;&lt;SPAN style="COLOR: navy"&gt;Test1&lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;B&gt;&lt;SPAN style="COLOR: navy"&gt;TestMethod&lt;/SPAN&gt;&lt;/B&gt;]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; HelloWorldTest()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; expected = "Hello World";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;B&gt;&lt;SPAN style="COLOR: navy"&gt;Assert&lt;/SPAN&gt;&lt;/B&gt;.AreEqual(expected, &lt;B&gt;&lt;SPAN style="COLOR: navy"&gt;HelloWorld&lt;/SPAN&gt;&lt;/B&gt;.HelloWorld());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: 新細明體"&gt; &amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;然後&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;compile&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;執行之&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;由於我們並未曾撰寫過&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: 'Courier New'"&gt;HelloWorld&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;這個&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;class&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;和&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;HelloWorld()&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;這個&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;method, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;我們的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;會&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;fail. Developer&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;根據這個&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;failed test case&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;撰寫了&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: 'Courier New'"&gt;HelloWorld &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN-US&gt;class&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;和&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;HelloWorld() &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;method&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;後&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, tester&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;再執行上述那個&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;HelloWorldTest&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;測試&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;developer&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;寫的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functional code&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;是否能讓&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case pass. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;反覆執行上述步驟直到&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functional code pass&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;所有的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;為止&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;. VSTS Quality Tools&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;還可以檢視&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;code coverage&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;以確保每一段&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functional code&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;都有完整的測試覆蓋&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;. Developer&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;也可以利用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;VSTS&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;中&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;refactoring&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;的工具&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;重整所有的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;functional code&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;來移除不必要的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;code&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;或修改之前的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;code. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;同理&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;如果&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test case&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;有錯誤或需求有改變&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;也可以利用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;refactoring&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;工具來修改&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test code.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;另外&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;VSTS&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;中的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Test Manager, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;則可以管理所有的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test cases, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;依照不同的需求執行部分或所有的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;test cases, &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 新細明體"&gt;並監控管理所有的測試結果&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=440037" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/erichu/archive/tags/Development/default.aspx">Development</category></item></channel></rss>