軟件工程 第03章_第1頁(yè)
軟件工程 第03章_第2頁(yè)
軟件工程 第03章_第3頁(yè)
軟件工程 第03章_第4頁(yè)
軟件工程 第03章_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第040頁(yè)第3章 需求分析 需求問(wèn)題是造成軟件工程項(xiàng)目失敗的主要原因,能否開(kāi)發(fā)出高質(zhì)量的軟件,很大程度上取決于對(duì)要解決的問(wèn)題的認(rèn)識(shí)以及如何準(zhǔn)確地表達(dá)出用戶的需求。通過(guò)需求分析使得分析者深刻地理解和認(rèn)識(shí)系統(tǒng),并將其完全、準(zhǔn)確地表達(dá),其結(jié)果不僅起到溝通(用戶和開(kāi)發(fā)者)作用,還是后續(xù)工作的依據(jù)。本章介紹需求分析的一些基本概念,分別對(duì)需求獲取技術(shù)、需求規(guī)格說(shuō)明書(shū)、如何進(jìn)行需求分析以及需求分析方法進(jìn)行討論,重點(diǎn)討論結(jié)構(gòu)化的需求分析方法。 3.1.1 需求的概念和任務(wù) 什么是需求?到目前為止還沒(méi)有公認(rèn)的定義。對(duì)用戶來(lái)講需求是對(duì)軟件產(chǎn)品的解釋,是用戶對(duì)目標(biāo)軟件系統(tǒng)在功能、行為、性能、設(shè)計(jì)和約束等方面的期望;

2、而開(kāi)發(fā)人員所講的需求對(duì)用戶來(lái)說(shuō)又像是詳細(xì)設(shè)計(jì)。比較權(quán)威的定義是IEEE軟件工程標(biāo)準(zhǔn)詞匯表中的需求定義: (1)用戶解決問(wèn)題或達(dá)到目標(biāo)所需的條件或權(quán)能(Capability)。 (2)系統(tǒng)或系統(tǒng)部件要滿足合同、標(biāo)準(zhǔn)、規(guī)范或其他正式規(guī)定文檔所需具有的條件或權(quán)能。 (3)一種反映上面(1)或(2)所描述的條件或權(quán)能的文檔說(shuō)明。 由定義可知,需求一方面反映了系統(tǒng)的外部行為,另一方面反映了系統(tǒng)的內(nèi)部特性,反映的方式是需求文檔。用規(guī)范的格式表達(dá)出來(lái)的文檔說(shuō)明稱為需求規(guī)格說(shuō)明書(shū),或者簡(jiǎn)稱為“需求說(shuō)明”。 3.1.2 需求的層次 需求可分解為4個(gè)層次:業(yè)務(wù)需求、用戶需求、功能需求和非功能需求。 (1)業(yè)務(wù)需求

3、(Business Requirement):業(yè)務(wù)需求是反映組織機(jī)構(gòu)或客戶對(duì)軟件高層次的目標(biāo)要求。這項(xiàng)需求是用戶高層領(lǐng)導(dǎo)機(jī)構(gòu)決定的,它確定了系統(tǒng)的目標(biāo)、規(guī)模和范圍。業(yè)務(wù)需求是需求分析階段制定需求調(diào)研計(jì)劃、確定用戶核心需求和軟件功能需求的依據(jù),應(yīng)在進(jìn)行需求分析之前確定,通常在項(xiàng)目定義與范圍文檔中予以說(shuō)明。 (2)用戶需求(User Requirement):用戶需求是用戶使用該軟件要完成的任務(wù)。要弄清這部分需求,應(yīng)該充分調(diào)研具體的業(yè)務(wù)部門,詳細(xì)了解最終用戶的工作過(guò)程、所涉及的信息、當(dāng)前系統(tǒng)的工作情況、與其他系統(tǒng)的接口等。用戶需求是最重要的需求,也是最容易出現(xiàn)問(wèn)題的部分。 (3)功能需求(Func

4、tional Requirement):功能需求定義了軟件必須實(shí)現(xiàn)的功能。由于用戶是從完成任務(wù)的角度對(duì)軟件提出需求的,通常是凌亂的、非系統(tǒng)化的、冗余的,開(kāi)發(fā)人員無(wú)法據(jù)此編寫(xiě)程序。分析人員必須在充分理解用戶需求的基礎(chǔ)上,將用戶需求整理成滿足特定業(yè)務(wù)需求的軟件功能需求。 (4)非功能需求:非功能需求是對(duì)功能需求的補(bǔ)充??梢苑譃閮深悾阂活愂怯脩絷P(guān)心的一些重要屬性,如有效性、效率、靈活性、完整性、互操作性、可靠性、健壯性、可用性;另一類是對(duì)開(kāi)發(fā)者來(lái)說(shuō)很重要的質(zhì)量屬性,如可維護(hù)性、可移植性、可復(fù)用性、可測(cè)試性。第041頁(yè) 軟件需求各組成部分之間的關(guān)系如圖3-1所示。圖3-1 軟件需求各組成部分之間的關(guān)系

5、3.1.3 需求分析的任務(wù) 軟件需求分析是在軟件計(jì)劃的基礎(chǔ)上進(jìn)行的。需求分析的任務(wù)就是借助于當(dāng)前系統(tǒng)的邏輯模型導(dǎo)出目標(biāo)系統(tǒng)的邏輯模型,確定目標(biāo)系統(tǒng)“做什么”的問(wèn)題。需求分析的結(jié)果應(yīng)該反映的是系統(tǒng)必須做什么,而不是怎么做。具體地講,該階段的工作是在對(duì)問(wèn)題進(jìn)行調(diào)查了解的基礎(chǔ)上,確定系統(tǒng)的目標(biāo)和范圍,將用戶的需求變?yōu)檐浖墓δ芎托阅苊枋觥榱藢④浖墓δ芎托阅苊枋銮宄到y(tǒng)分析人員需要用一定的方法和手段對(duì)問(wèn)題進(jìn)行分析,建立反映問(wèn)題所涉及的信息、功能及系統(tǒng)行為的模型,用文字、圖形符號(hào)來(lái)詳細(xì)說(shuō)明軟件必須要做什么以及配合運(yùn)行的環(huán)境應(yīng)該是什么,形成需求規(guī)格說(shuō)明。 需求分析是介于系統(tǒng)分析和軟件設(shè)計(jì)階段之間的橋

6、梁。一方面,需求分析以系統(tǒng)規(guī)格說(shuō)明和項(xiàng)目計(jì)劃作為分析活動(dòng)的基本出發(fā)點(diǎn),并從軟件角度對(duì)它們進(jìn)行檢查與調(diào)整;另一方面,需求規(guī)格說(shuō)明又為用戶和開(kāi)發(fā)人員提供一起協(xié)商討論的基礎(chǔ),作為軟件設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試和維護(hù)的依據(jù)。良好的分析活動(dòng)有助于避免或盡早剔除早期錯(cuò)誤,從而提高軟件生產(chǎn)率,降低開(kāi)發(fā)成本,改進(jìn)軟件質(zhì)量。 隨著軟件系統(tǒng)規(guī)模的擴(kuò)大,需求分析與定義在整個(gè)軟件開(kāi)發(fā)與維護(hù)過(guò)程中越來(lái)越重要,直接關(guān)系到軟件的成功與否。人們逐漸認(rèn)識(shí)到需求分析活動(dòng)不僅限于軟件開(kāi)發(fā)的最初階段,它貫穿于系統(tǒng)開(kāi)發(fā)的整個(gè)生命周期,并將需求工作分為需求開(kāi)發(fā)和需求管理兩部分,將這兩部分統(tǒng)稱為“需求工程”(Requirement Engineer

7、ing,RE)0 20世紀(jì)80年代中期,需求工程成為軟件工程的子領(lǐng)域,進(jìn)入90年代以來(lái),需求工程成為研究的熱點(diǎn)之一。需求工程結(jié)構(gòu)圖如圖3-2所示。第042頁(yè)圖3-2 需求工程結(jié)構(gòu)圖 由此,需求分析階段的任務(wù)就是實(shí)現(xiàn)需求工程,具體內(nèi)容如下。 3.1.3.1 需求開(kāi)發(fā) 需求開(kāi)發(fā)工作包括軟件產(chǎn)品的需求收集、評(píng)價(jià)、編寫(xiě)文檔等所有活動(dòng),分為4個(gè)階段:需求獲取、分析建模、編寫(xiě)需求規(guī)格說(shuō)明、需求驗(yàn)證。 1需求獲取 進(jìn)行用戶需求調(diào)查,獲取需求,識(shí)別問(wèn)題,確定系統(tǒng)的綜合要求是需求分析的第一步,是一個(gè)對(duì)所求解問(wèn)題及其環(huán)境的理解、分析和綜合的過(guò)程,也是進(jìn)行軟件設(shè)計(jì)與實(shí)現(xiàn)的基礎(chǔ)。 在系統(tǒng)開(kāi)發(fā)階段的初期,分析人員往往對(duì)

