摘要:在軟件工程中,雖然已經(jīng)總結(jié)出了大量的需求分析方法和工具,但需求模糊問(wèn)題依然普遍存在,究其原因是在需求實(shí)踐中,缺乏必要的需求思維方式。只有在正確的宏觀思維方式指導(dǎo)下,結(jié)合具體的需求分析方法和工具才能捕獲到真實(shí)需求。本文結(jié)合辯證唯物主義哲學(xué)思想和需求的實(shí)踐經(jīng)驗(yàn),提出了需求分析中的用戶思維、場(chǎng)景思維、迭代思維、信息化思維和系統(tǒng)化思維,目的是在這些思維方式的指導(dǎo)下,輔助軟件工程中的需求分析方法和工具發(fā)揮更大的作用。
關(guān)鍵詞:軟件工程;需求分析;信息化;系統(tǒng)化
中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.3969/j.issn.l003-6970.2017.08.029
本文著錄格式:宋振乾.軟件需求分析的思維方法[J].軟件,2017,38(8):151-154
引言
軟件和我們?nèi)粘J褂玫钠渌a(chǎn)品一樣,其設(shè)計(jì)開發(fā)過(guò)程本質(zhì)上是產(chǎn)品的制造過(guò)程,有其獨(dú)特的制造工藝,其中需求分析是軟件制造工藝中的重要環(huán)節(jié),直接決定著未來(lái)軟件的成敗。在軟件工程中,需求分析是指定義和描述軟件系統(tǒng)的范圍、目標(biāo)及定義其功能時(shí)所要做的全部工作。簡(jiǎn)言之,需求分析就是分析軟件用戶的需求是什么,即全面地理解用戶的各項(xiàng)要求,并準(zhǔn)確地表達(dá)用戶需求,明確軟件開發(fā)的內(nèi)容。正確的需求是構(gòu)造軟件大廈的基石和藍(lán)圖,其重要性是不言而喻的。但現(xiàn)實(shí)是殘酷的,要捕獲到真實(shí)的軟件需求是一件非常困難的工作,用戶需要的是個(gè)蘋果,結(jié)果我們給用戶的是一個(gè)梨。據(jù)Standish Group的研究顯示,高達(dá)31.1%的項(xiàng)目徹底失敗,高達(dá)52.7%的項(xiàng)目進(jìn)度超期或成本超支,被認(rèn)為成功的軟件僅有可憐的16.2%。而這些問(wèn)題中絕大部分都是在需求分析階段埋下的“禍根”。需求分析在軟件項(xiàng)目中如此重要,我們有必要分析造成需求獲取困難的原因和應(yīng)對(duì)策略。
1 需求的難點(diǎn)
是什么原因?qū)е挛覀儷@取真實(shí)需求如此困難,原因總結(jié)起來(lái)有如下三點(diǎn),第一點(diǎn)是需求工程的理論和實(shí)踐還尚不完備。從1946年世界上第一臺(tái)計(jì)算機(jī)發(fā)明到現(xiàn)在,雖經(jīng)歷了70年的發(fā)展,但從上個(gè)世紀(jì)七十年代開始計(jì)算機(jī)才逐漸大規(guī)模應(yīng)用到社會(huì)生產(chǎn)生活中。伴隨著計(jì)算機(jī)應(yīng)用的普及,需求工程作為軟件工程中的一個(gè)分支才逐漸發(fā)展起來(lái),其發(fā)展歷史就更為短暫。需求分析工作與軟件開發(fā)工作相比,表面上看似沒(méi)有技術(shù)含量,但卻是一個(gè)集計(jì)算機(jī)技術(shù)、分析設(shè)計(jì)、人際溝通、語(yǔ)言和文字表達(dá)能力以及心理學(xué)等多領(lǐng)域知識(shí)于一體的技術(shù)領(lǐng)域。當(dāng)今世界上無(wú)數(shù)軟件項(xiàng)目由于需求問(wèn)題而遭受經(jīng)濟(jì)損失甚至是徹底失敗,表明對(duì)需求工程領(lǐng)域客觀規(guī)律的認(rèn)識(shí)還不夠深刻。第二點(diǎn)是需求獲取和分析中存在信息失真的現(xiàn)象。需求獲取的關(guān)鍵環(huán)節(jié)就是向軟件使用者了解對(duì)系統(tǒng)的要求,人與人之間的溝通就是一個(gè)重要環(huán)節(jié),而人際交流中存在的信息失真是一種普遍現(xiàn)象,從而影響了需求的真實(shí)性。第三點(diǎn)是需求變更頻繁,似乎永遠(yuǎn)不知道用戶的最終需求是什么。軟件形態(tài)的虛擬特性,使用戶往往錯(cuò)誤地認(rèn)為修改軟件設(shè)計(jì)的代價(jià)很小,付出的代價(jià)不像推倒一棟蓋好的樓房那樣有直觀和震撼的感受,甚至在開發(fā)工作完成后,還在不斷提出需求變更,這是軟件開發(fā)與其他生產(chǎn)制造行業(yè)最大的不同點(diǎn),也是軟件工程師面臨的最大的痛點(diǎn)。其原因是多方面的,用戶水平參差不齊是一個(gè)重要原因,有時(shí)用戶自己也不知道真正需求是什么,所以在開發(fā)過(guò)程中不斷提出這樣或那樣的需求。
雖然要捕獲到真實(shí)需求面臨很大難度,但需求的獲取作為客觀事物是可以發(fā)現(xiàn)其固有的規(guī)律,這就要求我們?cè)趯?shí)踐中不斷總結(jié),運(yùn)用正確的思維模式去發(fā)掘真實(shí)需求,這些思維方式包括用戶思維、場(chǎng)景思維、迭代思維、信息化思維和系統(tǒng)化思維。
2 需求獲取的思維方法
2.1 用戶思維
用戶思維要求我們近距離全方位接觸用戶,運(yùn)用用戶思維,就必須明確三個(gè)問(wèn)題,你的目標(biāo)用戶是誰(shuí),目標(biāo)用戶要什么以及怎樣滿足目標(biāo)用戶的需求。要正確選擇關(guān)鍵用戶才能獲得比較全面和真實(shí)的需求素材,正確選擇關(guān)鍵用戶的含義有兩個(gè),一個(gè)是選擇關(guān)鍵崗位上的用戶,這樣可以確保需求的真實(shí)性和有效性。另一個(gè)是同一個(gè)崗位上的人員要訪談多個(gè),這樣可以確保全面性。軟件是為用戶服務(wù)的,只有深入了解用戶的工作內(nèi)容和工作特點(diǎn),了解用戶的所思所想,才能發(fā)現(xiàn)用戶的痛點(diǎn),知道軟件存在的價(jià)值,從而也就了解了用戶要什么。在后續(xù)的設(shè)計(jì)階段,我們才能圍繞著用戶所需,開展設(shè)計(jì)工作,解決怎樣滿足目標(biāo)用戶需求的問(wèn)題。不同層次的用戶對(duì)軟件的認(rèn)識(shí)程度也不同,在和用戶溝通中可以逐步灌輸適當(dāng)?shù)能浖R(shí),讓用戶充分了解哪些是系統(tǒng)可以實(shí)現(xiàn)的,哪些是不能實(shí)現(xiàn)的,使用戶所提出需求的有效性與合理性更高。在實(shí)踐中,需求人員要深入用戶崗位,觀察用戶處理業(yè)務(wù)的過(guò)程,詳細(xì)記錄業(yè)務(wù)處理步驟和內(nèi)容,通過(guò)反復(fù)回放的方式,分析最為費(fèi)時(shí)費(fèi)力的工作節(jié)點(diǎn),思考用適當(dāng)?shù)姆椒ń鉀Q用戶工作中的難點(diǎn)和痛點(diǎn),所以做需求工作要始終圍繞著用戶才有可能發(fā)現(xiàn)真正的需求。
2.2 場(chǎng)景思維
場(chǎng)景思維建立在用戶思維基礎(chǔ)上,在和用戶深入接觸過(guò)程中獲取用戶的所有工作細(xì)節(jié)的第一手資料通過(guò)梳理這些工作細(xì)節(jié),分析出主要的工作步驟,每一個(gè)工作步驟形成一個(gè)快照,固定為一個(gè)業(yè)務(wù)場(chǎng)景,仔細(xì)分析每個(gè)場(chǎng)景中用戶的工作細(xì)節(jié)。不僅要分析每個(gè)場(chǎng)景下用戶的工作內(nèi)容,而且要分析上下游場(chǎng)景之間的工作關(guān)系。場(chǎng)景之間有機(jī)的串聯(lián)和切換形成一部生動(dòng)的用戶故事,從故事開頭到結(jié)尾完整展現(xiàn)某個(gè)業(yè)務(wù)處理的全過(guò)程[1<\以場(chǎng)景化的思維過(guò)程構(gòu)建的系統(tǒng)能夠使業(yè)務(wù)在系統(tǒng)中的展現(xiàn)具有清晰的邏輯路徑,才能符合用戶的業(yè)務(wù)習(xí)慣,同時(shí)借助于信息化的技術(shù)手段,使工作效率顯著提升。在實(shí)踐中,需求和設(shè)計(jì)人員往往會(huì)設(shè)計(jì)出五花八門的功能,令人眼花繚亂,但缺乏業(yè)務(wù)處理主線,其本質(zhì)就是缺乏場(chǎng)景化設(shè)計(jì),舍本逐末的表現(xiàn)。場(chǎng)景思維的典型輸出工具是系統(tǒng)用例,通過(guò)編寫系統(tǒng)用例,詳細(xì)描述了系統(tǒng)在實(shí)現(xiàn)業(yè)務(wù)場(chǎng)景時(shí)的各種交互行為,是編寫測(cè)試用例和系統(tǒng)原型的基礎(chǔ)文檔。
2.3 迭代思維
迭代思維體現(xiàn)的是對(duì)客觀事物認(rèn)識(shí)的漸進(jìn)性,唯物主義哲學(xué)的認(rèn)識(shí)論告訴我們,人類對(duì)客觀事物的認(rèn)識(shí)是波浪式前進(jìn),螺旋式上升的,是實(shí)踐、認(rèn)識(shí),再實(shí)踐和再認(rèn)識(shí)的過(guò)程。迭代思維恰恰反映了這樣的認(rèn)識(shí)過(guò)程。需求的獲取不是一蹴而就的,與用戶的交流大多采用語(yǔ)言的溝通方式,由于在信息傳遞過(guò)程中存在信息的衰減和扭曲,或理解上的歧義,決定了我們往往不可避免的存在一定程度的偏差。而需求的迭代思維就是指導(dǎo)我們反復(fù)和用戶交流確認(rèn),這個(gè)過(guò)程就是不斷修正偏差的過(guò)程。在實(shí)踐中,需求文檔和原型是與用戶交流需求的重要媒介,迭代思維運(yùn)用在需求工程上就是基于需求文檔和系統(tǒng)原型的循環(huán)進(jìn)化過(guò)程,通過(guò)反復(fù)確認(rèn)和修正需求文檔和原型系統(tǒng),最終獲得信息系統(tǒng)真實(shí)的未來(lái)藍(lán)圖。需要注意的是,在需求迭代過(guò)程中要抓住關(guān)鍵需求,關(guān)鍵需求包括功能需求,質(zhì)量屬性和約束這三類需求,關(guān)鍵需求決定系統(tǒng)架構(gòu)。當(dāng)需求、設(shè)計(jì)和開發(fā)同時(shí)納入迭代模式后,形成了完整的迭代開發(fā)過(guò)程,使系統(tǒng)逐步得到有序進(jìn)化?;诘枷氲能浖_發(fā)工藝,在應(yīng)對(duì)用戶需求變更方面的代價(jià)是較小的,這也是迭代思維的價(jià)值所在。
2.4 信息化思維
信息化思維要求需求分析人員不僅要深入了解用戶的業(yè)務(wù),理解用戶的需求,而且要運(yùn)用信息化的知識(shí)和技術(shù)合理引導(dǎo)用戶的需求,使系統(tǒng)在設(shè)計(jì)階段就具備合理的功能要求,避免在系統(tǒng)上線運(yùn)行階段才發(fā)現(xiàn)設(shè)計(jì)缺陷,從而造成返工,這樣可以節(jié)省大量的成本。信息化思維所提出的要求,也正是需求分析人員的價(jià)值所在,充當(dāng)了業(yè)務(wù)人員和技術(shù)人員的溝通橋梁,在理解用戶業(yè)務(wù)要求的基礎(chǔ)上,思考如何利用信息系統(tǒng)快速、有效地完成業(yè)務(wù)的處理,并且能夠提供給用戶手工處理所無(wú)法比擬的優(yōu)勢(shì)和便利。業(yè)務(wù)系統(tǒng)是用戶處理業(yè)務(wù)的規(guī)則和流程,軟件系統(tǒng)是對(duì)業(yè)務(wù)系統(tǒng)的模擬和固化。業(yè)務(wù)系統(tǒng)和軟件系統(tǒng)是一體兩面,是同一個(gè)抽象體在兩個(gè)世界的投射。軟件系統(tǒng)最大的優(yōu)勢(shì)是信息的海量存儲(chǔ)記憶,快速檢索以及數(shù)據(jù)的復(fù)雜分析,這方面是人腦遠(yuǎn)遠(yuǎn)不能企及的。所以在設(shè)計(jì)系統(tǒng)時(shí),要充分利用信息系統(tǒng)的這些特點(diǎn),給用戶提供最大的便利。要靈活和充分利用當(dāng)前比較先進(jìn)的信息化技術(shù),把云平臺(tái),大數(shù)據(jù)分析技術(shù)、移動(dòng)互聯(lián)網(wǎng)等技術(shù)手段形成技術(shù)需求的一部分,和用戶的業(yè)務(wù)需求緊密融合,才能最終打造出軟件系統(tǒng)的精品。
2.5 系統(tǒng)化思維
系統(tǒng)化思維指以系統(tǒng)論為思維基本模式的思維形態(tài),是整體思維、全面思維的哲學(xué)思想在信息化建設(shè)領(lǐng)域中的實(shí)際應(yīng)用??陀^世界中的系統(tǒng)是由兩個(gè)或兩個(gè)以上的元素相結(jié)合的有機(jī)整體,思維的系統(tǒng)性與客體的系統(tǒng)性是一致的。信息系統(tǒng)就是一個(gè)客觀存在的系統(tǒng),要求我們?cè)谧鲂枨蠓治龊拖到y(tǒng)設(shè)計(jì)時(shí),不能孤立地關(guān)注某一個(gè)或某幾個(gè)功能需求,還要考慮這些功能和其他功能之間的關(guān)系,這些功能和其他模塊之間的關(guān)系,以及這些功能和周邊系統(tǒng)之間的關(guān)系。例如在設(shè)計(jì)某個(gè)業(yè)務(wù)數(shù)據(jù)輸入的功能時(shí),就要考慮該業(yè)務(wù)數(shù)據(jù)是否已經(jīng)存在于其他業(yè)務(wù)系統(tǒng)中了,如果已經(jīng)存在就應(yīng)該把這個(gè)功能設(shè)計(jì)為接口,就可以避免數(shù)據(jù)的重復(fù)錄人,并且能夠保持業(yè)務(wù)數(shù)據(jù)的一致性。系統(tǒng)化思維的核心思想要充分考慮到某個(gè)功能的需求和設(shè)計(jì)對(duì)于周邊系統(tǒng)的影響,使每個(gè)功能設(shè)計(jì)能夠很好的融入到用戶業(yè)務(wù)系統(tǒng)生態(tài)圈中。
3 結(jié)論
綜上所述,需求分析是任何軟件設(shè)計(jì)開發(fā)的基礎(chǔ)環(huán)節(jié),直接決定軟件產(chǎn)品的成敗,失敗的軟件產(chǎn)品必然會(huì)帶來(lái)巨大的投資損失,所以必須提高對(duì)需求分析環(huán)節(jié)的重視程度,要充分認(rèn)識(shí)到需求分析工作的自身規(guī)律性,把心理學(xué)、哲學(xué)領(lǐng)域的思想觀念綜合運(yùn)用到需求分析和設(shè)計(jì)的工作中。用戶思維、場(chǎng)景思維、迭代思維、信息化思維和系統(tǒng)化思維就是結(jié)合多年的實(shí)踐經(jīng)驗(yàn),在需求分析環(huán)節(jié)總結(jié)提煉出來(lái)的思維方式,這些思維方式將深刻影響需求分析人員的實(shí)踐方式,影響著系統(tǒng)原型的設(shè)計(jì)和藍(lán)圖設(shè)計(jì)。深刻理解這些思維方式的核心含義并采用靈活多樣的實(shí)現(xiàn)形式,充分結(jié)合相關(guān)軟件工程的理論和工具,就可以使這些理論和工具發(fā)揮更大的作用,有利于發(fā)掘到用戶真正的需求,盡可能規(guī)避需求環(huán)節(jié)帶來(lái)的風(fēng)險(xiǎn)。