在軟體開發流程的討論中,敏捷式軟體開發(Agile Software Development)一直被熱烈且廣泛地討論著。也由於軟體專案多變的特性,使得傳統的開發流程及軟體工程方法論已經是過於繁重而不切實際。所以像是 XP(Extreme Programming)、Agile等輕量級方法論成為新一代軟體工程的寵兒,而許多工具及實作方法亦圍繞著它們的基本精神而不斷繁衍。

程式語言及軟體架構也為了能因應開發流程的敏捷化需求,不斷地透過彈性的軟體框架(Framework)的推出,或是結合強大的整合式開發環境來配合這樣開發流程的體現,希望能及時且有效地反應真正的需求,並快速實作出合乎使用者理想的軟體。

但你會發現,彈性的軟體框架伴隨而來的,便是複雜的組態及物件層級,對於規模較小的應用需求,會有殺雞用牛刀的感覺,絲毫感受不到輕快敏捷的味道。

過去許多程式語言都能有搭配的軟體框架及整合式開發環境,試著要利用一些自動化的機制幫開發人員節省時間。但當你在採用時會發覺,針對這些軟體框架,開發人員需要先花不少時間學習使用方式,來提高掌握度,尤其是在編寫令人頭痛的組態檔時。

這次玩真的,敏捷製程不再是唱高調

自從Ruby on Rails的出現,透過RoR官方網站令人印象深刻的影片展示,許多開發者皆驚歎著Agile時代終於真正來臨,它的快速開發特性讓許多開發者為之著迷, 簡潔的軟體架構搭配著優雅的物件導向本質,讓寫過其他物件導向語言的開發人員,能快速領會其精神所在。

你不再需要針對不同的複雜問題,實作打造連自己都不是很熟悉的Design Patterns;你也不需要為了採用不同的軟體框架,而迷失在組態檔設計檔的叢林裡。因為以單純而明確的MVC架構用來做為基本的設計框架,透過URL 的命名方式Convention取代複雜的組態設定,對於大多數的軟體專案需求其實就十分足夠了。

相信你也聽了不少關於Ruby on Rails的精彩事蹟,一定想要動手試試,但受限於中文相關資源的缺乏,讓這樣的技術還未能被廣泛使用。目前已有多本專門討論Ruby程式語言的經典好 書,但中文版至今才出現2本翻譯專書,包括歐萊禮出版的《超越Java(Beyond Java)》、《Ruby on Rails:建置與執行(Ruby on Rails:up and running)》。對於初次接觸想要學習RoR的同好們,建議還是嘗試閱讀原文版書籍,較能在第一時間掌握較新的技術資訊。

談到與Ruby相關的書,其實早在2001年就有相關專書,像是O’Reilly的《Ruby in a Nutshell》,當時只是針對程式語言本身的特性及撰寫方式進行討論,並未提到Ruby在Web領域的應用。而開始被廣泛討論則是從Bruce A. Tate的《Beyond Java》一書緣起,在該書中便提到Ruby如何搭配Rails的軟體框架,以便快速地實作簡易的Web應用程式,但由於該書當時的討論重心並未在RoR 上,所以還不算是專書。

經典加上得獎,你不得不試試

Ruby結合Rails軟體框架的強大威力,在Web技術的應用上發揮得淋漓盡致,加上Web 2.0的加持,更是將其快速開發的特性展露無遺。在《Agile Web Development with Rails》一書中,即是將Ruby語言充分發揮在Web應用上的經典書籍。

在眾多討論RoR的書籍中,享譽盛名的不外乎就是《Agile Web Development with Rails》。本書為RoR之原創者David Heinemeier Hansson所著,而另一位作者Dave Thomas深諳敏捷製程,同時也是經典書《Programming Ruby》的作者。本書第一版並獲得了2006年Jolt Award大獎,可謂實至名歸。

由於本書銷售狀況甚佳,不到1年的時間再推出第二版,因此在書中你除了可以習得作者忠於原味的技術內容,第二版的內容採用了較新的Rails框架(1.1版),並加入RJS、Ajax的應用範例,作為實作的基礎。

章節編排適合初學者閱讀,著重實作範例