8、待解決的問(wèn)題知之甚少,而用戶對(duì)問(wèn)題的描述、對(duì)目標(biāo)軟件的要求通常也相當(dāng)零亂、模糊。尤其是分析人員與用戶共同的知識(shí)領(lǐng)域不多,造成相互之間理解方面的困難。分析員通過(guò)與用戶充分交流,準(zhǔn)確、完整地獲取用戶需求,確定軟件系統(tǒng)的綜合要求。通常軟件系統(tǒng)的綜合要求包括以下幾方面: (1)系統(tǒng)功能要求:分析用戶要求實(shí)現(xiàn)的全部功能,并分析其中每個(gè)要求的必要性和相容性。確定系統(tǒng)應(yīng)該做什么,系統(tǒng)要求輸入什么信息,輸出什么信息,以及如何將輸入變換為輸出,劃分出目標(biāo)系統(tǒng)必須完成的所有功能。 (2)性能要求:理解用戶對(duì)系統(tǒng)性能的要求,確定目標(biāo)系統(tǒng)必須達(dá)到的技術(shù)性能指標(biāo)。如響應(yīng)時(shí)間,存儲(chǔ)容量及后援存儲(chǔ),計(jì)算精度與效率,系統(tǒng)安全

9、指標(biāo)等。 (3)運(yùn)行和擴(kuò)充要求:合理地規(guī)定系統(tǒng)運(yùn)行要求和系統(tǒng)將來(lái)可能的擴(kuò)充要求。 系統(tǒng)運(yùn)行要求通常包括系統(tǒng)運(yùn)行的物理環(huán)境,如系統(tǒng)運(yùn)行的設(shè)備地點(diǎn),位置是集中式的還是分布式的,對(duì)環(huán)境的要求如何(如溫度、濕度,電磁場(chǎng)干擾等);支持軟件系統(tǒng);數(shù)據(jù)通信方式;系統(tǒng)界面,如要求與其他系統(tǒng)進(jìn)行數(shù)據(jù)交換的內(nèi)容與格式、終端用戶的類型與熟練程度、用戶對(duì)界面的特定要求、用戶操作的易接受性等。 系統(tǒng)可能的擴(kuò)充要求主要有是否要求可移植、未來(lái)擴(kuò)充或者升級(jí)的要求、擴(kuò)充的方式、范圍、接口等。 (4)系統(tǒng)維護(hù)要求:包括系統(tǒng)出錯(cuò)后可以允許的最大恢復(fù)時(shí)間、對(duì)錯(cuò)誤修改的回歸測(cè)試要求、系統(tǒng)運(yùn)行日志規(guī)格、是否允許對(duì)系統(tǒng)修改、系統(tǒng)變化如何反

10、映到設(shè)計(jì)中等。第043頁(yè) (5)系統(tǒng)文檔規(guī)格要求:系統(tǒng)要求交付什么文檔及各類文檔的編制規(guī)范和預(yù)期使用對(duì)象等。 取需求的方法見(jiàn)3.2節(jié)。 2分析建模 為了更好地識(shí)別問(wèn)題,應(yīng)綜合上述分析的結(jié)果,對(duì)已獲取的需求進(jìn)行抽象描述,為目標(biāo)系統(tǒng)建立一個(gè)詳細(xì)的邏輯模型。模型是形成需求說(shuō)明的重要工具,通過(guò)模型可以更清晰地記錄用戶對(duì)需求的表達(dá),更方便地與用戶交流,以便幫助分析人員發(fā)現(xiàn)用戶需求中的不一致性,排除不合理的部分,挖掘潛在的用戶需求,確定被開(kāi)發(fā)系統(tǒng)的運(yùn)行環(huán)境、功能和性能要求。 建模方法有多種類型,如面向過(guò)程的方法、面向數(shù)據(jù)結(jié)構(gòu)的方法、面向數(shù)據(jù)流的方法及面向?qū)ο蟮姆椒ǖ取1緯?shū)后面將要介紹的分析方法,實(shí)際都是建

11、模方法。通常系統(tǒng)邏輯模型可用數(shù)據(jù)流圖、實(shí)體一聯(lián)系圖、狀態(tài)轉(zhuǎn)換圖、數(shù)據(jù)字典和主要功能的處理算法等進(jìn)行描述。 通常,軟件開(kāi)發(fā)是要實(shí)現(xiàn)系統(tǒng)的物理模型,即確定待開(kāi)發(fā)的軟件系統(tǒng)的系統(tǒng)元素,然后把功能和數(shù)據(jù)結(jié)構(gòu)分配到這些系統(tǒng)元素中。但是,目標(biāo)系統(tǒng)的具體物理模型是由它的邏輯模型經(jīng)實(shí)例化得到的,所謂邏輯模型就是忽略實(shí)現(xiàn)機(jī)制和具體細(xì)節(jié),只描述系統(tǒng)要完成的功能和要處理的數(shù)據(jù)。因此,軟件系統(tǒng)的開(kāi)發(fā),可看做是建立模型及模型轉(zhuǎn)換的過(guò)程。具體分析建模過(guò)程如圖3-3所示。圖3-3 分析建模過(guò)程 3編寫(xiě)需求規(guī)格說(shuō)明 該階段的主要工作是需求描述。在對(duì)問(wèn)題空間準(zhǔn)確、全面理解的基礎(chǔ)上,對(duì)需求模型進(jìn)行精確地、形式化的描述。需求描述應(yīng)

12、定義和詳細(xì)描述全部系統(tǒng)功能,反映影響系統(tǒng)事件前后關(guān)系的軟件行為,建立系統(tǒng)界面的特征,并揭示設(shè)計(jì)限制。結(jié)果以文檔形式表述,成為可見(jiàn)的,能夠與用戶交流的,可以進(jìn)行復(fù)審的系統(tǒng)邏輯模型。該階段的文檔包括:需求規(guī)格說(shuō)明書(shū)、用戶手冊(cè)初稿、確認(rèn)測(cè)試計(jì)劃、修改的開(kāi)發(fā)計(jì)劃等。其中: (1)需求規(guī)格說(shuō)明包含對(duì)目標(biāo)軟件系統(tǒng)的外部行為的完整描述、需求驗(yàn)證標(biāo)準(zhǔn)以及用戶在性能、質(zhì)量、可維護(hù)性等方面的要求。 (2)用戶手冊(cè)包括用戶界面描述以及有關(guān)目標(biāo)系統(tǒng)使用方法的初步構(gòu)想。在需求分析階段就開(kāi)始編寫(xiě)用戶手冊(cè),而不是在編碼測(cè)試完成后組織人員另行編寫(xiě),其優(yōu)點(diǎn)在于,首先,使系統(tǒng)分析和設(shè)計(jì)人員在系統(tǒng)開(kāi)發(fā)的早期就從用戶的角度觀察和分析

13、系統(tǒng),有利于提高系統(tǒng)對(duì)用戶的友好程度,并有利于提高系統(tǒng)運(yùn)行的方便性和實(shí)用性;其次,可以使用戶手冊(cè)隨著系統(tǒng)各階段的開(kāi)發(fā)不斷完善,有利于保證其正確性、完備性和同真實(shí)系統(tǒng)的一致性,并可保證其按時(shí)完成。 (3)在需求分析中確立測(cè)試標(biāo)準(zhǔn),作為系統(tǒng)開(kāi)發(fā)目標(biāo)是否完成的驗(yàn)收依據(jù)。而該測(cè)試計(jì)劃的依據(jù)是系統(tǒng)目標(biāo),包括系統(tǒng)功能和性能等詳細(xì)內(nèi)容的用戶需求。由于系統(tǒng)目標(biāo)是在需求分析階段制定的,所以,以此為依據(jù)的確認(rèn)測(cè)試計(jì)劃應(yīng)在同一階段,由相同的人員制定。這樣能最有效地保證兩者的一致性。 (4)修改的項(xiàng)目開(kāi)發(fā)計(jì)劃是根據(jù)新的分析結(jié)果,對(duì)可行性分析和軟件計(jì)劃階段中制定的初步的項(xiàng)目開(kāi)發(fā)計(jì)劃作必要的修改、補(bǔ)充和完善。 4需求驗(yàn)證

14、 在以上各階段的實(shí)施過(guò)程之中,形成了有關(guān)的文檔。在此基礎(chǔ)上,由專家、分析人員、開(kāi)發(fā)人員、用戶組成評(píng)審組,對(duì)需求分析所得結(jié)果的正確性、合理性和有效性進(jìn)行檢查,第044頁(yè)以確保需求分析的全面性、準(zhǔn)確性和一致性。并使用戶和開(kāi)發(fā)人員對(duì)需求規(guī)格說(shuō)明及用戶手冊(cè)達(dá)成一致的理解。通常應(yīng)從以下幾點(diǎn)進(jìn)行評(píng)審: (1)完整性:完整性體現(xiàn)在兩個(gè)方面。首先是不能遺漏任何必要的需求。避免遺漏需求的關(guān)鍵是需求獲取的方法,后面將詳細(xì)討論這個(gè)問(wèn)題。需求完整性的第二層含義是清楚、完整地描述每一項(xiàng)需求所要完成的任務(wù),使開(kāi)發(fā)人員理解實(shí)現(xiàn)這項(xiàng)需求的所有必要信息,用戶能夠?qū)彶檫@項(xiàng)需求描述的正確性。 (2)正確性:所謂正確性是指每項(xiàng)需求都

