系統(tǒng)架構(gòu)設(shè)計筆記(34)—— 需求分析與軟件設(shè)計

需求分析是軟件生命周期中相當重要的一個階段男杈。根據(jù) Standish Group 對 23000 個項目進行的研究結(jié)果表明悯蝉, 28% 的項目徹底失敗厢破, 46% 的項目超出經(jīng)費預算或者超出工期仅颇,只有約 26% 的項目獲得成功受神。需求分析工作在整個軟件開發(fā)生命周期中有著十分重要的意義剖膳。而在這些高達 74% 的不成功項目中魏颓,有約 60% 的失敗是源于需求問題,也就是差不多有一半的項目都遇到了這個問題吱晒,這一可怕的現(xiàn)象引起人們對需求分析的高度重視甸饱。

需求分析階段的主要任務(wù)是通過開發(fā)人員與用戶之間的廣泛交流,不斷澄清一些模糊的概念仑濒,最終形成一個完整的 叹话、 清晰的 、 一致的需求說明墩瞳。

而當明確了用戶的需求之后驼壶,下一步的任務(wù)就是對未來的軟件系統(tǒng)進行設(shè)計,它是確定系統(tǒng)實現(xiàn)的關(guān)鍵工作喉酌。需求分析和設(shè)計的方法對軟件開發(fā)過程而言是十分重要的热凹,因此必須扎實地掌握它。

需求分析與軟件設(shè)計是軟件生存期中最重要的兩個步驟泪电,需求分析解決的是 “ 做什么 ” 的問題般妙,系統(tǒng)設(shè)計則是解決 “ 怎么做 ” 的問題。

1 需求分析的任務(wù)與過程

需求分析所要做的工作是深入描述軟件的功能和性能相速,確定軟件設(shè)計的限制和軟件同其他系統(tǒng)元素的接口細節(jié)碟渺,定義軟件的其他有效性需求,細化軟件要處理的數(shù)據(jù)域突诬。用一句話概括就是:需求分析主要是確定待開發(fā)軟件的功能 苫拍、 性能 芜繁、 數(shù)據(jù) 、 界面等要求绒极。

1.1 需求分析階段的工作

需求分析的實現(xiàn)步驟通常包括:獲取當前系統(tǒng)的物理模型骏令,抽象出當前系統(tǒng)的邏輯模型,建立目標系統(tǒng)的邏輯模型三個部分集峦。具體來說伏社,需求分析階段的工作可以分成4個方面:

(1)問題識別

用于發(fā)現(xiàn)需求 、 描述需求,主要包括功能需求 、 性能需求 涕俗、 環(huán)境需求 、 可靠性需求 聪黎、 安全保密需求 、 用戶界面需求 备恤、 資源使用需求 稿饰、 軟件成本消耗與開發(fā)進度需求,以此來預先估計以后系統(tǒng)可能達到的目標露泊。

(2)分析與綜合

也就是對問題進行分析喉镰,然后在此基礎(chǔ)上整合出解決方案。這個步驟經(jīng)常是反復進行的惭笑,常用的方法有面向數(shù)據(jù)流的結(jié)構(gòu)化分析方法( Structured Analysis 侣姆, SA ),面向數(shù)據(jù)結(jié)構(gòu)的 Jackson 方法沉噩,面向?qū)ο蟮姆治龇椒ǎ?Object Oriented Analysis 捺宗, OOA ),以及用于建立動態(tài)模型的狀態(tài)遷移圖和 Petri 網(wǎng)川蒙。

Petri 網(wǎng)是對離散并行系統(tǒng)的數(shù)學表示蚜厉。它適合于描述異步的 、 并發(fā)的計算機系統(tǒng)模型畜眨。 Petri 網(wǎng)既有嚴格的數(shù)學表述方式昼牛,也有直觀的圖形表達方式,既有豐富的系統(tǒng)描述手段和系統(tǒng)行為分析技術(shù)康聂,又為計算機科學提供堅實的概念基礎(chǔ)匾嘱。

