龍世榮 岑磊 余朝文 喬真
摘要:該文在研究導(dǎo)致軟件危機(jī)的原因的基礎(chǔ)上,提出了一些實(shí)現(xiàn)有效需求分析的簡(jiǎn)單易行而又行之有效的需求管理方法。關(guān)鍵詞:需求分析;需求管理;需求工程
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)01-0189-03
軟件工程需求分析是指定義和描述軟件系統(tǒng)的范圍、目標(biāo)、定義及功能時(shí)所要做的所有的工作。簡(jiǎn)言之,需求分析就是分析軟件用戶的需求是什么,即全面地理解用戶的各項(xiàng)要求,并準(zhǔn)確地表達(dá)所接受的用戶需求。需求分析是軟件工程中最重要也是最困難的一項(xiàng)工作。
1準(zhǔn)確、有效需求分析的必要性
由于軟件系統(tǒng)復(fù)雜性日益提高,軟件規(guī)模日益龐大,上世紀(jì)六十年代末后爆發(fā)了深刻的軟件危機(jī),表現(xiàn)為:進(jìn)度拖延,費(fèi)用超支,軟件不符合用戶要求、可靠性差且難以維護(hù)。其最主要的原因就是缺乏準(zhǔn)確、有效的需求分析。時(shí)至今日,軟件危機(jī)問(wèn)題一直沒有得到很好解決。
有效需求分析的重要性和必要性體現(xiàn)在:第一,軟件需求文檔是軟件工程項(xiàng)目驗(yàn)收的依據(jù)。不準(zhǔn)確、不完備的需求必然會(huì)導(dǎo)致生產(chǎn)出來(lái)的軟件無(wú)法滿足客戶要求,并造成項(xiàng)目進(jìn)度推遲、項(xiàng)目費(fèi)用超支。第二,在軟件生命周期中,一個(gè)錯(cuò)誤發(fā)現(xiàn)得越晚,修復(fù)錯(cuò)誤的費(fèi)用越高,甚至是指數(shù)式增長(zhǎng)。國(guó)外
另外,軟件工程項(xiàng)目開發(fā)過(guò)程中,很多軟件錯(cuò)誤在需求過(guò)程就已產(chǎn)生并潛伏,而這些錯(cuò)誤在需求過(guò)程中是可以被檢查出來(lái)的[1]。由此可見,準(zhǔn)確、有效的需求分析,是軟件項(xiàng)目得以正確、及時(shí)完成的前提,是人們擺脫軟件危機(jī)的最有效、最重要的方法。
2有效需求分析的主要障礙
在需求分析的實(shí)踐中,由于以下原因,使得需求分析往往無(wú)法有效地進(jìn)行:
①系統(tǒng)開發(fā)需要用戶、領(lǐng)域?qū)<?、開發(fā)小組共同參與并密切溝通;
②用戶單位組織機(jī)構(gòu)與業(yè)務(wù)關(guān)系及業(yè)務(wù)流程復(fù)雜,客戶很難清晰完備地表述需求;
③用戶與開發(fā)人員很難進(jìn)行有效交流;
④用戶的需求是動(dòng)態(tài)變化的;
⑤缺乏有效的、系統(tǒng)的開發(fā)、維護(hù)大型軟件項(xiàng)目的技術(shù)手段和管理方法;
⑥軟件開發(fā)的技術(shù)人員和管理人員缺乏軟件工程化的素質(zhì)和要求,對(duì)工程化的開銷認(rèn)識(shí)不足。
正是基于這樣的背景,本文在認(rèn)真分析研究導(dǎo)致人們無(wú)法進(jìn)行有效需求分析的原因的基礎(chǔ)上,提出以下進(jìn)行有效需求分析的簡(jiǎn)單易行而又行之有效的方法。
3進(jìn)行有效需求分析的方法
1)為項(xiàng)目前景制定共同目標(biāo),并為共同目標(biāo)承諾
為了達(dá)到項(xiàng)目的成功,需要在客戶和開發(fā)公司之間達(dá)成共同目標(biāo),在共同完成項(xiàng)目的各個(gè)單位、小組、個(gè)人間建立一種協(xié)調(diào)合作解決問(wèn)題的氛圍和機(jī)制。
在項(xiàng)目確定后,應(yīng)盡快召開一個(gè)由客戶和開發(fā)公司各方人員(包括客戶和開發(fā)公司有決策權(quán)的管理人員)參加的項(xiàng)目合作工作會(huì)。項(xiàng)目合作工作會(huì)要討論和解釋項(xiàng)目目標(biāo)、各方共同利益以及實(shí)現(xiàn)共同利益的障礙,并在此基礎(chǔ)上,制定項(xiàng)目團(tuán)隊(duì)的共同目標(biāo),確定解決問(wèn)題與爭(zhēng)端的指導(dǎo)原則及具體程序。
2)建立聯(lián)合需求領(lǐng)導(dǎo)小組,并維護(hù)各小組間的溝通
在項(xiàng)目合作工作會(huì)就項(xiàng)目前景達(dá)成共同目標(biāo),并為共同目標(biāo)承諾后,需要一種機(jī)制來(lái)維護(hù)項(xiàng)目參加人員之間的有效溝通與協(xié)作,促進(jìn)問(wèn)題的及時(shí)解決,并在需求方面作出決策。聯(lián)合需求領(lǐng)導(dǎo)小組就是一種有效機(jī)制。
由于聯(lián)合領(lǐng)導(dǎo)小組代表項(xiàng)目組跟蹤需求過(guò)程,負(fù)責(zé)完成需求定義(包括需求的變更),并在需求方面作出決策,因此,聯(lián)合需求領(lǐng)導(dǎo)小組成員必須包含客戶單位和開發(fā)公司。同時(shí),為利于小組決策,小組成員應(yīng)盡量精煉,成員必須精挑細(xì)選,成員必須具有豐富的客戶領(lǐng)域知識(shí)或需求工程知識(shí)或兩者兼?zhèn)?、出色的溝通與協(xié)作能力和良好的合作精神。
聯(lián)合需求領(lǐng)導(dǎo)小組要定期聚會(huì),維護(hù)項(xiàng)目各方之間的溝通與協(xié)作,指導(dǎo)與協(xié)調(diào)各小組的工作,及時(shí)解決需求工作中出現(xiàn)的問(wèn)題,控制需求變更,最終定義真實(shí)的客戶需求。
過(guò)多的需求變更是導(dǎo)致項(xiàng)目超支和延遲交付的主要原因。因此,聯(lián)合需求領(lǐng)導(dǎo)小組工作的重點(diǎn)和難點(diǎn)之一是跟蹤和控制需求變更。為此,需要使用自動(dòng)化需求工具建立需求跟蹤矩陣,實(shí)現(xiàn)對(duì)需求變更的跟蹤和控制。
3)使用熟悉的需求過(guò)程
使用需求過(guò)程是指在項(xiàng)目開發(fā)過(guò)程中定義完成工作的步驟、過(guò)程并形成文檔,當(dāng)需要在另一個(gè)機(jī)構(gòu)或項(xiàng)目上完成相同或類似工作時(shí),就可以復(fù)用相同的過(guò)程。
使用需求過(guò)程方法,需要定義需求過(guò)程流程圖并形成文檔。需求過(guò)程文檔用于描述完成項(xiàng)目開發(fā)工作所涉及的步驟,活動(dòng)流程,每個(gè)活動(dòng)的工作內(nèi)容、輸入條件、責(zé)任人、活動(dòng)成果等內(nèi)容。過(guò)程流程圖要包括一個(gè)宏觀流程圖和多個(gè)微觀流程圖。宏觀流程圖從宏觀的角度描述整個(gè)開發(fā)工作的主要目標(biāo)、主要工作任務(wù)、主要組成步驟及流程等。一個(gè)微觀流程圖是對(duì)宏觀流程圖中的一個(gè)步驟的細(xì)化,用于描述該工作步驟的任務(wù)、輸入信息、責(zé)任人、產(chǎn)生的活動(dòng)成果、子活動(dòng)流程等信息。如果微觀流程圖中存在比較復(fù)雜的子活動(dòng),還可以用另一個(gè)微觀流程圖來(lái)說(shuō)明該子活動(dòng)。
當(dāng)需要在另一個(gè)機(jī)構(gòu)或項(xiàng)目上完成相同或類似工作時(shí),通過(guò)復(fù)用需求過(guò)程可以大大加快開發(fā)進(jìn)度并節(jié)省資金。這是因?yàn)閺?fù)用過(guò)程有以下優(yōu)點(diǎn):
①使得每個(gè)項(xiàng)目參加人員都清楚整個(gè)項(xiàng)目的目標(biāo)、任務(wù)以及自己的工作任務(wù)、流程、需要完成的成果等信息。簡(jiǎn)單的說(shuō),可以使每個(gè)參加人員更好地理解要干什么以及怎樣干。
②通過(guò)不斷改進(jìn)過(guò)程,可以獲得完成相同工作或類似工作的最佳方法。
使用需求過(guò)程方法需要對(duì)開發(fā)人員進(jìn)行培訓(xùn),使之熟悉過(guò)程,更好地理解要干什么以及怎樣干。對(duì)新團(tuán)隊(duì)或新隊(duì)員進(jìn)行培訓(xùn)時(shí),使用以前的相同或相似項(xiàng)目案例進(jìn)行培訓(xùn)(使用項(xiàng)目的需求過(guò)程流程圖及各步驟成果文檔等),可以收到很好的效果。如果軟件開發(fā)公司能夠經(jīng)常對(duì)員工進(jìn)行培訓(xùn)并維持穩(wěn)定的開發(fā)團(tuán)隊(duì),需求過(guò)程方法將會(huì)取得非常明顯的效果。
4)使用熟悉而有效的方法和技術(shù)
盡管目前已經(jīng)存在很多支持需求工程的技術(shù)、方法和自動(dòng)化工具,但是只有其中幾個(gè)技術(shù)和手段特別有用。要根據(jù)開發(fā)公司及項(xiàng)目實(shí)際情況慎重選擇適當(dāng)?shù)募夹g(shù)和手段。
美國(guó)Software Productivity Research(SPR)公司從1984年到2000年對(duì)650多個(gè)公司和機(jī)構(gòu)的約9000個(gè)項(xiàng)目所使用的技術(shù)、方法和手段進(jìn)行了研究,并得出如表2所示的評(píng)估結(jié)果:[2]
表2需求工程方法有效性與開銷評(píng)估表
JAD(即聯(lián)合應(yīng)用系統(tǒng)設(shè)計(jì))方法要求客戶代表和開發(fā)公司與專家共同工作,開發(fā)雙方共同認(rèn)可的聯(lián)合需求規(guī)范。JAD方法有助于定義真實(shí)的客戶需求,有效地減少需求變更。JAD方法已在信息系統(tǒng)開發(fā)方面得到廣泛應(yīng)用。
建立快速原型的方法也是非常有效的需求方法。由于客戶也常常不知道自己想要什么東西,也不知道所要的東西是否能夠?qū)崿F(xiàn),只有當(dāng)客戶與軟件系統(tǒng)交互時(shí),很多更改要求和更詳細(xì)的需求才能提出、很多軟件需求中的缺陷才能發(fā)現(xiàn),因此,在項(xiàng)目開發(fā)早期建立快速原型可以有效減少需求變更。同時(shí),可以在原型代碼的基礎(chǔ)上進(jìn)行正式編碼,可以減少正式編碼的時(shí)間。建立原型方法與JAD方法配合使用,可以取得更好的效果。如果開發(fā)團(tuán)隊(duì)曾經(jīng)開發(fā)過(guò)類似系統(tǒng),通過(guò)復(fù)用以前系統(tǒng)的部件和代碼,或者運(yùn)用開發(fā)人員的熟練技能,可以以很低的成本快速構(gòu)建出原型。
對(duì)需求工程技術(shù)、方法和工具的選擇,應(yīng)根據(jù)開發(fā)團(tuán)隊(duì)和項(xiàng)目的情況進(jìn)行慎重選擇。最重要的是要選擇開發(fā)人員熟悉的技術(shù)、方法和工具。開發(fā)機(jī)構(gòu)應(yīng)該努力使用同一組在自己環(huán)境證明有效的方法和工具。
5)認(rèn)真執(zhí)行需求檢查
業(yè)界研究發(fā)現(xiàn):軟件系統(tǒng)中的絕大部分缺陷(80%以上)是在需求階段被引入的;需求缺陷的類型主要是“不正確的事實(shí)”、“遺漏”、“不一致”,占比達(dá)到90%以上。[3]
而業(yè)界研究表明,需求錯(cuò)誤是可以被檢查出來(lái)的:通過(guò)需求檢查,通常可以發(fā)現(xiàn)65%以上的需求錯(cuò)誤[1]。因此,在項(xiàng)目開發(fā)的需求階段必須認(rèn)真執(zhí)行需求檢查,以有效地減少軟件系統(tǒng)的錯(cuò)誤。
要執(zhí)行需求檢查,就必須建立完備的需求文檔??梢杂米詣?dòng)化工具建立一個(gè)需求跟蹤數(shù)據(jù)庫(kù),并標(biāo)明每條需求及其理由,作為需求分析的成果和需求檢查的依據(jù)。
6)培訓(xùn)員工并維持穩(wěn)定的隊(duì)伍
軟件系統(tǒng)開發(fā)是一種高度智力活動(dòng),完全依賴于開發(fā)人員的智力活動(dòng),項(xiàng)目的成敗完全取決于開發(fā)人員的熟練技能和對(duì)技能的熟練運(yùn)用。開發(fā)團(tuán)隊(duì)是軟件開發(fā)公司最為寶貴的財(cái)富。因此,必須努力維護(hù)開發(fā)隊(duì)伍的文檔,并不斷對(duì)員工進(jìn)行培訓(xùn)。這可以收到如下回報(bào):
①員工有較強(qiáng)的歸屬感和較高的忠誠(chéng)度,工作更盡責(zé);
②員工對(duì)項(xiàng)目開發(fā)流程及自己的工作任務(wù)、流程非常熟悉,這既有利于工作效率的提高,而且有助于員工發(fā)現(xiàn)并提出工作方法的改進(jìn);
③員工對(duì)開發(fā)工作中所使用的技術(shù)、方法和工具非常熟悉并能熟練運(yùn)用于系統(tǒng)開發(fā)。這有助于定義真實(shí)完備的客戶需求,減少設(shè)計(jì)和編碼的錯(cuò)誤,大大加快開發(fā)進(jìn)度,得到更好的系統(tǒng)產(chǎn)品;
④開發(fā)人員間能更有效地溝通和密切合作。
4總結(jié)
軟件危機(jī)的爆發(fā),使得人們認(rèn)識(shí)到解決軟件危機(jī)的真正有效的辦法是定義完備真實(shí)的客戶需求。因此,業(yè)界產(chǎn)生了很多用于需求分析的技術(shù)、方法和工具。盡管如此,要得到真實(shí)完備的客戶需求,仍然是一件很困難的事情。業(yè)界實(shí)踐表明,要進(jìn)行有效的需求分析,不僅僅依賴于所采用的技術(shù)、方法和手段,更取決于對(duì)需求實(shí)踐過(guò)程的管理。本文提出的進(jìn)行有效需求分析實(shí)踐的方法既簡(jiǎn)單易行,又具有很好的效果,具有很強(qiáng)的指導(dǎo)作用。
參考文獻(xiàn):
[1]周之英.現(xiàn)代軟件工程(第2冊(cè))[M].北京:科學(xué)出版社,2002.
[2] Jones C. Software Quality in 2000:What Works and What Doesnt[M].McGraw Hill,2000.
[3] Denis.CHAOS Reports[J].MA:The Standish Group International,1995.