15、必須準(zhǔn)確地反映用戶要完成的任務(wù)。不僅要從不同角度檢查需求的正確性,還應(yīng)該檢查每項(xiàng)需求是否與軟件的總體目標(biāo)一致,是否超出了業(yè)務(wù)需求所定義的軟件范圍。 (3)一致性:用戶需求必須和業(yè)務(wù)需求一致,功能需求必須和用戶需求一致。嚴(yán)格地遵守不同層次間的一致性關(guān)系,就可保證最后開(kāi)發(fā)出來(lái)的軟件系統(tǒng)不會(huì)偏離最初的實(shí)現(xiàn)目標(biāo)。 (4)必要性:必要性即每項(xiàng)需求都應(yīng)該是客戶所需要的,開(kāi)發(fā)人員不得自作主張?zhí)砑有枨?。檢查需求必要性的方法是將每項(xiàng)需求回溯至用戶的某項(xiàng)輸入。 (5)無(wú)歧義性:無(wú)歧義性即需求分析結(jié)果的描述,應(yīng)使不同的人員對(duì)需求的理解是一致的。如采用自然語(yǔ)言描述需求,其優(yōu)點(diǎn)是任何人不經(jīng)訓(xùn)練,都可理解,但自然語(yǔ)言對(duì)需

16、求分析最大的弊病就是它的二義性。所以各種需求分析方法中都對(duì)描述語(yǔ)言作了一些限制,對(duì)描述語(yǔ)言的規(guī)定是需求分析方法的重要組成部分。發(fā)現(xiàn)需求二義性可通過(guò)對(duì)需求文檔的正規(guī)檢查,包括編寫(xiě)測(cè)試用例和開(kāi)發(fā)原型,還可使用按多種不同的方式、從多個(gè)角度描述同一需求的方法發(fā)現(xiàn)需求二義性。 (6)可驗(yàn)證性:每項(xiàng)需求都應(yīng)該是可驗(yàn)證的。系統(tǒng)分析員在需求分析時(shí)就要考慮每項(xiàng)需求的可驗(yàn)證性問(wèn)題,為需求設(shè)計(jì)測(cè)試用例或其他的驗(yàn)證方法。 (7)優(yōu)先級(jí)的劃分:為每一項(xiàng)需求按照重要程度分配一個(gè)優(yōu)先級(jí),在開(kāi)發(fā)產(chǎn)品時(shí),可以先實(shí)現(xiàn)優(yōu)先級(jí)最高的核心需求,將優(yōu)先級(jí)低的需求放在后續(xù)版本中。優(yōu)先級(jí)的劃分可以幫助項(xiàng)目管理者解決沖突、安排階段性交付,在必

17、要時(shí)做出功能取舍,以最少的費(fèi)用獲得軟件產(chǎn)品的最大功能。 在評(píng)審中,一旦發(fā)現(xiàn)問(wèn)題,應(yīng)盡快予以更正。若需求分析工作通過(guò)評(píng)審,則可以開(kāi)始下一階段工作。同時(shí),需求規(guī)格說(shuō)明成為用戶方與系統(tǒng)開(kāi)發(fā)方之間的合同,任何增刪或改動(dòng)所引起的開(kāi)發(fā)規(guī)劃及成本變化,應(yīng)由提出方承擔(dān)責(zé)任。若未通過(guò)評(píng)審,則需重新進(jìn)行有關(guān)的需求分析工作。 需求開(kāi)發(fā)的過(guò)程如圖3-4所示。圖3-4需求開(kāi)發(fā)的過(guò)程 3.1.3.2 需求管理 由于基于計(jì)算機(jī)系統(tǒng)的需求常常要變更,而且變更需求的要求貫穿于整個(gè)生命期,所以,完成需求開(kāi)發(fā),形成規(guī)格說(shuō)明僅是需求成功的一半,開(kāi)發(fā)人員必須能夠真正把所有客戶的需求應(yīng)用到產(chǎn)品中,并能夠有效地控制需求變更,才能保證需求與

18、設(shè)計(jì)的一致性,最準(zhǔn)確地實(shí)現(xiàn)既定的需求。需求管理就是一組在軟件開(kāi)發(fā)進(jìn)展中的任何時(shí)候標(biāo)識(shí)、控制和跟蹤需求的活動(dòng)。 需求管理的內(nèi)容包括在工程進(jìn)展過(guò)程中為保證需求集成性及精確性所進(jìn)行的所有活動(dòng),具體內(nèi)容包括需求變更控制、版本控制、需求跟蹤和需求狀態(tài)跟蹤。第045頁(yè) (1)需求變更控制:建議變更;評(píng)審所提出的需求變更,評(píng)估分析每項(xiàng)變更可能的影響,從而決定是否實(shí)施變更;以一種可控制的方式將需求變更融入到項(xiàng)目中。 (2)版本控制:建立需求基準(zhǔn)版本和需求控制版本文檔,確定一個(gè)需求基準(zhǔn)。每個(gè)版本的需求規(guī)格說(shuō)明都必須是獨(dú)立說(shuō)明,以避免將底稿和基準(zhǔn)或新舊版本相混淆。需求文檔的每一個(gè)版本必須被統(tǒng)一確定,在變更時(shí),應(yīng)記

19、錄變更需求文檔版本的日期以及所做的變更、原因,還包括由誰(shuí)負(fù)責(zé)更新和更新的新版本號(hào)等??刹捎冒姹究刂乒ぞ咦詣?dòng)完成這些任務(wù)。 (3)需求跟蹤:跟蹤所有受需求變更影響的工作產(chǎn)品,讓每項(xiàng)需求都能與其對(duì)應(yīng)的設(shè)計(jì)、源代碼和測(cè)試用例聯(lián)系起來(lái)。當(dāng)進(jìn)行某項(xiàng)需求變更時(shí),與其相關(guān)部分可能也需要修改。通過(guò)需求跟蹤所建立的聯(lián)系,可方便地找到相關(guān)的其他需求、設(shè)計(jì)模板、源代碼和測(cè)試用例。通過(guò)跟蹤減少當(dāng)變更需求時(shí)必須進(jìn)行的變更被遺漏,確保覆蓋全部的需求,同時(shí)確保所有的輸出符合用戶的需求。 (4)需求狀態(tài)跟蹤:定義需求狀態(tài),在整個(gè)項(xiàng)目過(guò)程中跟蹤需求的每一個(gè)狀態(tài)及其變更情況??蓪⒏櫭宽?xiàng)需求的狀態(tài)建立一個(gè)數(shù)據(jù)庫(kù),其中每一條記錄保

20、存一項(xiàng)功能需求的重要屬性。需求狀態(tài)有已推薦的、已通過(guò)的、已實(shí)施的或已驗(yàn)證的等,這樣在任何時(shí)候都能得到每個(gè)狀態(tài)類的需求數(shù)量。 需求開(kāi)發(fā)的結(jié)果是形成了客戶與開(kāi)發(fā)人員雙方均滿意的系統(tǒng)邏輯模型,它連接需求開(kāi)發(fā)和需求管理,作為需求管理的輸入。需求管理的過(guò)程,從需求獲取即開(kāi)始,并貫穿于整個(gè)軟件項(xiàng)目生命周期,以實(shí)現(xiàn)最終產(chǎn)品同需求的最佳結(jié)合。 需求開(kāi)發(fā)與需求管理間的關(guān)系可用圖3-5來(lái)表示。圖3-5 需求開(kāi)發(fā)與需求管理間的關(guān)系3.2獲取需求的方法 綜上所述,需求分析的主要任務(wù),就是正確理解和表達(dá)用戶的要求,但如何從應(yīng)用領(lǐng)域獲取所需知識(shí),往往造成需求分析的障礙,所以獲取需求是需求分析的關(guān)鍵的一步,也是最困難、最易

21、出錯(cuò)的一步。第046頁(yè)3.2.1 存在問(wèn)題 在獲取需求過(guò)程中遇到的典型問(wèn)題有: (1)對(duì)需求的理解問(wèn)題。要準(zhǔn)確、完整地獲取需求必須對(duì)問(wèn)題進(jìn)行深入的理解與把握。而大多數(shù)情況下,應(yīng)用領(lǐng)域具有一定的專業(yè)性,分析人員不是問(wèn)題領(lǐng)域的行家,造成理解問(wèn)題。 (2)分析人員與用戶的通信問(wèn)題。由于分析人員不懂特定的業(yè)務(wù),需要通過(guò)用戶的描述來(lái)了解。而用戶對(duì)應(yīng)用問(wèn)題的理解、描述以及他們對(duì)目標(biāo)系統(tǒng)的要求往往具有片面性、模糊性,在很多情況下,用戶往往不能正確表達(dá)他們的需求。而且用戶多是考慮業(yè)務(wù)領(lǐng)域本身,而分析員對(duì)問(wèn)題的理解必須從信息處理要求出發(fā),所以與用戶建立相互信任,有效地溝通是分析員的首要任務(wù)。 (3)用戶需求的可