(3)編制需求分析的文檔

也就是對已經(jīng)確定的需求進行文檔化描述,該文檔通常稱為 “ 需求規(guī)格說明書 ”早抠。

(4)需求分析與評審

它是需求分析工作的最后一步,主要是對功能的正確性 撬讽、 完整性和清晰性蕊连,以及其他需求給予評價悬垃。

1.2 需求的分類

什么是軟件的需求呢?軟件需求就是系統(tǒng)必須完成的事及必須具備的品質(zhì)甘苍。具體來說尝蠕,軟件需求包括功能需求 、 非功能需求和設(shè)計約束三方面內(nèi)容载庭。各種需求的概念示意圖如圖 1 所示看彼。

SRS,即需求規(guī)格說明書(Software Requirements Specification)囚聚。

  1. 功能需求:是指系統(tǒng)必須完成的那些事靖榕,即為了向它的用戶提供有用的功能,產(chǎn)品必須執(zhí)行的動作顽铸。
  2. 非功能需求:是指產(chǎn)品必須具備的屬性或品質(zhì)茁计,如性能、響應(yīng)時間谓松、可靠性星压、容錯性、擴展性等鬼譬。
  3. 設(shè)計約束:也稱為限制條件娜膘、補充規(guī)約,這通常是對解決方案的一些約束說明优质,例如必須采用國有自主知識版權(quán)的數(shù)據(jù)庫系統(tǒng)竣贪,必須在 UNIX 操作系統(tǒng)之下運行等。

除了這三種需求之外盆赤,還有業(yè)務(wù)需求 贾富、 用戶需求 、 系統(tǒng)需求這三個處于不同層面的概念牺六,充分地理解這樣的模型才能夠更加清晰地理清需求的脈絡(luò)颤枪。

  1. 業(yè)務(wù)需求(Business Requirement):是指反映組織機構(gòu)或客戶對系統(tǒng)、產(chǎn)品高層次的目標要求淑际,通常問題定義本身就是業(yè)務(wù)需求畏纲。
  2. 用戶需求(User Requirement):是指描述用戶使用產(chǎn)品必須要完成什么任務(wù),怎么完成的需求春缕,通常是在問題定義的基礎(chǔ)上進行用戶訪談盗胀、調(diào)查,對用戶使用的場景進行整理锄贼,從而建立從用戶角度出發(fā)的需求票灰。
  3. 系統(tǒng)需求(System Requirement):是從系統(tǒng)的角度來說明軟件的需求,它包括用特性說明的功能需求、質(zhì)量屬性屑迂、非功能需求及設(shè)計約束浸策。

分析師經(jīng)常圍繞著 “ 功能需求 ” 來展開工作,而功能需求大部分都是從 “ 系統(tǒng)需求 ” 的角度來分析與理解的惹盼,也就是用 “ 開發(fā)人員 ” 的視角來理解需求庸汗。但要想真正地得到完整的需求,僅戴上 “ 開發(fā)人員 ” 的眼鏡是不夠的手报,還需要 “ 領(lǐng)域?qū)<?” 的眼鏡蚯舱,要從更高的角度來理解需求,這就是 “ 業(yè)務(wù)需求 ” 掩蛤;同時還應(yīng)該更好地深入用戶枉昏,了解他們的使用場景,了解他們的想法盏档,這就是 “ 用戶需求 ” 凶掰。這是一個理解層次的問題,并不僅僅是簡單的概念蜈亩。

1.3 需求工程

需求工程就是包括創(chuàng)建和維護系統(tǒng)需求文檔所必需的一切活動的過程懦窘,主要包括需求開發(fā)和需求管理兩大工作。

