- 一個新的或者是基于以前的系統的框架結構,并在此基礎上作出目標系統的設計和計劃
在這個案例中,目標是明確的,叫色和成員都已經選定。他們會選擇一些可以實現我們的項目目標的方法和工具,以及開發項目所必須的一些原則。由于這個項目組一貫主張敏捷方法,因此選擇了極限編程(XP)和功能驅動計劃的方式。
5.1 極限方法
極限編程(XP)是為了實現敏捷開發而選擇的一套方法和原則。XP的發明者,Kent Beck和Ward Cunningham,都是敏捷宣言的發起人。
Astels對極限編程的方法和原則作了一個簡潔的概括,
極限編程方法
正如敏捷方法關注的是人,XP方法以開發者、開發團隊以及開發組和客戶之間的共同方式為核心。
5.2 開發過程
NBIP項目組的每個人都要收集需求、修正軟件結構和設計方案、做初步的測試和集成。由于開發環境引入和很多的工具,開發組成員還需要將安裝、配置和數據恢復程序文檔化。
傳統的軟件開發過程在這里被認為都是同等的程序,它們平行的進行,并頻繁的同步,以便能夠有跡可循。
為了能夠對軟件的設計和架構有一致的理解,每當一個主要的組件成熟的時候,這個部分的完成人將為項目組的其他成員組織一個討論會或者培訓,以便項目組的其他成員了解該模塊的信息。這樣的合作也提供了一個在模塊的開發者和用戶之間的協調機會。
5.3 小組實踐
XP方法的最大特點是不斷的鼓勵開發組形成需求和理解。為了能及時了解需求的變化情況,敏捷方法要求經常和客戶溝通,XP方法可以保證開發組隨時都可以取得客戶的支持。
在緊密的合作過程過程中,需求的反饋和變化都可以很快的被吸收。為了及時響應,開發組可以通過短時間的交互關注變化的情況。
NBIP通過每天的會議來同步他們的行為。為了保證例會在短的時間內結束,并能取得效果,項目組采取了“立會”的形式。雖有的參與者站著參加會議,在一個簡短的會議后馬上回到工作中。項目成員匯總前一天工作的成功經驗和遇到的問題,并考慮在下一步工作中如何調整。項目組的每一個成員可以指導小組現在在做什么以及以后需要做什么,小組成員也可以自由的請求幫助,以便解決遇到的問題。既是一個開發者沒有參加某一次會議,他也可以很快知道項目的信息。
這些工作是由開發者完成的,當產生了一些新的問題需要和客戶溝通的時候,客戶也可以很自由的參加這項工作。
為了能夠更好的溝通,XP提供了很多共享資源。例如,項目組的成員都可以使用已有的儀器設備,并可以共享儀器操作界面的圖片。
5.4 功能驅動計劃
Coad在書中用了獨立的一章概要的描述了FDD方法。這提供了一種一個相對大的、在技術和經驗上有相當的差異的租來開發復雜的軟件應用的方法。
FDD方法包括五個過程:
開發一個全面的模型
建立功能列表
基于功能做出計劃
基于功能開發
給予功能構建系統
圖 5.2 功能驅動方法的步驟
NBIP沒有采用FDD方法,但是借鑒了FDD功能的概念,以及通過一系列功能制定計劃和構建系統的優點。
功能是在需求獲取過程受手工形成的。
功能是對于系統的某一個部分為了獲得特定的結果而執行的一個操作的簡單描述。
User stories是軟件系統的用戶執行的操作的自然語言描述。
開發組記錄在同客戶進行的例會上收集的User stories。通過這些User stories可以獲得一系列的功能,這樣可以一直保持克輝對于各種功能的理解?蛻舸磉可以幫助確定這些功能的優先級。
通過這種方法,開發足可以記錄獨立于實現細節和軟件架構的用戶需求。
為了和里程碑的概念區分,實現一個功能所需要的范圍被稱為粒度。FDD每個功能用不超過兩周的時間實現,這樣,對于實現功能列表的工作所需要的任務分配、工作量平衡、進度度量等都會比較容易實現。進度可以以單元為單位,這樣既便于用戶理解下一個版本所作的修改,也可以很方便的測試。
在FDD的方法中,基于功能的開發和構建會反復地進行,直到所有的功能都已經實現。功能計劃僅僅提交目前的修改,說明哪些功能列表被實現,這些修改針對的是那個用戶群。
按照他們的優先級和依賴關系,功能集排成一個實現序列。在每一個交互過程結束時,計劃的變化都會反過來影響到那些已經實現的功能。這樣的反復過程有助于更好的管理需求的變更。
6 外部協作
“在一個開發組中傳輸信息最有效的方法是面對面的交談!盵1]
6.1 控制系統
NBIP選擇了SICS(SINQ Instrument Control System,SINQ指令控制系統)作為奇跡與服務器的控制軟件的基礎。SICS是一個在PSI應用的操作簡便、穩定、經過嚴格測試的平臺。在Hauser的著作幫助我們確定了這個系統的標準和決定。
2004年上半年,NBIP項目組邀請了SICS的主要作者之一,Mark Koennecke參加了ANSTO關于開發的一系列研討會和培訓。除了介紹有價值的開發理念和SICS的使用,還介紹了一些有關SICS的進展。
這項協作的最直接的影響是,可以通過修改SICS的結構改站點的結構,通過一組驅動程序和腳背把對于站點的維護同核心系統分開。同時,PSI所使用的模塊提供了很多可以被ANSTO使用的模塊和例子。
只有SICS的服務器和設備驅動庫可以同ANSTO的系統完全結合起來。每臺儀器在虛擬的局域網上運行一個SICS服務程序,他可以通過TCP/IP和設備控制器以及數據服務器在局域網上交換數據。
這樣的連接圖可以使SICS服務器不必同設備分享內部總線,而是通過網卡連接。這樣,服務器可以運行在儀器附近一個可靠的、獨立的PC上,可以通過任意數量的客戶機訪問服務器,不管是在儀器附近還是在遠程,只要有一定的授權,就可以訪問。服務器是基于面向對象結構的,內嵌的Tcl解釋器可以實現以下功能:
- 解析客戶端發來的命令行指令
- 在服務器啟動的時候執行初始化角本,定義儀器的配置參數
- 翻譯和執行服務器發來的提供擴展功能的角本
- 翻譯和執行用Tcl編寫的客戶角本
設備驅動程序是為各種特殊設備編寫的,它們在啟動時候通過一個角本為特定的儀器定義數據、組合方式和配置數據等。
通過提高系統的可靠性,開發過程中減少了測試工作,這樣使對儀器的訪問得到了限制,維持在了一個典型的水平。為了保證維護計劃的彈性,需要增加新的設備以擴展系統的容量。
SICS的模塊通過PSI和注冊表同步。
6.2 客戶端
基于Hauser提出的原因,NBIP很快選擇了C/S的結構。
ESRF的軟件工程師,Andy Gotz為我們的SICS控制的儀器提供了選擇平臺無關的框架的圖形化用戶界面客戶端的指導。為了達到這些要求,通過一定的調研,我們很快決定選擇基于Java的平臺。
RCP(Eclipse Rich Client Platform,Eclipse胖客戶端平臺)天然集成了Eclipse開發工具,它為我們提供一套成熟的、可以客戶化的、標準的、獨立于操作系統的開發工具。我們把客戶端軟件稱做Gumtree。Gumtree本身足夠靈活,足以滿足ANSTO的規范(GumNIX),完全有可能很成功地在以后的控制系統,例如EPICS或TANGO上應用。
6.3 其他合作的可能
敏捷開發提高了穩定開發的可能。發起人、開發組、用戶都可以取得比較穩步的進步。[1]
只要有可能,開發組總是想辦法提高系統的效率。
SICS可能為以后的站點提供同步的擴展。SICS服務器程序的核心部分是PSI(Paul Scherrer Institut,Paul Scherrer研究所)的Mark Koennecke開發的。
核心代碼已經擴展到可以支持站點描述的設備和方法。伴隨著系統的擴展,核心系統恩深已經被一個新的小組在一定程度上得到了修改。
開源思想在儀表控制客戶端的開發中起到了重要的作用,開發組從開源工具獲益,并因此提高了效率。我們的客戶端軟件,Gumtree在SourceForge注冊為一個開源項目,對其他同我們的開發組同等地位的合作者開放,來自ESRF和PSI的開發者已經表示出了對我們的平臺的興趣。
由于采用了開放的態度,事實上,很多其他用戶和程序員擴展的程序和工具被我們所采用并加入到我們的系統,例如Eclipse,他的插件,NeXus以及TANGO。
7 敏捷開發工具集
隨著一個新的開發組的建立,必須選擇一個開發方法論和核心工具集。這一定要是簡單易學的工具,并有比較高的效率可以在一定范圍的設備上建立穩定的方案,還要有充分的擴展性,以便能夠滿足儀器科學發展的需要。
開源集成開發環境
Eclipse是一個集成開發環境和應用程序平臺。除了為項目提供Java和C/C++的編輯工具,Eclipse的插件還給了我們同我們的源代碼管理工具(cvs或者vss)集成的圖形化的和基于菜單的工具。
- 源代碼管理工具(cvs或者vss)
- 調試工具(gdb)
- 源代碼文檔化工具(javadoc和doxygen)
- 外部編輯器(針對Tcl, perl, Python等)
插件也提供了本地功能的支持。
- 針對java和C/C++的優化工具
- java單元工具
- 用SQL輸出建模的數據庫環境
- UML支持(自行開發)
- 可執行程序的分析工具(Hyades)
此外,Eclipse還有很多其他免費的或者商務的插件,這些插件為軟件提供了擴展的功能或界面。
整個開發組都使用相同的集成開發環境,不論是C/C++或者Java的開發,調試,測試,還是形成相關的文檔。這樣提高小組成員交換工作的可能性。
其他基于社區的工具
文章來源于領測軟件測試網 http://www.kjueaiud.com/