《Agile Web Development with Rails》與一般書籍章節設計的差別在於:作者以深入淺出的方式,先以簡短的章節對RoR進行概略性的簡介,然後直接以實例方式切入RoR的程式撰寫, 再回頭探討RoR的核心架構,最後透過附錄章節提供Ruby程式語言的介紹。你可以依循作者設計的章節順序逐一閱讀,透過實際的範例操作引領你進入RoR 的世界。你完全不需要有Ruby撰寫的經驗也可以快速上手,適合有興趣的入門者研讀。

Rails的出現便是為了讓開發流程更簡捷,所以書中第一部分便從架構簡介開始,讓你先對Rails的軟體架構有基本的認識,除了貫穿核心的MVC模式之外,透過Active Record的OR Mapping機制來進行資料層的處理,也是框架的重點所在。

紙上談兵不過癮,動手開始進行安裝吧!你會覺得安裝RoR一點也不難,而且支援多種作業平臺,依照你所喜愛的平臺種類,將RoR裝到你的開發環境中。除了RoR的核心套件之外,你同時需要搭配的整合性開發環境及資料庫系統,在第三章也對此有詳細說明。

動手實作加深印象

當歡迎畫面呈現在你的瀏覽器中,表示你的RoR已經安裝完成。第四章便教你從專案的建立,產生定義你的Controller及Action內容, 並撰寫動態頁面的Template程式。本章的討論可以讓你了解在RoR專案中目錄的結構,以及Controller、Model、View與目錄分布之 間的互動關係。這些關係僅僅以URL的語法即可以完整定義,不需要再透過煩雜的組態設定。

有了前幾章的基本觀念後,接下來第二部分的章節,作者設計了一個網路書店的案例,讓你對RoR的印象更深刻。若你曾經接觸過電子商務的網站,你便會十分熟悉這些功能的需求及運作方式,每個章節不是單純的程式片段介紹,而是可以前後貫穿、相互呼應的內容。

記住!本書開宗名義就強調是Agile,所以為了落實敏捷開發的精神,從分析階段開始便以反覆(Iteration)進行,手繪幾張頁面流程圖便開始進行程式撰寫,而不拘泥在以往的UML標準圖例上,這夠敏捷了吧!

範例搭配敏捷製程,更突顯快速開發特性

作者設計了8個任務個別包括了數個Iteration,功能涵蓋商品管理、型錄瀏覽、購物車機制、結帳流程及系統管理等,讓讀者從學習建立RoR 應用程式及資料庫設定開始,一步步了解如何利用建立Model的方式,配合Database Migration來建立資料庫結構,並透過scaffold來快速產生資料維護頁面。每個章節都詳細說明整個程式細節及建置步驟,方便讀者學習。作者在 程式中亦頗具巧思地設計實作上的錯誤及陷阱,讓讀者加深學習印象。

每個Iteration之間以漸進方式強化範例的功能,Iteration的設計也是作者精心策畫,每個Iteration的結束都產出完整可執 行的功能。而在這些實作中,亦提到中途如有需求變更時,實作面的因應做法為何,這也是我們平時在專案執行時常常遇到的,像是新增資料欄位、調整版面設計。 傳統的程式語言開發也許會因架構調整而耗工費時,在這裡會讓你感受到RoR敏捷的威力。

在透過程式範例認識RoR之後,第三部分則回頭來探討Rails框架的技術細節。此部分的章節便按部就班地介紹Rails架構,為你建立更紮實的 理論基礎。除了框架基本精神以及MVC各元件的撰寫及設計方式外,在Web Services的應用、系統安全性以及測試與部署方式亦有專章討論,這些都是平常程式開發人員所容易疏忽的。

章節編排適合初學者閱讀,著重實作範例

也許你在閱讀本書時對Ruby的語法十分陌生,對於書中的範例程式一時還無法完全掌握,你可以同時參考附錄中的Ruby專章,補足你對Ruby程式語言的缺憾。另外書中也收錄了組態參數的設定方式、本書範例的完整原始碼及相關資源列表等。