(1)需求開發(fā):包括需求捕獲 稚配、 需求分析 畅涂、 編寫規(guī)格說明書和需求驗證4個階段。在這個階段需要完成確定產(chǎn)品所期望的用戶類型 道川、 獲取每種用戶類型的需求 午衰、 了解實際用戶任務(wù)和目標及這些任務(wù)所支持的業(yè)務(wù)需求 、 分析源于用戶的信息 冒萄、 對需求進行優(yōu)先級分類 臊岸、 將所收集的需求編寫成為軟件規(guī)格說明書和需求分析模型 、 對需求進行評審等工作尊流。

(2)需求管理:通常包括定義需求基線 帅戒、 處理需求變更 、 需求跟蹤等方面的工作崖技。這兩個方面是相輔相成的逻住,需求開發(fā)是主線,是目標迎献;需求管理是支持瞎访,是保障。換句話說吁恍,需求開發(fā)是努力更清晰 扒秸、 更明確地掌握客戶對系統(tǒng)的需求播演;而需求管理則是對需求的變化進行管理的過程。

1.4 需求分析方法

需求分析的方法可謂種類繁多鸦采,不過如果按照分解方式的不同宾巍,可以很容易地劃分出幾種類型。

(1)結(jié)構(gòu)化分析方法

最初的分析方法都不成體系渔伯,而且通常都只包括一些籠統(tǒng)的告誡,在 20 世紀 70 年代分析技術(shù)發(fā)展的分水嶺終于出現(xiàn)了肄程。這時人們開始嘗試使用標準化的方法锣吼,開發(fā)和推出各種名為 “ 結(jié)構(gòu)化分析 ” 的方法論,而 Tom DeMacro 則是這個領(lǐng)域最有代表性和權(quán)威性的專家蓝厌。

(2)軟系統(tǒng)方法

這是一個過渡性的方法論玄叠,并未真正流行過,它的出現(xiàn)只是證明了結(jié)構(gòu)化分析方法的一些不足拓提。因為結(jié)構(gòu)化分析方法采用的相對形式化的模型不僅與社會觀格格不入读恃,而且在解決 “ 不確定性 ” 時顯得十分無力。最有代表性的軟系統(tǒng)方法是 Checkland 方法代态。

(3)面向?qū)ο蠓治龇椒?/strong>

在 20 世紀 90 年代寺惫,結(jié)構(gòu)化方法的不足在面對多變的商業(yè)世界時,顯得更加蒼白無力蹦疑,這就催使了 OOA 的迅速發(fā)展西雀。

(4)面向問題域的分析(Problem Domain Oriented Analysis, PDOA)

現(xiàn)在又發(fā)現(xiàn)面向?qū)ο蠓治龇椒ㄒ泊嬖谥芏嗟牟蛔闱复荩瑧?yīng)運而生了一些新的方法論艇肴, PDOA 就是其中一種。不過現(xiàn)在還在研究階段叁温,并未廣泛應(yīng)用再悼。

2 如何進行系統(tǒng)設(shè)計

當設(shè)計者拿到一個需求,他如何開展系統(tǒng)設(shè)計呢膝但?許多想進入系統(tǒng)分析與設(shè)計的年輕人以為自己知道了面向?qū)ο?冲九、 統(tǒng)一建模語言 、 設(shè)計模式等新鮮深奧的名詞就可以進行設(shè)計了锰镀,可是掌握工具和技能絕不是成為優(yōu)秀設(shè)計者的充分條件娘侍,甚至也不是必要條件。遺憾的是這里沒有捷徑泳炉,只有設(shè)計者在實踐中不斷學習和總結(jié)憾筏。而在實踐中,系統(tǒng)設(shè)計與其說是在設(shè)計花鹅,不如說是在選擇和妥協(xié)氧腰。

