<?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; 開發工具</title>
	<atom:link href="http://www.lifeparty.idv.tw/blog/archives/category/%e8%bb%9f%e9%ab%94%e9%96%8b%e7%99%bc/case/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lifeparty.idv.tw/blog</link>
	<description>君子學以聚之,問以辨之,寬以居之,仁以行之</description>
	<lastBuildDate>Fri, 05 Mar 2010 04:18:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>善用工具為軟體品質加分</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/89</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/89#comments</comments>
		<pubDate>Mon, 26 Mar 2007 08:39:29 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[專案管理]]></category>
		<category><![CDATA[易經思維]]></category>
		<category><![CDATA[軟體審查]]></category>
		<category><![CDATA[軟體開發]]></category>
		<category><![CDATA[開發工具]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/archives/89</guid>
		<description><![CDATA[在軟體開發過程中，工具雖然不足以取代人力，但有效地使用適用的開發工具，卻可以讓我們軟體開發得到加分的效果。
不過，在企求開發工具為我們加分之前，我們必須要思考如何才能先拿到基本分數。克明兄最近在〈從軟體架構師(Architect)的觀點來看軟體開發流程〉一文中提到他對工具與自動化的觀點：
“工具” 與 “自動化”，這是流程制訂者與管理者最迷信也最喜歡導入的機制。這兩種當然是很重要，但卻不是最優先考量的，也不是導入後就能解決軟體開發根本的問題的。&#8230;&#8230;而自動化，這個可是有趣的議題。筆者是把有些資深軟體工程師想要開發出把設計圖直接轉換為程式碼這樣的自動化機制，比喻為如同機器貓小叮噹的百寶箱，只要把建築藍圖輸入道具機內，就可以幫你自動產生一棟高樓大廈來！ 不是不可行，不過，你可能先得要有小叮噹才行。
而喲哪桑學長則告訴我們 Defect Detection Tool 之道聽途說：
幾年前，曾經有朋友跟我抱怨他正在評估的工具，他說用工具掃過他的 source code，找到的 defect 裡，每兩個 defect 就有一個不是真的 defect。&#8230;&#8230;我並不清楚，這類工具一般的 detection rate 與 false positive rate 為何，也不清楚這幾年是否有大幅的進步，更沒有去稽核我朋友的評估過程。這二分之一的 false positive，真的只是道聽途說。
雖然只是道聽途說，但因為這關係軟體的品質，所以我們不能冒太大的風險，但也不能只是一味地土法煉鋼。亦即，不可以太過仰賴工具也不能完全不用工具，而是要適當地運用工具來提昇我們的開發的效能與品質。那麼工具的使用該如何取捨呢？方法論的實證研究[1]顯示，大部分方法論使用者認為方法論所帶來的負面因子為：

方法論太笨重並且會造成開發過程的惰性。
遵循方法論會干擾實際的開發工作。

而他們也認為方法論也會帶來一項正面因子－在軟體開發過程中促進專案控制與提昇產出的可見度。
所以在開發方法論要導入工具，要注意工具的使用不能太複雜、也不能養成團隊成員太過依賴工具的習慣、避免因為工具的使用而影響實際開發工作、讓工具能幫助我們管理與控制專案的產出並且有助於成員溝通。開發工具的地位應該站在輔助的角色，而不是因為工具而工具。
喲哪桑學長在 defect detection tool 的使用建議我們：
既然工具只是輔助，又假設 false positive 真是問題，我以為在進行 software inspection 前，應該先使用工具掃過 source code，指派人手逐一檢查過工具找出的 defect，修好該修的 defect 之後，再進行 Software Inspection。甚至，工具找出的 defect，若有疑義，也可以做為 inspector 的討論，以決定它是否為 defect。如此一來，才會藉由工具的輔助，好讓人力產生更大的價值。
這正是「既有典藏，茍非其人，道不虛行」[2]的道理，軟體開發的關鍵還是在於人的身上，新方法論強調人本、溝通而非制式的流程、文件或工具。使用工具的目的，其實主要是為了促進個人創意的發揮與其增進相互溝通。現在的整合開發環境（IDE）都做得很好，尤其是使用開放源碼的自由軟體（open source）並不會很笨重，例如 java 社群的 eclipse，可以事先根據過去經驗及業界的最佳實務訂出良好設計慣例的 coding template 的標準，只要讓開發人員在 check in 之前要先 [...]]]></description>
			<content:encoded><![CDATA[<p>在軟體開發過程中，<a href="http://www.lifeparty.idv.tw/blog/archives/81">工具雖然不足以取代人力</a>，但有效地使用適用的開發工具，卻可以讓我們軟體開發得到加分的效果。</p>
<p>不過，在企求開發工具為我們加分之前，我們必須要思考如何才能先拿到基本分數。<a href="http://www.kenming.idv.tw">克明兄</a>最近在<a href="http://www.kenming.idv.tw/index.php?title=cu_ao_a_ie_cui_af_er_el_a_pas_acl_archit&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1">〈從軟體架構師(Architect)的觀點來看軟體開發流程〉</a>一文中提到他對工具與自動化的觀點：</p>
<blockquote><p>“工具” 與 “自動化”，這是流程制訂者與管理者最迷信也最喜歡導入的機制。這兩種當然是很重要，但卻不是最優先考量的，也不是導入後就能解決軟體開發根本的問題的。&#8230;&#8230;而自動化，這個可是有趣的議題。筆者是把有些資深軟體工程師想要開發出把設計圖直接轉換為程式碼這樣的自動化機制，比喻為如同機器貓小叮噹的百寶箱，只要把建築藍圖輸入道具機內，就可以幫你自動產生一棟高樓大廈來！ 不是不可行，不過，你可能先得要有小叮噹才行。</p></blockquote>
<p>而<a href="http://jonathanspeaking.blogspot.com">喲哪桑</a>學長則告訴我們 <a href="http://jonathanspeaking.blogspot.com/2007/03/defect-detection-tool-hearsay.html">Defect Detection Tool 之道聽途說</a>：</p>
<blockquote><p>幾年前，曾經有朋友跟我抱怨他正在評估的工具，他說用工具掃過他的 source code，找到的 defect 裡，每兩個 defect 就有一個不是真的 defect。&#8230;&#8230;我並不清楚，這類工具一般的 detection rate 與 false positive rate 為何，也不清楚這幾年是否有大幅的進步，更沒有去稽核我朋友的評估過程。這二分之一的 false positive，真的只是道聽途說。</p></blockquote>
<p>雖然只是道聽途說，但因為這關係軟體的品質，所以我們不能冒太大的風險，但也不能只是一味地土法煉鋼。亦即，不可以太過仰賴工具也不能完全不用工具，而是要適當地運用工具來提昇我們的開發的效能與品質。那麼工具的使用該如何取捨呢？方法論的實證研究<sup>[1]</sup>顯示，大部分方法論使用者認為方法論所帶來的負面因子為：</p>
<ol>
<li>方法論太笨重並且會造成開發過程的惰性。</li>
<li>遵循方法論會干擾實際的開發工作。</li>
</ol>
<p>而他們也認為方法論也會帶來一項正面因子－在軟體開發過程中促進專案控制與提昇產出的可見度。</p>
<p>所以在開發方法論要導入工具，要注意工具的使用不能太複雜、也不能養成團隊成員太過依賴工具的習慣、避免因為工具的使用而影響實際開發工作、讓工具能幫助我們管理與控制專案的產出並且有助於成員溝通。開發工具的地位應該站在輔助的角色，而不是因為工具而工具。</p>
<p>喲哪桑學長在 defect detection tool 的使用建議我們：</p>
<blockquote><p>既然工具只是輔助，又假設 false positive 真是問題，我以為在進行 software inspection 前，應該<strong>先使用工具掃過 source code</strong>，指派人手逐一檢查過工具找出的 defect，修好該修的 defect 之後，再進行 Software Inspection。甚至，工具找出的 defect，若有疑義，也可以做為 inspector 的討論，以決定它是否為 defect。如此一來，才會藉由工具的輔助，好讓人力產生更大的價值。</p></blockquote>
<p>這正是「既有典藏，茍非其人，道不虛行」<sup>[2]</sup>的道理，軟體開發的關鍵還是在於人的身上，<a href="http://www.martinfowler.com/articles/newMethodology.html">新方法論</a>強調人本、溝通而非制式的流程、文件或工具。使用工具的目的，其實主要是為了促進個人創意的發揮與其增進相互溝通。現在的<a href="http://en.wikipedia.org/wiki/Integrated_development_environment">整合開發環境</a>（IDE）都做得很好，尤其是使用<a href="http://en.wikipedia.org/wiki/Open_Source_Software">開放源碼的自由軟體</a>（open source）並不會很笨重，例如 <a href="http://en.wikipedia.org/wiki/Java_%28Sun%29">java</a> 社群的 <a href="http://www.eclipse.org">eclipse</a>，可以事先根據過去經驗及業界的最佳實務訂出良好<a href="http://en.wikipedia.org/wiki/Coding_conventions">設計慣例</a>的 coding template 的標準，只要讓開發人員在 check in 之前要先 apply 此 template。而 eclipse 會自動檢查程式碼有沒有可能有問題的 code，例如：用到廢棄的 API、區域變數未定初值或變數從未被使用、不需要的 import 等等。還有其 refactor 也很好用，它讓程式碼的<a href="http://en.wikipedia.org/wiki/Refactoring">重構</a>變得更簡單，如果能加上自動化測試工具（例如 <a href="http://www.junit.org">junit</a>），會讓程式碼的品質更可見而更易於管理與控制 。</p>
<p>總之，好用的工具要靠專案團隊正確的使用才有加分的效果，如果只有工具而沒有善用的知識，有比沒有還更可怕，不可不慎呀！</p>
<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
附註：
&nbsp;<hr/><ol class="footnotes"><li id="footnote_0_89" class="footnote">Fitzgerald, B. 1998. An empirical investigation into the adoption of systems development methodologies. Info. Manage. 34:317-328.</li><li id="footnote_1_89" class="footnote"><a href="http://zh.wikisource.org/w/index.php?title=%E5%91%A8%E6%98%93/%E7%B9%AB%E8%BE%AD%E4%B8%8B&amp;variant=zh-tw">《周易繫辭下》</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/89/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>工具在 software inspection 所扮演的角色</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/81</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/81#comments</comments>
		<pubDate>Fri, 16 Mar 2007 10:02:53 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[品質文化]]></category>
		<category><![CDATA[專案團隊]]></category>
		<category><![CDATA[專案監控]]></category>
		<category><![CDATA[知識管理]]></category>
		<category><![CDATA[軟體審查]]></category>
		<category><![CDATA[開發工具]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/archives/81</guid>
		<description><![CDATA[在Chui-Wen Chiu&#8217;s Note: 〈程式碼檢驗〉看到：
基本上我蠻認同程式碼檢驗這個步驟，不過這個步驟不應該是由人來作，更不應該全部交由一個人來作，而是交由一套工具來處理，如此可以省去不必要的人力支出，而且也可以將 Knowledge 分享給 Team 的每一個人。
站在節省人力支出的立場，用工具幫我們檢驗程式碼的想法看起來好像不錯，如果這樣做可以維持程式碼品質而降低人力的花費，當然是最好的選擇，但程式開發的價值首重創意性思考，但工具卻只能預先設好檢驗的規則，在已設定的規則範圍之外，還是有很多 defect 是會被工具忽略掉，但這些 defect 是不應該被忽略的，因為等到讓它們擴散就麻煩大了。因此把程式碼檢驗的工作，交由一套工具來處理，對於改善軟體品質而言，其實是不夠的。
亦即在檢驗程式碼的工作，工具並不能取代人力的，工具最多只能站在輔助的地位，因為審查程式碼並不是 routine job，這個工作需要的是程式實作的專業知識與技巧，要用人的肉眼直接來逐行檢驗，不能由工具代勞。
專案團隊的設計，其實是為了發揮團隊的綜效，讓專案的績效大幅增加。軟體專案團隊要成功，是專注於專業分工與整合團隊綜效相互配合。雖然電腦輔助軟體工程可以簡化設計及開發的過程，讓我們用更有效率的方式來設計程式，但如果太強調效率而缺少整合，效率只是讓無法創造價值的軟體在製品（in-process inventory）不斷地增加而已，徒然增加品質成本。
整合需要團隊有效的互動，也正如敏捷軟體開發宣言所強調的「人本與互動勝過流程與工具」。Software inspection 不是只有檢驗而已，它更重視學習及互動的過程，團隊的學習除了個人知識與技術的單方面獲取外，更重視團隊成員的互動並重視學習的回饋環路。在 software inspection 會議中，團隊成員可以提出個人看法，以積極及開發性的討論來促進集體反思，讓團隊以更有創造力的方式來工作。就像〈反思技術打破』集團性弱智』〉一文所提到的：
一個有學習力的企業要有集體反思的能力。在行動之後，能集體停下來反思的能力，「反思」不同於「檢討」，強調的是調整看事情的「角度」，團隊探究的重點是行動背後的假設，而不是行動本身，當交談的層次進入到假設及認知的層面時，團隊才有可能進入所謂的「雙迴圈學習」，也就是一群人「共同思考」的境界，而唯有在這樣的氛圍下大家才不會相互指責抱怨、不會計較誰的貢獻比較多、不會被認為提出了愚蠢的看法，真正創新才有可能出現！（白國際管理顧問公司總經理，沈沂採訪整理，《21世紀商業評論》2005年11期）
所以，團隊合作重視每一個團隊成員與其互動的過程。在參與 software inspection 的過程中，除了可以達到知識分享的目的外，還會讓成員感到受他有受到重視，無形之間增加團隊向心力及凝聚力。當我們用工具檢驗程式碼時，並沒有辦法享受到這些好處，如同我在〈軟體開發能力的自我組織〉中曾經提到的：
公司缺少了像 Inspection 這樣的機制，任何的抽象思考、建模及各種提昇設計能力的技巧最多只能「孤芳自賞」，對組織開發能力的助益其實是有限的。「獨樂樂不如與眾樂樂」，當專案實施 Inspection 時，成員的設計能力及 software asset 變得與日俱增，而且在團隊溝通上助益也很大，可說是好處多多。
Software inspection 可以用來 QA ，更可以做到 team building，這些都不是用了 CASE 工具就可以勝任的呀！
Powered by ScribeFire.
]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://chuiwenchiu.spaces.live.com/blog/cns!CA5D9227DF9E78E8!742.entry?_c=BlogPart">Chui-Wen Chiu&#8217;s Note: 〈程式碼檢驗〉</a>看到：</p>
<blockquote><p>基本上我蠻認同程式碼檢驗這個步驟，不過這個步驟不應該是由人來作，更不應該全部交由一個人來作，而是交由一套工具來處理，如此可以省去不必要的人力支出，而且也可以將 Knowledge 分享給 Team 的每一個人。</p></blockquote>
<p>站在節省人力支出的立場，用工具幫我們檢驗程式碼的想法看起來好像不錯，如果這樣做可以維持程式碼品質而降低人力的花費，當然是最好的選擇，但程式開發的價值首重創意性思考，但工具卻只能預先設好檢驗的規則，在已設定的規則範圍之外，還是有很多 <a href="http://en.wikipedia.org/wiki/Software_bug">defect</a> 是會被工具忽略掉，但這些 defect 是不應該被忽略的，因為等到讓它們擴散就麻煩大了。因此把程式碼檢驗的工作，交由一套工具來處理，對於改善軟體品質而言，其實是不夠的。</p>
<p>亦即在檢驗程式碼的工作，工具並不能取代人力的，工具最多只能站在輔助的地位，因為審查程式碼並不是 routine job，這個工作需要的是程式實作的專業知識與技巧，要用人的肉眼直接來逐行檢驗，不能由工具代勞。</p>
<p><a href="http://en.wikipedia.org/wiki/Project_team">專案團隊</a>的設計，其實是為了發揮<a href="http://www.lifeparty.idv.tw/blog/archives/44">團隊的綜效</a>，讓專案的績效大幅增加。軟體專案團隊要成功，是專注於專業分工與整合團隊綜效相互配合。雖然<a href="http://en.wikipedia.org/wiki/Computer-aided_software_engineering">電腦輔助軟體工程</a>可以簡化設計及開發的過程，讓我們用更有效率的方式來設計程式，但如果太強調效率而缺少整合，效率只是讓無法創造價值的軟體在製品（in-process inventory）不斷地增加而已，徒然增加<a href="http://thequalityportal.com/q_CoQ.htm">品質成本</a>。</p>
<p>整合需要團隊有效的互動，也正如<a href="http://www.agilemanifesto.org/">敏捷軟體開發宣言</a>所強調的「<strong>人本與互動勝過流程與工具</strong>」。<a href="http://www.lifeparty.idv.tw/blog/archives/79">Software inspection 不是只有檢驗而已</a>，它更重視學習及互動的過程，<a href="http://en.wikipedia.org/wiki/Team_learning">團隊的學習</a>除了個人知識與技術的單方面獲取外，更重視團隊成員的互動並重視學習的<a href="http://en.wikipedia.org/wiki/Feedback_loop">回饋環路</a>。在 software inspection 會議中，團隊成員可以提出個人看法，以積極及開發性的討論來促進集體反思，讓團隊以更有創造力的方式來工作。就像<a href="http://www.practice.com.tw/article13.htm">〈反思技術打破』集團性弱智』〉</a>一文所提到的：</p>
<blockquote><p>一個有學習力的企業要有集體反思的能力。在行動之後，能集體停下來反思的能力，「反思」不同於「檢討」，強調的是調整看事情的「角度」，團隊探究的重點是行動背後的假設，而不是行動本身，當交談的層次進入到假設及認知的層面時，團隊才有可能進入所謂的「雙迴圈學習」，也就是一群人「共同思考」的境界，而唯有在這樣的氛圍下大家才不會相互指責抱怨、不會計較誰的貢獻比較多、不會被認為提出了愚蠢的看法，真正創新才有可能出現！（白國際管理顧問公司總經理，沈沂採訪整理，《21世紀商業評論》2005年11期）</p></blockquote>
<p>所以，<a href="http://en.wikipedia.org/wiki/Teamwork">團隊合作</a>重視每一個團隊成員與其互動的過程。在參與 software inspection 的過程中，除了可以達到知識分享的目的外，還會讓成員感到受他有受到重視，無形之間增加團隊向心力及凝聚力。當我們用工具檢驗程式碼時，並沒有辦法享受到這些好處，如同我在<a href="http://www.lifeparty.idv.tw/blog/archives/26">〈軟體開發能力的自我組織〉</a>中曾經提到的：</p>
<blockquote><p>公司缺少了像 Inspection 這樣的機制，任何的抽象思考、建模及各種提昇設計能力的技巧最多只能「孤芳自賞」，對組織開發能力的助益其實是有限的。「獨樂樂不如與眾樂樂」，當專案實施 Inspection 時，成員的設計能力及 software asset 變得與日俱增，而且在團隊溝通上助益也很大，可說是好處多多。</p></blockquote>
<p>Software inspection 可以用來 <a href="http://en.wikipedia.org/wiki/Quality_Assurance">QA</a> ，更可以做到 <a href="http://en.wikipedia.org/wiki/Team_building">team building</a>，這些都不是用了 <a href="http://en.wikipedia.org/wiki/Computer-aided_software_engineering">CASE 工具</a>就可以勝任的呀！</p>
<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/81/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
