軟件設計是一個創造性的過程,對一些設計者來說需要一定的資質,而最后設計通常都是由一些初步設計演變而來的。從書本上學不會設計,只能經過實踐,通過對實際系統的研究和實踐才能學會。對于高效的軟件工程,良好的設計是關鍵,一個設計得好的軟件系統應該是可直接實現和易于維護、易懂和可靠的。設計得不好的系統,盡管可以工作,但很可能維護起來費用昂貴、測試困難和不可靠,因此,設計階段是軟件開發過程中最重要的階段。
直到最近,軟件設計在很大程度上仍是一個特定過程。一般用自然語言給定一需求集,預先作非正式設計,常常用流程圖的形式說明,接著開始編碼,當系統實現時設計還需修改。當實現階段完成后,設計往往已與起初形式相去甚遠以至于設計的原始文檔完全不適合對系統的描述。
軟件設計的這種方法導致了許多動態的和非常昂貴的工程失敗,F在已經認識到一些完全非正規的表示法,諸如接近于編程語言的流程圖,不適用于系統設計的描述和表達。大家認識到,精確的(盡管并不一定是正規的)說明是設計過程的必要部分。軟件設計是一個反復的、不能用任何單一表示法來表示的多層次活動。相應地,大量的設計表示法,如數據流圖、層次式輸入-處理-輸出結構圖和設計描述語言已經開發出來,這些表示法能比流程圖更好地表達軟件設計。
給定一個需求定義,軟件工程師必須以此導出滿足這些需求的程序系統的設計,此導出過程是通過下述步驟來完成的:
1.必須建立組成程序系統的子系統。
2.必須把每個子系統分解成分離的成分,并且子系統規范通過定義這些成分的操作來建立。
3.每個程序可以用相互作用的子成分設計。
4.每個成分還須進行優化,這通常需要將每個成分規范化成層次式的子成分。
5.優化過程中的某個階段,各成分中的算法必須詳細說明。
除了程序系統設計中的這些階段之外,軟件工程師也可能需要設計允許系統中各進程之間進行通信的通信機制。他們或許要設計文件結構,并且很可能要設計用于程序的數據結構,他們還需要設計確認程序的測試事例。
確定何為“成功”的設計無一定之規,取決于其應用和特定的工程要求。一個成功的設計應該是:能生成高效的代碼,實現盡量緊湊的最小設計,或是一個最易維護的設計。最后一個標準是本文采用的質量標準,可維護性設計意指系統修改費用最低,設計可懂度高和修改是局部性的。只有邏輯上高度結合而相互間松散地耦合的軟件設計才能實現以上兩個因素。
有效的軟件設計最好利用一致性設計方法。有大量的在不同應用環境中開發并使用的設計方法,其中有些是由皮特森(1980)、布蘭克和克瑞境(1983)描述的。實質上,這些方法大多數可劃分為三類:
1.由上至下的功能設計:從功能的觀點設計系統,從高層的觀點著手將系統逐步地提煉成更具體的設計。結構化設計和階梯式優化就是使用此方法的例子。
2.面向目標設計:把系統作為目標集合而不是功能的集合,信息在目標與目標之間傳送,每個目標有它自己的相互關聯操作集。面向目標的設計方法是基于信息隱藏的觀點,該觀點由巴拿斯(1972)最先提出,最近又由羅濱遜(1981)和保什(1983)描述。
3.數據驅動設計:此方法由杰克遜(1975)和萬勒爾(1977)提出,認為軟件系統的結構應該反映該系統所處理數據的結構。因此,軟件設計應由對系統輸入、輸出數據進行分析后而導出。
文章來源于領測軟件測試網 http://www.kjueaiud.com/