什麼是軟體設計
2010-01-03 16:47:12
標籤: 軟體
原則設計
原始出處 、作者資訊和本宣告。否則將追究法律責任。
什麼是軟體設計?就筆者的觀點來看:軟體設計是採用程式設計或指令碼語言優雅地表達並解決現實需求的一門科學和藝術。「優雅地表達」想傳遞的意思是,所設計出來的軟體應當能容易被人理解、方便擴充套件和維護。從這一定義可以看出軟體設計首先是一門科學,是一門解決使用者需求的軟體科學。既然是科學,不可避免的要掌握相關的科學知識,比如資料結構、計算機組成原理、程式語言等等,而這些內容也正是大學計算機相關專業所傳授的知識。科學知識或許更加容易被量化,拿資料結構為例,一種演算法比另一種演算法是否更優可以從演算法的時間冗餘度和空間冗餘度進行衡量。
除了科學的部分,軟體設計還涉及藝術的範疇。既然是一門藝術,那就一定存在欣賞的問題,也就意味並不是每個從業人員都能欣賞這種藝術,而只有達到了一定的層次且形成了自己的思想後才能欣賞它。由於設計中藝術的非直觀性,造成其在現實中不容易被量化,因此難以形成相應的評估準則,進而造成在軟體行業容易被忽視。試想想,大學課程有多少內容是在教我們將軟體設計當作藝術進行欣賞並追求?
好的軟體設計能相對方便(甚至是很方便)地實現新的需求問題。需求分析是告訴我們「做什麼」,其顯然非常的重要,而設計更多地涉及「怎麼做更好」。既然對於設計的好壞不能完全通過量化的方式進行衡量,那如何去評價乙個軟體設計的好壞呢?或者在進行軟體設計時,如何去思考以做出乙個好的設計呢?這可以通過對一些軟體設計原則的把握來做到。設計原則可能有很多,但並不是每乙個專案都要同時滿足所有的設計原則,另外,不同的專案其特性有可能使得有些設計原則並不適用。另外,設計原則也不是一成不變的,可能因專案的特點又可以抽取出另外的設計原則。筆者將在後續的文章中闡述日常工作中所遵守的軟體設計原則。
軟體設計是乙個不斷提煉和抽象的過程。說它是乙個提煉的過程,是因為在設計之初會想到很多需要考慮的因素,這些因素在設計工作沒有深入之前,並不能發現它們有些是重疊的,或者有些根本就不需要考慮。隨著設計的深入,會從眾多的因素中得到其中的關鍵因素並將這些因素付之於實踐。設計也是乙個抽象過程,需要從眾多的表象中找到它們的共性,通過表達共性從而最終描述每個個性,而不應當侷限於直接去描述每乙個個性。設計的深入過程並不只是一味地思考,除非設計者以前有過類似的設計經驗,否則設計過程通常需要進行一定的**編寫工作,以輔助思考,這一點對於開發軟體架構師(系統架構師不包括在內)也應當是一樣的。
軟體設計是乙個創造模型的過程。通過對需求的理解和抽象,好的設計將最終構造出乙個模型,而且這個模型與現實世界的某樣東西可能是相類似的。這個模型除了實現了使用者的需求,還向他人展示了她自己是「什麼模樣」以及可能會如何行事。打個比方,如果有人發明了一種新的交通工具,他如何最為有效地表達這一新的交通工具到底是什麼樣的呢?是直接拿一張圖紙給他人並說「你看看圖紙就知道了」好呢?還是打乙個大家都耳熟能詳的比方好呢?顯然,後者更好。如果他說「這個新的交通工具與現在的轎車很像,只不過…」,如此一來,聽眾馬上就會想,這個新的交通工具有四個輪子、也有方向盤等等。顯然,後者能很快地讓聽眾利用其生活經驗快速的接收資訊,而好的軟體設計也應當做到這一點。軟體設計時的模型創造過程,其實就是賦予軟體**「生命」的過程,由此看來乙個好的設計應當是 「有生命的」。
軟體設計是乙個做選擇的過程。人有時沒有選擇反而輕鬆。乙個剛畢業的大學生如果只拿到了乙個offer,他可能沒有選擇單位的煩惱,不論單位好壞都去報道就是了。但是,如果他拿了兩個offer,選擇的煩惱也就有了 —— 是去a單位好呢?還是b單位好?不幸的是,軟體的設計過程往往存在大量的選擇。是用空間換時間好呢?還是用時間換空間好?是現在考慮可擴充套件性呢?還是將來?等等。因此,毫不誇張地說,設計是「痛苦」的,除非設計主題很簡單或直接了當。有苦當然也就有樂,在設計沒有最終定下來時,需要痛苦地思考和選擇,往往是乙個覺得這個也不行、那個也不好的過程。但是,一旦設計最終定稿,會發現「這就是我想要的設計」,隨之而來的是三百六十度的大轉變,覺得這個也應當就是這樣,那個也應當是這樣,其結果是設計者能從中體會到一種美,並從中收穫樂趣。
軟體設計是乙個在有限理性範圍內追求完美的過程。有限理性非常重要,設計者需要在各種條件允許的情況下做出合理的設計選擇。另外,促使設計者用心並「痛苦地」進行設計的動力是設計者追求完美的品德。可以說,如果沒有這種追求,就很難獲得乙個好的軟體設計。
本文出自 「李雲」 部落格,請務必保留此出處
0人
了這篇文章
類別:軟體開發┆
推送到技術圈┆
返回首頁
[程式設計好習慣] 判斷函式的返回值
軟體設計是什麼?
軟體設計時一系列創造活動,是借助程式語言以簡單和優雅的方式表達並解決現實需求的一門科學和藝術。軟體設計是一門技術 資料結構,組成原理,作業系統,程式語言 科學的特點是有規律可循,因此軟體設計者需要掌握相關的專業知識。而這些科學知識通常容易被量化和評估。軟體設計是一門藝術 並不是技術知識的簡單堆砌,而...
什麼是軟體設計,其目的是什麼?(1)
以下是我通過這將近一年中的軟體開發中關於軟體分析設計的一些體會 1 軟體分析和設計都有靜態 動態分析 設計。不能只關注其一,否則是片面的。靜態表現在用例圖 類圖,物件圖 動態表現在時序圖,協作圖,狀態圖。2 分析 設計是以用例來貫穿的。即 對每個用例得到對應的類,狀態 關係等。3 關於分析設計的目的...
軟體設計是怎樣煉成的(1) 什麼是優秀的設計?
摘要 某專案的設計文件評審會上,各路技術大牛進行了 熱烈 的討論,討論的焦點是怎樣的設計才漂亮!大家圍繞著如何oo,如何高內聚低耦合,如何反轉控制等話題進行了 熱烈 的爭論。照這樣開下去,這個評審會豈不是變成了 神仙大會 怎樣的設計才叫優秀的設計呢?大綱 1.什麼是優秀的設計?2.優秀的設計能節省專...