翻譯:
軟件設計是一個創造性的過程,對一些設計者來說需要一定的資質,而最后設計通常都是由若于初步設計反復比較而來。從書本上學不會設計,只能經過實踐.通過對一現有系統的研究和實際演練才能做到。對于能產生預期結果的軟件工程,良好的設計是關鍵。設計得好的軟件系統實現和維護方式簡單明了、易懂可靠。設計得不好的系統,盡管可以工作,但很可能維護費高、測試困難且不可靠。因此,設計階段是軟件開發過程中最重要的階段。
直到最近,軟件設計在很大程度上仍是一個特定過程。一般用自然語言,給定一系列需求,準備好非正式設計,并常常用流程圖的形式說明;接著開始編碼;當系統實現時設計還會修改。當實現階段完成后,設計往往與當初的規格說明相去甚遠,以至于原始文檔完全不適合對系統的描述。
軟件設計的這種方法導致了許多驚人的而且是代價很大的工程失敗。現在已經認識到一些完全非正式的表示法,諸如接近于編程語言的流程圖,不適用于系統設計的公式化和表達。大家認識到,精確(盡管并不一定是正式)的規格說明是設計過程的必要部分。軟件設計是一個反復的、不能用任何單一表示法來表示的多階段活動。相應地,大量的設計表示法,如數據流圖、層次化輸入一處理一輸出結構圖和設計描述語言已經開發出來,比流程圖能更好地表達軟件設計。
對于給定的需求定義,軟件工程師必須據此導出滿足這些需求的程序系統的設計。此導出過程是通過下述步驟來完成的:
(1)必須建立組成程序系統的子系統;
(2)必須把每個子系統分解成獨立的成分,并且通過定義這些成分的操作來建立子系統規格說明;
(3)每個程序可以用相互作用的子成分設計;
(4)每個成分還須進行優化,這通常需要將每個成分規定為層次式的子成分;
(5)在精化過程中的某個階段,各成分中的算法必須詳細規定。
除了程序系統設計中的這些階段之外,軟件工程師也可能需要設計允許系統中各進程之間進行通信的通信機制。他們或許要設計文件結構,并且幾乎必然要設計用于程序的數據結構,他們還需要設計確認程序的測試用例。
確定何為“成功”的設計無一定之規。依據應用和特定的工程要求。一個成功的設計應該是:能生成高效的代碼,實現盡量緊湊的最小設計或最易維護的設計。最后一個準則是本文采用的優良度準則。可維護性設計意指系統修改費用最低,設計易于理解和修改是局部性的。只有高度內聚而又松散藕合的軟件設計才能實現以上兩個目標。
有效的軟件設計最好利用一致性設計方法學。有大量的在不同應用環境中開發并使用的設計方法學。其中有些是由Yeters(1980),Blank 和 Krijger(1983)闡述的。實質上,這些方法學大多數和劃分為3類。
(1)自頂向下的功能設計:從功能的觀點設計系統,從高層的觀點著手逐步提煉成更具體的設計。結構化設計和逐步求精就是使用此方法的例子。
(2)面向對象的設計:把系統作為對象集合而不是功能的集合,消息在對象與對象之間傳送,每個對象都有自己的關聯操作集。面向對象的設計方法是基于信息隱藏的思想,該思想由Parnas(1972)最先提出,最近又由Robson(1981)和Booch(1983)加以描述。
(3)數據驅動的設計:此方法由Jackson(1975)和Warnier(1977)提出,認為軟件系統的結構應該反映該系統所處理的數據的結構。因此,軟件設計應從對系統輸入、輸出數據進行分析中導出。
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |