發表文章

目前顯示的是有「自由軟體」標籤的文章

軟體工程與大型整合專案—以WiMAX整合型計畫為例 (3/3)

圖片
Continuous Integration 在討論版本控管時,我們曾經提到WiMAX計畫使用一個輔助工具「 JCIS 」進行持續整合(Continuous Integration)的工作。那麼,為什麼要做持續整合呢?維基百科中對於 持續整合 的理論有些初步的介紹,包含下列十個重要的Practices: 維護一個程式庫(Maintain a code repository) 將建置自動化 (Automate the build) 使建置能進行自我測試(Make the build self-testing) 每人每天送交程式碼(Everyone commits every day) 每次送交都應該被建置(Every commit should be built) 維持快速的建置時間(Keep the build fast) 在實際運行的環境下進行測試(Test in a clone of the production environment) 簡化取得最新可交付版本的方法(Make it easy to get the latest deliverables) 每個人都能看到最新版建置的測試結果(Everyone can see the results of the latest build) 將佈署自動化 (Automate deployment) 上述許多Practices都要求自動化,自動化又可以分為半自動和全自動,以半自動為例,可能是有人每天固定手動執行make指令,將所有要建置的檔案編譯與連結,接著有人將結果複製到實際運行的環境,再下指令讓電腦執行所有的測試,這個過程雖然必須由人來操作,但只要下少許指令就可以完成了。那麼全自動呢?就是在專案開始的時候進行若干設定,之後由電腦自動處理一切編譯、連結、測試等工作,這就需要一套輔助工具了。 要確實完成這麼多的Practices,其實門檻是很高的。即使是在企業界,也難免會有不遵守遊戲規則的軟體工程師,更何況我們的開發主力是學校裡沒什麼專案成敗壓力的學生。舉例說,要做到「每人每天送交程式碼」幾乎是不可能的,基本上學生開發程式是有一天沒一天的,最多只能要求到「有修改就必須送交程式碼」。另外像是「每次送交都應該被建置」,在我們第一年的WiMAX計畫中可以說是完全失敗。在開發環境未能統一的...

軟體工程與大型整合專案—以WiMAX整合型計畫為例 (2/3)

圖片
版本控管 在整合國科會CMMI文件與程式開發的過程中,總計劃與各子計畫的文件與程式都需要一個版本管理的機制,一方面萬一有電腦當機或是檔案損毀時,可以迅速還原最新的版本,解決資料備份的問題,另一方面還可以在歷史紀錄中往返,將刪去的文件或程式找回來。對於文件或程式整合而言,版本控管十足是一個Time Machine。 我們在第一年開發之前就已經預期到版本控管的重要性,因此在專案初期便架設可透過Web介面存取的版本控管伺服器(Apache + Subversion),並且安排Subversion的教育訓練。但是,可能是一開始時教育訓練的內容安排不符合需求,也可能是開發團隊不夠用心,導致版本控管並不上軌道。最常發生的問題包括:團隊成員未確實解決衝突(Conflicts)、久久不送交(Commit)程式、送交無法編譯的程式、送交時不寫註解等。 這些問題的原因,有部分與先前討論過的缺乏一致的開發環境有關,部分團隊使用的IDE沒有支援版本控管,所以得在IDE編譯完後才知道有沒有問題,然後再使用其他版本控管軟體(TortoiseSVN等)送交程式;或在Windows上取出(Check out)程式然後複製到Linux的機器上修改與編譯,然後再複製回Windows上覆蓋舊版本後送交,然而在取出後到送交前的這段時間,如果沒有進行更新(Update)和合併(Merge)的動作,這些行為常常會導致衝突。 久而久之,有些團隊成員開始害怕使用版本控管系統,導致送交的週期越來越長,甚至有超過二個禮拜沒有送交程式碼,失去使用版本控管的優點。長時間的修改送交週期,也讓成員忘記曾經修改過什麼東西,自然不知道要寫什麼註解,這些都是讓版本控管失去威力的錯誤行為。經過一整年的觀察後,總計畫在第二年開始前,重新規劃Subversion的使用方式。 首先,我們將版本控管的支援加入一致的開發環境中。在Virtual Machine中,我們使用Eclipse搭配Subclipse套件,讓IDE與版本控管合而為一,之前也提到,單元測試的執行也加到程式中,這些都是確保程式無誤的前置作業。另外,針對文件撰寫的環境(通常是Windows平台),撰寫TortoiseSVN的操作手冊,讓新加入的成員快速進入狀況。 接著,我們訂定幾個需要遵守的原則(Principle),在文件部分,要進行編輯的文件一定要...

軟體工程與大型整合專案—以WiMAX整合型計畫為例 (1/3)

