概要設計與詳細設計的區別
概要設計與詳細設計的區別
概要設計就是設計軟體的結構,包括組成模組,模組的層次結構,模組的呼叫關係,每個模組的功能等等。同時,還要設計該專案的應用系統的總體資料結構和資料庫結構,即應用系統要儲存什麼資料,這些資料是什麼樣的結構,它們之間有什麼關係。
詳細設計階段就是為每個模組完成的功能進行具體的描述,要把功能描述轉變為精確的、結構化的過程描述。
概要設計階段通常得到軟體結構圖
詳細設計階段常用的描述方式有:流程圖、N-S圖、PAD圖、虛擬碼等
概要設計和詳細設計
在軟體設計中,大家經常問到的一個問題是:概要設計應該怎樣一個概要法,詳細設計應該怎樣一個詳細法?
這個問題在公司內部經常有人問。現在陳述一下。
我們公司的研發流程是瀑布型的,這個模型中的分析、設計階段是基於經典的結構化方法。
結構化設計方法的基本思路是:按照問題域,將軟體逐級細化,分解為不必再分解的的模組,每個模組完成一定的功能,為一個或多個父模組服務(即接受呼叫),也接受一個或多個子模組的服務(即呼叫子模組)。模組的概念,和程式語言中的子程式或函式是對應的。
這樣一來,設計可以明顯地劃分成兩個階段:
概要(結構)設計階段:把軟體按照一定的原則分解為模組層次,賦予每個模組一定的任務,並確定模組間呼叫關係和介面。
詳細設計階段:依據概要設計階段的分解,設計每個模組內的演算法、流程等。
概要設計階段:
在這個階段,設計者會大致考慮並照顧模組的內部實現,但不過多糾纏於此。主要集中於劃分模組、分配任務、定義呼叫關係。模組間的介面與傳參在這個階段要定得 十分細緻明確,應編寫嚴謹的資料字典,避免後續設計產生不解或誤解。概要設計一般不是一次就能做到位,而是反覆地進行結構調整。典型的調整是合併功能重複的模組,或者進一步分解出可以複用的模組。在概要設計階段,應最大限度地提取可以重用的模組,建立合理的結構體系,節省後續環節的工作量。
概要設計文件最重要的部分是分層資料流圖、結構圖、資料字典以及相應的文字說明等。以概要設計文件為依據,各個模組的詳細設計就可以並行展開了。
詳細設計階段:
在這個階段,各個模組可以分給不同的人去並行設計。在詳細設計階段,設計者的工作物件是一個模組,根據概要設計賦予的區域性任務和對外介面,設計並表達出模組的演算法、流程、狀態轉換等內容。這裡要注意,如果發現有結構調整(如分解出子模組等)的必要,必須返回到概要設計階段,將調整反應到概要設計文件中,而不 能就地解決,不打招呼。詳細設計文件最重要的部分是模組的流程圖、狀態圖、區域性變數及相應的文字說明等。一個模組一篇詳細設計文件。
概要設計文件相當於機械設計中的裝配圖,而詳細設計文件相當於機械設計中的零件圖。文件的編排、裝訂方式也可以參考機械圖紙的方法。
我們公司對模組的認識和傳統定義有所不同,認為是較大的軟體功能單元才可以稱作模組。這種認識使大家對概要設計和詳細設計的分工產生了混亂的理解,降低了文件的可用性,應該予以糾正。
概要設計中較頂層的部分便是所謂的方案。方案文件的作用是在宏觀的角度上保持設計的合理性。
有的專案採用物件導向的分析、設計方法。可能在概要設計、詳細設計的分工上疑問更多。其實,物件導向的分析、設計方法並沒有強調結構化方法那樣的階段性,因此一般不引入概要、詳細設計的概念。如果按照公司的文件體系,非要有這種分工的話,可以將包的劃分、類及物件間的關係、類的對外屬性、方法及協作設計看做 概要設計;類屬性、方法的內部實現看做詳細設計。
1.需求分析--產生軟體功能規格說明書,需要確定使用者對軟體的需求,要作到明確、無歧義。不涉及具體實現方法。使用者能看得明白,開發人員也可據此進行下面的工作(概要設計)。
2.概要設計--產生軟體概要設計說明書,說明系統模組劃分、選擇的技術路線等,整體說明軟體的實現思路。並且需要指出關鍵技術難點等。
3.詳細設計--產生軟體詳細設計說明書,對概要設計的進一步細化,一般由各部分的擔當人員依據概要設計分別完成,然後在整合,是具體的實現細節。理論上要求可以照此編碼。
概要設計和詳細設計的區別與聯絡
軟體設計採用自頂向下、逐次功能展開的設計方法,首先完成總體設計,然後完成各有機組成部分的設計。
根據工作性質和內容的不同,軟體設計分為概要設計和詳細設計。概要設計實現軟體的總體設計、模組劃分、使用者介面設計、資料庫設計等等;詳細設計則根據概要設計所做的模組劃分,實現各模組的演算法設計,實現使用者介面設計、資料結構設計的細化,等等。
概要設計是詳細設計的基礎,必須在詳細設計之前完成,概要設計經複查確認後才可以開始詳細設計。概要設計,必須完成概要設計文件,包括系統的總體設計文件、以及各個模組的概要設計文件。每個模組的設計文件都應該獨立成冊。
詳細設計必須遵循概要設計來進行。詳細設計方案的更改,不得影響到概要設計方案;如果需要更改概要設計,必須經過專案經理的同意。詳細設計,應該完成詳細設計文件,主要是模組的詳細設計方案說明。和概要設計一樣,每個模組的詳細設計文件都應該獨立成冊。
概要設計裡面的資料庫設計應該重點在描述資料關係上,說明資料的來龍去脈,在這裡應該結合我們的一下結果資料,說明這些結果資料的源點,我們這樣設計的目的和原因。詳細設計裡的資料庫設計就應該是一份完善的資料結構文件,就是一個包括型別、命名、精度、欄位說明、表說明等內容的資料字典。
概要設計裡的功能應該是重點在功能描述,對需求的解釋和整合,整體劃分功能模組,並對各功能模組進行詳細的圖文描述,應該讓讀者大致瞭解系統作完後大體的結構和操作模式。詳細設計則是重點在描述系統的實現方式,各模組詳細說明實現功能所需的類及具體的方法函式,包括涉及到的sql語句等。
概要設計,詳細設計之間的關係是什麼?
Q:
我的看法:
概要設計只說明系統有多少個模組,各模組之間的介面和個模組本身的功能
詳細設計說明某個具體模組如何實現,粒度應該比程式略高一些
但是問題來了,各個模組之間是有層次關係的,也有先後邏輯關係。這就說明,在概要設計中,還必須考慮模組的實現細節,否則,你怎麼知道這個模組下面要劃分子模組?你怎麼知道各子模組的呼叫順序?
這就說明,概要設計和詳細設計是重疊進行的,而軟體工程書上說的確是順序進行的,不知道是不是我的理解有問題。
舉個例子,例如排序程式,如果設計2個模組:
一個主模組用於排序子模組用於交換2個變數,主模組呼叫子模組,但是子模組是怎麼設計出來的呢?肯定是你先想到了用冒泡等排序方式的時候需要交換資料,這已經考慮了主模組足夠多的細節,似乎屬於"詳細設計"了,但是目前進行的是概要設計,這就產生了我所說的重疊的情況。
A:
看看上面的帖子,有意思的居多。
上面也有朋友說到用建築的例子來比喻。
軟體的概要設計,主要是建立軟體系統的整體架構,也就是我們在蓋房子時候,需要先將房子的整個架子構建起來。
軟體的詳細設計,主要是將軟體系統的各個部分的具體設計方法、邏輯、功能採用文字方式進行表述。這樣在實現過程中,Coding人員原則上嚴格按此進行程式碼實現即可。
這樣的一個最為簡單的例證:我們可以將程式碼交付第三方來做。驗證與跟蹤採取設計來。
我看上面還有一個朋友說:快速做程式碼。這個本身沒有值得批評之處。但只要想一下,你寫的程式碼沒有任何設計思想、文件留下的情況,一旦你離開,如何維護?重新設計嗎?還是花費幾倍人力去研究你寫的幾千/萬,甚至幾十萬行程式碼?如果是這樣的,你沒錯,關鍵是你們老闆太對了,錢算什麼。
另外的一個問題是:中國人如此聰明,但中國為什麼沒有出現巨型軟體產品呢?個人英雄主義依然很嚴重,老闆的短視利益行為大行其道。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9252210/viewspace-748512/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 系統設計與普通設計思考的區別
- 碼農與程式設計師的區別程式設計師
- 朱峰談概念設計(一):概念設計與插畫的區別
- GPU程式設計--CPU和GPU的設計區別GPU程式設計
- 問題驅動設計與領域驅動設計的區別 - abdullin
- 軟體概要設計文件(終)
- 愛碼單車隊——專案原型設計+概要設計原型
- 銀河護胃隊——專案原型設計+概要設計原型
- 軟體詳細設計文件(終)
- 詳細設計(軟體專案)
- 幽默:全棧程式設計師與前後端程式設計師區別全棧程式設計師後端
- UI設計和平面設計區別是什麼?UI
- CreateThread()與beginthread()的區別詳細解析thread
- 中國程式設計師與美國程式設計師寫程式碼的區別分析程式設計師
- 當然不是草臺班子 雲譯網 原型設計+概要設計原型
- 幽默:程式設計師與軟體工程師的區別程式設計師軟體工程工程師
- 詳解apollo的設計與使用
- 網路爬蟲詳細設計方案爬蟲
- 端動態化方案詳細設計
- 詳細講解23種設計模式設計模式
- AI概要設計文件評審實踐AI
- shell程式設計-sed命令詳解(超詳細)程式設計
- Cassandra與RDBMS的設計差別
- 阻塞式程式設計和非阻塞式程式設計區別程式設計
- PHP 設計模式答疑-物件池與依賴注入的區別PHP設計模式物件依賴注入
- 【科普】碼農是程式設計師嗎?碼農與真正程式設計師的區別是啥?程式設計師
- 設計模式:物件導向設計的六大原則 (絕對詳細)設計模式物件
- UI設計和前端開發的區別UI前端
- 【設計模式】設計模式學習筆記之(一)——類圖、物件之間的關係及設計模式概要設計模式筆記物件
- 領域驅動設計(DDD)入門&概要
- MySQL 設計與開發規範,很詳細,你該注意了MySql
- FFT原理及C++與MATLAB混合程式設計詳細介紹FFTC++Matlab程式設計
- 一般程式設計師和大神程式設計師有什麼區別?這些細節騙不了人程式設計師
- Spring 面向切面程式設計AOP 詳細講解Spring程式設計
- 詳談分散式系統快取的設計細節分散式快取
- 004 Rust 非同步程式設計,async await 的詳細用法Rust非同步程式設計AI
- 最詳細的測試用例設計方法講解
- [譯] 偉大設計與好設計之間區別是什麼?這裡告訴你真相
- PHP 列舉型別的管理與設計PHP型別