22、變性問(wèn)題。應(yīng)用領(lǐng)域與用戶需求具有多樣性,由于用戶領(lǐng)域的業(yè)務(wù)不斷擴(kuò)展或者轉(zhuǎn)移、市場(chǎng)競(jìng)爭(zhēng)的要求或用戶主管人員的變更等原因,使得用戶的需求常發(fā)生變化。需求的可變性就要求分析員能夠使其工作適應(yīng)需求的變化,給需求分析造成了很大的困難。 (4)分析方法和分析工具問(wèn)題。需求分析方法論和分析工具的缺乏,及其應(yīng)用范圍的局限性是造成障礙的又一原因。3.2.2 常用方法 需求獲取方法是溝通用戶和開(kāi)發(fā)人員之間的橋梁。目前,需求分析方法中,用戶需求獲取主要是依靠以下幾種方法: (1)訪談。 訪談是最早開(kāi)始使用的獲取用戶需求的方法,也是目前仍然廣泛使用的需求分析技術(shù)。 訪談?dòng)袃煞N基本形式,分別是正式的和非正式的訪談。正式

23、訪談時(shí),系統(tǒng)分析員將提出一些事先準(zhǔn)備好的具體問(wèn)題,例如,詢問(wèn)處理的單據(jù)種類、處理的方法以及信息反饋時(shí)間應(yīng)該多快等。而在非正式訪談中,分析員可提出一些用戶可以自由回答的開(kāi)放性問(wèn)題,例如,詢問(wèn)用戶對(duì)目前正在使用的系統(tǒng)有哪些不滿意的地方,以鼓勵(lì)被訪問(wèn)人員說(shuō)出自己的想法。詢問(wèn)一個(gè)開(kāi)放的、可擴(kuò)充的問(wèn)題將有助于更好地理解用戶目前的業(yè)務(wù)過(guò)程,并且確定在新系統(tǒng)中應(yīng)如何解決目前系統(tǒng)的問(wèn)題。分析人員通過(guò)用戶對(duì)問(wèn)題的回答獲取有關(guān)問(wèn)題及環(huán)境的知識(shí),逐步理解用戶對(duì)目標(biāo)系統(tǒng)的要求。 采用訪談方式時(shí)分析員的主要任務(wù)是問(wèn)題的設(shè)計(jì),包括探討功能、非功能、例外情況的問(wèn)題,甚至一些看起來(lái)“愚蠢的問(wèn)題。必須把所有的討論記錄下來(lái),同時(shí)

24、還要做一定的整理,并請(qǐng)參與討論的用戶評(píng)論并更正。 (2)問(wèn)卷調(diào)查。 問(wèn)卷調(diào)查即把需要調(diào)查的內(nèi)容制成表格交給用戶填寫(xiě)。該方法對(duì)需要調(diào)查大量人員的意見(jiàn)時(shí)十分有效。這種方法的優(yōu)點(diǎn)是:用戶有較寬裕的考慮時(shí)間和回答時(shí)間。經(jīng)過(guò)仔細(xì)考慮寫(xiě)出的書(shū)面回答可能比被訪者對(duì)問(wèn)題的口頭回答更準(zhǔn)確,從而可以得到對(duì)提出的問(wèn)題較為準(zhǔn)確細(xì)致的回答。分析員仔細(xì)閱讀收回的調(diào)查表,然后再有針對(duì)性地訪問(wèn)一些用戶,以便向他們?cè)儐?wèn)在分析調(diào)查表時(shí)發(fā)現(xiàn)的新問(wèn)題。 采用問(wèn)卷調(diào)查方法的關(guān)鍵是調(diào)查表的設(shè)計(jì)。在開(kāi)發(fā)的早期用戶與開(kāi)發(fā)者之間缺乏共同語(yǔ)言,用戶可能對(duì)表格中的內(nèi)容存在理解上的偏差。因此調(diào)查表的設(shè)計(jì)應(yīng)簡(jiǎn)潔、易懂、易填寫(xiě),同時(shí)還要注意用戶的特點(diǎn)和

25、調(diào)查的策略。第047頁(yè) (3)情景分析。 由于很多用戶不了解計(jì)算機(jī)系統(tǒng),對(duì)自己的業(yè)務(wù)如何在將來(lái)的目標(biāo)系統(tǒng)中實(shí)現(xiàn)無(wú)認(rèn)識(shí),所以很難提出具體的需求。所謂情景分析就是對(duì)目標(biāo)系統(tǒng)解決某個(gè)具體問(wèn)題的方法和結(jié)果,給出可能的情景描述,以獲知用戶的具體需求。 情景分析技術(shù)的優(yōu)點(diǎn)是,它能在某種程度上演示目標(biāo)系統(tǒng)的行為,便于用戶理解,從而進(jìn)一步揭示出一些分析員目前還不知道的需求。同時(shí),讓用戶起積極主動(dòng)的作用對(duì)需求分析工作獲得成功是至關(guān)重要的,情景分析較易為用戶所理解,使得用戶在需求分析過(guò)程中能夠始終扮演一個(gè)積極主動(dòng)的角色。因此在訪問(wèn)用戶的過(guò)程中使用該技術(shù)是非常有效的。 (4)實(shí)地考察。 分析人員到用戶工作現(xiàn)場(chǎng),實(shí)際

26、觀察用戶的手工操作過(guò)程也是一種行之有效的需求獲取方法。 在實(shí)際觀察過(guò)程中,分析人員必須注意,系統(tǒng)開(kāi)發(fā)的目標(biāo)不是手工操作過(guò)程的模擬,還必須考慮最好的經(jīng)濟(jì)效益、最快的處理速度、最合理的操作流程、最友好的用戶界面等因素。因此,分析人員在接受用戶關(guān)于應(yīng)用問(wèn)題及背景的知識(shí)的同時(shí),應(yīng)結(jié)合自己的軟件開(kāi)發(fā)和軟件應(yīng)用經(jīng)驗(yàn),主動(dòng)地剔除不合理的、一些暫時(shí)行為的用戶需求,從系統(tǒng)角度改進(jìn)操作流程或規(guī)范,提出新的潛在的用戶需求。 (5)構(gòu)造原型。 在系統(tǒng)開(kāi)發(fā)的早期,以對(duì)用戶所進(jìn)行的簡(jiǎn)單需求分析為基礎(chǔ),快速建立目標(biāo)系統(tǒng)的原型。用戶可以通過(guò)原型進(jìn)行評(píng)估并提出修改意見(jiàn),從而使用戶明確需求??焖僭头椒瓤舍槍?duì)整個(gè)系統(tǒng),也可針對(duì)

27、系統(tǒng)的某部分功能o(快速原型方法內(nèi)容詳見(jiàn)3.4節(jié))o3.2.3 需求分析的原則 需求分析應(yīng)遵循以下原則: (1)解決邏輯問(wèn)題。 需求分析是對(duì)問(wèn)題的識(shí)別和說(shuō)明過(guò)程,分析員要回答的是“系統(tǒng)必須做什么”的問(wèn)題,而不是“系統(tǒng)應(yīng)該怎么做”的問(wèn)題。需求分析的基本原則是給出要完成的功能和處理的信息,而不考慮實(shí)現(xiàn)的細(xì)節(jié),即需求分析工作集中在系統(tǒng)應(yīng)當(dāng)完成什么功能上,而不在怎樣才能實(shí)現(xiàn)這些功能上。 (2)以運(yùn)行環(huán)境為基礎(chǔ)。 需求分析工作必須以具體的運(yùn)行環(huán)境為基礎(chǔ),系統(tǒng)分析人員可以參考,但不能照搬其他類似的系統(tǒng)開(kāi)發(fā)時(shí)的分析工作,更不能憑個(gè)人的好惡或主觀想象辦事。 (3)用戶參與的原則。 需求分析工作是系統(tǒng)分析人員同

28、用戶不斷交互的過(guò)程。因此,需求分析工作應(yīng)該要有客戶(開(kāi)發(fā)委托者或開(kāi)發(fā)委托者兼系統(tǒng)使用者)所指定的人員參加,以保證交互的充分性和工作效率。 (4)構(gòu)造高質(zhì)量的需求規(guī)格說(shuō)明。 需求規(guī)格說(shuō)明是需求分析工作重要的完成標(biāo)志。在生成規(guī)格說(shuō)明的有關(guān)文檔的過(guò)程中,分析人員應(yīng)該嚴(yán)格遵循既定規(guī)范,做到內(nèi)容全面、結(jié)構(gòu)清晰、格式嚴(yán)謹(jǐn)。 3.2.4 需求分析方法概述 隨著軟件開(kāi)發(fā)技術(shù)的發(fā)展,目前已形成許多需求分析及描述的方法,每種方法都有其獨(dú)到之處。第048頁(yè)但不管采用哪種方法進(jìn)行需求分析,都應(yīng)滿足如下基本要求: (1)必須能理解問(wèn)題的數(shù)據(jù)域和功能域。 一個(gè)軟件從外部可以被看成是一個(gè)黑盒子,信息從一端流入,從另一端流出