圖片
以往學生在學軟體工程時,總覺得這門課就是在「寫文件」,對於為什麼要寫文件,以及文件的用途,不甚了解,甚至覺得寫文件是很枯燥乏味的一件事。的確,為了交作業而寫文件,我想沒有人會認為寫文件是有用的,特別是對於一個虛擬的軟體專案而言,即使必須開發對應的軟體,充其量也是一個小品,而且一個學期的時間又很有限,所以不是文件品質不好就是軟體沒寫好,更別提要維護了, 而學生無法對軟體跟專案產生情感,自然無法體會文件的意義。 過去三年,筆者因為主持國科會整合型計畫「WiMAX 無線通訊系統軟體與工具開發(I),(II),(III)」的關係,需要主導撰寫其Light-weight CMMI文件,剛開始的第一年,參與計畫的學生們也是哀鴻遍野,學生們即便已經參加過國科會舉辦的Light-weighted CMMI研討會,寫出來的文件,和實際的軟體設計仍有一段很大的落差,一直到第二年,需要開始維護第一年的軟體時,學生才慢慢體會到軟體工程要的不只是文件,而是文件所帶來的價值:溝通與管理。 有一個經常被提到的問題是「軟體流程」?我們的WiMAX整合行計畫到底有多大呢?是否真的需要軟體工程或是完善的軟體流程才能完成呢?這裡先簡單描述一下我們的案子,大家都知道WiMAX被視為M-Taiwan重點發展項目,WiMAX(802.16e)是一個相當複雜的通訊協定,而我們的目標是開發一套完整的「WiMAX網路模擬軟體」,由於WiMAX由上到下包含許多子層,而各子層又各須非常專業的知識,因此,這個案子需要軟體工程加入,才能有效地整合各種跨領域的知識,構成一個完整的系統。也因此我們(北科大軟體研發中心)才提出這個跨領域的整合型計畫,希望開發出WiMAX網路模擬軟體,以開放原始碼的方式貢獻給業界作為WiMAX參考模型,並分享我們的開發經驗。 在WiMAX的案子中分成三個主要項目:「應用」、「協定」與「輔助工具」,應用有「即時視訊傳輸應用」與「適地性資訊服務」;協定負責WiMAX通訊協定的所有子層包含媒體存取控制、安全加密、實體層編碼、實體層調變與通道模擬;輔助工具則提供通訊軟體模型建構工具與持續整合等輔助。由此可知,計畫規模頗大,最多曾經有12個子計畫。軟體流程不能保證專案如期完工,但能用來監控時程與進度,如果沒有流程,進度落後或是超前,都無法掌握,那軟體勢必是無法順利開發與整合的。 有了第一年的...

憑空產生的程式碼

最近學生報告了一篇有趣的論文。研究團隊開發了一個系統 CodeConjurer(程式碼魔術師),說的是可以憑空產生的程式碼。你會想,這怎麼可能? 它的原理很簡單,首先各位都知道 google 搜尋引擎可以去找全世界網頁的資料,其實還有許多是針對程式碼的搜尋引擎。例如 Merobase。研究團隊利用 Merobase 到一些 opensouce 的地方(例如 SourceForge)找程式碼,程式設計者只要寫出你想要用的物件的功能(也就是定義他的介面),CodeConjurer 就幫你找出一些可能的軟體元件,你可以進去看裡面的程式碼檢驗是否這就是你要的元件,如果是的話,可以馬上下載並整合到你的專案中。這無疑的可以幫你節省一些時間。 當然,光是透過介面的定義就認定該原始碼就是你要的可能會有些風險。為了進行 semantic check, CodeConjurer 也與 JUnit 作整合,開發者在使用這些元件前應該先透過 JUnit 確認元件的 semantics。 如果這個東西真的可行的話,第一個要擔心可能是老師們,因為抄襲的問題可能會越來越嚴重,學生可能越來越不寫程式。但從軟體工程的角度來看,這不失為是一種 code reuse 的發展趨勢。在防堵學生抄襲的同時,老師們也需要教導如何在有限的時間內套用正確、合適的元件來增加軟體開發的效率。

Open source 與文件

自由軟體盛行多年,近年來國科會也開始再推自由軟體,初期僅允許技職院校申請計畫,最近也允許一般大學的申請。大部分教授還是喜歡申請一般型的研究計畫,不喜歡申請自由軟體計畫,我分析原因有幾個: 國科會的自由軟體計畫必須遵守輕量級 CMMI 的規定,產生許多文件(例如計畫書、規格書、設計文件、測試報告),工作量相對比較高。 不能只是理論,必須真的實作出來。 期末必須做實體展示,而且接受委員的審查。如果是整合型計畫的話,還需要接受期中審查。 相對於一般型計畫,只要有論文產出,自由軟體的計畫的確要花費很多的功夫。最近有聽到一些聲音:『 整天都在寫文件,哪裡有時間作系統 ?』。我個人是贊成寫文件的,也期望國科會要堅持下去,不要因此就妥協了,原因如下: 可以讓參與計畫的學生練習寫文件。出社會文件是絕對少不了的。一些研究型的計畫所產出的系統因為不需要長期維護,所以文件相對不重要,造成學生的誤解。 研究成果需要寫成論文發表,其原因就是希望後人可以延續其研究成果繼續發揮。自由軟體寫成文件後,後人才有辦法繼續的擴充。輕系統文件而重研究論文是不公平的。 絕大部分知名的 open source 軟體,都有完整、及時更新的文件說明。 文件是軟體的一部份。 今年 1/14 日的理監事會議中, 郭譽申教授  也提到一個台灣自由軟體計畫的問題。國外的自由軟體的發展都是心甘情願的、無償的開發,等到做出了一些規模,再徵求 donate。國內反倒是透過國家的力量來推廣,大家申請了計畫來做系統,做完了卻任其荒廢在 open foundry ,實在可惜。 順道,想請問各位,有哪些 open source 是適合軟體工程使用的?