軟件設計采用自頂向下、逐次功能展開的設計方法,首先完成總體設計,然后完成各有機組成部分的設計。
根據(jù)工作性質(zhì)和內(nèi)容的不同,軟件設計分為概要設計和詳細設計。概要設計實現(xiàn)軟件的總體設計、模塊劃分、用戶界面設計、數(shù)據(jù)庫設計等等;詳細設計則根據(jù)概要設計所做的模塊劃分,實現(xiàn)各模塊的算法設計,實現(xiàn)用戶界面設計、數(shù)據(jù)結(jié)構(gòu)設計的細化,等等。
概要設計是詳細設計的基礎,必須在詳細設計之前完成,概要設計經(jīng)復查確認后才可以開始詳細設計。概要設計,必須完成概要設計文檔,包括系統(tǒng)的總體設計文檔、以及各個模塊的概要設計文檔。每個模塊的設計文檔都應該獨立成冊。
詳細設計必須遵循概要設計來進行。詳細設計方案的更改,不得影響到概要設計方案;如果需要更改概要設計,必須經(jīng)過項目經(jīng)理的同意。詳細設計,應該完成詳細設計文檔,主要是模塊的詳細設計方案說明。和概要設計一樣,每個模塊的詳細設計文檔都應該獨立成冊。
概要設計里面的數(shù)據(jù)庫設計應該重點在描述數(shù)據(jù)關系上,說明數(shù)據(jù)的來龍去脈,在這里應該結(jié)合我們的一下結(jié)果數(shù)據(jù),說明這些結(jié)果數(shù)據(jù)的源點,我們這樣設計的目的和原因。詳細設計里的數(shù)據(jù)庫設計就應該是一份完善的數(shù)據(jù)結(jié)構(gòu)文檔,就是一個包括類型、命名、精度、字段說明、表說明等內(nèi)容的數(shù)據(jù)字典。
概要設計里的功能應該是重點在功能描述,對需求的解釋和整合,整體劃分功能模塊,并對各功能模塊進行詳細的圖文描述,應該讓讀者大致了解系統(tǒng)作完后大體的結(jié)構(gòu)和操作模式。詳細設計則是重點在描述系統(tǒng)的實現(xiàn)方式,各模塊詳細說明實現(xiàn)功能所需的類及具體的方法函數(shù),包括涉及到的sql語句等。
http://blog.csdn.net/skyly84/archive/2009/06/02/4236569.aspx
概要設計與詳細設計的區(qū)別
概要設計就是設計軟件的結(jié)構(gòu),包括組成模塊,模塊的層次結(jié)構(gòu),模塊的調(diào)用關系,每個模塊的功能等等。同時,還要設計該項目的應用系統(tǒng)的總體數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu),即應用系統(tǒng)要存儲什么數(shù)據(jù),這些數(shù)據(jù)是什么樣的結(jié)構(gòu),它們之間有什么關系。
詳細設計階段就是為每個模塊完成的功能進行具體的描述,要把功能描述轉(zhuǎn)變?yōu)榫_的、結(jié)構(gòu)化的過程描述。
概要設計階段通常得到軟件結(jié)構(gòu)圖
詳細設計階段常用的描述方式有:流程圖、N-S圖、PAD圖、偽代碼等
概要設計和詳細設計
在軟件設計中,大家經(jīng)常問到的一個問題是:概要設計應該怎樣一個概要法,詳細設計應該怎樣一個詳細法?
這個問題在公司內(nèi)部經(jīng)常有人問。現(xiàn)在陳述一下。
我們公司的研發(fā)流程是瀑布型的,這個模型中的分析、設計階段是基于經(jīng)典的結(jié)構(gòu)化方法。
結(jié)構(gòu)化設計方法的基本思路是:按照問題域,將軟件逐級細化,分解為不必再分解的的模塊,每個模塊完成一定的功能,為一個或多個父模塊服務(即接受調(diào)用),也接受一個或多個子模塊的服務(即調(diào)用子模塊)。模塊的概念,和編程語言中的子程序或函數(shù)是對應的。
這樣一來,設計可以明顯地劃分成兩個階段:
概要(結(jié)構(gòu))設計階段:把軟件按照一定的原則分解為模塊層次,賦予每個模塊一定的任務,并確定模塊間調(diào)用關系和接口。
詳細設計階段:依據(jù)概要設計階段的分解,設計每個模塊內(nèi)的算法、流程等。
概要設計階段:
在這個階段,設計者會大致考慮并照顧模塊的內(nèi)部實現(xiàn),但不過多糾纏于此。主要集中于劃分模塊、分配任務、定義調(diào)用關系。模塊間的接口與傳參在這個階段要定得 十分細致明確,應編寫嚴謹?shù)臄?shù)據(jù)字典,避免后續(xù)設計產(chǎn)生不解或誤解。概要設計一般不是一次就能做到位,而是反復地進行結(jié)構(gòu)調(diào)整。典型的調(diào)整是合并功能重復的模塊,或者進一步分解出可以復用的模塊。在概要設計階段,應最大限度地提取可以重用的模塊,建立合理的結(jié)構(gòu)體系,節(jié)省后續(xù)環(huán)節(jié)的工作量。
概要設計文檔最重要的部分是分層數(shù)據(jù)流圖、結(jié)構(gòu)圖、數(shù)據(jù)字典以及相應的文字說明等。以概要設計文檔為依據(jù),各個模塊的詳細設計就可以并行展開了。
詳細設計階段:
在這個階段,各個模塊可以分給不同的人去并行設計。在詳細設計階段,設計者的工作對象是一個模塊,根據(jù)概要設計賦予的局部任務和對外接口,設計并表達出模塊的算法、流程、狀態(tài)轉(zhuǎn)換等內(nèi)容。這里要注意,如果發(fā)現(xiàn)有結(jié)構(gòu)調(diào)整(如分解出子模塊等)的必要,必須返回到概要設計階段,將調(diào)整反應到概要設計文檔中,而不 能就地解決,不打招呼。詳細設計文檔最重要的部分是模塊的流程圖、狀態(tài)圖、局部變量及相應的文字說明等。一個模塊一篇詳細設計文檔。
概要設計文檔相當于機械設計中的裝配圖,而詳細設計文檔相當于機械設計中的零件圖。文檔的編排、裝訂方式也可以參考機械圖紙的方法。
我們公司對模塊的認識和傳統(tǒng)定義有所不同,認為是較大的軟件功能單元才可以稱作模塊。這種認識使大家對概要設計和詳細設計的分工產(chǎn)生了混亂的理解,降低了文檔的可用性,應該予以糾正。
概要設計中較頂層的部分便是所謂的方案。方案文檔的作用是在宏觀的角度上保持設計的合理性。
有的項目采用面向?qū)ο蟮姆治觥⒃O計方法。可能在概要設計、詳細設計的分工上疑問更多。其實,面向?qū)ο蟮姆治觥⒃O計方法并沒有強調(diào)結(jié)構(gòu)化方法那樣的階段性,因此一般不引入概要、詳細設計的概念。如果按照公司的文檔體系,非要有這種分工的話,可以將包的劃分、類及對象間的關系、類的對外屬性、方法及協(xié)作設計看做 概要設計;類屬性、方法的內(nèi)部實現(xiàn)看做詳細設計。
1.需求分析--產(chǎn)生軟件功能規(guī)格說明書,需要確定用戶對軟件的需求,要作到明確、無歧義。不涉及具體實現(xiàn)方法。用戶能看得明白,開發(fā)人員也可據(jù)此進行下面的工作(概要設計)。
2.概要設計--產(chǎn)生軟件概要設計說明書,說明系統(tǒng)模塊劃分、選擇的技術路線等,整體說明軟件的實現(xiàn)思路。并且需要指出關鍵技術難點等。
3.詳細設計--產(chǎn)生軟件詳細設計說明書,對概要設計的進一步細化,一般由各部分的擔當人員依據(jù)概要設計分別完成,然后在集成,是具體的實現(xiàn)細節(jié)。理論上要求可以照此編碼。
概要設計和詳細設計的區(qū)別與聯(lián)系
軟件設計采用自頂向下、逐次功能展開的設計方法,首先完成總體設計,然后完成各有機組成部分的設計。
根據(jù)工作性質(zhì)和內(nèi)容的不同,軟件設計分為概要設計和詳細設計。概要設計實現(xiàn)軟件的總體設計、模塊劃分、用戶界面設計、數(shù)據(jù)庫設計等等;詳細設計則根據(jù)概要設計所做的模塊劃分,實現(xiàn)各模塊的算法設計,實現(xiàn)用戶界面設計、數(shù)據(jù)結(jié)構(gòu)設計的細化,等等。
概要設計是詳細設計的基礎,必須在詳細設計之前完成,概要設計經(jīng)復查確認后才可以開始詳細設計。概要設計,必須完成概要設計文檔,包括系統(tǒng)的總體設計文檔、以及各個模塊的概要設計文檔。每個模塊的設計文檔都應該獨立成冊。
詳細設計必須遵循概要設計來進行。詳細設計方案的更改,不得影響到概要設計方案;如果需要更改概要設計,必須經(jīng)過項目經(jīng)理的同意。詳細設計,應該完成詳細設計文檔,主要是模塊的詳細設計方案說明。和概要設計一樣,每個模塊的詳細設計文檔都應該獨立成冊。
概要設計里面的數(shù)據(jù)庫設計應該重點在描述數(shù)據(jù)關系上,說明數(shù)據(jù)的來龍去脈,在這里應該結(jié)合我們的一下結(jié)果數(shù)據(jù),說明這些結(jié)果數(shù)據(jù)的源點,我們這樣設計的目的和原因。詳細設計里的數(shù)據(jù)庫設計就應該是一份完善的數(shù)據(jù)結(jié)構(gòu)文檔,就是一個包括類型、命名、精度、字段說明、表說明等內(nèi)容的數(shù)據(jù)字典。
概要設計里的功能應該是重點在功能描述,對需求的解釋和整合,整體劃分功能模塊,并對各功能模塊進行詳細的圖文描述,應該讓讀者大致了解系統(tǒng)作完后大體的結(jié)構(gòu)和操作模式。詳細設計則是重點在描述系統(tǒng)的實現(xiàn)方式,各模塊詳細說明實現(xiàn)功能所需的類及具體的方法函數(shù),包括涉及到的sql語句等。
概要設計,詳細設計之間的關系是什么?
Q:
我的看法:
概要設計只說明系統(tǒng)有多少個模塊,各模塊之間的接口和個模塊本身的功能
詳細設計說明某個具體模塊如何實現(xiàn),粒度應該比程序略高一些
但是問題來了,各個模塊之間是有層次關系的,也有先后邏輯關系。這就說明,在概要設計中,還必須考慮模塊的實現(xiàn)細節(jié),否則,你怎么知道這個模塊下面要劃分子模塊?你怎么知道各子模塊的調(diào)用順序?
這就說明,概要設計和詳細設計是重疊進行的,而軟件工程書上說的確是順序進行的,不知道是不是我的理解有問題。
舉個例子,例如排序程序,如果設計2個模塊:
一個主模塊用于排序子模塊用于交換2個變量,主模塊調(diào)用子模塊,但是子模塊是怎么設計出來的呢?肯定是你先想到了用冒泡等排序方式的時候需要交換數(shù)據(jù),這已經(jīng)考慮了主模塊足夠多的細節(jié),似乎屬于"詳細設計"了,但是目前進行的是概要設計,這就產(chǎn)生了我所說的重疊的情況。
A:
看看上面的帖子,有意思的居多。
上面也有朋友說到用建筑的例子來比喻。
軟件的概要設計,主要是建立軟件系統(tǒng)的整體架構(gòu),也就是我們在蓋房子時候,需要先將房子的整個架子構(gòu)建起來。
軟件的詳細設計,主要是將軟件系統(tǒng)的各個部分的具體設計方法、邏輯、功能采用文字方式進行表述。這樣在實現(xiàn)過程中,Coding人員原則上嚴格按此進行代碼實現(xiàn)即可。
這樣的一個最為簡單的例證:我們可以將代碼交付第三方來做。驗證與跟蹤采取設計來。
我看上面還有一個朋友說:快速做代碼。這個本身沒有值得批評之處。但只要想一下,你寫的代碼沒有任何設計思想、文檔留下的情況,一旦你離開,如何維護?重新設計嗎?還是花費幾倍人力去研究你寫的幾千/萬,甚至幾十萬行代碼?如果是這樣的,你沒錯,關鍵是你們老板太對了,錢算什么。
另外的一個問題是:中國人如此聰明,但中國為什么沒有出現(xiàn)巨型軟件產(chǎn)品呢?個人英雄主義依然很嚴重,老板的短視利益行為大行其道。