29、。在內(nèi)部對(duì)輸入信息進(jìn)行轉(zhuǎn)換,形成中間結(jié)果,再轉(zhuǎn)換,最終得到所需要的輸出信息,就是軟件所具有的功能。所以可通過(guò)對(duì)數(shù)據(jù)的描述和數(shù)據(jù)轉(zhuǎn)換的描述,實(shí)現(xiàn)對(duì)系統(tǒng)的理解和描述。 計(jì)算機(jī)程序所處理的數(shù)據(jù)域的描述一般為:數(shù)據(jù)內(nèi)容、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)流。數(shù)據(jù)內(nèi)容就是數(shù)據(jù)項(xiàng),數(shù)據(jù)結(jié)構(gòu)就是數(shù)據(jù)項(xiàng)的組織形式,數(shù)據(jù)流是數(shù)據(jù)通過(guò)系統(tǒng)時(shí)的變化方式。 對(duì)數(shù)據(jù)進(jìn)行的一系列的轉(zhuǎn)換即系統(tǒng)應(yīng)實(shí)現(xiàn)的功能和子功能。兩個(gè)功能之間的數(shù)據(jù)傳遞就確定了功能之間的接口。在需求分析階段的功能描述通常是用文字說(shuō)明要“做什么”,不必具體展開(kāi)怎樣做。 (2)必須能按自頂向下、逐層分解的方式對(duì)問(wèn)題進(jìn)行分解和不斷細(xì)化。 現(xiàn)實(shí)世界是復(fù)雜多變的,從整體上考慮一個(gè)問(wèn)題通

30、常是困難的。特別是一些復(fù)雜的問(wèn)題,作為一個(gè)整體很難準(zhǔn)確理解,不可能給出正確的解決方案。此時(shí),對(duì)問(wèn)題進(jìn)行分解與抽象是普遍有效的基本法則。 分解是將求解的復(fù)雜問(wèn)題,分解為若干相對(duì)簡(jiǎn)單問(wèn)題求解的組合。例如實(shí)現(xiàn)一個(gè)教學(xué)管理系統(tǒng),可以將該系統(tǒng)分解為學(xué)生管理、教師管理、課程管理、教務(wù)管理、考試管理等5個(gè)子系統(tǒng)。定義好各子系統(tǒng)之間的相互聯(lián)系,對(duì)每個(gè)子系統(tǒng)分別求解。如子問(wèn)題仍然較復(fù)雜,則可以進(jìn)一步分解。如可將考試管理進(jìn)一步分解為試題庫(kù)維護(hù)、試卷生成、考務(wù)管理、學(xué)生考試和評(píng)閱試卷等子系統(tǒng)。 分解的目的是為了降低問(wèn)題求解的復(fù)雜性,將復(fù)雜問(wèn)題分解成一些小的、容易控制和理解的子問(wèn)題不僅便于理解,還可以將子問(wèn)題劃分給不

31、同的開(kāi)發(fā)小組,分別完成,然后再裝配起來(lái)形成一個(gè)完整的系統(tǒng)。更重要的是通過(guò)分解,可以促進(jìn)軟件開(kāi)發(fā)走向構(gòu)件開(kāi)發(fā)的道路。因?yàn)閯澐值男?wèn)題中有些是常見(jiàn)的公共問(wèn)題,有些是特殊的問(wèn)題。對(duì)常見(jiàn)的公共問(wèn)題可以復(fù)用已有的軟件構(gòu)件,開(kāi)發(fā)人員只對(duì)特殊的問(wèn)題提供解決方案。這樣不僅可提高軟件開(kāi)發(fā)的效率,還使軟件開(kāi)發(fā)向著“工程化”方向邁進(jìn)。 在需求階段分解的內(nèi)容,可以是軟件的功能域和數(shù)據(jù)域兩個(gè)部分,分解的方式有橫向分解和縱向分解。橫向分解在同一層次上,把一個(gè)功能分解為幾個(gè)子功能,并確定這些子功能與父功能之間的接口;縱向分解是將一個(gè)功能分解為幾個(gè)子功能,然后對(duì)其中復(fù)雜的子功能再繼續(xù)分解為更小的子功能,逐層分解下去直到獲得合

32、適的子功能為止。在實(shí)際操作中,沒(méi)有單純的橫向分解或縱向分解,通常是二者相結(jié)合的分解方式,如圖3-6所示。 而抽象是認(rèn)識(shí)問(wèn)題的一般與特殊的關(guān)系。例如在上述的考試管理子系統(tǒng)中,可以考慮考試要求的不同試題類型,構(gòu)造每種類型的典型試題,通過(guò)對(duì)典型試題的答題要求和閱卷判定方法分析,抽象出各類試題的不同答題模式和計(jì)算機(jī)閱卷策略與算法。 問(wèn)題分解與抽象定義了問(wèn)題的層次結(jié)構(gòu),應(yīng)該在問(wèn)題求解中反映出這種層次結(jié)構(gòu)。結(jié)構(gòu)與問(wèn)題求解結(jié)構(gòu)的對(duì)應(yīng)關(guān)系保證了問(wèn)題定義的完整性、正確性和可跟蹤性。 (3)要給出系統(tǒng)的邏輯視圖和物理視圖。 軟件需求的邏輯視圖描述的是軟件要達(dá)到的功能和要處理的信息之間的關(guān)系,但沒(méi)有描述實(shí)現(xiàn)的細(xì)節(jié)。

33、如庫(kù)存系統(tǒng)中的檢查庫(kù)存的功能,在邏輯視圖中只關(guān)心庫(kù)存文件的數(shù)據(jù)結(jié)構(gòu),而不考慮計(jì)算機(jī)的具體存儲(chǔ)方式。軟件需求的邏輯描述是軟件設(shè)計(jì)的基礎(chǔ)。 軟件需求的物理視圖給出的是處理功能和信息結(jié)構(gòu)的實(shí)際表現(xiàn)形式,需考慮實(shí)際的環(huán)境和具體的設(shè)備。如一些數(shù)據(jù)是由終端鍵盤輸入的,而有些數(shù)據(jù)可能是由模一數(shù)轉(zhuǎn)換設(shè)備第049頁(yè)提供的。軟件分析人員必須弄清已確定的系統(tǒng)元素對(duì)軟件的限制,并考慮功能和信息的物理表示。注意此時(shí)功能和信息的物理表示只限于“系統(tǒng)必須做什么的范圍,而不考慮“如何做”的細(xì)節(jié)。圖3-6 問(wèn)題的分解 由上述討論可見(jiàn),系統(tǒng)的邏輯視圖和物理視圖描述了系統(tǒng)滿足處理需求所提出的邏輯限制條件和系統(tǒng)中其他成分提出的物理限

34、制條件。3.3結(jié)構(gòu)化分析法法 結(jié)構(gòu)化方法是20世紀(jì)70年代初,由E.Yourdon、L.Constantine、T.DeMarco等人提出的一種系統(tǒng)的軟件開(kāi)發(fā)方法,包括結(jié)構(gòu)化分析(SA)、結(jié)構(gòu)化設(shè)計(jì)(SD)和結(jié)構(gòu)化編程(SP)。結(jié)構(gòu)化分析方法,多年來(lái)被廣泛應(yīng)用,是最經(jīng)典的面向數(shù)據(jù)流的需求分析方法。適用于分析大型的數(shù)據(jù)處理系統(tǒng)。3.3.1 結(jié)構(gòu)化分析方法的基本思想 SA方法以數(shù)據(jù)流分析作為需求分析的出發(fā)點(diǎn),任何信息處理過(guò)程均看作是將輸入數(shù)據(jù)變換成所要求的輸出信息的裝置。而當(dāng)分析人員面對(duì)一個(gè)復(fù)雜的問(wèn)題時(shí),結(jié)構(gòu)化分析的策略是基于問(wèn)題分解與抽象的觀點(diǎn),用抽象模型概念,按照軟件內(nèi)部的數(shù)據(jù)傳遞關(guān)系,采用自

35、頂向下、逐層分解技術(shù),直至找到滿足功能需求的可實(shí)現(xiàn)軟件元素為止。 該方法的特點(diǎn)是利用數(shù)據(jù)流圖來(lái)幫助人們理解問(wèn)題,對(duì)問(wèn)題進(jìn)行分析,即利用圖形工具來(lái)模擬數(shù)據(jù)處理過(guò)程。該方法的核心是數(shù)據(jù)流圖。數(shù)據(jù)流圖是一種用來(lái)表示信息流程和信息變換過(guò)程的圖解方法,它將系統(tǒng)看成是由數(shù)據(jù)流聯(lián)系的各種功能的組合。數(shù)據(jù)流圖可以方便地描述由數(shù)據(jù)流的流動(dòng)聯(lián)系的各種功能。通過(guò)各種功能的輸入輸出結(jié)果,表現(xiàn)現(xiàn)有系統(tǒng)或待開(kāi)發(fā)系統(tǒng)的功能。 具體做法是首先將整個(gè)系統(tǒng)看作一個(gè)加工信息處理的裝置,是一個(gè)黑匣子,標(biāo)識(shí)出系統(tǒng)邊界和所有輸入輸出數(shù)據(jù)流。然后自項(xiàng)向下,對(duì)加工內(nèi)部進(jìn)行細(xì)化,逐層分解,將復(fù)雜第050頁(yè)功能分解為若干簡(jiǎn)單功能的有機(jī)組合,繪制