妥協(xié),就是在各個系統(tǒng)目標之間找到一個平衡點。系統(tǒng)目標包括但不限制于功能 古拴、 性能 箩帚、 健壯性 、 開發(fā)周期 黄痪、 交付日期等紧帕。不幸的是,這些目標往往是矛盾的桅打,提高軟件性能直接意味著開發(fā)周期的增加 是嗜、 交付日期的推遲,盲目地增加功能可能導致性能降低挺尾,維護成本提高鹅搪。軟件設(shè)計者的難題在于在如此眾多的目標之間找到這個平衡點,并且明確知道如何設(shè)計能實現(xiàn)這個平衡遭铺,既可以讓投資者覺得在預算之內(nèi)丽柿,又能讓用戶相對滿意魂挂「μ猓可行性分析階段應(yīng)該已經(jīng)論述了這樣一個平衡點,可是如果設(shè)計者發(fā)現(xiàn)沒有這樣一個平衡點幔睬,如同沒有一個設(shè)計者能讓人騎著自行車到月球上去麻顶,那么設(shè)計者只能提出放棄某個方面的過度要求,否則系統(tǒng)要遭受必然失敗的命運矫钓。

更多的情況是沒有經(jīng)驗的設(shè)計者不知道是否存在這些平衡點,更不知道如何利用合理的設(shè)計及有效的工具來達到平衡。因此設(shè)計者需要了解可以解決問題的各種方案蚕键,并清楚知道各個方案的效果 锣光、 成本 替废、 缺點兽赁,以及這些方案的區(qū)別,并在各種方案中進行選擇。而這些,不是一個人能在一兩天了解的映穗。

沒有一個設(shè)計者會完全重新開始設(shè)計一個系統(tǒng)蚁滋,他們總參考多個與目標系統(tǒng)相類似的系統(tǒng)梢卸,再從中進行甄別 肮塞、 取舍和補充來作為新系統(tǒng)的設(shè)計。人們發(fā)現(xiàn)一個優(yōu)秀的設(shè)計者似乎能在聽完需求后就立即構(gòu)想出目標系統(tǒng)的框架涧黄,這并不是因為他聰明或者比不知所措的設(shè)計者新手多一個腦袋,而是因為他在平時已經(jīng)了解大量的系統(tǒng),對各種設(shè)計的優(yōu)缺點 月帝、 局限性也了然于胸簸搞,能夠把以前的設(shè)計根據(jù)需要再次使用。所以要成為優(yōu)秀的設(shè)計者殉簸,了解 爽雄、 掌握 焰檩、 消化 兜叨、 總結(jié)前人和自己以前的設(shè)計成果是最好的方法茫死,這似乎也是唯一的方法。

設(shè)計者的苦惱有時候和編程人員一樣雄卷。計算機系統(tǒng)的發(fā)展如此迅速妒潭,解決方案也越來越多冯凹,如同編程語言的發(fā)展匈庭,同時鸽扁,隨著人類社會的進步巩那,投資者和客戶也提出了越來越高的要求裆赵,這又需要設(shè)計者不斷學習 页藻、 創(chuàng)造新的方案筒繁。但系統(tǒng)設(shè)計也并非沒有規(guī)律可以遵循,如同幸福的家庭都很相似堵泽,不幸的家庭各有各的不幸滋戳,人們在實踐中發(fā)現(xiàn)優(yōu)秀的系統(tǒng)設(shè)計一般在以下幾個方面都很出色努隙。

(1)組件的獨立性钦椭。審視自己設(shè)計的系統(tǒng)唠帝,是否做到了高內(nèi)聚、低耦合?
(2)例外的識別和處理拗踢。誰能保證系統(tǒng)使用者都精確按照使用說明書使用双吆?
(3)防錯和容錯淮蜈。當網(wǎng)絡(luò)中斷俯画、數(shù)據(jù)庫崩潰這樣的災難性事件發(fā)生時艰垂,系統(tǒng)也跟著崩潰嗎埋虹?

而且,更幸運的是胰柑,也有一些技術(shù)能夠改進系統(tǒng)設(shè)計柬讨,這些方法包括:降低復雜性 袍啡、 通過合約進行設(shè)計 境输、 原型化設(shè)計 、 錯誤樹分析等辩越。

