個(gè)人軟件過程3 需求分析
一間私募基金,希望開發(fā)軟件實(shí)現(xiàn)他們自己的一種分析思路,這是一個(gè)小項(xiàng)目,我們隱去他們的分析思路,僅就行情更新和顯示K線圖這部分內(nèi)容作為具體的例子,演示需求分析、階段劃分、任務(wù)劃分、問題和Bug處理、源代碼版本管理的全過程。這個(gè)項(xiàng)目由我個(gè)人承擔(dān)全部工作,三個(gè)月的業(yè)余時(shí)間完成,本系列描述的是前兩個(gè)月的工作內(nèi)容。
我們首先需要確定項(xiàng)目的目標(biāo)。簡(jiǎn)單的表述為:查看股票的K線圖。這意味著我們需要每天更新當(dāng)天的股市行情、除權(quán)除息資料,同時(shí)能夠按照他們習(xí)慣的方式繪制K線圖。
第二步則是列出功能清單: 所謂需求,是圍繞著項(xiàng)目目標(biāo)來定的。 既然要分析股票的走勢(shì),那么股票每天交易的行情數(shù)據(jù),顯然要保存,所以有“更新日線”,而除權(quán)除息,會(huì)影響到收盤價(jià)和成交量,為了讓行情變化更精確,需要導(dǎo)入兩個(gè)市場(chǎng)的權(quán)息資料。這些東西未必是用戶能單方面寫好交給你的。用戶能夠解釋清楚他做這個(gè)項(xiàng)目的意圖,你能夠理解,最終用上面簡(jiǎn)單的文字表達(dá),用戶能夠認(rèn)可,這就是需求分析的過程。
我們也要注意一點(diǎn),項(xiàng)目目標(biāo)和功能清單是用戶要看的,必須使用用戶的語言,不要有任何計(jì)算機(jī)專業(yè)的術(shù)語。我們的思考是在"要做什么“的層次,而不是”怎么去做"的層次,所以這個(gè)過程中完全不需要做技術(shù)細(xì)節(jié)方面的考量。
同時(shí),功能這個(gè)詞,有許多別名:用例、用戶故事、情景、用戶場(chǎng)景等等,各自都號(hào)稱自己有所不同。但我的看法是,你能夠輕松的告訴用戶,“我們已經(jīng)完成了三項(xiàng)功能”,但你不能對(duì)用戶這么說“我們完成了三項(xiàng)用戶場(chǎng)景”,聽起來真的挺二的。作為項(xiàng)目經(jīng)理很多年,我在團(tuán)隊(duì)中強(qiáng)調(diào)最多的,不是那些不靠譜的勤奮、專心之類的東西,而是“要說人話,不要說鬼話”。再?gòu)?fù)雜的東西,有辦法用大白話給多數(shù)人講清楚,這就說明你自己是真明白了。
每項(xiàng)功能,請(qǐng)大家注意語法:動(dòng)賓結(jié)構(gòu),大致是“做”“什么”。比如“更新”是動(dòng)詞,更新什么,更新日線。主謂賓大家是知道的,這里忽略了“誰”來做什么,這個(gè)主語。比如查看K線圖,一些程序員很容易寫成“生成K線圖”,這里的區(qū)別是立場(chǎng)問題,查看是用戶在查看,生成是機(jī)器在生成。功能的名稱應(yīng)該體現(xiàn)用戶要做的事情,站在用戶的角度思考,而不是機(jī)器或者程序員要做什么。
不要試圖在需求中列出所有的業(yè)務(wù)細(xì)節(jié),我的理解,需求更側(cè)重于闡述用戶目標(biāo),“他們希望干什么”,而不是“怎么干”,文字工作才不會(huì)太多。許多大公司動(dòng)不動(dòng)幾百頁的文字,我很懷疑用戶和程序員是否有精力去看,那只是招投標(biāo)的形式主義罷了。至于“怎么干”,在下一節(jié)我用“更新日線”這項(xiàng)功能具體來說明,如何用較少的文字清晰的說清楚“怎么干”。
功能清單的順序和大小比較重要,我們按照先做什么后做什么這樣的方式列出功能清單。那么順序如何確定?一般的原則是"用戶能盡快看到結(jié)果",其次的原則是"高風(fēng)險(xiǎn)優(yōu)先"。比如正常的排列,我們應(yīng)該先用模擬數(shù)據(jù)實(shí)現(xiàn)"顯示K線圖"功能,然后更新日線,然后處理復(fù)權(quán)。不過慮到對(duì)VC完全沒有接觸過,更新日線這項(xiàng)功能涉及到界面處理體系、文件操作、數(shù)據(jù)庫(kù)操作、多線程編程等多個(gè)方面的內(nèi)容,覆蓋的知識(shí)范圍更廣,從學(xué)習(xí)VC編程的角度來說,更為合適。所以我按照更新日線、查看K線圖、復(fù)權(quán)這樣的順序來排列。對(duì)于功能相對(duì)大小的評(píng)估,我們可以看到,復(fù)權(quán)應(yīng)該是最簡(jiǎn)單的,定為2,更新日線大約需要2倍的時(shí)間,定為4。查看K線圖也定為4,至于單位,有的體系叫做故事點(diǎn)、情景點(diǎn)或者理想工作時(shí),無所謂,我們只需要一個(gè)大概的工作量評(píng)估。功能清單簡(jiǎn)單的羅列如下:
1、更新日線 4
2、查看K線圖 4
3、復(fù)權(quán) 2
第三步,評(píng)估風(fēng)險(xiǎn)因素:
1、因?yàn)橐龀勺烂嫦到y(tǒng),基金成員各自的電腦操作系統(tǒng)不一,同時(shí)這個(gè)項(xiàng)目是海量計(jì)算的項(xiàng)目,所以最好的選擇是使用VC開發(fā)。這個(gè)我從來沒用過,需要在項(xiàng)目過程中邊學(xué)邊做。這也是很有意思的事情,多年前我的母校,武漢大學(xué),計(jì)算機(jī)編程入門的課程是Pascal,老師當(dāng)時(shí)還給大家解釋Basic是如何不肖、用C語言入門如何不好,然后李衛(wèi)華教授因?yàn)樽约阂匀斯ぶ悄転橹饕难芯款I(lǐng)域,給我們開了Lisp和Prolog兩門課程,出來工作后,主要用foxpro做過應(yīng)用、然后是turbo Pascal,即使是匯編語言也玩弄得精熟(因?yàn)楫?dāng)時(shí)無聊的去分析漢化Dos的源代碼),然后從.net平臺(tái)推出開始,就一直停留下Asp.net和Wpf,整個(gè)職業(yè)經(jīng)歷居然與編程語言排行榜中的頭兩位無緣:java和C++。
2、時(shí)間和人員方面:因?yàn)楣炯夹g(shù)人員忙于另外一個(gè)企業(yè)項(xiàng)目,出于對(duì)證券行業(yè)的興趣,接下這個(gè)項(xiàng)目。我本人大約每天能夠有3到5個(gè)小時(shí)的時(shí)間、周六周日的部分時(shí)間。
簡(jiǎn)單的說:用從來沒有用過的語言,在從未接觸過的領(lǐng)域,花費(fèi)三個(gè)月的業(yè)余時(shí)間,完成具有相當(dāng)算法復(fù)雜性的項(xiàng)目。
當(dāng)然最后的結(jié)果肯定是皆大歡喜的,否則我不會(huì)拿出來顯擺。這也說明興趣和自信對(duì)工作效率的影響,你喜歡做的事情,必然會(huì)全力投入。至于VC,傳說中復(fù)雜的C++語法、需要多少年才能精通的MFC,在我看來也就是窗戶紙罷了-----對(duì)于類似MFC這類東西,我一向的原則是,你完全沒必要學(xué)會(huì)制造電視、制造里面的每一塊電路板,你只要會(huì)使用電視就行了,能有多復(fù)雜?至于語法,有C#的底子,反過來C++估計(jì)也不會(huì)困難。
風(fēng)險(xiǎn)因素是列給開發(fā)團(tuán)隊(duì)看的,對(duì)項(xiàng)目的時(shí)間安排是有意義的。當(dāng)然,也是和用戶在價(jià)格、時(shí)間方面討價(jià)還價(jià)的依據(jù)。比如上述風(fēng)險(xiǎn)因素中,你沒有用過VC是不能說的,否則用戶很可能懷疑你能否勝任。自動(dòng)劃分趨勢(shì)的復(fù)雜性可以強(qiáng)調(diào),這樣有助于在不能如期完成時(shí),預(yù)先找到拖延的借口。所以風(fēng)險(xiǎn)因素羅列如下:
1、VC完全沒有接觸過
2、人員和時(shí)間不足。
第四步,劃分階段
我們按照功能清單的順序、每項(xiàng)功能的相對(duì)大小、風(fēng)險(xiǎn)這三個(gè)方面的考慮,來劃分階段,每個(gè)階段為四周的時(shí)間,要"徹底實(shí)現(xiàn)"羅列的功能,這也是Scrum、Rup之類過程同樣注重的迭代開發(fā)、小版本發(fā)布的觀念。簡(jiǎn)單的說:這個(gè)階段完成的功能,通常就是用戶最后見到的樣子,傷其十指不如斷其一指。之所以稱作"階段"而不是"迭代",這也是考慮到和用戶交流方面的問題,仍然是那個(gè)原則:說人話。
那么第一個(gè)階段,我們實(shí)現(xiàn)第一項(xiàng)功能;第二個(gè)階段,我們實(shí)現(xiàn)第2、3兩項(xiàng)功能。
對(duì)于工期緊張的項(xiàng)目,我一般以兩周為一個(gè)階段來安排時(shí)間。這個(gè)項(xiàng)目因?yàn)槭菢I(yè)余時(shí)間工作,同時(shí)VC的學(xué)習(xí)有著不可預(yù)測(cè)的因素,因此按照每個(gè)階段四周時(shí)間安排。
最后略微總結(jié)一下:通過和用戶約兩個(gè)小時(shí)的交流,我們知道了用戶啟動(dòng)這個(gè)項(xiàng)目的目標(biāo),列出了功能清單,并用簡(jiǎn)單的文字描述,取得用戶的認(rèn)可。然后工作兩個(gè)小時(shí),列出風(fēng)險(xiǎn)因素、劃分階段。接下來我們將為第一個(gè)階段第一項(xiàng)功能,劃分開發(fā)任務(wù)、提出問題,這個(gè)過程大約也需要2小時(shí)左右。也就是說,對(duì)于這類小型項(xiàng)目,項(xiàng)目經(jīng)理大約在一個(gè)工作日之內(nèi),就能夠做好前期準(zhǔn)備工作,第二天每個(gè)開發(fā)人員都能夠在Team Fundation Server中看到自己的工作任務(wù)。即使是比較復(fù)雜的項(xiàng)目,這個(gè)過程也不用太長(zhǎng)時(shí)間,我的極限是一周,任何情況下,從用戶決定啟動(dòng)項(xiàng)目開始,最多一周之內(nèi)開發(fā)團(tuán)隊(duì)的程序員就應(yīng)該能夠開始工作。
接下來的一節(jié),我們將介紹第一項(xiàng)功能的概要說明、用戶體驗(yàn)設(shè)計(jì)和任務(wù)劃分。

浙公網(wǎng)安備 33010602011771號(hào)