36、數(shù)據(jù)流圖,并逐步補(bǔ)充細(xì)節(jié)描述。通過(guò)將系統(tǒng)分解成多層處理后,在較低層次上,可以看到數(shù)據(jù)流圖的高層次加工的細(xì)節(jié)和相關(guān)的數(shù)據(jù)流。用數(shù)據(jù)字典精確定義數(shù)據(jù)流圖中每個(gè)數(shù)據(jù)流的成分及每個(gè)成分的屬性、數(shù)據(jù)結(jié)構(gòu)、數(shù)量、傳遞方式等。用結(jié)構(gòu)化英語(yǔ)、判定樹(shù)和判定表對(duì)數(shù)據(jù)流圖中的每個(gè)加工的功能進(jìn)行描述。 結(jié)構(gòu)化分析方法的實(shí)質(zhì)就是一種強(qiáng)烈依賴數(shù)據(jù)流的自頂向下的建模方法,采用一組分層的數(shù)據(jù)流圖及相應(yīng)的數(shù)據(jù)字典作為系統(tǒng)的邏輯模型。它不僅是需求分析技術(shù),也是完成規(guī)格說(shuō)明文檔的技術(shù)手段。3,3.2描述工具 SA方法提供一套圖形、表格和結(jié)構(gòu)化語(yǔ)言等半形式化的描述方式表達(dá)需求,簡(jiǎn)明易懂。描述工具包括: (1)數(shù)據(jù)流圖(Data Fl

37、ow Diagram,DFD):描繪系統(tǒng)邏輯模型的圖形工具,描述了系統(tǒng)的組成部分及各部分之間的聯(lián)系。通常通過(guò)對(duì)系統(tǒng)的分解得到一套分層的數(shù)據(jù)流圖。 (2)數(shù)據(jù)字典(Data Dictionary,DD):DFD只描繪信息在系統(tǒng)中的流動(dòng)和處理情況,而數(shù)據(jù)字典則是對(duì)圖中的元素進(jìn)行定義。 (3)結(jié)構(gòu)化英語(yǔ)、判定表和判定樹(shù):詳細(xì)描述數(shù)據(jù)流圖中一些復(fù)雜處理的加工邏輯。3.3.3數(shù)據(jù)流圖 SA方法使用數(shù)據(jù)流圖從數(shù)據(jù)傳遞和加工的角度,以圖形的方式刻畫(huà)數(shù)據(jù)流從輸入到輸出的傳輸變換過(guò)程。數(shù)據(jù)流圖是結(jié)構(gòu)化系統(tǒng)分析的主要工具,它表示了系統(tǒng)內(nèi)部信息的流向,并表示了系統(tǒng)的邏輯處理的功能,是一種功能模型,如圖3-7所示。圖

38、3-7 一個(gè)學(xué)生選課系統(tǒng)的DFD3.3.3.1基本符號(hào)數(shù)據(jù)流圖中的基本圖元包括:O:圓框,表示加工??冢悍娇颍硎緮?shù)據(jù)的源點(diǎn)或數(shù)據(jù)的終點(diǎn)。一:箭頭,表示被加工數(shù)據(jù)的路徑和流向,即數(shù)據(jù)流。-:雙杠,表示數(shù)據(jù)存儲(chǔ),可以是一個(gè)記錄或一個(gè)數(shù)據(jù)文件,可用名詞或名詞性短語(yǔ)命名。第051頁(yè) 1數(shù)據(jù)源點(diǎn)和數(shù)據(jù)終點(diǎn) 數(shù)據(jù)源點(diǎn)和數(shù)據(jù)終點(diǎn)用方框表示,它是系統(tǒng)之外的實(shí)體,可以是人、物、部門或者其他系統(tǒng),如圖3-7中的教師和學(xué)生。數(shù)據(jù)源點(diǎn)是數(shù)據(jù)流的起點(diǎn),數(shù)據(jù)終點(diǎn)是系統(tǒng)數(shù)據(jù)流的最終目的地。利用數(shù)據(jù)源點(diǎn)與終點(diǎn)明確標(biāo)識(shí)出系統(tǒng)與環(huán)境的接口,給出系統(tǒng)有效作用范圍的邊界。 2加工(數(shù)據(jù)處理變換) 加工用圓框表示,是對(duì)數(shù)據(jù)進(jìn)行處理的

39、邏輯單元。它接受若干輸入數(shù)據(jù)流,通過(guò)加工內(nèi)部產(chǎn)生規(guī)定的輸出數(shù)據(jù)流。數(shù)據(jù)流圖中對(duì)加工的標(biāo)識(shí)通常由加工編號(hào)和加工命名組成。如圖3-7中的學(xué)生選擇課程、注冊(cè)課程和打印表格都是加工的例子。為了給讀者理解系統(tǒng)提供有意義的信息,對(duì)加工的命名通常要求使用“動(dòng)詞+賓語(yǔ)”形式的結(jié)構(gòu)化語(yǔ)言簡(jiǎn)單明確地進(jìn)行標(biāo)識(shí)。例如“注冊(cè)課程”,“打印報(bào)表”等,不應(yīng)使用如“計(jì)算、“處理”、“加工”等抽象名詞作為加工命名。如果一個(gè)加工很難給出適當(dāng)?shù)拿?,?yīng)該考慮該加工的處理功能是否恰當(dāng),是否應(yīng)該重新分解。 3數(shù)據(jù)流 數(shù)據(jù)流用帶數(shù)據(jù)流標(biāo)識(shí)的箭頭表示,表示系統(tǒng)處理的數(shù)據(jù)對(duì)象和數(shù)據(jù)流動(dòng)的方向。數(shù)據(jù)流的方向可以是:從一加工流向另一加工;從加工

40、流向數(shù)據(jù)存儲(chǔ)或數(shù)據(jù)存儲(chǔ)流向加工;從源點(diǎn)流向加工或從加工流向終點(diǎn)。 當(dāng)數(shù)據(jù)流的方向指向一個(gè)加工時(shí),表示它是該加工的一個(gè)輸入數(shù)據(jù)流;當(dāng)數(shù)據(jù)流的方向是從一個(gè)加工發(fā)出時(shí),表示它是通過(guò)該加工得到的一個(gè)輸出數(shù)據(jù)流。數(shù)據(jù)流是客觀世界的實(shí)體對(duì)象的邏輯表示,可以是一個(gè)數(shù)據(jù)項(xiàng),也可以是一組數(shù)據(jù)項(xiàng)組成。例如圖3-7中“費(fèi)用”由“學(xué)生學(xué)號(hào)”、“注冊(cè)課程號(hào)”和“金額”組成。一個(gè)數(shù)據(jù)項(xiàng)可以是基本項(xiàng)(不可再分解的數(shù)據(jù)項(xiàng),如組成“費(fèi)用”的數(shù)據(jù)項(xiàng)),也可以是結(jié)構(gòu)型數(shù)據(jù)項(xiàng)。例如“選課單由“學(xué)生學(xué)號(hào)”和“注冊(cè)課程列表”組成,“注冊(cè)課程列表由若干“注冊(cè)項(xiàng)”構(gòu)成,每個(gè)“注冊(cè)項(xiàng)”由“課程名”、“課程號(hào)”、“學(xué)分構(gòu)成。 每個(gè)數(shù)據(jù)流應(yīng)有良好

41、的命名,它不僅作為數(shù)據(jù)的標(biāo)識(shí),還有利于深化對(duì)系統(tǒng)的認(rèn)識(shí)??梢钥紤]使用數(shù)據(jù)流中最主要的數(shù)據(jù)項(xiàng)作為該數(shù)據(jù)流的名稱。與加工命名類似地,應(yīng)該避免使用諸如“數(shù)據(jù)”、“信息”之類地抽象名詞標(biāo)識(shí)數(shù)據(jù)流。因?yàn)榧庸な且粋€(gè)進(jìn)行數(shù)據(jù)處理的黑匣子,因此流入、流出同一加工的數(shù)據(jù)流應(yīng)該具有不同的名稱。數(shù)據(jù)流不應(yīng)包括控制流。數(shù)據(jù)流反映的是加工處理的對(duì)象,控制流是一種選擇或用來(lái)影響加工的性質(zhì),而不是對(duì)它進(jìn)行加工的對(duì)象。例如圖3-8中的“讀下張卡片”即屬于控制流,不應(yīng)該在數(shù)據(jù)流圖中畫(huà)出。圖3-8含有控制流的例子 4數(shù)據(jù)存儲(chǔ) 數(shù)據(jù)存儲(chǔ)用兩條平行線段表示,邏輯上是信息的靜態(tài)存儲(chǔ)。物理上,DFD中的數(shù)據(jù)存儲(chǔ)可以是計(jì)算機(jī)系統(tǒng)中的外部或

42、者內(nèi)部文件、文件的一部分、數(shù)據(jù)庫(kù)的元素或記錄的一部分等,還可以是一個(gè)人工系統(tǒng)中的表冊(cè)、賬單等。數(shù)據(jù)存儲(chǔ)是系統(tǒng)的重要組成部分,在分層數(shù)據(jù)流圖中,通常是局部于某一分解層次的。數(shù)據(jù)存儲(chǔ)可用名詞或名詞性短語(yǔ)命名,還需要在數(shù)據(jù)詞典中說(shuō)明其邏輯或者物理組織要求以及存儲(chǔ)介質(zhì)等。一個(gè)數(shù)據(jù)流從加工流向第052頁(yè)數(shù)據(jù)存儲(chǔ),表示該加工對(duì)文件寫(xiě);如果數(shù)據(jù)流是從數(shù)據(jù)存儲(chǔ)流向加工,表示該加工對(duì)文件讀。如果加工到數(shù)據(jù)存儲(chǔ)之間的數(shù)據(jù)流是雙向的,表示該加工對(duì)文件的操作包括讀、寫(xiě)和修改。流入、流出數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)流的名字通常和數(shù)據(jù)存儲(chǔ)同名,可以不標(biāo)識(shí)。 3.3.3.2 數(shù)據(jù)流與加工之間的關(guān)系 在數(shù)據(jù)流圖中,兩個(gè)加工之間可以有多個(gè)數(shù)

