摘 要: 隨著社會(huì)分工越來(lái)越細(xì),面向信息系統(tǒng)軟件研發(fā)的企業(yè)和部門(mén)越來(lái)越多地專(zhuān)注于特定領(lǐng)域的產(chǎn)品開(kāi)發(fā),并在企業(yè)和部門(mén)資產(chǎn)庫(kù)中積累了大量的基于單個(gè)項(xiàng)目的軟件需求。目前,這些需求像一個(gè)個(gè)孤立的“煙囪”,很難用于相同領(lǐng)域后續(xù)項(xiàng)目的開(kāi)發(fā),造成了企業(yè)財(cái)富和成果的大量浪費(fèi)。分析了領(lǐng)域需求與項(xiàng)目需求的關(guān)系,描述了領(lǐng)域需求庫(kù)的構(gòu)成與建立過(guò)程、領(lǐng)域需求庫(kù)管理方法,用于指導(dǎo)系統(tǒng)化軟件需求復(fù)用,為企業(yè)領(lǐng)域工程工作的開(kāi)展和研究奠定基礎(chǔ)。
關(guān)鍵詞: 領(lǐng)域需求; 領(lǐng)域需求庫(kù)
隨著信息技術(shù)的飛速發(fā)展,社會(huì)分工越來(lái)越細(xì),面向信息系統(tǒng)軟件研發(fā)的企業(yè)和部門(mén)越來(lái)越多地專(zhuān)注于特定領(lǐng)域的產(chǎn)品開(kāi)發(fā)。在產(chǎn)品開(kāi)發(fā)過(guò)程中,這些企業(yè)和部門(mén)積累了大量的基于單個(gè)項(xiàng)目的軟件需求,并已經(jīng)進(jìn)行了條目化管理。目前,這些項(xiàng)目需求通常分散在各個(gè)項(xiàng)目的需求庫(kù)和需求文檔中,像一個(gè)個(gè)孤立的“煙囪”,很難用于相同領(lǐng)域后續(xù)項(xiàng)目的開(kāi)發(fā)。這種現(xiàn)狀,一方面,導(dǎo)致了企業(yè)財(cái)富和成果的大量浪費(fèi);另一方面,新的項(xiàng)目由于無(wú)法充分復(fù)用已有的需求進(jìn)行需求分析,最終,往往無(wú)法形成真正滿(mǎn)足用戶(hù)需求的信息系統(tǒng)產(chǎn)品。
解決上述問(wèn)題的一個(gè)有效途徑就是通過(guò)對(duì)項(xiàng)目需求逐一進(jìn)行分析、整合,建立領(lǐng)域需求庫(kù),從而達(dá)到可以對(duì)需求進(jìn)行系統(tǒng)化復(fù)用(Systematic Reuse)的目的。這必將進(jìn)一步提高產(chǎn)品質(zhì)量和生產(chǎn)效率,緩解日益嚴(yán)重的軟件危機(jī),同時(shí)生產(chǎn)和提供能夠滿(mǎn)足特定領(lǐng)域用戶(hù)需求的信息系統(tǒng)產(chǎn)品。
基于領(lǐng)域需求庫(kù),新的項(xiàng)目的需求分析將不再是從零開(kāi)始,而是建立在對(duì)企業(yè)資產(chǎn)大量復(fù)用的基礎(chǔ)上。
本文分析了領(lǐng)域需求與項(xiàng)目需求的關(guān)系,描述了領(lǐng)域需求庫(kù)的構(gòu)成與建立過(guò)程、領(lǐng)域需求庫(kù)管理方法,用于指導(dǎo)信息系統(tǒng)軟件的需求分析與需求復(fù)用,為企業(yè)領(lǐng)域工程工作的開(kāi)展和研究奠定基礎(chǔ)。
1 領(lǐng)域需求概述
1.1幾個(gè)定義
領(lǐng)域:在軟件工程環(huán)境中,領(lǐng)域是指一組具有相似或相近軟件需求的應(yīng)用系統(tǒng)所覆蓋的功能、問(wèn)題、問(wèn)題解決方案或知識(shí)區(qū)域。領(lǐng)域可分為垂直領(lǐng)域和水平領(lǐng)域,其中,垂直領(lǐng)域是指具有相似業(yè)務(wù)需求的一組相似應(yīng)用系統(tǒng)所覆蓋的業(yè)務(wù)區(qū)域,如財(cái)務(wù)管理系統(tǒng)、ERP系統(tǒng)等;水平領(lǐng)域是指根據(jù)應(yīng)用系統(tǒng)內(nèi)部模塊的功能性分類(lèi)而得到的相似問(wèn)題空間, 如數(shù)據(jù)庫(kù)系統(tǒng)、GUI動(dòng)態(tài)庫(kù)等[1]。本文中的領(lǐng)域特指垂直領(lǐng)域。
領(lǐng)域需求:對(duì)領(lǐng)域中若干典型項(xiàng)目的需求進(jìn)行分析,考慮預(yù)期的需求變化、技術(shù)演化、限制條件等因素,確定恰當(dāng)?shù)念I(lǐng)域范圍,識(shí)別領(lǐng)域的共性特征和變化特征,獲取一組具有足夠可復(fù)用性的需求,稱(chēng)為領(lǐng)域需求。
領(lǐng)域需求庫(kù):將獲取的領(lǐng)域需求條目化和文檔化,形成領(lǐng)域需求庫(kù),提供系統(tǒng)化需求復(fù)用。
1.2 領(lǐng)域需求特點(diǎn)
領(lǐng)域需求是指領(lǐng)域內(nèi)所有項(xiàng)目的共有需求,而不是某個(gè)系統(tǒng)或項(xiàng)目的個(gè)別需求,具有穩(wěn)定、演化、廣泛和可復(fù)用等特點(diǎn)[2]:(1)穩(wěn)定。領(lǐng)域的共性需求是在一定時(shí)期內(nèi)穩(wěn)定不變的。(2)演化。隨著領(lǐng)域的不斷發(fā)展,會(huì)產(chǎn)生許多新的需求,這些需求經(jīng)過(guò)在多個(gè)項(xiàng)目中不斷地付諸實(shí)踐,有可能演化為共性需求。(3)廣泛。領(lǐng)域需求存在于類(lèi)型廣泛的多個(gè)項(xiàng)目或系統(tǒng)中。(4)可復(fù)用。領(lǐng)域需求是領(lǐng)域內(nèi)所有項(xiàng)目共性需求的高度概括,具有較高的可復(fù)用性。
1.3 領(lǐng)域需求與項(xiàng)目需求
領(lǐng)域需求與項(xiàng)目需求的關(guān)系可以概括為:領(lǐng)域需求來(lái)源于領(lǐng)域內(nèi)所有項(xiàng)目的需求,是在項(xiàng)目需求之上高度抽象的共性的需求;領(lǐng)域需求是構(gòu)建項(xiàng)目需求的可復(fù)用構(gòu)件,并隨著項(xiàng)目需求的發(fā)展而不斷演化;領(lǐng)域需求可為領(lǐng)域中的新項(xiàng)目提供復(fù)用,同時(shí),領(lǐng)域中的項(xiàng)目需求也可以演化為領(lǐng)域需求;領(lǐng)域需求涵蓋了所有項(xiàng)目,某一個(gè)具體的項(xiàng)目需求無(wú)法代表領(lǐng)域需求。領(lǐng)域需求與項(xiàng)目需求的關(guān)系如圖1所示。