3 軟件設(shè)計的任務(wù)與活動

軟件設(shè)計是一個把軟件需求變換成軟件表示的過程黔攒。最初這種表示只是描繪出軟件的總體框架蒋院,然后再進一步細化欺旧,并在此框架中填入細節(jié)辞友。

3.1 軟件設(shè)計步驟

軟件設(shè)計的兩個階段從工程管理角度称龙,軟件設(shè)計可以分為兩個步驟:

(1)概要設(shè)計:也稱為高層設(shè)計,將軟件需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu)鲫尊。例如疫向,如果采用結(jié)構(gòu)化設(shè)計搔驼,則將從宏觀的角度將軟件劃分成各個組成模塊,并確定模塊的功能及模塊之間的調(diào)用關(guān)系糯耍。

(2)詳細設(shè)計:也稱為低層設(shè)計温技,將對結(jié)構(gòu)表示進行細化哗伯,得到詳細的數(shù)據(jù)結(jié)構(gòu)與算法。同樣的系任,如果采用結(jié)構(gòu)化設(shè)計俩滥,則詳細設(shè)計的任務(wù)就是為每個模塊進行設(shè)計霜旧。

3.2 主要的設(shè)計方法比較

在結(jié)構(gòu)化設(shè)計風行的時代挂据,主流的設(shè)計方法還包括 Jackson 方法和 Parnas 方法儿普。

結(jié)構(gòu)化方法側(cè)重于 “ 模塊相對獨立且功能單一崎逃,使模塊間聯(lián)系弱 、 模塊內(nèi)聯(lián)系強 ” 眉孩;而 Jackson 方法則是從數(shù)據(jù)結(jié)構(gòu)導出模塊結(jié)構(gòu)个绍; Parnas 方法的主要思想則是將可能引起變化的因素隱藏在有關(guān)模塊內(nèi)部勒葱,使這些因素變化時的影響范圍受到限制,它只提供了重要的設(shè)計準則巴柿,但沒有規(guī)定出具體的工作步驟凛虽。

而近年來,對象技術(shù)憑借其對數(shù)據(jù)的高效封裝及良好的消息機制广恢,實現(xiàn)了高內(nèi)聚 凯旋、 低耦合的系統(tǒng)設(shè)計,成了現(xiàn)代軟件設(shè)計的主流方法學袁波。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓦阐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子睡蟋,更是在濱河造成了極大的恐慌,老刑警劉巖信卡,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丢习,死亡現(xiàn)場離奇詭異袜腥,居然都是意外死亡鲤屡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門衡奥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事∧崮。” “怎么了阅懦?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵场晶,是天一觀的道長。 經(jīng)常有香客問我吏颖,道長,這世上最難降的妖魔是什么缩多? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任姆泻,我火速辦了婚禮孝凌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己牙勘,他們只是感情好恭金,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罗侯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪垂睬。 梳的紋絲不亂的頭發(fā)上缴渊,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天指蚁,我揣著相機與錄音菩佑,去河邊找鬼稍坯。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的枪向。 我是一名探鬼主播深员,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼滔迈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斜脂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤对供,失蹤者是張志新(化名)和其女友劉穎约谈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犁钟,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡棱诱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涝动。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迈勋。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖醋粟,靈堂內(nèi)的尸體忽然破棺而出靡菇,到底是詐尸還是另有隱情,我是刑警寧澤米愿,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布厦凤,位于F島的核電站,受9級特大地震影響育苟,放射性物質(zhì)發(fā)生泄漏较鼓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望博烂。 院中可真熱鬧香椎,春花似錦、人聲如沸禽篱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躺率。三九已至玛界,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悼吱,已是汗流浹背慎框。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舆绎,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓们颜,卻偏偏與公主長得像吕朵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窥突,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355