對於教授在研討會上提出的Agile method 裡面所提到的一些新的觀念,讓我對於程式設計有了一些新的概念。
對於Pair Programming 雙人組開發,在我讀大學的時候,也有與幾個同學一起做專題實做,那個時候雖然老師都要我們一起討論與實做,但是
那也只是稍微討論後就各做各的,最後在把所有的片斷整合成一個完整 程式。而Pair Programming 卻是在開發時以2個人為一組,以
一個人為主(drive)一個為輔(review),這與我們之前的實做方式,又有很大的不同。當我們一個人在寫程式時,常會發生一些小錯誤,或是一些
邏輯概念忽 搞混了,對於這些錯誤,因為是一個人在撰寫程式,故不會及時的發現,而導致必須在日後某個method完成並加以測試時,才會發現問
題並開始debug。如果是以Pair Programming方式進行專案開發,當主要撰寫的人發生一些小錯誤時,另一個人就可以及時發現並一起
debug;而對於在撰寫時,在過程中兩個人還可以隨時討論程式的細節,對於同樣的一件事,每 一個人的想法、作法都不太一樣,可藉由互相討論,而發現
與自己不同的想法,進而找到程式最佳的寫法,以提高軟體的品質及減少debug的時間。
但是要讓兩個人一起坐在電腦前面撰寫程式碼,以目前的環境來講有一點困難,programer在學生時代,就都是自己一個人在coding,等畢業到了
公司,公司也以人力資源的關係,而讓一個人做一 事,使的programer在進行Pair Programming時,會因為不熟悉而有溝通上
以及該由誰主導的問題,這正是教授在研討會上提到的群育問題。台灣的教育大都只重視智育,學生每天都只是拼命的在念書,較少與同學互動,致使 生最
後不太會與人溝通、互動,這正是目前agile method需要克服的問題,要先培養團隊成員的群育。教授在研討會中提到,依Cockburn所見
programer的群育有五點:1.Getting to meeting on time:不管是在開發程式或是要開會,都必須要準時到達,總不能
要為了一個人而使得工作整個停擺。2.Answering questions from other people:目前國人有一種比較自私的想法,
想說一些重要的技巧、方式自己知道就好,不肯告訴別人,如果要以agile method進行專案開發,就必須摒棄這種想法,要回答其他人對於程式上的
一些問題,一起合作開發程式。3.Bothering to mention things they notice:當發現到一些問題,必須要將它提
出來,不能因為覺得麻煩而置之不理,這只會使的問題越滾越大,到最後甚至無法處理。4.Following group coding
conventions:每一個人撰寫code的風格都不太一樣,在團隊開發中,就必須遵守團隊的規定去撰寫code,使得code簡潔、統一。
5.Using code libraries:要有使用程式庫的習慣,程式庫是其他人已經開發完成且經過debug了,使用程式庫可增加開發效率、減
少debug所浪費的時間。好的群育才能使Pair Programming有更好的效果。
Continuous Integration 持續整合,我們在撰寫code時,常會把一些method寫好後,沒先整合進系統就先撰寫下一個
method,或是隔一段時間才開始進行整合,在剛寫完一個method時,人們對於那個method的細節是記的最清楚 的,如果不及時進行整合,會
使得一些細節遺忘,而使得整合進行的不順利,還要回想一些細節。
Re-factoring 重構,我在大學時曾看過同學撰寫的code,有些人寫的code不僅沒加上注釋,連code也沒加以對齊或是以自己習慣的方
式對齊,使得別人無法輕易的看懂他的code,如果每個programer都這樣,會使得 程式的後續的維修與改進,有很大的難度。程式是需要不斷的維
護與更新,因應新的需求來增加新的功能,使得程式不僅可以重複使用(reuse)也可節省成本,要達到這樣的目的,就必須每 個programer
配合,以統一的方式撰寫code,在code中也必須要有注釋(教授的文中提到可以用pseudo code),讓其他人可以看的懂。
Test-driven development 測試帶動的開發方法,programer在寫完每一個method後,就先對那一個method進行
完整的測試,直到沒有錯誤在進行下一個method的coding,單純的測試一個method會比測試整個程式來的簡單,因此先針 每個
method測試,可以避免整個程式完成後才測試會很難debug的問題。