[摘 要] 成功的軟件產(chǎn)品是建立在成功的需求分析基礎(chǔ)之上的,而高質(zhì)量的需求來源于用戶與開發(fā)人員之間有效的溝通與合作。因此,在軟件項(xiàng)目的需求分析過程中,開發(fā)人員需要從項(xiàng)目的需求調(diào)研開始前就進(jìn)行充分的準(zhǔn)備,特別是要了解和掌握一定的用戶業(yè)務(wù)領(lǐng)域知識;溝通中必須注意把握需求的層次,才能從項(xiàng)目的總體目標(biāo)、業(yè)務(wù)流程和具體功能實(shí)現(xiàn)等方面保證用戶需求的完整;在溝通中掌握不同用戶群體的代表性人物,可以使需求調(diào)研分析的成果具有權(quán)威性、完整性和一貫性;在開發(fā)人員主導(dǎo)下積極引導(dǎo)用戶提出自己的需求,才能保證形成的用戶需求既有合理性,又有可行性。
[關(guān)鍵詞] 軟件開發(fā);需求分析;用戶溝通
[中圖分類號] TP311.5 [文獻(xiàn)標(biāo)識碼] A [文章編號] 1673 - 0194(2013)17- 0057- 03
1 前言
成功的軟件產(chǎn)品是建立在成功的需求分析基礎(chǔ)之上的,而高質(zhì)量的需求來源于用戶與開發(fā)人員之間有效的溝通與合作。當(dāng)用戶有一個(gè)問題需要用計(jì)算機(jī)系統(tǒng)來解決,而開發(fā)人員開始幫助用戶解決這個(gè)問題時(shí),溝通就開始了。
需求獲取可能是軟件開發(fā)中最困難、最關(guān)鍵、最易出錯(cuò)及最需要溝通交流的活動。有些開發(fā)人員對需求的獲取往往有錯(cuò)誤的認(rèn)識,認(rèn)為:用戶知道需求是什么,我們所要做的就是和他們交談從他們那里得到需求,只要問用戶系統(tǒng)的目標(biāo)特征,要做什么或不做什么或都憑用戶自己確定就行了。但是實(shí)際上需求獲取并不如想象的這樣簡單,一個(gè)軟件項(xiàng)目的需求要經(jīng)過開發(fā)人員與用戶的有效溝通與認(rèn)真分析才能確定下來。
這其中還有對問題的理解,用戶對計(jì)算機(jī)系統(tǒng)的能力和限制缺乏了解,任何一個(gè)系統(tǒng)都會有很多的用戶或者不同類型的用戶,每個(gè)用戶只關(guān)注自己需要的系統(tǒng),而不知道系統(tǒng)的整體情況,他們不知道系統(tǒng)作為一個(gè)整體怎樣工作效率更好,不關(guān)心系統(tǒng)中信息資源的規(guī)范與共享問題,也不太清楚哪些工作可以交給軟件完成,他們大多不清楚需求是什么,或者說如何以一種精確的方式來描述需求,他們需要開發(fā)人員的協(xié)助和指導(dǎo)。但是用戶與開發(fā)人員之間的交流很容易出現(xiàn)障礙,容易忽略了那些被認(rèn)為是“很明確”的信息。
本文結(jié)合筆者在實(shí)際軟件項(xiàng)目開發(fā)工作中的經(jīng)驗(yàn),就需求分析時(shí)與用戶溝通中應(yīng)注意的幾個(gè)問題進(jìn)行研究分析。
1 溝通前的準(zhǔn)備工作是開發(fā)人員必須做的功課
開發(fā)人員與用戶溝通前的準(zhǔn)備工作一般有常規(guī)準(zhǔn)備和可能需要的業(yè)務(wù)領(lǐng)域知識準(zhǔn)備兩個(gè)方面。
常規(guī)的準(zhǔn)備工作包括對項(xiàng)目整體環(huán)境的熟悉,著重需要了解項(xiàng)目的背景、項(xiàng)目的目的、項(xiàng)目的利益相關(guān)方等信息,以便對當(dāng)前項(xiàng)目的總體情況有一定了解。同時(shí)還要圍繞這些方面對將要展開的調(diào)研進(jìn)行需求調(diào)研問題的準(zhǔn)備、需求調(diào)研模板的設(shè)計(jì)、需求調(diào)研時(shí)間安排等。
承擔(dān)需求調(diào)研的開發(fā)人員除了做好上述基本的準(zhǔn)備工作外,還需要結(jié)合自身對用戶業(yè)務(wù)領(lǐng)域知識的掌握情況,主動積極了解客戶業(yè)務(wù)和相關(guān)知識。這是因?yàn)?,雖然開發(fā)人員可能在信息技術(shù)方面非常專業(yè),但對于具體的用戶業(yè)務(wù)可能并不十分清楚。這個(gè)項(xiàng)目對用戶將有什么幫助、某一系統(tǒng)功能是否有用、某一流程處理是否合理,在不了解用戶業(yè)務(wù)的情況下,我們將很難做出判斷。這一掌握業(yè)務(wù)領(lǐng)域知識的工作也可能是要貫穿項(xiàng)目發(fā)展過程始終的。
因?yàn)橹挥性诹私鈽I(yè)務(wù)的基礎(chǔ)上,我們才能和用戶有共同的溝通語言和業(yè)務(wù)理解,才能真正理解系統(tǒng)應(yīng)具有哪些功能。筆者曾在對某鋼鐵企業(yè)ERP項(xiàng)目的生產(chǎn)管理系統(tǒng)進(jìn)行調(diào)研的過程中由于缺乏冶金生產(chǎn)方面的知識,有許多問題不能很好理解。
當(dāng)時(shí),筆者向用戶虛心請教,并在調(diào)研結(jié)束后及時(shí)對有關(guān)生產(chǎn)知識進(jìn)行了補(bǔ)充。后來在進(jìn)行該項(xiàng)目的設(shè)備管理系統(tǒng)調(diào)研前,筆者結(jié)合前段時(shí)間了解的冶金生產(chǎn)工藝知識,又事先瀏覽式地學(xué)習(xí)了一下有關(guān)冶金設(shè)備知識,再進(jìn)行調(diào)研時(shí)與用戶的溝通就順暢了許多。
應(yīng)用領(lǐng)域的知識是無邊無際的,在各種項(xiàng)目的調(diào)研過程中,肯定會出現(xiàn)由于需求分析者缺乏某一領(lǐng)域的知識而影響需求分析工作準(zhǔn)確、順利進(jìn)行的問題。遇到此類問題時(shí),需求分析者應(yīng)虛心向用戶請教,同時(shí)應(yīng)及時(shí)補(bǔ)充應(yīng)用領(lǐng)域的知識。在調(diào)研前做好充分的準(zhǔn)備是十分必要的。
2 把握好需求的層次是與用戶有效溝通的保證
對于一個(gè)軟件系統(tǒng)項(xiàng)目來講,開發(fā)人員需要面對不同層次,不同部門的客戶,要廣泛聽取意見。不同組織機(jī)構(gòu)層次,不同業(yè)務(wù)部門,甚至不同計(jì)算機(jī)使用水平的客戶對系統(tǒng)的要求都會有不同。比如,總經(jīng)理級別的客戶可能只是對宏觀報(bào)表感興趣,業(yè)務(wù)細(xì)節(jié)操作他們一般不會發(fā)表什么意見。部門經(jīng)理則關(guān)注日常工作報(bào)表,系統(tǒng)功能的實(shí)現(xiàn)以及可能的擴(kuò)展策略。普通業(yè)務(wù)操作人員則關(guān)心操作方式、界面風(fēng)格、易用性等。因此,把客戶分成不同的群組就變得非常有價(jià)值,這樣將會使需求分析的工作變得簡單。因?yàn)殚_發(fā)人員可以從不同群組的維度來分析需求,對于特定的需求問題,則需要關(guān)注特定的客戶群來合作溝通。
在軟件工程中將軟件需求分為業(yè)務(wù)需求、用戶需求、功能需求與非功能需求3個(gè)層次。從與用戶溝通的角度來看,也可以分別通過3個(gè)不同層次的需求將用戶劃分為三大類群體。
業(yè)務(wù)需求反映了用戶對軟件產(chǎn)品高層次的目標(biāo)要求。在項(xiàng)目中,一開始用戶高層領(lǐng)導(dǎo)通常會講,我們上這個(gè)系統(tǒng)的目標(biāo)是什么,我們?yōu)槭裁匆线@個(gè)系統(tǒng),我們要達(dá)到什么樣的一個(gè)高度。通過這個(gè)層次的調(diào)研與分析來確定所開發(fā)項(xiàng)目的目標(biāo)和范圍。
經(jīng)過上面的業(yè)務(wù)需求分析確定了項(xiàng)目的目標(biāo)和范圍后,緊接著就是同用戶中層領(lǐng)導(dǎo)討論,他們主要會講我們的業(yè)務(wù)是什么,我們怎么工作,我們的工作流程是什么。這就是用戶需求。通過對項(xiàng)目的用戶需求分析,得出了項(xiàng)目的基本業(yè)務(wù)流程。
得到了這些信息后,開發(fā)人員開始整理,把軟件功能點(diǎn)找出來,確定軟件如何完成用戶的工作,這是軟件功能需求。按照功能需求做出來的軟件是否能夠被用戶認(rèn)可,這時(shí)不僅要面對用戶的中層領(lǐng)導(dǎo)人員,還要面對基礎(chǔ)管理人員和現(xiàn)場操作人員。
在功能需求滿足用戶要求的基礎(chǔ)上,用戶自然會提出一些方便性、安全性之類的要求,也就是非功能需求。所謂非功能性需求,是指軟件產(chǎn)品為滿足用戶業(yè)務(wù)需求而必須具有且除功能需求以外的特性。例如系統(tǒng)的性能、可靠性、可維護(hù)性、可擴(kuò)充性,以及對技術(shù)和業(yè)務(wù)的適應(yīng)性等。非功能性需求涉及的范圍很廣,軟件產(chǎn)品本身不是孤立存在的,還涉及諸多外在環(huán)境的影響。非功能性需求必須考慮軟件既要可用,又要易用。
4 注意在溝通中掌握不同用戶群體的代表性人物
用戶組織中的人員在很多方面存在差異,例如:使用系統(tǒng)的頻度和程度、計(jì)算機(jī)系統(tǒng)知識、所進(jìn)行的業(yè)務(wù)過程以及個(gè)人的素質(zhì)和喜好等。結(jié)合不同需求層次的用戶的特點(diǎn),可對用戶進(jìn)行一定的分類。將用戶分類并歸納各自特點(diǎn),詳細(xì)描述他們的個(gè)性特點(diǎn)及任務(wù)狀況,將有助于需求的獲取和分析。
不同的問題需要詢問不同的人,對于操作細(xì)節(jié)的問題,要和實(shí)際負(fù)責(zé)操作的用戶進(jìn)行溝通,而對于關(guān)乎全局的問題,則要和相應(yīng)的管理層用戶進(jìn)行溝通。如通過組織架構(gòu)圖得知儲運(yùn)系統(tǒng)的倉儲管理活動涉及3種角色:倉庫主管、計(jì)劃員、理貨員。
我們發(fā)現(xiàn)倉庫主管是對全盤業(yè)務(wù)相當(dāng)熟悉的人,他負(fù)責(zé)協(xié)調(diào)本部門的全局事務(wù);計(jì)劃員則是負(fù)責(zé)接收和處理采購計(jì)劃和到貨信息,理貨員按出入庫通知單承擔(dān)收發(fā)貨的具體操作,這些人都將通過建成后的系統(tǒng)操作完成自己的業(yè)務(wù)。若我們調(diào)研的目的是搞清該部門的整體性流程,我們會很自然地選擇倉庫主管作為訪談的對象。
不可能對所有的用戶都進(jìn)行需求獲取,這樣做時(shí)間不允許,效果也不一定好,所以要識別出能夠確定需求和了解業(yè)務(wù)流程的用戶作為每類用戶的代表。每類用戶至少選擇一位能真正代表他們需求的人作為代表并且能夠作出決策,用戶代表往往是本類用戶中的3類人:對項(xiàng)目有決定權(quán)的領(lǐng)導(dǎo)、熟悉業(yè)務(wù)流程的專家、系統(tǒng)的實(shí)際使用者。
每一個(gè)用戶代表代表了一個(gè)特定的用戶類,并在那個(gè)用戶類和開發(fā)者之間起溝通連接作用,用戶代表從他們所代表的用戶類中收集需求信息,同時(shí)每個(gè)用戶代表負(fù)責(zé)協(xié)調(diào)他們所代表的用戶在需求表達(dá)上的不一致性和不兼容性。
5 注意積極引導(dǎo)與合理利用用戶的需求
由于用戶往往對規(guī)劃中的項(xiàng)目沒有直觀的認(rèn)識,對于計(jì)算機(jī)系統(tǒng)的應(yīng)用特點(diǎn)也缺乏了解,所提出的需求大多是以眼前的工作環(huán)境為基礎(chǔ),只關(guān)心自己局部的業(yè)務(wù)與數(shù)據(jù)要求,不能從全局的視角理解新系統(tǒng)投運(yùn)后的組織機(jī)構(gòu)與業(yè)務(wù)流程,對于一些有前瞻性的設(shè)計(jì)思想會不以為然。
例如在做ERP項(xiàng)目的能源管理系統(tǒng)時(shí),由于數(shù)據(jù)是以自動采集為主的,我們規(guī)劃了每分鐘的能源儀表運(yùn)行數(shù)據(jù)和按小時(shí)、班和日的結(jié)算數(shù)據(jù)功能,負(fù)責(zé)能源管理的用戶人員卻說他們只是月底有套月報(bào)表就可以了,沒有精力按日管理,更不會按小時(shí)來管理。我們根據(jù)自己在這個(gè)領(lǐng)域的開發(fā)經(jīng)驗(yàn),耐心地向用戶介紹了這樣設(shè)計(jì)對于用戶能源管理的必要性,同時(shí)說明這樣一定能夠滿足按月報(bào)表的需求,方案獲得了用戶高層領(lǐng)導(dǎo)的認(rèn)可與贊許。結(jié)果在項(xiàng)目投運(yùn)的一年后,該企業(yè)就圍繞節(jié)能降耗和降成本工作,利用能源計(jì)量系統(tǒng)的小時(shí)量和班量數(shù)據(jù)在基層車間開展了現(xiàn)場能源管理與指標(biāo)考核活動,利用日量數(shù)據(jù)上形成的周報(bào)、旬報(bào),開展了全面的旬成本分析和重點(diǎn)工序的周成本分析。
這個(gè)案例說明開發(fā)人員在具備充分的業(yè)務(wù)領(lǐng)域能力后,在與用戶的需求溝通中主動發(fā)揮引領(lǐng)作用,可以實(shí)現(xiàn)項(xiàng)目開發(fā)中的甲乙方雙贏效果。
還有些時(shí)候,用戶的想法在實(shí)際實(shí)施過程中是不現(xiàn)實(shí)的。若一味地求全和盲目遵從用戶的設(shè)想,將為項(xiàng)目的后續(xù)工作帶來很大的風(fēng)險(xiǎn)。因此應(yīng)盡量避免在需求分析中包含技術(shù)實(shí)施上有難度的功能。如在筆者曾經(jīng)負(fù)責(zé)的一個(gè)項(xiàng)目中,用戶要求新的管理系統(tǒng)應(yīng)實(shí)現(xiàn)和社保、醫(yī)保等管理系統(tǒng)的數(shù)據(jù)接口,以方便這些系統(tǒng)中的數(shù)據(jù)導(dǎo)入新的管理系統(tǒng)。
許諾提供與社保、醫(yī)保等系統(tǒng)的數(shù)據(jù)接口,將為新系統(tǒng)的成功實(shí)施帶來很大的風(fēng)險(xiǎn)。因?yàn)槭煜み@些系統(tǒng)需要時(shí)間,開發(fā)與它們的接口也需要時(shí)間,而且與社保、醫(yī)保這樣的系統(tǒng)談接口條件,也不是我們單方面能夠決定的。因此與外部系統(tǒng)接口的可行性結(jié)論為:不可行。
6 結(jié)語
將知識從一個(gè)地方傳送到另一個(gè)地方并不是一件簡單的事情,而且原始的需求通常是以不完整的形式呈現(xiàn)的。它也許只是在某個(gè)現(xiàn)有系統(tǒng)的用戶腦中,甚至有時(shí)用戶都沒有意識到他們知道什么。因此,作為一個(gè)稱職的開發(fā)人員,在項(xiàng)目的需求調(diào)研開始前必須進(jìn)行充分的準(zhǔn)備,特別是要了解和掌握一定的用戶業(yè)務(wù)領(lǐng)域知識,還要注意在整個(gè)項(xiàng)目活動中主動向用戶學(xué)習(xí);溝通中把握需求的層次,就能夠根據(jù)項(xiàng)目的總體目標(biāo)與任務(wù)范圍、業(yè)務(wù)流體與數(shù)據(jù)關(guān)系、業(yè)務(wù)作業(yè)與功能實(shí)現(xiàn)這樣3個(gè)基本層面來理清用戶需求的不同層次關(guān)系,進(jìn)而確保與用戶溝通的有效性;在溝通中掌握不同用戶群體的代表性人物,可以使需求調(diào)研分析的成果具有權(quán)威性、完整性和一貫性;在需求調(diào)研的溝通中既不是用戶說什么就是什么,又不是開發(fā)人員憑自己的經(jīng)驗(yàn)和理解“閉門造車”,而是要在開發(fā)人員主導(dǎo)下積極引導(dǎo)用戶提出自己的需求,通過討論分析再歸納形成用戶的合理需求,這樣才能保證設(shè)計(jì)的新系統(tǒng)在符合計(jì)算機(jī)系統(tǒng)規(guī)律、發(fā)揮計(jì)算機(jī)系統(tǒng)能力特長的基礎(chǔ)上,真正滿足用戶的需求。