探索與分享軟件工程中的創(chuàng)新
思考需求
是什么讓程序員們“改改改”!是什么導(dǎo)致程序員們“拖拖拖”!是什么導(dǎo)致開(kāi)發(fā)團(tuán)隊(duì)被奴役捞挥,陷入時(shí)間漩渦,使軟件質(zhì)量失控忧吟?總結(jié)一下也許能找到100個(gè)理由砌函,恐怕其中有50個(gè)理由和需求有關(guān)!毫不夸張的說(shuō)需求問(wèn)題摧毀了整個(gè)軟件。
我們需要的是一套完整的讹俊、正確的垦沉、一致的、可行的仍劈、無(wú)二義的厕倍、健壯的、必要的贩疙、可測(cè)試的讹弯、可修改的、可跟蹤的需求这溅。然而哪怕需求分析師們使出渾身解數(shù)组民,哪怕他們使用了“洪荒之力”,需求的變化不可避免悲靴,這個(gè)環(huán)節(jié)的變化導(dǎo)致其它環(huán)節(jié)更大的變化臭胜,在這些變化中導(dǎo)致的疏漏難以避免。為此我們可以采取兩種措施應(yīng)對(duì)癞尚。一種以不變應(yīng)萬(wàn)變進(jìn)行需求凍結(jié)耸三,一種順勢(shì)而為進(jìn)行需求補(bǔ)充。
需求凍結(jié)意味著生產(chǎn)資源按既定的方案進(jìn)行分配否纬,并推進(jìn)生產(chǎn)實(shí)施吕晌。不言而喻,它的風(fēng)險(xiǎn)在于輸出的成果與實(shí)際需求脫節(jié)临燃,客戶(hù)得到他不想要的或者是過(guò)時(shí)的內(nèi)容睛驳。為了避免這種情況,把需求目標(biāo)定義的足夠小膜廊,然后快速完成必要的內(nèi)容并交付乏沸。敏捷開(kāi)發(fā)就是這樣一個(gè)理念,通過(guò)小目標(biāo)的迭代來(lái)完成一個(gè)大目標(biāo)爪瓜。然而這并不是一個(gè)完美的方案蹬跃,過(guò)時(shí)的內(nèi)容意味著生命周期結(jié)束,當(dāng)整個(gè)項(xiàng)目沒(méi)有結(jié)束時(shí)铆铆,就必須要替換已經(jīng)處于生命周期結(jié)束內(nèi)容蝶缀,迭代變成了替換,也許就在替換過(guò)程中就出現(xiàn)了新的問(wèn)題薄货。如果采取強(qiáng)硬的姿態(tài)拒絕替換翁都,那意味著軟件的某些功能不足,質(zhì)量受到影響谅猾。
需求補(bǔ)充并不是那么輕松柄慰。需求的確定需要經(jīng)歷采集鳍悠、整理、測(cè)試坐搔、確認(rèn)幾個(gè)過(guò)程藏研。需求的變更使得生產(chǎn)者要不斷的在需求分析階段投入資源,在實(shí)際生產(chǎn)中這樣做恐怕會(huì)是難以承受成本投入概行。無(wú)疑這使我們陷入困境蠢挡,難道我們對(duì)此就束手無(wú)冊(cè)了嗎?在中外各國(guó)的資料里沒(méi)有找到答案占锯,這就需要自已想辦法解決問(wèn)題袒哥!
我們需要對(duì)需求做一次需求分析缩筛。我國(guó)是一個(gè)高速發(fā)展的國(guó)家消略,這就意味著在政治經(jīng)濟(jì)領(lǐng)域的變化快且頻繁。一黨執(zhí)政多黨參政的政治協(xié)商制度使我國(guó)的政策延續(xù)時(shí)間較長(zhǎng)且有累進(jìn)的特征瞎抛,政策轉(zhuǎn)向發(fā)生在某些明顯畸形行業(yè)里的概率較高艺演,信息化尚屬于發(fā)展階段,對(duì)信息化產(chǎn)品的需求以?xún)?nèi)容為主桐臊。尚缺少核心的信息化基礎(chǔ)軟件產(chǎn)品胎撤,如操作系統(tǒng),開(kāi)發(fā)語(yǔ)言断凶,驅(qū)動(dòng)程序伤提,虛擬化工具等。
在這樣的環(huán)境下认烁,軟件需求普遍的矛盾在于對(duì)產(chǎn)品/項(xiàng)目的需求隨時(shí)間變化可能產(chǎn)生變化肿男,而需求文檔只能靜態(tài)的表達(dá)當(dāng)前的需求;用戶(hù)對(duì)新概念的產(chǎn)品/項(xiàng)目的認(rèn)知不足却嗡,包括對(duì)它的內(nèi)容舶沛、適用邊界、操作界面窗价、操作方式如庭、成本及收益等,導(dǎo)致需求文檔無(wú)法確切的表達(dá)這些內(nèi)容撼港。我們無(wú)法預(yù)測(cè)未來(lái)會(huì)發(fā)生什么事件坪它,但從金融領(lǐng)域得到靈感,未來(lái)的發(fā)展趨勢(shì)未必不可預(yù)測(cè)帝牡。因此無(wú)法在需求文檔里體現(xiàn)變化的內(nèi)容往毡,但可以預(yù)估未來(lái)變化的趨勢(shì)。任何產(chǎn)品都會(huì)有一個(gè)生命周期過(guò)程否灾,在這個(gè)周期中它的成熟度會(huì)有一個(gè)規(guī)律性的變化卖擅。描述它的規(guī)律可以使用戶(hù)比較直觀的理解產(chǎn)品或項(xiàng)目本身。因此在需求文檔里可以體現(xiàn)產(chǎn)品的成熟過(guò)程,以表達(dá)它的部分特征惩阶。從而使需求文檔本身就能包容有限的變化挎狸。
軟件的發(fā)展趨勢(shì)或者成熟度變化都是一個(gè)種抽象的、模糊的的信息断楷,如果用大段的文字表達(dá)這種信息锨匆,極有可能會(huì)使每個(gè)使用者各有各的理解。因?yàn)槊總€(gè)人的知識(shí)冬筒、閱歷并不相同恐锣,對(duì)同一段文字所形成的思維模型出現(xiàn)差異并不奇怪。然而對(duì)需求文檔而言就會(huì)詞不逮理舞痰,這是典型的二義性特征土榴。用盡可能簡(jiǎn)單的圖表來(lái)表達(dá),顯然會(huì)是一個(gè)目達(dá)耳通的策略响牛。不論是發(fā)展趨勢(shì)還是成熟度變化玷禽,從邏輯上都是對(duì)“成長(zhǎng)”的描述,這就為我們創(chuàng)建單一的表達(dá)方式創(chuàng)造了條件呀打。
而我想到的最簡(jiǎn)單的方法是在需求理整階段繪制一張“需求堆砌層次圖”矢赁。所有講需求分析的教材中都會(huì)提到“馬洛斯需求層次理論”,這個(gè)理論所搭配的圖就是一個(gè)層次圖贬丛。這個(gè)圖表達(dá)了每個(gè)層次的目標(biāo)撩银,層次與層次之間是一個(gè)直觀的演進(jìn)方向。把需求采集的內(nèi)容整理成這樣一張層次圖豺憔,不僅表達(dá)清楚了需求目標(biāo)额获,也顯示出了需求演進(jìn)。這為發(fā)掘潛在的需求提供了一種方法焕阿。
漢語(yǔ)的語(yǔ)言表達(dá)邏輯為建立層次圖的過(guò)程提供了便利咪啡。需求歸類(lèi)為基礎(chǔ)需求、期望需求暮屡、興奮需求撤摸、反向需求,我把漢語(yǔ)詞匯歸納行為詞(通常是動(dòng)詞)褒纲、修飾詞(通常是形容詞)和目的詞(通常是名詞)准夷。可以發(fā)現(xiàn)一個(gè)經(jīng)驗(yàn)規(guī)律:在漢語(yǔ)構(gòu)成了某一個(gè)需求描述中莺掠,修飾性詞往往表達(dá)了期望需求和興奮需求衫嵌,目的詞很大概率表達(dá)了基礎(chǔ)需求,行為詞則表達(dá)了需求點(diǎn)呈現(xiàn)的聯(lián)系彻秆。而層次圖中底層表示的是基礎(chǔ)需求楔绞,頂層則有很大概率表達(dá)了興奮需求结闸,上層是對(duì)下層的演進(jìn)。然而我們還需要發(fā)掘隱藏的需求酒朵,需求描述也許沒(méi)有表達(dá)清楚實(shí)際目的桦锄,但描述信息則可能已經(jīng)包含了實(shí)際目的的概念,因此把現(xiàn)有需求目的詞抽象化用這種方法探測(cè)潛在的需求蔫耽。抽象化可能產(chǎn)生多個(gè)概念结耀,這些概念可能只有一個(gè)與實(shí)際需求有關(guān),此時(shí)行為詞呈現(xiàn)的聯(lián)系就能幫助我們篩選出那個(gè)真正的需求匙铡。這就完整的構(gòu)成了“需求堆砌層次圖”图甜。
如果有這樣一個(gè)需求:
一匹跑得更快的馬
需求描述 | 描述抽象 |
---|---|
更快 | |
馬 | 動(dòng)物,牲畜鳖眼,交通工具 |
能發(fā)現(xiàn)什么嗎黑毅?