對於準備學習Ruby on Rails技術的程式開發人員,《Agile Web Development with Rails》是不錯的選擇。你可以將本書視為Ruby on Rails開發的最佳實踐(Best Practices)書籍,從無到有地建立一個實用參考價值頗高的網站,可以讓你紮實地打好基礎,也足以讓你掌握Ruby on Rails的重要特性,讓你一書到位。若你想針對Ruby語言進行更深入的研究,不只是Web方面的應用,像是Pragmatic出版的 《Programming Ruby》、O’Reilly的《Ruby in a Nutshell》、《Ruby Cookbook》都是你可以搭配閱讀的經典。

《Practical Development Environments》

《Practical Development Environments》

導入軟體組態管理,專案管理更加輕鬆

一般人所謂的開發環境,通常是指用什麼程式語言、開發工具,或是運行的平臺等。就軟體工程中組態管理(Software Configuration Management,SCM)這門課程所談的開發環境,則遠遠超過這些東西,通常包括版本控管工具、軟體建構工具、問題追蹤工具等。這些工具會被不斷地 重覆使用在不同的專案中,目的在於加速開發流程,提高人員生產力。

生產自動化,產能最大化

就工廠而言,一個完成品需要許多生產線的製造及加工。由於在開發過程中,許多工作細節需要不斷地重覆上演(像是程式碼的版本控管、軟體建構、單元 及系統測試,以及布署等),而這些SCM工具之間的整合程度及自動化機制,絕對影響整個軟體專案的推展,單純利用Copy-Paste的方式在不同的工具 之間相互切換是十分愚蠢的,在極限製程(eXtreme Programming,XP)中所提倡的持續整合(Continuous Integration)精神,亦是強調將大部份標準化的工作予以自動化,以便於將人力運用在更有價值的任務上。

當然,SCM工具之間的整合也有程度上的差異,簡單的像是利用URL及E-mail的整合,複雜的甚至可以透過API或Web Services做到BPM等級的整合,就依實際的需求來決定。

SCM與每個開發階段環環相扣

以專案的角度來看,軟體開發所涵蓋的範圍很廣,而SCM只是其中的一環。本書開始先簡介常見的軟體開發方式,包括開發流程中會發生的工作內容,像是軟體測試、追蹤錯誤等。若你曾親身經歷過軟體專案開發的工作,應該很熟悉這裡所討論的細節。

第四章討論SCM的概念及定義,以及需要SCM的理由為何,並說明整合及自動化對於專案的重要性。「水能載舟,亦能覆舟」,SCM雖說是十分理想 的概念,但其附帶的成本投資也是十分可觀,像是在導入之後會造成儲存設備的成本提高,而且需要額外的伺服主機來配置不同系統,分散式系統的架構造成網路是 必備的條件,規劃不當的話也會帶來效能不佳的後果。

從第五章開始,便分別針對軟體建構、軟體測試、問題追蹤、文件管理、產品發表及後續維護等階段討論。除了解釋每個工作的基本觀念外,也會談到在每個工作中常會遭遇的問題及建議解法;另外軟體工具的介紹及比較,如何透過工具來達到開發流程的自動化也是重點之一。

軟體開發中,人與溝通一直是決定專案成敗的重點,尤其是專案成員收眾多時,本書第十一、十二章便針對這兩大議題,說明如何克服因為人與溝通而產生的問題。

有了SCM,明天會更好

導入SCM的工具之後,試想一下工作方式會有什麼改變:一早到公司之後收一下電子郵件,發現來自Bug Tracking System發出的程式錯誤通知,便登入至Bug Tracking System中查閱。便啟動版本控管(Version Control)軟體,將專案發生錯誤版本的程式原始碼下載至自己的工作目錄(Working Copy)下,然後針對需要更改進行簽出(Check-Out)動作,開始進行程式撰寫,寫完後進行軟體建構(Build),同步自動化進行單元測試及系 統測試,然後確定可以成功執行之後,自動編上新版序號,再將異動後的程式碼更新(Check-In)至版本控管軟體中,最後到Bug Tracking System中回報處理結果。

坦白來說,沒有SCM專案依舊能進行,但在專案規模日益複雜及專案成員結構不斷變化下,有了SCM勢必可以讓你在軟體專案管理上,掌握度更高。無 論你是負責系統分析、程式撰寫、軟體測試或專案管理,本書都可以幫助你思考一下是否還有改善的空間,如何對現有流程進行調整,讓你對現有的工作有改良性的 想法。

Follow

Get every new post delivered to your Inbox.