鄭雪松
(哈爾濱學院 軟件學院 2006級軟件工程專業,黑龍江 哈爾濱 150000)
目前,軟件開發行業正在大力倡導規范軟件開發。規范就是要約束自己、約束參與軟件開發過程的各方,目的是要消除軟件開發中的種種不良做法和習慣,采用符合軟件規律、事半功倍的方法,降低風險,以使軟件開發項目能獲得可重復、可以預期的滿意結果。
規范軟件開發過程必須做好“三化”、同時避免踏入兩個誤區。所謂做好“三化”、避免踏入兩個誤區,就是指要堅持固化、簡化、標準化,避免踏入僵化、隨意化兩個誤區。
第一,要“固化”。
軟件過程又稱“軟件生存周期過程”,是軟件生存期內為達到一定目標而必須實施的一系列相關過程的集合。說白了,就是軟件開發中一系列最佳實踐的集合。所謂“固化”,其本質就是把軟件開發過程中已被實踐反復證明的、符合軟件規律的正確做法(最佳實踐)沉淀在開發管理流程之中,供后人實踐時借鑒、使用。
第二,要“簡化”。
“固化”只是規范軟件開發過程的“靜態基礎”,而“動態管理”對于規范軟件開發過程更為重要。
回顧20世紀70年代,軟件開發很簡單,因此很容易規范。隨著軟件項目規模越來越大,軟件開發過程越來越復雜,涉及的人、財、物資源也越來越龐大。復雜導致多變,多變帶來隨意,隨意容易使軟件開發誤入歧途,使開發過程難以規范。所以說規范軟件開發過程還必須簡化軟件開發過程。
說到簡化,也有企業走進了“隨意化”的誤區。自由主義、經驗主義隨心所欲地發揮,口頭協議滿天飛,時間緊、人手不足是他們拋棄規范、拒絕監督的最佳接口。其實,簡化絕不意味著隨意化。
如何簡化呢?我認為采用基于構件的軟件開發方法就是一種有效手段。通過對應用領域的研究(領域工程),提煉領域需求的共性和變化性,刻畫領域模型,設計面向領域的體系結構,開發各種構件,從而使應用軟件的開發過程更接近于工業化生產流水線,基于體系結構,用各種構件進行組裝。簡化了的軟件開發過程,變化因素更少,更容易規范管理。
第三,要“標準化”。
前面所說的固化、簡化都只是單個企業內部的實踐行為,而“標準化”則是整個社會范圍內的固化和簡化行為。技術標準化、管理過程標準化、度量標準化、應用領域內業務的標準化,都是推動整個軟件行業內、軟件產業鏈上各個企業規范軟件開發過程的前提基礎和有力保障。標準,凝聚著眾多企業、科研院所的智慧,同時,又大大簡化了標準所規范的領域內軟件開發過程。當然,標準化也是規范軟件開發過程的征途上最漫長、最困難而又最具意義的一步。
總之,失敗的軟件項目各有其失敗,而成功的軟件項目都一樣:離不開規范的軟件開發過程管理。固化、簡化、標準化正是規范軟件開發過程重要的三個方面。下面,理論結合實際,重點闡述在軟件開發中如何貫徹簡化原則。
同樣功能和性能的軟件,不同的開發者用的工作量和花費的代價卻相差很大,其中的一個原因,就是在開發過程中是否貫徹了簡化原則。所謂簡化原則就是在滿足用戶對軟件的功能和性能要求的前提下,盡可能化簡軟件及其開發過程。軟件及其開發過程的適度簡化,軟件出錯的可能性會減小,開發工作量和代價也會變小,可以收到少花錢、少干活、少出錯的效果。那么如何在開發過程貫徹簡化原則?筆者通過學習研究,結合自己在軟件開發過程中的體會,談談自己的認識。
開發軟件首先要弄清用戶對要開發的軟件在功能、性能、使用、用戶界面等方面的要求,通常由于用戶對軟件需求的描述不全面、不精確、有二義性甚至有錯誤,軟件開發人員對用戶需求的理解與用戶的真實愿望有差異等原因,使得精確地、全面地把握用戶需求成為一個難題,簡化問題的有效辦法為:
1.1 首先讓用戶的相關人員通過開“諸葛亮會”等形式,全面、深入、細致地考慮清楚,他們需要的軟件應具有什么功能,怎樣的性能,什么樣的使用界面等要求,將要求寫成詳細的書面材料;
1.2 開發者取得書面材料并進行認真推敲,然后聽取用戶的詳盡說明,弄清弄準用戶的需求;
1.3 聽取用戶對軟件功能所對應業務流程的全面、深入、細致的介紹并作以詳細記載;
1.4 到用戶現場熟悉軟件功能對應的業務流程和業務內容并作以詳細記載,對所涉及的各種問題搞懂弄通;
1.5 弄清完成軟件的功能必需哪些輸入和輸出,中間必需進行怎樣的處理;
1.6 寫出軟件需求說明書,然后聽取用戶的意見,根據用戶意見進行修改完善,最終形成軟件設計所需的軟件需求說明書。
軟件開發是特殊的有組織的智力活動,開非人員越多越好,軟件開發人員越多,信息交流路徑越多,復雜性越大,常會造成事倍功半的效果,因此要本著簡化的原則將開發人員減少到適當的數量。
軟件總體設計是確定軟件的總體結構,確定一個軟件是由哪些層次、哪些模塊組成,哪些模塊之間存在控制關系,在這一過程的簡化應盡量減少軟件的層次,減少模塊的數量,化減模塊之間的控制關系,使軟件總體結構看上去既簡明清晰,又能完成所需的功能。
模塊設計簡化的目標是各模塊的功能單一獨立,應使每個模塊只完成一個單一的相對獨立的特定的功能,模塊的接口要盡可能減化,僅僅交換那些為完成系統功能必須交換的信息。應采用信息隱蔽原理指導模塊的設計,提高內聚度,降低耦合度,以減化模塊。
數據結構描述各數據元素之間的邏輯關系,數據結構一經確定,數據的組織形式、訪問方法、組合程度及處理策略基本上也就確定了,數據結構對程序的結構和過程的復雜性有直接的影響,因此,在數據設計時應根據要進行的數據處理的要求,將可用的幾種數據結構進行對比,選擇能夠簡化軟件的數據邏輯結構和數據存儲結構。
解決同樣的問題可以有多種算法,但不同的算法其復雜性可能差別很大,在確定算法時應進行算法復雜性分析,從中選擇復雜性最小的。
過程設計是模塊內部的處理活動的設計,結構化程序設計方法將模塊內部的處理活動分為“順序”、“分支”和“循環”三種基本的控制結構。由于這三種控制結構復雜程度不同,在選擇時應本著簡化的原則,盡量少選循環結構,必須選擇時盡可能用單循環,必須用多重循環時,盡量減少循環的層次。在使用變量時應盡可能使用內部變量,盡量不使用外部變量,盡可能用動態變量,盡量不使用靜態變量。
為了實現軟件的功能,必然要有數據的輸入和輸出,在設計輸入和輸出時,要盡可能簡化,輸入的數據項應是完成軟件的功能所必需的,輸出的數據項應是軟件用戶必需的,非必需的數據一概不要設計在輸入和輸出中。
軟件重用是指在再次或多次開發不同的軟件過程中重復使用相同或相似軟件元素。為了能有軟部件可重用,軟件開發組織應建立并逐步積累自己的軟部件庫,為軟件重用打下基礎。在面向對象的設計中就盡量利用“類庫”,在開發新的軟件過程中應善于使用軟部件庫或者類庫中的現成部件,凡在庫里有的就盡可能重用,即使要作些改動,如果比重新搞容易,還是要選擇重用。
軟件是供用戶使用而不是供觀賞的,用戶希望界面簡捷明了,一看界面就能基本理解作用和功能,就知道該怎樣用。因此在設計軟件的用戶第一界面和各個使用窗口時,應只設置必要的元素,沒必需的元素一個也不放。
[1]王海.關于在軟件開發中貫徹簡化原則的探討.
[2]齊治昌等.軟件工程[M].北京:高等教育出版社,2001,8.