2 領(lǐng)域需求庫(kù)描述模式
2.1 領(lǐng)域需求庫(kù)輸入
為了建立可復(fù)用領(lǐng)域需求,使用領(lǐng)域需求庫(kù)作為需求容器。通過(guò)對(duì)哪些“原料”進(jìn)行加工才能形成裝入這個(gè)容器的產(chǎn)品呢?既然領(lǐng)域需求來(lái)源于領(lǐng)域內(nèi)所有項(xiàng)目的需求,那么領(lǐng)域需求庫(kù)的主要輸入也就是各個(gè)項(xiàng)目的需求分析活動(dòng)產(chǎn)生的需求資源,主要包括項(xiàng)目需求文檔、項(xiàng)目需求庫(kù)表等。
2.2 領(lǐng)域需求庫(kù)文檔結(jié)構(gòu)
本節(jié)對(duì)領(lǐng)域需求庫(kù)這個(gè)容器中的產(chǎn)品進(jìn)行定義,這些產(chǎn)品幫助定義可復(fù)用軟件需求。能夠提供系統(tǒng)化復(fù)用的領(lǐng)域需求庫(kù)需要囊括用戶(hù)需求和產(chǎn)品需求,這些需求通過(guò)一系列文檔來(lái)描述,而且文檔之間具有縱向的層次關(guān)系和橫向的關(guān)聯(lián)關(guān)系。對(duì)每類(lèi)需求文檔需要橫向分析文檔的構(gòu)成要素及要素間的相互關(guān)系,明確領(lǐng)域需求庫(kù)文檔應(yīng)包含哪些信息和如何組織這些信息。參考項(xiàng)目需求文檔結(jié)構(gòu),結(jié)合領(lǐng)域需求庫(kù)實(shí)際需要,定義如下的領(lǐng)域需求庫(kù)文檔結(jié)構(gòu),如圖2所示。

