Agile是群育問題

36 views
Skip to first unread message

Anthony Tsai

unread,
Jun 28, 2012, 4:51:44 AM6/28/12
to agile_m...@googlegroups.com

有幸參加這次Agile Method研討會,聽到一些新的觀念,也有了一些心得。

Agile Method著重的是團隊溝通,而不是個人的單打獨鬥,要靠人與人之間的相互合作,才能達到所謂的Agile。Agile Method的
主要特色之一,Pair Programming, 就是建立在人際溝通上。Pair Programming以兩個人一組進行開發,並且要持續的溝
通,開發過程中,碰到問題一定要提出來。而該如何去配對搭檔,其實也是要考慮的課題,教授好像是說避免資深與菜鳥搭配,否則可能都 在教學,但是
Agile Method雖然不像CMMI那麼龐大,但入門的門檻似乎也不低,顛覆了很多傳統軟體開發的觀念,要導入Agile Method勢必會有
一段過渡期,這時應該就需要有資深的Programmer適時的引導菜鳥。而要實行Pair Programming,因為是建構在溝通的基礎上,會中
教授提到了要加強群育教育,對於這點我是深表贊同的。學校通常較注重的是考試成績,很少接觸到群育的教育,就算是分組做Project,其實分工
溝通也很少做的確實,對於這方面是很不足的。而一套好軟體的開發,個人能力固然重要,但是團隊合作才能事半功倍,加強溝通,肯去閱讀並修改他人的程
式碼(Refacotring) ,才能讓軟體品質更提升。但Pair Programming在台灣可能會遭遇到問題是,上層對於人力的分配觀念太守
舊。可能會直覺認為以往一個人可以負責的工作,現在要多增加人力,不符合成本,卻沒有看到Pair Programming可能會帶來改變及好處。

另一個與以往不同的觀念是,on-site usage expert的參與,on-site usage expert必須是客戶派來,對整個專案的
需求與架構有透徹了解的人,將溝通的層次近一步提升到了客戶,強調要與客戶有更密切的溝通,客戶參與整個軟體的Iteration計畫,親自參與開發與
測試 程,不符合需求可以馬上提出,用更密切的溝通來提昇軟體的品質。不過我覺得要引進這個觀念也是一項大挑戰,折衷的辦法可能就是Part
time,利用mail,手機,或是每隔一段時間就開會來了解開發情況。而會中所提到Communication Cycle中的Iteration時
間,不太清楚是如何估算得來的,每個專案開發情況,難度會不同,時程的安排應該也就會不一樣,所以對於Cycle Time的決定是不是也要視情況而
定?

而軟體開發採用TDD的開發方法,將功能切割出來後,考慮多種情況,先寫測試碼,再coding,每一個小功能都經過完整測試,之後整個軟體結合起來品
質也會較佳,將會沒有bug。而教授另外補 了幾個步驟,在coding時,要將所學的資料結構與演算法學以致用,其實這是理所當然的,只是常常
在學校學完考試之後,就很少去用到,這是值得反省的。
不知道聽過好幾次,台灣的軟體起不來,只重視硬體,軟工沒有人重視,軟體外包就好了阿,諸如此類的說法。那為什麼不想辦法讓軟體環境好起來呢?或許因為
風土民情不同吧,國外的軟 公司對軟工領域很重視,在台灣,寫軟體就像是最低階的工作一樣,很多人似乎都會想說,“寫軟體能寫多久”,大概寫個幾
年就想轉換跑道,所以國內所謂的資深工程師不多,有時也會 黃不接,這應該是一項隱憂,尤其Agile Method的導入更是需要有經驗的資深工
程師,對於人才的培養更是重要課題。

關於Agile Method,在國內好像還沒有什麼公司在推,國內的產業界似乎較重視CMMI,這跟政府的政策也有關係。但CMMI的規模龐大許多,
如果不是較大的軟體公司,硬要導入CMMI,只為了要通過認證而導入 對於整個人力成本的負擔是很大的,如果沒有真正掌握到精神,很容易就淪為口
號。而國內軟體公司的專案,通常是分成小組來負責,人數通常不多,導入Agile Method看起來是相對較適合的,但如前面提到的,群育以及許多顛
覆傳統開發流程的新觀念,是學習Agile Method的門檻,要突破這門檻,才能算真正了解Agile的精神;再者,Agile Method 似
乎還沒有所謂的認證,導入後表面上看不到實質的證照,國內軟體公司是否願意很有前景的來暸解Agile Method,並將其導入,還有一段努力的空
間。

Anthony Tsai

unread,
Jun 28, 2012, 4:52:01 AM6/28/12
to agile_m...@googlegroups.com
Agile的觀念運用在程式產品開發上,在一開始的設計概念上,不同於現在許多的程式產品,再出品之後出現許多漏洞才開始一修再修,而應該在開發階段就
安排許多層面的測試,來把整體的 個漏洞,一層層的找出來。
而程式在開發時,開發團隊的合作也是十分重要的,所以合作溝通的方式最好是以面對面face to face相互討論,立即解決是最快的方式。相對於台
灣許多軟體公司,有些太過於依賴個人能力,而忽略了團隊合作的默契,使一層層的溝通之間會出現許多縫隙,也是垢病之一。由此可知,設 計師除了本身能力
強弱之外,和他人溝通相處的EQ也是十分重要的,三個臭皮匠勝過一個諸葛亮,在軟體開發似乎也合乎這句話,以前在學校寫作業,單打獨鬥已經不符合現在軟
體開發的潮 了。
和客戶交接作業和要求方面,需要不斷的和客戶保持聯繫,因為客戶的要求可能時常變更,而我們必須持續的更新以達要求,並且在每一階段必須都做出測試,回
饋,以確保程式的完整性和 確性。其中也可以用實際使用者測試,決定喜好程度,和找出使用上的問題。而個人方面,保持專注力在工作上,是每個設計
師必要的課題。
運用agile的觀念,開發程式需要幾個方法。其中包括:1.探索需求 2.使用情節 3.驗收測試 4.Class name,
Responsibility, Collaborator之切割 5.派工與分時. 6.Unit test code 7.演算法設計
8.Coding 9.Unit testing 10. 逆向工程
我覺得第一個比較重要的部份是第四個切割的工作,需要把整個團隊的工作細分,每個人負責哪些部份,該如何分配,彼此之間有哪些是需要合作的,這是十分重
要的課題,切割的好,除了 以加倍工作速度,也可以提高工作溝通的程度。
還有個我覺得比較重要的點,就是Unit test code,這邊需要針對產品的每一部份設計出對應的test code,以符合綿密的特性,減少漏
洞。也要針對可能的輸入,分類出不同的test code,例如sorting,分成element全部都不同的串列,全部element相同之串列,
部分element相同之串列。方便系統整體之debug。
我覺得老師舉的例子,都滿淺顯易懂的,例如sorting。 對於第一次接觸到Unit testing的我來說,很簡單就可以知道各個語言之
Unit test的方便性,而不用一步步的把不同的輸入打進去測試,對於每一次修改過的系統,能加快測試速度。
Reply all
Reply to author
Forward
0 new messages