43、據(jù)流。如果有兩個(gè)以上的數(shù)據(jù)流指向同一加工,或一個(gè)加工流出兩個(gè)以上數(shù)據(jù)流,則這些數(shù)據(jù)流之間往往存在一定的關(guān)系。為表達(dá)數(shù)據(jù)流之間的邏輯聯(lián)系,可以附加說(shuō)明標(biāo)記符號(hào)。常見(jiàn)的說(shuō)明符號(hào)及含義如圖3-9所示。 圖3-9(a)表示流入加工的兩個(gè)數(shù)據(jù)流必須同時(shí)到達(dá),該加工才能啟動(dòng)。 圖3-9(e)表示流入加工的兩個(gè)數(shù)據(jù)流只要有一個(gè)到達(dá),該加工即可啟動(dòng)。 圖3-9(c)表示流入加工的兩個(gè)數(shù)據(jù)流不能同時(shí)到達(dá)。 對(duì)于圖3-9(b)、圖3-9(d)、圖3-9(f)則是對(duì)流出加工的數(shù)據(jù)流相應(yīng)關(guān)系的對(duì)應(yīng)解釋。圖3-9流入流出同一加工數(shù)據(jù)流 3.3.3.3 數(shù)據(jù)流圖的分層 對(duì)于一個(gè)大型軟件系統(tǒng),不可能將全部最終的加工和數(shù)據(jù)流

44、都在一張圖上表現(xiàn)出來(lái)。這樣圖面太大,關(guān)系復(fù)雜,難以理解。結(jié)構(gòu)化控制復(fù)雜性的方法,是采用分層技術(shù),用一套分層DFD來(lái)分解復(fù)雜性。分層體現(xiàn)了抽象和信息隱蔽,即上層不考慮下層的細(xì)節(jié),暫時(shí)掩蓋了下層加工的功能及它們的復(fù)雜關(guān)系。 一個(gè)軟件系統(tǒng)的一套分層DFD圖包括頂層DFD、中間層DFD和底層DFD組成。頂層圖只有一張,它描繪了整個(gè)系統(tǒng)的作用范圍,可將整個(gè)系統(tǒng)作為一個(gè)加工,其加工名就是系統(tǒng)名,輸入和輸出就是系統(tǒng)的所有輸入和輸出數(shù)據(jù),也就是系統(tǒng)與外界的接口;中間層的DFD圖是對(duì)上層父圖的分解,它的每一加工還可繼續(xù)分解細(xì)化。當(dāng)分解一直進(jìn)行到每個(gè)加工的功能獨(dú)立,簡(jiǎn)單明確,數(shù)據(jù)流被嚴(yán)格定義時(shí),即得一組底層DFD

45、圖。每張底層DFD圖是由一些不能再分解的加工和簡(jiǎn)單數(shù)據(jù)流組成,這些加工被稱之為基本加工。第053頁(yè)顯然,這種自頂向下,逐層地理解和表達(dá)系統(tǒng)的分層DFD圖,是一個(gè)控制復(fù)雜度,保證分析質(zhì)量的很好的系統(tǒng)分析方法。 分解示意圖如圖3-10所示。圖3-10分層數(shù)據(jù)流圖 為了控制分解過(guò)程,嚴(yán)格地表現(xiàn)一套DFD圖,引入如下概念: (1)父圖與子圖。如圖3-11所示的頂層圖是整個(gè)系統(tǒng)的抽象表示,如果系統(tǒng)S可分解為三個(gè)子加工S 1、S2、S3,畫(huà)出相關(guān)的數(shù)據(jù)流,得到頂層下的第一層數(shù)據(jù)流圖。繼續(xù)分解S 1、S2、S3,得到多層的數(shù)據(jù)流圖。其中上一層圖是其分解的下一層圖的父圖。相反下一層圖是上層圖的子圖。父圖里的加

46、工是其相應(yīng)子圖的抽象表示,子圖則是其父圖中相應(yīng)加工的細(xì)化。圖3-11 分解示意圖 (2)分層圖編號(hào)。頂層圖中加工,即整個(gè)系統(tǒng)的編號(hào)以O(shè)表示,以下每一張子圖的編號(hào)就是上圖中相應(yīng)加工的編號(hào),而子圖中每個(gè)子加工的編號(hào)應(yīng)該是子圖號(hào),加小數(shù)點(diǎn),加局部加工號(hào)。在一張分層圖中,每個(gè)加工的編號(hào)中所含小數(shù)點(diǎn)的個(gè)數(shù),就是該圖的層次數(shù)。圖3-11顯示了這一編號(hào)規(guī)則。 (3)父圖和子圖數(shù)據(jù)流的平衡性。在繪制分層DFD圖時(shí),必須注意子圖與其父圖中相應(yīng)加工的數(shù)據(jù)接口保持平衡,即父圖中流入流出某加工的數(shù)據(jù)流,與分解后子圖中流入流出加工的數(shù)據(jù)流應(yīng)保持邏輯上的一致??刂品謱覦FD圖的數(shù)據(jù)流的平衡性,是消除DFD第054頁(yè)圖錯(cuò)誤

47、的一個(gè)重要手段。例如圖3-12(b)是圖3-12 (a)中S3的分解,父圖中流入S3的數(shù)據(jù)流為M、N,流出S3的數(shù)據(jù)流為O,而在圖3-12(b)中流入的數(shù)據(jù)流少了M,顯然是錯(cuò)誤的。 注意,很多情況下父圖和子圖數(shù)據(jù)流的平衡性,不一定是數(shù)據(jù)流的名稱和個(gè)數(shù)的形式一致,如圖3-12 (cl)所示,流出的數(shù)據(jù)流為J、K,從表面上看,數(shù)據(jù)流的名字和數(shù)量與圖3-12(a)中流入流出S3的均不一致,但若數(shù)據(jù)流J、K是隨著對(duì)圖3-12(a)中加工S3的分解,將數(shù)據(jù)流O分解而來(lái)的,則圖3-12(d)與圖3-12(a)仍是平衡的。 (4)局部文件。如果某個(gè)中間層的DFD中的數(shù)據(jù)存儲(chǔ)不是上圖中相應(yīng)加工的外部接口,而只

48、是本圖中某些加工之間的信息接口,則稱其為局部文件。一個(gè)局部文件只有當(dāng)它作為某個(gè)加工的數(shù)據(jù)接口或某個(gè)加工的特定輸入或輸出時(shí)才予以標(biāo)出。圖3-12中的數(shù)據(jù)存儲(chǔ)Fi就是局部文件。局部文件標(biāo)出的約定有助于信息隱蔽。圖3-12 父圖和子圖的平衡 3.3.3.4 畫(huà)數(shù)據(jù)流圖的步驟 構(gòu)造分層DFD圖的過(guò)程就是結(jié)構(gòu)化的系統(tǒng)建模的過(guò)程在對(duì)分層數(shù)據(jù)流圖求精過(guò)程中,自頂向下逐層地理解和表達(dá)系統(tǒng)。經(jīng)驗(yàn)指出,對(duì)不同的軟件需要根據(jù)不同的思路畫(huà)DFD圖,但其基本步驟應(yīng)是:由外向里,自頂向下,模擬現(xiàn)行的問(wèn)題處理過(guò)程,通過(guò)一系列分解步驟,逐步細(xì)化、完善求精,最終表現(xiàn)出整個(gè)軟件系統(tǒng)的構(gòu)成。具體步驟如下: (1)找外部實(shí)體,確定系

49、統(tǒng)邊界,確定數(shù)據(jù)流源和數(shù)據(jù)終點(diǎn)。以項(xiàng)目開(kāi)發(fā)計(jì)劃確定的目標(biāo)為基礎(chǔ),經(jīng)過(guò)需求獲取工作,可以比較容易劃定系統(tǒng)的邊界,確定系統(tǒng)的數(shù)據(jù)源點(diǎn)和終點(diǎn)。進(jìn)而找出外部實(shí)體的輸入和輸出數(shù)據(jù)流,畫(huà)出頂層數(shù)據(jù)流圖。 (2)從數(shù)據(jù)源點(diǎn)出發(fā),按照系統(tǒng)的邏輯需要,逐步畫(huà)出一系列邏輯加工框,直至數(shù)據(jù)終點(diǎn)。自頂向下,對(duì)每個(gè)加工進(jìn)行內(nèi)部分解,畫(huà)出分層數(shù)據(jù)流圖。 (3)按照下述一般原則對(duì)數(shù)據(jù)流圖進(jìn)行復(fù)查求精。復(fù)查求精應(yīng)由分析員與用戶共同參與,分析員借助數(shù)據(jù)流圖及數(shù)據(jù)詞典(詳見(jiàn)3.3.4節(jié)),向用戶闡述系統(tǒng)輸入數(shù)據(jù)如何一步第055頁(yè)一步地轉(zhuǎn)變?yōu)檩敵鼋Y(jié)果。這些闡述集中地反映了分析員當(dāng)前對(duì)于目標(biāo)系統(tǒng)的認(rèn)識(shí),用戶應(yīng)認(rèn)真聽(tīng)取分析員的報(bào)告,考

