李俊煒
摘 要:文章通過分析軟件開發(fā)中的用戶需求和需求變更管理來探討軟件開發(fā)團(tuán)隊(duì)?wèi)?yīng)該如何應(yīng)對這些問題,軟件開發(fā)團(tuán)隊(duì)?wèi)?yīng)該采取哪些對策來解決用戶復(fù)雜多變的需求。
關(guān)鍵詞:軟件需求工程;需求分析;需求管理;需求變更管理
1 軟件需求分析
軟件需求是指用戶對新系統(tǒng)在功能、行為、性能、設(shè)計(jì)約束等方面的期望。包括業(yè)務(wù)需求、用戶需求、系統(tǒng)需求3個不同層次。
在需求獲取階段所得到的需求是雜亂的而不明確的,很多需求既重復(fù)又矛盾,而一個合格的需求描述應(yīng)該具備完整性、可測試性、確定性、無歧義、可跟蹤性、正確性、必要性等特性,而需求分析就是把這些雜亂的用戶要求和期望轉(zhuǎn)化有效而合格的需求描述的過程。
首先,系統(tǒng)分析師通過對所獲取的需求進(jìn)行分類,創(chuàng)建出不同的業(yè)務(wù)模型:通過由領(lǐng)域?qū)<遥ó?dāng)系統(tǒng)分析師具有足夠的領(lǐng)域經(jīng)驗(yàn)時,可泛化為領(lǐng)域?qū)<遥┩緩降玫綐I(yè)務(wù)類模型,制作出被領(lǐng)域廣泛認(rèn)可的需求模型;通過與客戶/用戶溝通得到業(yè)務(wù)用例模型,獲得當(dāng)前業(yè)務(wù)的獨(dú)有特征,再將兩個需求集合統(tǒng)一,構(gòu)成業(yè)務(wù)模型。
1.1 需求分析的方法
在軟件工程的研究中,人們提出了多種需求分析的方法,其中主要有結(jié)構(gòu)化分析法(Structure Analysis,SA)、面向?qū)ο蠓治龇ǎ∣bject-Oriented Analysis,OOA)和面向問題域的方法。另外,還有一些形式化方法,但由于實(shí)用性不強(qiáng),一般只用在學(xué)術(shù)研究中。
1.1.1 SA方法
SA方法主要關(guān)注于功能的分層和分解。這非常符合人們自上而下,逐步分解問題直到可解決的自然思考方式。但通過細(xì)分系統(tǒng)模塊的功能來描述整個系統(tǒng)做法,很容易混淆需求和設(shè)計(jì)的界限,使系統(tǒng)分析師感到迷惑,不知道系統(tǒng)需求應(yīng)該詳細(xì)到何種程度。并且從用戶的角度來看,他們并不想了解系統(tǒng)內(nèi)部結(jié)構(gòu)和設(shè)計(jì),他們所關(guān)心的是系統(tǒng)所能提供的服務(wù)。SA方法模型的核心是數(shù)據(jù)字典(Data Dictionary,DD),圍繞這個核心分3個層次的模型,分別是:數(shù)據(jù)模型、功能模型和行為模型(也稱狀態(tài)模型)。
1.1.2 OOA方法
OOA方法主要是運(yùn)用面向?qū)ο蟮姆椒?,對問題域進(jìn)行分析和理解。OOA模型獨(dú)立于具體實(shí)現(xiàn),即不考慮與系統(tǒng)具體實(shí)現(xiàn)有關(guān)的因素。僅思考“做什么”的問題。OOA使用統(tǒng)一建模語言進(jìn)行需求的分析,利用用例模型獲取需求,進(jìn)而由分析模型描述系統(tǒng)的基本邏輯結(jié)構(gòu)等。統(tǒng)一建模語言(Unified Modeling Language,UML)通過邏輯視圖、進(jìn)程視圖、實(shí)現(xiàn)視圖、部署視圖以及用例視圖來體現(xiàn)系統(tǒng)架構(gòu)。其中又包含了多種不同的圖來對所開發(fā)系統(tǒng)的某一特定方面進(jìn)行分析。
1.1.3 PODA方法
面向問題域的分析方法(Problem Oriented Domain Analysis,PODA)是一項(xiàng)很新的技術(shù),目前還處于研究階段,它主要關(guān)注問題域,并關(guān)注系統(tǒng)實(shí)現(xiàn)的待求行為,用一個文檔對解系統(tǒng)的待求行為進(jìn)行描述。
1.2 結(jié)構(gòu)化分析方法實(shí)例
下面以一個嵌入式接口處理軟件為例,介紹結(jié)構(gòu)化分析方法的實(shí)例。該軟件使用串口1與控制器進(jìn)行交互:要求具備串口升級功能,要求具備由控制器進(jìn)行啟動模式設(shè)置完成重啟、保存控制器發(fā)送的重要配置數(shù)據(jù)以及將常規(guī)指令通過串口2轉(zhuǎn)發(fā)至一個外部模塊。下面用狀態(tài)轉(zhuǎn)換圖(State Transition Diagram,STD)以及數(shù)據(jù)流圖(Data Flow Diagram,DFD)舉例說明結(jié)構(gòu)化分析方法。
根據(jù)以上需求可分析出當(dāng)程序正常啟動后進(jìn)入就緒狀態(tài),等待串口語句指令:若接收到升級指令則進(jìn)入升級狀態(tài),升級過程中等待升級數(shù)據(jù)包,升級完成程序結(jié)束等待重啟;若接收到啟動指令,則進(jìn)入重啟狀態(tài);若接收到配置及常規(guī)轉(zhuǎn)發(fā)指令則完成不同狀態(tài)處理后重新進(jìn)入就緒狀態(tài)。
數(shù)據(jù)流圖按照自頂向下的分解方法,首先繪制一張頂層圖,將整個待開發(fā)系統(tǒng)表示為一個加工。系統(tǒng)頂層如圖1所示,頂層用來描述系統(tǒng)有什么輸入輸出的數(shù)據(jù)流,與哪些外部實(shí)體直接相關(guān)。
完成頂層圖建模之后,在此基礎(chǔ)上進(jìn)一步分解,得到圖2的1層圖示例,1層圖將系統(tǒng)細(xì)化為3個加工。
繼續(xù)對1層圖中的加工1進(jìn)行分解,并將所分解的加工命名為1.1,1.2……,可以看到在細(xì)化的2層圖中引入了數(shù)據(jù)存儲,看到對于配置參數(shù)、啟動設(shè)置數(shù)據(jù)等需要進(jìn)行存儲操作。就這樣在不斷細(xì)化的過程中完成分析工作。
1.3 面向?qū)ο蠓治龇椒▽?shí)例
同樣根據(jù)上述需求的例子,利用面向?qū)ο蟮姆治龇椒ㄟM(jìn)行分析,通過分析不同參與者所關(guān)注的不同需求,得到以下的用例圖示例,如圖4所示。
在獲取用例后,還需要繼續(xù)深入分析,對用例間的活動關(guān)系進(jìn)行研究,同時對升級用例進(jìn)行了細(xì)化分析,便得到了以下的活動圖示例。在后續(xù)分析中可使用該方法進(jìn)行進(jìn)一步的活動細(xì)化。
2 軟件需求管理
需求是軟件項(xiàng)目成功的核心所在,它是后續(xù)軟件工作開展的基礎(chǔ)和基石。在軟件需求工程中,需求管理貫穿于整個過程。
首先,最重要的是系統(tǒng)分析師應(yīng)充分思考客戶的需求,制定計(jì)劃前要有充分的溝通,若這點(diǎn)沒有實(shí)現(xiàn),繼續(xù)展開下一步制作,只會使得雙方的理念偏離越來越大,最終做出來的軟件也很有可能不符合用戶的商業(yè)用途。
編寫需求文檔,確定需求的范圍和標(biāo)準(zhǔn),加以約束限制,然后對需求進(jìn)行細(xì)化,在具體實(shí)施過程中還需進(jìn)行不斷地調(diào)整。有時計(jì)劃趕不上變化,受許多非確定因素影響,若不能及時有效處理這些改變,將會拖延工期,面臨很大的風(fēng)險。
系統(tǒng)設(shè)計(jì)師對系統(tǒng)自身需求、客戶需求都要有深刻認(rèn)識,要充分了解各個階段的計(jì)劃,預(yù)測軟件開發(fā)的進(jìn)程,軟件生產(chǎn)做到有目的性、階段性、可行性,才能保證項(xiàng)目開發(fā)的順利進(jìn)行。
在需求管理中,應(yīng)該認(rèn)識到整個需求開發(fā)過程的各個階段并不是瀑布式發(fā)展的,而是應(yīng)該采用迭代方式。由這一思想去進(jìn)行需求管理及控制,保證項(xiàng)目的順利進(jìn)行是非常有必要的。需求管理涉及3個主要問題:將需求進(jìn)行標(biāo)識、分類以及組織,并為需求建立文檔;管理需求的變更,說明不可避免的需要變更是如何被提出、協(xié)商、確認(rèn)的,并且將整個變更過程記錄在案;對需求進(jìn)行跟蹤,保持需求和軟件產(chǎn)品之間的一致性,及相互關(guān)聯(lián)性。
2.1 需求變更的原因分析
需求變化問題是一直存在的,也是不可避免的,需求不可能一開始就做到百分之百完善,往往都需要在后續(xù)階段不斷地改進(jìn),對于項(xiàng)目團(tuán)隊(duì)而言,必須要正確對待變更,按照既定流程管理變更,盡量降低由于變更帶來的成本、進(jìn)度及質(zhì)量的負(fù)面影響。
需求變更的原因常見有:(1)最初對用戶需求缺乏認(rèn)識,產(chǎn)生了錯誤,需要改變;(2)用戶產(chǎn)業(yè)有了變化,軟件開發(fā)概念也要隨之改變;(3)需求了解不夠全面,需求要增加;(4)系統(tǒng)的升級換代使軟件的運(yùn)行環(huán)境發(fā)生改變,軟件的兼容性必須滿足,安全性也必須提高。
無論是哪種情況所導(dǎo)致的需求變更通常都意味著新需求的增加和原有需求的修改,對于較少發(fā)生的減少需求的情況,則比較容易處理。無論對何種變更,都必須采取規(guī)范的流程去管理,以保證變更后不會帶來新的問題。
2.2 需求變更的管理控制
為保證需求變更不對軟件質(zhì)量產(chǎn)生負(fù)面影響,必須規(guī)范軟件開發(fā)過程,開發(fā)出標(biāo)準(zhǔn)的管理流程。近些年,軟件大量生產(chǎn),若沒有一個規(guī)范統(tǒng)一的開發(fā)流程模式,軟件開發(fā)過程中由于需求的變更,增加了生產(chǎn)工期,生產(chǎn)成本提高,擴(kuò)大了風(fēng)險,很可能導(dǎo)致項(xiàng)目失敗。需求變更動機(jī)往往是為了滿足用戶需要,順應(yīng)市場的動態(tài)變化,但是為了能使整個工程能夠如期完成,必須制定一個合理有效的變更機(jī)制,確定一個變化范圍,考慮到軟件制作的合理性,不能一味地聽從用戶的體驗(yàn)需求,而不思考項(xiàng)目組能否在不違背完整性約束的條件下開發(fā)出軟件。對以往的需求變更進(jìn)行收集、整理、分類,將變更方案的檔案記錄下來,在下次遇到需求變更時能夠快速應(yīng)對,迅速制作出處理方案。
軟件開發(fā)做到嚴(yán)格按照流程實(shí)施,對需求變更流程路線做到統(tǒng)一規(guī)范。首先是對各種需求變更的詳細(xì)原因進(jìn)行收集,并寫成需求變更請求報告,提交評審小組進(jìn)行變更評審。在需求評審過程中,對需求變更項(xiàng)目進(jìn)行審查,將可執(zhí)行的需求挑選出來,不合理的需求進(jìn)行排除,還有一部分尚不確定的還需要和用戶進(jìn)行下一階段的溝通處理,再次通過審核,直到通過評審才能到下一步的流程。而當(dāng)變更周期完成后,還需要對變更情況進(jìn)行測試及跟蹤。在中途有新的變更時,需要通重新進(jìn)行這一流程處理。因此看似簡單的變更,實(shí)施過程中卻并不簡單。只有嚴(yán)格按照規(guī)定流程進(jìn)行管理,才能得到質(zhì)量保證與質(zhì)量的控制。
初步的需求變更完成后,為了加強(qiáng)需求變更后的準(zhǔn)確性,技術(shù)人員必須對軟件進(jìn)行測試,檢查該階段的性能,保證與其他方面的合理銜接,預(yù)測軟件的整體運(yùn)行情況,做到一致和統(tǒng)一,而質(zhì)量控制部門也必須有質(zhì)量保證人員執(zhí)行測試,保證得到高質(zhì)量的最終產(chǎn)品。
3 結(jié)語
一個軟件的生產(chǎn)周期中,各個環(huán)節(jié)都不可以忽視,需求更是軟件開發(fā)的基礎(chǔ)與成功的關(guān)鍵。軟件企業(yè)應(yīng)該在軟件開發(fā)過程中不斷地總結(jié)問題,提高需求分析及需求管理水平,過程中必須嚴(yán)格按照流程實(shí)施。只有在遇到問題積極面對,保證管理者與被管理者的良好關(guān)系,才能在確保生產(chǎn)效率的情況下提高軟件的質(zhì)量。
[參考文獻(xiàn)]
[1]雷斯?jié)煽?,馬克扎克.需求分析與系統(tǒng)設(shè)計(jì)[M].馬素霞,王素琴,謝萍,譯.北京:機(jī)械工業(yè)出版社,2009.
[2]張友生.系統(tǒng)分析師教程[M].北京:清華大學(xué)出版社,2010.
[3]李超,謝坤武.軟件需求分析方法研究進(jìn)展[J].湖北民族學(xué)院學(xué)報(自然科學(xué)版),2013(2):204-211.