網站首頁 > 相關文章彙整 > 軟體程式設計過程與概念
軟體程式設計過程與概念
軟體程式設計是一個創造性的過程,對一些設計者來說需要一定的資質,而最後設計通常都是由一些初步設計演變而來的。從書本上學不會設計,只能經過實踐,通過對實際程式系統的研究和實踐才能學會。對於高效的軟體程式工程,良好的設計是關鍵,一個設計得好的軟體程式系統應該是可直接實現和易於維護、易懂和可靠的。設計得不好的系統儘管可以工作,但很可能維護起來費用昂貴、測試困難和不可靠,因此設計階段是軟體發展過程中最重要的階段。
直到最近,軟體程式設計在很大程度上仍是一個特定過程。一般用自然語言給定一需求集,預先作非正式設計,常常用流程圖的形式說明,接著開始編碼,當程式系統實現時設計還需修改。當實現階段完成後,設計往往已與起初形式相去甚遠以至於設計的原始文件完全不適合對程式系統的描述。
軟體設計的這種方法導致了許多動態的和非常昂貴的工程失敗。現在已經認識到一些完全非正規的標記法,諸如接近於程式設計語言的流程圖,不適用於系統設計的描述和表達。大家認識到,精確的(儘管並不一定是正規的)說明是設計過程的必要部分。軟體設計是一個反復的、不能用任何單一標記法來表示的多層次活動。相應地,大量的設計標記法,如資料流程圖、層次式輸入-處理-輸出結構圖和設計描述語言已經開發出來,這些標記法能比流程圖更好地表達軟體設計。
軟體程式設計包括軟體的結構設計、資料設計、介面設計和過程設計。
結構設計是指:定義軟體程式系統各主要部件之間的關係。
資料設計是指:將模型轉換成資料結構的定義。
介面設計是指:軟體程式內部,軟體程式和作業系統程式間以及軟體程式和人之間如何通信。
過程設計是指:程式系統結構部件轉換成軟體的過程描述。
給定一個需求定義,軟體程式工程師必須以此匯出滿足這些需求的程式系統的設計,此匯出過程是通過下述步驟來完成的:
- 必須建立組成程式系統的子系統。
- 必須把每個子系統分解成分離的成分,並且子系統規範通過定義這些成分的操作來建立。
- 每個程式可以用相互作用的子成分設計。
- 每個成分還須進行優化,這通常需要將每個成分規範化成層次式的子成分。
- 優化過程中的某個階段,各成分中的演算法必須詳細說明。
除了程式系統設計中的這些階段之外,軟體工程師也可能需要設計允許系統中各進程之間進行通信的通信機制。他們或許要設計文件結構,並且很可能要設計用於程式的資料結構,他們還需要設計確認程式的測試事例。
確定何為『成功』的設計無一定之規,取決於其應用和特定的工程要求。一個成功的設計應該是:能生成高效的代碼,實現儘量緊湊的最小設計,或是一個最易維護的設計。最後一個標準是本文採用的品質標準,可維護性設計意指系統修改費用最低,設計可懂度高和修改是局部性的。只有邏輯上高度結合而相互間鬆散地耦合的軟體設計才能實現以上兩個因素。
有效的軟體設計最好利用一致性設計方法。有大量的在不同應用環境中開發並使用的設計方法,其中有些是由皮特森(1980)、布蘭克和克瑞境(1983)描述的。實質上,這些方法大多數可劃分為三類:
- 由上至下的功能設計:從功能的觀點設計系統,從高層的觀點著手將系統逐步地提煉成更具體的設計。結構化設計和階梯式優化就是使用此方法的例子。
- 面向目標設計:把程式系統作為目標集合而不是功能的集合,資訊在目標與目標之間傳送,每個目標有它自己的相互關聯操作集。面向目標的設計方法是基於資訊隱藏的觀點,該觀點由巴拿斯(1972)最先提出,最近又由羅濱遜(1981)和保什(1983)描述。
- 數據驅動設計:此方法由傑克遜(1975)和萬勒爾(1977)提出,認為軟體程式系統的結構應該反映該系統所處理資料的結構。因此,軟體程式設計應由對系統輸入、輸出資料進行分析後而匯出。
軟體程式的設計概念應遵循以下幾個方面:
- 程式抽象:我們必須把許多事物和問題抽象起來,並且抽象它們不同的層次和角度。建議用數學語言來抽象事務和問題,因為數學是最好的抽象語言,並且它的本質就是抽象。
- 程式模組化:將複雜的問題分解成可以管理的片斷會更容易。將問題或事物分解並模組化這使得解決問題變得容易,分解的越細模組數量也就越多,它的副作用就是使得設計者考慮更多的模組之間耦合度的情況。
軟體程式的設計原則應遵循以下幾個方面:
- 設計對於分析模型應該是可跟蹤的:軟體程式的模組可能被映射到多個需求上。
- 設計結構應該盡可能的類比實際問題。
- 設計應該表現出一致性。
- 不要把設計當成編寫代碼。
- 在創建設計時就應該能夠評估品質。
- 評審設計以減少語義性的錯誤。
(此篇文章為網路轉載,如有冒犯,請來信告知,當即刻移除!)