摘 要: 隨著社會(huì)分工越來越細(xì),面向信息系統(tǒng)軟件研發(fā)的企業(yè)和部門越來越多地專注于特定領(lǐng)域的產(chǎn)品開發(fā),并在企業(yè)和部門資產(chǎn)庫中積累了大量的基于單個(gè)項(xiàng)目的軟件需求。目前,這些需求像一個(gè)個(gè)孤立的“煙囪”,很難用于相同領(lǐng)域后續(xù)項(xiàng)目的開發(fā),造成了企業(yè)財(cái)富和成果的大量浪費(fèi)。分析了領(lǐng)域需求與項(xiàng)目需求的關(guān)系,描述了領(lǐng)域需求庫的構(gòu)成與建立過程、領(lǐng)域需求庫管理方法,用于指導(dǎo)系統(tǒng)化軟件需求復(fù)用,為企業(yè)領(lǐng)域工程工作的開展和研究奠定基礎(chǔ)。
關(guān)鍵詞: 領(lǐng)域需求; 領(lǐng)域需求庫
隨著信息技術(shù)的飛速發(fā)展,社會(huì)分工越來越細(xì),面向信息系統(tǒng)軟件研發(fā)的企業(yè)和部門越來越多地專注于特定領(lǐng)域的產(chǎn)品開發(fā)。在產(chǎn)品開發(fā)過程中,這些企業(yè)和部門積累了大量的基于單個(gè)項(xiàng)目的軟件需求,并已經(jīng)進(jìn)行了條目化管理。目前,這些項(xiàng)目需求通常分散在各個(gè)項(xiàng)目的需求庫和需求文檔中,像一個(gè)個(gè)孤立的“煙囪”,很難用于相同領(lǐng)域后續(xù)項(xiàng)目的開發(fā)。這種現(xiàn)狀,一方面,導(dǎo)致了企業(yè)財(cái)富和成果的大量浪費(fèi);另一方面,新的項(xiàng)目由于無法充分復(fù)用已有的需求進(jìn)行需求分析,最終,往往無法形成真正滿足用戶需求的信息系統(tǒng)產(chǎn)品。
解決上述問題的一個(gè)有效途徑就是通過對(duì)項(xiàng)目需求逐一進(jìn)行分析、整合,建立領(lǐng)域需求庫,從而達(dá)到可以對(duì)需求進(jìn)行系統(tǒng)化復(fù)用(Systematic Reuse)的目的。這必將進(jìn)一步提高產(chǎn)品質(zhì)量和生產(chǎn)效率,緩解日益嚴(yán)重的軟件危機(jī),同時(shí)生產(chǎn)和提供能夠滿足特定領(lǐng)域用戶需求的信息系統(tǒng)產(chǎn)品。
基于領(lǐng)域需求庫,新的項(xiàng)目的需求分析將不再是從零開始,而是建立在對(duì)企業(yè)資產(chǎn)大量復(fù)用的基礎(chǔ)上。
本文分析了領(lǐng)域需求與項(xiàng)目需求的關(guān)系,描述了領(lǐng)域需求庫的構(gòu)成與建立過程、領(lǐng)域需求庫管理方法,用于指導(dǎo)信息系統(tǒng)軟件的需求分析與需求復(fù)用,為企業(yè)領(lǐng)域工程工作的開展和研究奠定基礎(chǔ)。
1 領(lǐng)域需求概述
1.1幾個(gè)定義
領(lǐng)域:在軟件工程環(huán)境中,領(lǐng)域是指一組具有相似或相近軟件需求的應(yīng)用系統(tǒng)所覆蓋的功能、問題、問題解決方案或知識(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)部模塊的功能性分類而得到的相似問題空間, 如數(shù)據(jù)庫系統(tǒng)、GUI動(dòng)態(tài)庫等[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ù)用性的需求,稱為領(lǐng)域需求。
領(lǐng)域需求庫:將獲取的領(lǐng)域需求條目化和文檔化,形成領(lǐng)域需求庫,提供系統(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)過在多個(gè)項(xiàng)目中不斷地付諸實(shí)踐,有可能演化為共性需求。(3)廣泛。領(lǐng)域需求存在于類型廣泛的多個(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ǐ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)目需求無法代表領(lǐng)域需求。領(lǐng)域需求與項(xiàng)目需求的關(guān)系如圖1所示。
2 領(lǐng)域需求庫描述模式
2.1 領(lǐng)域需求庫輸入
為了建立可復(fù)用領(lǐng)域需求,使用領(lǐng)域需求庫作為需求容器。通過對(duì)哪些“原料”進(jìn)行加工才能形成裝入這個(gè)容器的產(chǎn)品呢?既然領(lǐng)域需求來源于領(lǐng)域內(nèi)所有項(xiàng)目的需求,那么領(lǐng)域需求庫的主要輸入也就是各個(gè)項(xiàng)目的需求分析活動(dòng)產(chǎn)生的需求資源,主要包括項(xiàng)目需求文檔、項(xiàng)目需求庫表等。
2.2 領(lǐng)域需求庫文檔結(jié)構(gòu)
本節(jié)對(duì)領(lǐng)域需求庫這個(gè)容器中的產(chǎn)品進(jìn)行定義,這些產(chǎn)品幫助定義可復(fù)用軟件需求。能夠提供系統(tǒng)化復(fù)用的領(lǐng)域需求庫需要囊括用戶需求和產(chǎn)品需求,這些需求通過一系列文檔來描述,而且文檔之間具有縱向的層次關(guān)系和橫向的關(guān)聯(lián)關(guān)系。對(duì)每類需求文檔需要橫向分析文檔的構(gòu)成要素及要素間的相互關(guān)系,明確領(lǐng)域需求庫文檔應(yīng)包含哪些信息和如何組織這些信息。參考項(xiàng)目需求文檔結(jié)構(gòu),結(jié)合領(lǐng)域需求庫實(shí)際需要,定義如下的領(lǐng)域需求庫文檔結(jié)構(gòu),如圖2所示。
如圖2所示,領(lǐng)域需求庫文檔按縱向?qū)哟畏譃橛脩粜枨笪臋n和產(chǎn)品需求文檔兩類,這兩類文檔互相關(guān)聯(lián)以保持其一致性。用戶需求文檔由一張用戶需求庫表和若干個(gè)用戶故事組成,前者是用戶需求的條目化列表,類似需求概覽,用戶可以從中得到一些需求的基本信息,而每一條需求的詳細(xì)信息在對(duì)應(yīng)的用戶故事中加以描述;產(chǎn)品需求文檔由一張產(chǎn)品需求庫表和若干個(gè)用例闡述組成,同樣地,前者包含一些產(chǎn)品需求的基本信息,而每一條需求的詳細(xì)信息在對(duì)應(yīng)的用例闡述中加以描述。
2.3 領(lǐng)域需求庫建立過程
首先建立用戶需求庫表,對(duì)相同領(lǐng)域的多個(gè)項(xiàng)目的條目化需求庫表進(jìn)行分析、整合、提煉和抽象,對(duì)符合領(lǐng)域需求特點(diǎn)的需求按信息需求、活動(dòng)需求、未來需求進(jìn)行分類,建立起領(lǐng)域用戶需求庫表,如表1所示。
從項(xiàng)目的需求庫表中已經(jīng)能夠得到除需求闡述之外的多數(shù)信息,但沒有需求闡述的領(lǐng)域需求幾乎是沒有多少復(fù)用價(jià)值的。需求闡述主要從項(xiàng)目的需求文檔中收集素材。為了克服和避免需求描述注意力過于集中在軟件設(shè)計(jì)和實(shí)現(xiàn)的問題上,而忽略了用戶真正關(guān)心的主題(即軟件要做什么,實(shí)現(xiàn)哪些功能的問題),引入分布式敏捷開發(fā)中所采用的“用戶故事”方法進(jìn)行用戶需求闡述。
關(guān)于用戶故事的編寫,沒有一定的模板可以遵循,每個(gè)用戶故事代表一個(gè)獨(dú)立的功能。一個(gè)好的用戶故事應(yīng)該具備6種特性[3],這6種特性的單詞首字母縮寫為INVEST,含義分別如下:I—Independent,獨(dú)立:可以獨(dú)立實(shí)現(xiàn)。N—Negotiable,可協(xié)商:有利于與用戶協(xié)商。V—Valuable,有價(jià)值:必須對(duì)最終用戶有可感知到的價(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)證:可測試性永遠(yuǎn)是好的需求所具備的特性之一。
作為參考,可以學(xué)習(xí)Connextra公司,通過使用一個(gè)簡略模板將角色融入用戶故事,每個(gè)故事使用下面的格式編寫:
我作為(角色),想要(功能),以此(商業(yè)價(jià)值)。
例:作為一個(gè)管理員,可以批量創(chuàng)建用戶,以便快捷地導(dǎo)入已經(jīng)有的用戶數(shù)據(jù)。
類似地,對(duì)多個(gè)項(xiàng)目的需求庫表進(jìn)行分析、整合、提煉和抽象,對(duì)符合領(lǐng)域需求特點(diǎn)的需求,按功能需求、性能需求、接口需求對(duì)需求進(jìn)行分類,并與領(lǐng)域用戶需求建立關(guān)聯(lián),建立起領(lǐng)域產(chǎn)品需求庫表,如表2所示。
產(chǎn)品需求除了具有與用戶溝通的作用外,還是分析人員與設(shè)計(jì)和編碼人員之間的橋梁,為此,采用面向?qū)ο笙到y(tǒng)分析中的用例闡述來描述產(chǎn)品需求。用例闡述模板與示例[4]如圖3所示。
3 領(lǐng)域需求庫管理
類似于項(xiàng)目需求,領(lǐng)域需求也在不斷演化與更新中,為保持領(lǐng)域需求庫的新鮮可用,需要對(duì)領(lǐng)域需求庫進(jìn)行管理。對(duì)領(lǐng)域需求庫進(jìn)行管理的目的就是管理領(lǐng)域需求,以保持領(lǐng)域用戶需求與產(chǎn)品需求、領(lǐng)域需求與項(xiàng)目需求的一致性。需求管理主要工作包括需求變更控制、需求雙向追蹤。
既然領(lǐng)域需求是依托項(xiàng)目需求建立的,一旦項(xiàng)目需求發(fā)生了變化,需要及時(shí)更新領(lǐng)域需求庫,以反映需求的變遷和演化。需要注意的是,項(xiàng)目需求的變更并不一定必然引起領(lǐng)域需求變更,需要對(duì)項(xiàng)目需求變更進(jìn)行仔細(xì)分析,判斷是否是領(lǐng)域共性需求,由此決定是否變更領(lǐng)域需求。
為保持領(lǐng)域用戶需求和產(chǎn)品需求的一致,需在領(lǐng)域需求庫表中對(duì)這兩種需求進(jìn)行雙向追蹤,以保證用戶需求與產(chǎn)品需求的良好對(duì)應(yīng)和關(guān)聯(lián)。
遵循本文的方法和步驟,已經(jīng)建立了領(lǐng)域需求庫,并對(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è)和部門提高生產(chǎn)效率,節(jié)約成本,同時(shí)提供高質(zhì)量的滿足用戶需求的信息系統(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. 用戶故事與敏捷方法[M].石永超,張博超,譯.北京:清華大學(xué)出版社,2013.
[4] 青潤. 軟件工程之全程建模實(shí)現(xiàn)[M]. 北京:電子工業(yè)出版社,2004.