荊 澎
軟件工程中,軟件需求分析 (Software Reguirement Analysis)是指研究用戶需求得到的東西,完全理解用戶對(duì)軟件需求的完整功能,確認(rèn)用戶軟件功能需求,建立可確認(rèn)的、可驗(yàn)證的一個(gè)基本依據(jù)。在軟件工程的歷史中,很長時(shí)間里人們一直認(rèn)為需求分析是整個(gè)軟件工程中最簡單的一個(gè)步驟,從而導(dǎo)致投入分析的精力和時(shí)間過少,啟動(dòng)開發(fā)過快。在過去十年中越來越多的人認(rèn)識(shí)到它是整個(gè)過程中最關(guān)鍵的一個(gè)過程。假如在需求分析時(shí)我們作為系統(tǒng)分析和開發(fā)人員,未能正確地認(rèn)識(shí)到用戶的需要的話,那么最后的軟件實(shí)際上不可能達(dá)到用戶的需要,或者軟件無法在規(guī)定的時(shí)間里完工,軟件項(xiàng)目失敗的風(fēng)險(xiǎn)倍增。
我們做需求分析的目的是完整、準(zhǔn)確地描述用戶的需求,跟蹤用戶需求的變化,將用戶的需求準(zhǔn)確地反映到系統(tǒng)的分析和設(shè)計(jì)中,并使系統(tǒng)的分析、設(shè)計(jì)和用戶的需求保持一致。合理劃分需求分析工作流程、掌握科學(xué)的方法和手段,進(jìn)而形成確定、嚴(yán)謹(jǐn)?shù)慕桓段?,才能為后續(xù)開發(fā)、測試、運(yùn)維奠定可靠、堅(jiān)實(shí)的基礎(chǔ)。
需求分析的流程可劃分為三大階段,分析流程與需求組成如圖1所示:
圖1
第一階段首先要充分理解項(xiàng)目立項(xiàng)的背景、意義及目標(biāo)要求,即業(yè)務(wù)需求。要充分了解項(xiàng)目所處的業(yè)務(wù)領(lǐng)域,明確該項(xiàng)目在整個(gè)領(lǐng)域的位置、作用以及與正在運(yùn)行的項(xiàng)目、系統(tǒng)的關(guān)系,包括業(yè)務(wù)交叉關(guān)系以及技術(shù)依賴,等等。完成上述工作后,要結(jié)合已知情況選擇技術(shù)實(shí)現(xiàn)的框架,包括開發(fā)工具、組件 (包括現(xiàn)有平臺(tái)組件及可能需要的第三方組件)、開發(fā)、測試和運(yùn)行的基礎(chǔ)環(huán)境等。
第二階段,我們需要做的工作就是確定項(xiàng)目的核心需求,即需求調(diào)研報(bào)告中涉及的用戶使用系統(tǒng)必須完成的任務(wù),也叫用戶需求。同時(shí),要完成用戶需求對(duì)應(yīng)的核心功能、質(zhì)量和相關(guān)的制約條件。
所謂核心功能是指根據(jù)對(duì)項(xiàng)目的分析和調(diào)研規(guī)劃,找出當(dāng)前最迫切需要實(shí)現(xiàn)的、最能體現(xiàn)項(xiàng)目價(jià)值的關(guān)鍵功能。對(duì)于技術(shù)風(fēng)險(xiǎn)大的、與現(xiàn)有項(xiàng)目功能有歧義的,或者核心功能中相互沖突的功能要進(jìn)行前期取舍。確定核心功能的過程是一個(gè)和用戶不斷溝通、技術(shù)上不斷遞歸的過程。
此階段在確定核心功能的同時(shí)要引入質(zhì)量的概念,也叫非功能需求,即結(jié)合功能定義,從性能、可靠性、可擴(kuò)展性、可維護(hù)性、可移植性即易用性、安全性等多個(gè)質(zhì)量指標(biāo)進(jìn)行篩選,標(biāo)準(zhǔn)就是第一階段獲取的信息。
確定了核心功能、質(zhì)量后還要充分考慮限制條件,即項(xiàng)目需求實(shí)現(xiàn)的特殊情況或者可能限制實(shí)現(xiàn)的條件,分為業(yè)務(wù)級(jí)、用戶級(jí)和開發(fā)級(jí)等。例如業(yè)務(wù)表單流轉(zhuǎn)依賴HB2008工作流組件設(shè)計(jì)等屬于業(yè)務(wù)級(jí);某些功能可能需要協(xié)勤人員操作,其認(rèn)證等需要 “三統(tǒng)一”平臺(tái)額外開發(fā)或者審批開通權(quán)限等屬于用戶級(jí);必須運(yùn)行在Windows操作系統(tǒng)下、必須使用國有自主知識(shí)產(chǎn)權(quán)的數(shù)據(jù)庫產(chǎn)品或者一些不熟悉的技術(shù)領(lǐng)域依賴開發(fā)人員的水平等都屬于開發(fā)級(jí)。
項(xiàng)目詳細(xì)需求分析就是針對(duì)核心功能進(jìn)行細(xì)化的業(yè)務(wù)邏輯和數(shù)據(jù)流需求調(diào)研分析過程,形成功能需求。此階段要緊緊圍繞核心功能做好以下工作:一要調(diào)查組織機(jī)構(gòu)情況,包括了解部門組成情況,各部門的職能等,對(duì)其管理層次與線條建立全局了解,為分析信息流程作準(zhǔn)備。二要調(diào)查各部門的業(yè)務(wù)活動(dòng)情況,包括了解各個(gè)部門輸入和使用什么數(shù)據(jù),如何加工處理這些數(shù)據(jù),輸出什么信息,輸出到什么部門,輸出結(jié)果的格式是什么。特別要針對(duì)這些業(yè)務(wù)流程,繪制出跨部門職能流程圖,幫助后續(xù)開發(fā)人員對(duì)用戶的業(yè)務(wù)流程建立宏觀、清晰的認(rèn)識(shí),以便更加有的放矢地進(jìn)行進(jìn)一步的需求捕獲工作,此項(xiàng)過程要與用戶反復(fù)驗(yàn)證,使需求功能描述明確清晰。三要協(xié)助用戶明確對(duì)新系統(tǒng)的各種要求,包括信息要求、處理要求、完整性要求。四要確定新系統(tǒng)的邊界,確定哪些功能由計(jì)算機(jī)完成或?qū)頊?zhǔn)備讓計(jì)算機(jī)完成,哪些活動(dòng)由人工完成,由計(jì)算機(jī)完成的功能就是新系統(tǒng)應(yīng)該實(shí)現(xiàn)的功能,同時(shí)要注意提醒用戶開始著手建立系統(tǒng)使用和操作規(guī)范及管理制度。
此階段形成 《需求規(guī)格說明書》(SRS),內(nèi)容包括功能描述、用戶用例、數(shù)據(jù)流轉(zhuǎn)圖、業(yè)務(wù)邏輯圖等,應(yīng)包括上述三階段軟件系統(tǒng)所應(yīng)具有的全部外部行為。其在后續(xù)開發(fā)、測試、質(zhì)量保證、項(xiàng)目管理以及相關(guān)項(xiàng)目功能中都將起到重要的作用。
由于軟件需求分析的重要地位,這一過程中存在或者隱藏的問題直接會(huì)導(dǎo)致項(xiàng)目失敗或者崩潰,應(yīng)引起高度重視。問題主要存在以下幾個(gè)方面:
很多項(xiàng)目經(jīng)常是由領(lǐng)導(dǎo)層面自上而下提出的,但由于工作繁忙,領(lǐng)導(dǎo)或者發(fā)起人不能保證具體參與需求討論和調(diào)研,下屬用戶有時(shí)只能憑靠揣測領(lǐng)導(dǎo)意圖來提需求。有時(shí)用戶對(duì)項(xiàng)目非??释?,但由于缺乏軟件系統(tǒng)建設(shè)方面的專家和相關(guān)知識(shí),對(duì)需求只有朦朧的感覺,具體說不清楚,就會(huì)泛泛而談或者干脆要求分析人員替代他們?cè)O(shè)想需求,技術(shù)人員主觀性早早帶入分析過程,為未來的開發(fā)建設(shè)埋下了隱患。還有部分用戶自侍業(yè)務(wù)精通,“越俎代庖”告訴技術(shù)人員很多其他部門業(yè)務(wù)需求,將需求調(diào)研帶入歧途。
軟件需求分析人員不可能都是全才,更不可能是行業(yè)方面的專家。對(duì)客戶表達(dá)不清晰的需求,不同的分析人員可能有不同的理解。如果分析人員理解錯(cuò)了,后續(xù)可能使測試者與開發(fā)者所期望的不一致,導(dǎo)致開發(fā)工作勞而無功。另一方面,根據(jù)以往經(jīng)驗(yàn),隨著用戶對(duì)信息化建設(shè)的認(rèn)識(shí)和自己業(yè)務(wù)水平的提高,他們會(huì)在不同的階段和時(shí)期對(duì)項(xiàng)目的需求提出新的要求和需求變更,這都導(dǎo)致需求的不穩(wěn)定。此外,用戶不斷地補(bǔ)充需求,項(xiàng)目就越變?cè)烬嫶笠灾鲁^其計(jì)劃及預(yù)算范圍。計(jì)劃并不總是與項(xiàng)目需求規(guī)模與復(fù)雜性、風(fēng)險(xiǎn)、開發(fā)生產(chǎn)率及需求變更實(shí)際情況相一致,這使得用戶業(yè)務(wù)問題更難解決。
根據(jù)以往項(xiàng)目經(jīng)驗(yàn),大多數(shù)系統(tǒng)是由不同的人使用其不同的特性,使用頻繁程度也有所差異,使用者受教育程度和經(jīng)驗(yàn)水平也不盡相同。如果不在需求分析階段就針對(duì)所有用戶進(jìn)行分類,考慮個(gè)性化需求的話,必然導(dǎo)致有的用戶對(duì)交付的系統(tǒng)感到失望。
“自以為是”是指開發(fā)人員力圖增加一些 “用戶欣賞”但用戶并未提及的新功能。經(jīng)常發(fā)生的情況是用戶并不認(rèn)為這些功能有用,導(dǎo)致開發(fā)人員徒勞無功。
有些項(xiàng)目組在需求調(diào)研和分析時(shí)缺乏計(jì)劃性、科學(xué)性,“走過場”。需求調(diào)研僅簡單與用戶閑聊、收集一些文檔、表格就草草結(jié)束,輕率地開始編碼,這種輕視的后果往往導(dǎo)致需求無法驗(yàn)證,很多情況下到項(xiàng)目交付時(shí)才開始履行驗(yàn)證過程,產(chǎn)生大量的需求變更,后果非常嚴(yán)重。另一種情況,項(xiàng)目組過度重視需求規(guī)格說明書的編寫,為編寫而編寫,甚至出現(xiàn)工程組內(nèi)部 “白天寫文檔,晚上寫代碼”的情況。產(chǎn)生出的文檔經(jīng)常與實(shí)際開發(fā)脫節(jié),完成后就束之高閣,不再使用、不再驗(yàn)證和更新,這也是需求崩潰的一個(gè)重要原因。
由于對(duì)需求分析的理解不同,使用的方法也多種多樣。根據(jù)以往我們的經(jīng)驗(yàn),業(yè)界比較成熟的“三步法”更符合海關(guān)實(shí)際工作。
第一步關(guān)鍵是要與項(xiàng)目提出人、用戶領(lǐng)導(dǎo)層、業(yè)務(wù)層,即持有重要業(yè)務(wù)信息的人進(jìn)行訪談式溝通,主要目的是從宏觀上把握用戶的具體需求方向和趨勢(shì),了解現(xiàn)有的組織架構(gòu)、業(yè)務(wù)流程、硬件環(huán)境、軟件環(huán)境、現(xiàn)有的運(yùn)行系統(tǒng)等具體情況、客觀的信息。訪談的渠道和方式可以多樣,例如需求專題會(huì)議、電話、郵件等,并針對(duì)具體的部門指定項(xiàng)目的業(yè)務(wù)聯(lián)系人。溝通應(yīng)盡可能高效,應(yīng)先根據(jù)已掌握的信息和需求列出問題提綱,既提高效率,又增加用戶對(duì)技術(shù)人員的好感和信任。對(duì)不同的訪談對(duì)象,詢問和討論的主題和內(nèi)容應(yīng)注意區(qū)分:一般對(duì)于領(lǐng)導(dǎo),要討論目標(biāo)、方向以及總體要求等問題,而不是業(yè)務(wù)細(xì)節(jié)。對(duì)于用戶的業(yè)務(wù)層領(lǐng)導(dǎo),要多詢問一些業(yè)務(wù)流程方面的問題,他們?cè)谶@方面最熟悉并有見解,軟件的大部分需求一般都是這個(gè)層次的人員提出的,和這個(gè)層次的人員要注意關(guān)系上的協(xié)調(diào);對(duì)于具體操作人員,可以多詢問一些對(duì)方的操作習(xí)慣、業(yè)務(wù)處理的細(xì)節(jié)等問題;對(duì)于系統(tǒng)管理員,則可以討論一些技術(shù)上的問題。每次訪談都應(yīng)有詳細(xì)的書面記錄,可以使用Excel、Word等工具形成調(diào)查表格、報(bào)告,這是形成需求分析結(jié)果的基礎(chǔ)和下次需求調(diào)研的前提,應(yīng)力爭每次訪談都使需求分析向前推進(jìn)一個(gè)階段。記錄使用的語言須是用戶熟悉的詞匯,要使用明確肯定性語句,不要使用模糊的說法。
這一步是在充分訪談溝通、對(duì)用戶獲取了大量信息數(shù)據(jù)基礎(chǔ)上,結(jié)合現(xiàn)有的硬件、軟件實(shí)現(xiàn)方案,通過制作原型、統(tǒng)一建模語言、用例和敏捷軟件開發(fā)等方法,使用Visio或者Axure RP等工具做出簡單的用戶流程演示及系統(tǒng)界面。同時(shí),結(jié)合以往的項(xiàng)目經(jīng)驗(yàn),對(duì)用戶采用誘導(dǎo)式、啟發(fā)式的調(diào)研方法和手段,和用戶一起探討業(yè)務(wù)流程設(shè)計(jì)的合理性、準(zhǔn)確性、便易性、習(xí)慣性。用戶可以操作簡單演示的DEMO,來感受整個(gè)業(yè)務(wù)流程的設(shè)計(jì)合理性、準(zhǔn)確性等等問題,及時(shí)地提出改進(jìn)意見和方法。通過誘導(dǎo)和充分的再次交流,可以形成調(diào)研分析報(bào)告、原型反饋報(bào)告、業(yè)務(wù)流程報(bào)告等二次調(diào)研成果。
這一步是在訪談、誘導(dǎo)兩步成果的基礎(chǔ)上,進(jìn)行具體的流程細(xì)化、數(shù)據(jù)項(xiàng)的確認(rèn)階段。這個(gè)階段技術(shù)人員必須提供原型系統(tǒng)和明確的業(yè)務(wù)流程報(bào)告、數(shù)據(jù)項(xiàng)表,并能清晰地向用戶描述系統(tǒng)的業(yè)務(wù)流設(shè)計(jì)目標(biāo)。用戶可以通過審查業(yè)務(wù)流程報(bào)告、數(shù)據(jù)項(xiàng)表以及操作DEMO或者原型系統(tǒng)提出反饋意見,并對(duì)已經(jīng)可接受的報(bào)告、文檔簽字確認(rèn)。目前海關(guān)科技應(yīng)用項(xiàng)目管理中推廣使用的 “任務(wù)書”即為確認(rèn)步驟的成果和載體。
整體來講,需求分析的三個(gè)步驟是需求調(diào)研中不可忽視一個(gè)重要的部分,它們的實(shí)施和采用為項(xiàng)目成功提供了保證。在目前廣為流行的 “迭代法”開發(fā)模式時(shí),需求分析的工作將貫穿整個(gè)開發(fā)過程,需求改進(jìn)中,主要工作則集中在后兩個(gè)步驟中。
需求分析人員即需求工程師,其必須具有開發(fā)背景和實(shí)戰(zhàn)經(jīng)驗(yàn),和程序開發(fā)人員針對(duì)問題采用技術(shù)解題的 “分解能力”相比,其更應(yīng)該具有的是與用戶溝通交流、找出問題的 “合成能力”。需求工程師與人的交流能力要?jiǎng)儆谂c機(jī)器的交流能力,他的自然語言表達(dá)能力要?jiǎng)儆诰幊陶Z言表達(dá)能力。需求分析是一個(gè)綜合團(tuán)隊(duì)的工作,是在需求分析理論的指導(dǎo)下,對(duì)用戶需要進(jìn)行漸進(jìn)方式逐步深化,應(yīng)以產(chǎn)品的眼光看待每個(gè)項(xiàng)目,因此,需求分析可以看做是商務(wù)行為,是一個(gè)商業(yè)化操作,要求由商務(wù)活動(dòng)人員 (包括需求工程師)、項(xiàng)目管理人員、設(shè)計(jì)技術(shù)人員等結(jié)合的團(tuán)隊(duì)共同合作,各自明確負(fù)責(zé)范圍、工作目標(biāo),解決需求和設(shè)計(jì)的同步問題,努力做到設(shè)計(jì)符合需求。
需求分析作為項(xiàng)目開發(fā)階段的開端,是軟件工程的真正開始。需求分析是所有軟件成功要素發(fā)揮作用的前提,它的好壞直接影響著后面的各個(gè)階段,關(guān)系著軟件的成敗。軟件項(xiàng)目中40%至60%的問題都是在需求分析階段留下的隱患。青島海關(guān)技術(shù)處近十年來,注意跟蹤業(yè)界先進(jìn)的軟件開發(fā)管理理念,高度重視需求分析工作,自2005年以來,先后在所承辦的署級(jí) “保稅作業(yè)監(jiān)控分析系統(tǒng)”、“海關(guān)政府采購業(yè)務(wù)信息平臺(tái)”、H2010工程 “海關(guān)綜合業(yè)務(wù)管理平臺(tái)”等重大軟件應(yīng)用項(xiàng)目中遵循軟件開發(fā)的客觀規(guī)律,組建專門的需求分析團(tuán)隊(duì),全面啟用科學(xué)的需求分析方法,保證了項(xiàng)目開發(fā)建設(shè)質(zhì)量,所開發(fā)的系統(tǒng)易用性、可靠性、穩(wěn)定性以及可擴(kuò)展性得到顯著提升,獲得海關(guān)業(yè)務(wù)部門和人員的廣泛好評(píng)。
〔1〕Karl E.Wiegers,劉偉琴,劉洪濤 .軟件需求 〔M〕.第2版 .北京:清華大學(xué)出版社,2004.
〔2〕徐賽華 .軟件需求分析研究 〔J〕.吉林師范大學(xué)學(xué)報(bào),2006 (1).
海關(guān)與經(jīng)貿(mào)研究2012年4期