50、察處理是否正確,功能是否完整,并及時(shí)糾正與補(bǔ)充。分析員由此對(duì)數(shù)據(jù)流圖進(jìn)一步求精。 構(gòu)造分層數(shù)據(jù)流圖及求精的一般原則是: (1)數(shù)據(jù)流圖中所有圖形符號(hào)必須是四種元素之一,圖中的每一個(gè)元素都必須有良好的命名。數(shù)據(jù)流圖的主圖必須封閉在外部實(shí)體之間,實(shí)體可以有多個(gè)。 需要說(shuō)明的是,在使用中,為方便起見(jiàn),還常使用另一套等價(jià)的符號(hào),兩套符號(hào)的對(duì)應(yīng)關(guān)系如圖3-13所示。圖3-13 符號(hào)對(duì)照 (2)分解應(yīng)該自然,概念上清晰、合理。應(yīng)使每次分解生成的DFD上的數(shù)據(jù)流和加工都很容易確切地命名,否則說(shuō)明分解欠合理,應(yīng)重新考慮。 (3)流入、流出加工的數(shù)據(jù)流應(yīng)連續(xù)。即每個(gè)加工必須有輸入、輸出數(shù)據(jù)流,僅有輸入(或者僅有

51、輸出)數(shù)據(jù)流的加工是不恰當(dāng)?shù)?。同時(shí)流入和流出同一加工的數(shù)據(jù)流之間應(yīng)具有對(duì)應(yīng)關(guān)系,即每個(gè)加工產(chǎn)生的所有數(shù)據(jù)流都能夠由進(jìn)入該加工的數(shù)據(jù)流導(dǎo)出。 (4)在分解過(guò)程中,注意保持父圖和子圖數(shù)據(jù)流的平衡性,合理利用局部文件實(shí)現(xiàn)信息隱蔽。 (5)控制單張數(shù)據(jù)流圖的復(fù)雜性。數(shù)據(jù)流圖的復(fù)雜性體現(xiàn)在一張圖上加工和數(shù)據(jù)流的數(shù)目。一個(gè)加工的下層子加工應(yīng)該控制在7個(gè)以內(nèi)。流入、流出同一加工的數(shù)據(jù)流也不應(yīng)太多。若太多,意味著該加工的功能過(guò)于復(fù)雜,可能是分解不恰當(dāng)所至。 (6)當(dāng)一個(gè)加工邏輯足夠簡(jiǎn)單,則分解可以終止。常見(jiàn)的終止加工分解的條件如采用結(jié)構(gòu)化語(yǔ)言對(duì)加工進(jìn)行描述時(shí),不超過(guò)一頁(yè)打印紙;加工只有一個(gè)輸入數(shù)據(jù)流和一個(gè)輸出

52、數(shù)據(jù)流等。 (7)在軟件分析過(guò)程中應(yīng)只考慮穩(wěn)態(tài),暫時(shí)忽略有關(guān)細(xì)節(jié)。如可以暫不考慮初始化、出錯(cuò)路徑等細(xì)節(jié)。數(shù)據(jù)流圖中不應(yīng)有控制流和控制信息,如圖3-14所示。其中“XO時(shí)”即為控制流。圖3-14 一個(gè)帶有控制流的錯(cuò)誤DFD第056頁(yè) (8)在進(jìn)行逐層分解時(shí),應(yīng)注意分解層次的均勻性。避免使一次分解的加工太多和太少。因?yàn)樘鄷?huì)使一張圖的復(fù)雜性增大,太少則會(huì)使層次增多,增加了綜合評(píng)價(jià)的工作量。一般應(yīng)上層分解快些,下層分解慢些??梢詫⒁粋€(gè)系統(tǒng)的全部分層數(shù)據(jù)流圖看作一棵樹(shù)。頂層加工為樹(shù)根,所有底層加工為樹(shù)葉。從樹(shù)根到所有樹(shù)葉的路徑長(zhǎng)度之差不應(yīng)該太大(理想情況是不超過(guò)2)。兩個(gè)底層加工的層次相差太大,說(shuō)明在

53、某個(gè)高層加工的分解可能是不適當(dāng)?shù)?,某些加工已是基本加工,而另一些還須加工分解若干次。3.3.4數(shù)據(jù)字典 數(shù)據(jù)字典是SA方法中另一個(gè)重要的分析工具。數(shù)據(jù)流圖對(duì)信息處理邏輯模型的描述,具有直觀、全面、容易理解的優(yōu)點(diǎn),但沒(méi)有準(zhǔn)確、完整地定義圖中各元素。SA方法要求對(duì)于數(shù)據(jù)流圖中的所有數(shù)據(jù)流、文件和底層加工進(jìn)行準(zhǔn)確、完整定義。這些圖元定義條款匯集在一起即組成數(shù)據(jù)字典。 在數(shù)據(jù)字典中給出嚴(yán)格的數(shù)據(jù)定義可以減少分析人員和用戶之間的通信,消除誤解,同時(shí)它也是以后進(jìn)行系統(tǒng)設(shè)計(jì)及維護(hù)的重要依據(jù),是進(jìn)行系統(tǒng)設(shè)計(jì)的最有價(jià)值的文檔之一。數(shù)據(jù)流圖和數(shù)據(jù)字典應(yīng)該配合使用,數(shù)據(jù)流圖加數(shù)據(jù)詞典構(gòu)成系統(tǒng)需求分析規(guī)格說(shuō)明的主要部

54、分。 3.3.4.1 數(shù)據(jù)字典編寫(xiě)的基本要求 (1)對(duì)數(shù)據(jù)流圖上的各種元素的定義必須明確、一致且易理解。 (2)命名、編號(hào)應(yīng)與數(shù)據(jù)流圖一致。 (3)對(duì)數(shù)據(jù)流圖的成分定義與說(shuō)明無(wú)遺漏,無(wú)同名異義,或異名同義。 (4)格式規(guī)范,文字精練,符號(hào)正確。 3.3.4.2數(shù)據(jù)字典的內(nèi)容和格式 數(shù)據(jù)詞典中包括四類條目:數(shù)據(jù)流、數(shù)據(jù)項(xiàng)、文件、基本加工。 (1)數(shù)據(jù)流條目:數(shù)據(jù)流條目定義一個(gè)數(shù)據(jù)流的數(shù)據(jù)項(xiàng)組成。包括名字、別名、編號(hào)、來(lái)源去向、包含的數(shù)據(jù)結(jié)構(gòu)名以及處理特點(diǎn)(如使用頻率、數(shù)據(jù)量等)和其他注釋信息(如格式、位置等)。 (2)數(shù)據(jù)項(xiàng)條目:數(shù)據(jù)項(xiàng)是組成數(shù)據(jù)流的組成要素,分為基本數(shù)據(jù)項(xiàng)和結(jié)構(gòu)型數(shù)據(jù)項(xiàng)?;緮?shù)

55、據(jù)項(xiàng)是數(shù)據(jù)處理中基本的不可分割的邏輯單位,如整數(shù)、小數(shù)、字符串、日期、邏輯值等。在數(shù)據(jù)詞典中通常要求定義基本數(shù)據(jù)項(xiàng)的邏輯或者物理格式。結(jié)構(gòu)型數(shù)據(jù)項(xiàng)由若干數(shù)據(jù)項(xiàng)組成。 (3)文件存儲(chǔ)條目:說(shuō)明存儲(chǔ)文件的名稱、編號(hào)、文件組織方式、記錄數(shù)及存儲(chǔ)介質(zhì)等。 (4)加工說(shuō)明條目:說(shuō)明加工的名稱、編號(hào)、輸入輸出數(shù)據(jù)流、加工邏輯概括描述(描述方法見(jiàn)3.3.5加工邏輯說(shuō)明)。 為對(duì)上述條目進(jìn)行準(zhǔn)確、清晰、無(wú)二義性地描述,應(yīng)對(duì)描述的格式進(jìn)行規(guī)范。表3-1給出在數(shù)據(jù)字典的定義式中常用的符號(hào)及含義。 3.3.4.3數(shù)據(jù)字典的構(gòu)造及使用 對(duì)數(shù)據(jù)字典中的條目進(jìn)行定義時(shí),仍體現(xiàn)自頂向下,逐步細(xì)化的思想,直至給出基本數(shù)據(jù)項(xiàng)定義為止。如下例:教學(xué)管理系統(tǒng)中的課程管理子系統(tǒng)中的數(shù)據(jù)文件“學(xué)生選課登記表”的格式如表3-2所示,在數(shù)據(jù)字典中的定義格式為:第057頁(yè)學(xué)生選課登記表=1學(xué)號(hào)+姓名+課程+專業(yè)+班級(jí)+(備注)2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論