如圖2所示,領(lǐng)域需求庫(kù)文檔按縱向?qū)哟畏譃橛脩?hù)需求文檔和產(chǎn)品需求文檔兩類(lèi),這兩類(lèi)文檔互相關(guān)聯(lián)以保持其一致性。用戶(hù)需求文檔由一張用戶(hù)需求庫(kù)表和若干個(gè)用戶(hù)故事組成,前者是用戶(hù)需求的條目化列表,類(lèi)似需求概覽,用戶(hù)可以從中得到一些需求的基本信息,而每一條需求的詳細(xì)信息在對(duì)應(yīng)的用戶(hù)故事中加以描述;產(chǎn)品需求文檔由一張產(chǎn)品需求庫(kù)表和若干個(gè)用例闡述組成,同樣地,前者包含一些產(chǎn)品需求的基本信息,而每一條需求的詳細(xì)信息在對(duì)應(yīng)的用例闡述中加以描述。
2.3 領(lǐng)域需求庫(kù)建立過(guò)程
首先建立用戶(hù)需求庫(kù)表,對(duì)相同領(lǐng)域的多個(gè)項(xiàng)目的條目化需求庫(kù)表進(jìn)行分析、整合、提煉和抽象,對(duì)符合領(lǐng)域需求特點(diǎn)的需求按信息需求、活動(dòng)需求、未來(lái)需求進(jìn)行分類(lèi),建立起領(lǐng)域用戶(hù)需求庫(kù)表,如表1所示。

從項(xiàng)目的需求庫(kù)表中已經(jīng)能夠得到除需求闡述之外的多數(shù)信息,但沒(méi)有需求闡述的領(lǐng)域需求幾乎是沒(méi)有多少?gòu)?fù)用價(jià)值的。需求闡述主要從項(xiàng)目的需求文檔中收集素材。為了克服和避免需求描述注意力過(guò)于集中在軟件設(shè)計(jì)和實(shí)現(xiàn)的問(wèn)題上,而忽略了用戶(hù)真正關(guān)心的主題(即軟件要做什么,實(shí)現(xiàn)哪些功能的問(wèn)題),引入分布式敏捷開(kāi)發(fā)中所采用的“用戶(hù)故事”方法進(jìn)行用戶(hù)需求闡述。
關(guān)于用戶(hù)故事的編寫(xiě),沒(méi)有一定的模板可以遵循,每個(gè)用戶(hù)故事代表一個(gè)獨(dú)立的功能。一個(gè)好的用戶(hù)故事應(yīng)該具備6種特性[3],這6種特性的單詞首字母縮寫(xiě)為INVEST,含義分別如下:I—Independent,獨(dú)立:可以獨(dú)立實(shí)現(xiàn)。N—Negotiable,可協(xié)商:有利于與用戶(hù)協(xié)商。V—Valuable,有價(jià)值:必須對(duì)最終用戶(hù)有可感知到的價(jià)值,即必須實(shí)現(xiàn)的是端到端的業(yè)務(wù)。E—Estimable,大小可估計(jì):能夠大致估計(jì)出一個(gè)范圍,足以進(jìn)行實(shí)現(xiàn)的計(jì)劃安排。S-Sized Appropriate,大小合適:保證大小可評(píng)估。T—Testable,可驗(yàn)證:可測(cè)試性永遠(yuǎn)是好的需求所具備的特性之一。
作為參考,可以學(xué)習(xí)Connextra公司,通過(guò)使用一個(gè)簡(jiǎn)略模板將角色融入用戶(hù)故事,每個(gè)故事使用下面的格式編寫(xiě):
我作為(角色),想要(功能),以此(商業(yè)價(jià)值)。
例:作為一個(gè)管理員,可以批量創(chuàng)建用戶(hù),以便快捷地導(dǎo)入已經(jīng)有的用戶(hù)數(shù)據(jù)。
類(lèi)似地,對(duì)多個(gè)項(xiàng)目的需求庫(kù)表進(jìn)行分析、整合、提煉和抽象,對(duì)符合領(lǐng)域需求特點(diǎn)的需求,按功能需求、性能需求、接口需求對(duì)需求進(jìn)行分類(lèi),并與領(lǐng)域用戶(hù)需求建立關(guān)聯(lián),建立起領(lǐng)域產(chǎn)品需求庫(kù)表,如表2所示。

產(chǎn)品需求除了具有與用戶(hù)溝通的作用外,還是分析人員與設(shè)計(jì)和編碼人員之間的橋梁,為此,采用面向?qū)ο笙到y(tǒng)分析中的用例闡述來(lái)描述產(chǎn)品需求。用例闡述模板與示例[4]如圖3所示。

3 領(lǐng)域需求庫(kù)管理
類(lèi)似于項(xiàng)目需求,領(lǐng)域需求也在不斷演化與更新中,為保持領(lǐng)域需求庫(kù)的新鮮可用,需要對(duì)領(lǐng)域需求庫(kù)進(jìn)行管理。對(duì)領(lǐng)域需求庫(kù)進(jìn)行管理的目的就是管理領(lǐng)域需求,以保持領(lǐng)域用戶(hù)需求與產(chǎn)品需求、領(lǐng)域需求與項(xiàng)目需求的一致性。需求管理主要工作包括需求變更控制、需求雙向追蹤。
既然領(lǐng)域需求是依托項(xiàng)目需求建立的,一旦項(xiàng)目需求發(fā)生了變化,需要及時(shí)更新領(lǐng)域需求庫(kù),以反映需求的變遷和演化。需要注意的是,項(xiàng)目需求的變更并不一定必然引起領(lǐng)域需求變更,需要對(duì)項(xiàng)目需求變更進(jìn)行仔細(xì)分析,判斷是否是領(lǐng)域共性需求,由此決定是否變更領(lǐng)域需求。
為保持領(lǐng)域用戶(hù)需求和產(chǎn)品需求的一致,需在領(lǐng)域需求庫(kù)表中對(duì)這兩種需求進(jìn)行雙向追蹤,以保證用戶(hù)需求與產(chǎn)品需求的良好對(duì)應(yīng)和關(guān)聯(lián)。
遵循本文的方法和步驟,已經(jīng)建立了領(lǐng)域需求庫(kù),并對(duì)其進(jìn)行了恰如其分的管理,實(shí)現(xiàn)了系統(tǒng)化的需求復(fù)用。以此為基礎(chǔ),現(xiàn)在已可以步入領(lǐng)域工程殿堂了,從可復(fù)用軟件需求起步,進(jìn)一步實(shí)現(xiàn)可復(fù)用軟件體系架構(gòu),可復(fù)用軟件設(shè)計(jì),直到可復(fù)用軟件代碼。為了復(fù)用目的而設(shè)計(jì)的軟件將為解決軟件危機(jī)提供一條有效途徑,幫助企業(yè)和部門(mén)提高生產(chǎn)效率,節(jié)約成本,同時(shí)提供高質(zhì)量的滿(mǎn)足用戶(hù)需求的信息系統(tǒng)產(chǎn)品。
參考文獻(xiàn)
[1] 林正奎,楊德禮.領(lǐng)域分析方法研究綜述[J].計(jì)算機(jī)工程與設(shè)計(jì),2006,27(4):593-596.
[2] 郭瑩,楊美紅,王筠,等. 面向服務(wù)的領(lǐng)域需求分析方法及模型研究[J]. 計(jì)算機(jī)應(yīng)用,2009,29(12):131-134.
[3] COHN M. 用戶(hù)故事與敏捷方法[M].石永超,張博超,譯.北京:清華大學(xué)出版社,2013.
[4] 青潤(rùn). 軟件工程之全程建模實(shí)現(xiàn)[M]. 北京:電子工業(yè)出版社,2004.
