有一種場(chǎng)景大家可能會(huì)覺(jué)得似曾相識(shí),項(xiàng)目經(jīng)理(產(chǎn)品狗)口頭或者簡(jiǎn)單記錄一下軟件產(chǎn)品大致要做的功能菩混,然后就直接讓研發(fā)團(tuán)隊(duì)的人員(程序猿)去狂擼代碼暖释,接著他自己就去喝茶撩妹或者回家陪老婆了(當(dāng)然小編不會(huì)告訴你,寶原科技的項(xiàng)目經(jīng)理簡(jiǎn)直不要太負(fù)責(zé)墨吓,喝茶撩妹倒沒(méi)有,溝通到暫時(shí)性失聲好么......)纹磺。
這種擼起袖子就開(kāi)始的方式帖烘,看似簡(jiǎn)單高效,便于直接溝通橄杨,能夠快速迭代秘症。殊不知,沒(méi)有一份正規(guī)且實(shí)時(shí)更新的功能需求設(shè)計(jì)文檔式矫,后期將會(huì)付出三四倍的代價(jià)去補(bǔ)救......
最終會(huì)引發(fā)一場(chǎng)產(chǎn)品狗和程序猿之間的“猿狗大戰(zhàn)”
WHY——為什么需要功能需求設(shè)計(jì)說(shuō)明書(shū)
在沒(méi)有功能設(shè)計(jì)文檔時(shí)乡摹,主要有下面幾個(gè)問(wèn)題:
前期研究團(tuán)隊(duì)溝通成本
如何要讓團(tuán)隊(duì)里面的所有人員對(duì)軟件產(chǎn)品的功能需求設(shè)計(jì)達(dá)成共識(shí)?
研發(fā)人員有一個(gè)通膊勺:以為自己了解了一小塊需求就立即開(kāi)始埋頭狂擼......代碼聪廉。最終很可能與項(xiàng)目經(jīng)理和客戶真正想要的功能相差甚遠(yuǎn)。
于是故慈,當(dāng)研發(fā)人員把數(shù)據(jù)庫(kù)設(shè)計(jì)好了板熊,代碼也已經(jīng)寫(xiě)得差不多了,這時(shí)產(chǎn)品狗突然通知察绷,說(shuō)我們的需求要做一點(diǎn)變化干签。大家都知道,對(duì)程序猿來(lái)說(shuō)拆撼,那一點(diǎn)變化容劳,可能會(huì)害得程序猿的整個(gè)世界都不好了喘沿!之前設(shè)計(jì)的數(shù)據(jù)庫(kù)、寫(xiě)的代碼都不能用了竭贩!所以真的沒(méi)有什么比加班加點(diǎn)寫(xiě)了幾個(gè)月的代碼蚜印,最終被產(chǎn)品狗告知需求變了,代碼要?jiǎng)h除重新寫(xiě)更可怕的事了(如果有娶视,那就是連工資都不漲了~)......
還有一個(gè)比較隱諱的事情是晒哄,每個(gè)程序猿都特么認(rèn)為自己寫(xiě)的代碼很牛逼(其實(shí)對(duì)于大多數(shù)人這只是一個(gè)錯(cuò)覺(jué),醒醒吧肪获,你寫(xiě)的代碼并不優(yōu)秀)寝凌,不太愿意刪除之前所寫(xiě)的東西,所以總是想在原有的代碼基礎(chǔ)上進(jìn)行修改孝赫。讓他們刪除代碼较木?比殺了他還難!
但是小編公司的就很不一樣的了青柄,在項(xiàng)目經(jīng)理了解到客戶的需求后伐债,他每天都會(huì)Code Review團(tuán)隊(duì)里面所有人的代碼,一直要求他們把不用的代碼去掉致开,雖然手頭同時(shí)有好幾個(gè)項(xiàng)目在忙峰锁,但大家的極力配合實(shí)現(xiàn)了事半功倍,在客戶規(guī)定的時(shí)間內(nèi)高效的完成了任務(wù)双戳。
前期任務(wù)進(jìn)度安排和分配
該文檔也是任務(wù)進(jìn)度安排和分配的重要依據(jù)虹蒋。在沒(méi)有功能需求設(shè)計(jì)文檔之前的所有任務(wù)進(jìn)度計(jì)劃都是瞎扯淡,都不知道具體要做什么東西飒货,哪能拿出合理的任務(wù)進(jìn)度計(jì)劃魄衅。如果你拿出來(lái)了,我也不相信那是經(jīng)過(guò)認(rèn)真分析做的進(jìn)度計(jì)劃塘辅,我知道那只是用來(lái)給領(lǐng)導(dǎo)看的晃虫。
中期產(chǎn)品經(jīng)理需求變更
軟件在開(kāi)發(fā)過(guò)程中難免會(huì)遇到功能的需求變更,此時(shí)將程序猿們召集在一起把所有的變更講一遍扣墩?接著走出會(huì)議室的時(shí)候可能每個(gè)人都有自己的理解哲银。于是下一場(chǎng)戰(zhàn)爭(zhēng)已悄然臨近......
后期測(cè)試團(tuán)隊(duì)產(chǎn)品測(cè)試
所以,測(cè)試團(tuán)隊(duì)在項(xiàng)目Kickoff 之時(shí)就應(yīng)該介入呻惕,而不是在產(chǎn)品開(kāi)發(fā)完成之后盘榨。
前期測(cè)試團(tuán)隊(duì)就應(yīng)該對(duì)功能需求設(shè)計(jì)文檔充分了解,且以此來(lái)編寫(xiě)具體的測(cè)試用例文檔蟆融。否則草巡,只能是在界面上進(jìn)行簡(jiǎn)單的表面測(cè)試。而且真正的BUG 并不在表面,這些BUG 會(huì)藏得很深山憨,最后等到發(fā)現(xiàn)的時(shí)候可能已經(jīng)造成很大的損失查乒。
至此,讓甚至都不知道產(chǎn)品有哪些功能的測(cè)試團(tuán)隊(duì)來(lái)收尾郁竟,會(huì)造成他們想覆蓋全部的測(cè)試用例都會(huì)變得異常艱難玛迄!
測(cè)試用例應(yīng)該盡可能詳細(xì),盡量保證測(cè)試用例走完能確保產(chǎn)品能上線發(fā)布棚亩。下圖為我們?cè)诘卿涀?cè)時(shí)用到的一部分用例:
WHERE——文檔應(yīng)該放在何處
功能說(shuō)明文檔一定要保持實(shí)時(shí)性蓖议,任何變更的需求,新增的需求都必須在該文檔中體現(xiàn)讥蟆。
產(chǎn)品狗在編寫(xiě)完文檔后勒虾,要發(fā)給項(xiàng)目經(jīng)理、研發(fā)人員瘸彤、銷(xiāo)售人員修然、運(yùn)營(yíng)推廣人員等等,如何保證每個(gè)人的文檔都是最新的呢质况?如果通過(guò)QQ愕宋、郵件等方式,是不是每次更新都要重新通知所有人:“嘿结榄,各位兄弟中贝,文檔作了一次修改,我給大家都重新發(fā)一份新的”臼朗。每個(gè)人電腦里面都有好幾個(gè)版本的文檔邻寿,時(shí)間長(zhǎng)了,自己都忘記哪個(gè)文檔是最新的依溯;產(chǎn)品狗也記不清是否是所有相關(guān)的人都發(fā)了最新的文檔......
研發(fā)人員可能會(huì)說(shuō)通過(guò)SVN 來(lái)作版本管理啊,給每個(gè)人分配一個(gè)帳號(hào)瘟则±杪“天啊,SVN 是啥醋拧?”-銷(xiāo)售人員慷嗜、運(yùn)營(yíng)推廣人員估計(jì)一臉懵逼。
更好的辦法是通過(guò)團(tuán)隊(duì)實(shí)時(shí)協(xié)作的云端工具丹壕。從而實(shí)現(xiàn)分享和實(shí)時(shí)討論庆械,告別反復(fù)修改版本再發(fā)送郵件的麻煩。如果你會(huì)FQ菌赖,那你可以使用Google Docs缭乘、Office Online。否則你可以使用石墨文檔琉用、一起寫(xiě)堕绩。
WHAT——什么是功能需求設(shè)計(jì)文檔&應(yīng)該包含哪些內(nèi)容
功能需求設(shè)計(jì)文檔最重要的是描述產(chǎn)品所要包含的所有功能策幼,越詳細(xì)越好,可以結(jié)合產(chǎn)品的原型設(shè)計(jì)圖來(lái)講解奴紧。讓項(xiàng)目所有相關(guān)人知道產(chǎn)品是什么特姐,包含哪些頁(yè)面,頁(yè)面如何跳轉(zhuǎn)等黍氮。
該文檔是產(chǎn)品經(jīng)理唐含、項(xiàng)目經(jīng)理、研發(fā)人員沫浆、銷(xiāo)售人員捷枯、運(yùn)營(yíng)推廣人員溝通的一個(gè)橋梁,一份好的功能需求設(shè)計(jì)文檔是軟件產(chǎn)品是否能成功的關(guān)鍵件缸。
考慮是該文檔的受眾铜靶,這份文檔不應(yīng)該包含具體的編程技術(shù)上的說(shuō)明。不管你是用C#/.NET他炊、JAVA 還是其它争剿,這應(yīng)該是另外研發(fā)團(tuán)隊(duì)內(nèi)部使用的一份文檔。
一般人第一反映就是去網(wǎng)上找一份功能需求設(shè)計(jì)文檔模板痊末,我個(gè)人感覺(jué)那些模板90% 根本沒(méi)有存在的必要蚕苇,太過(guò)形式化,沒(méi)有實(shí)際意義和模板化的內(nèi)容凿叠,只會(huì)使文檔成為一個(gè)擺飾涩笤,更加浪費(fèi)大家的時(shí)間。
那么一份合格的軟件需求設(shè)計(jì)文檔應(yīng)該包括哪些內(nèi)容呢盒件?
項(xiàng)目背景
項(xiàng)目產(chǎn)生的實(shí)際背景蹬碧、具體的運(yùn)用場(chǎng)景、大致要解決什么樣的問(wèn)題炒刁、針對(duì)的閱讀對(duì)象恩沽、版本修改記錄、文檔作者以及修改人信息翔始。
詳細(xì)的功能點(diǎn)描述
寫(xiě)明產(chǎn)品所包含的所有功能點(diǎn)罗心,對(duì)功能、界面城瞎、接口的描述一定要充分詳細(xì)渤闷,每處可以交互的地方都要給出具體的說(shuō)明。再次強(qiáng)調(diào)脖镀,一定要詳細(xì)描述每一個(gè)頁(yè)面所擁有的功能飒箭。
產(chǎn)品不包含的功能點(diǎn)說(shuō)明
除了寫(xiě)明產(chǎn)品所包含的所有功能點(diǎn)外,還應(yīng)該寫(xiě)明軟件所不包含的功能,這一點(diǎn)也很重要补憾。
使用場(chǎng)景(畫(huà)面感)
將復(fù)雜的業(yè)務(wù)邏輯融入到具體的使用場(chǎng)景中漫萄,更容易讓項(xiàng)目經(jīng)理、研發(fā)人員盈匾、銷(xiāo)售人員腾务、運(yùn)營(yíng)推廣人員不同背景的人產(chǎn)生共識(shí)。
流程圖
大家都知道“一圖勝千言”削饵,能用圖說(shuō)明的盡量用圖來(lái)說(shuō)明岩瘦,只通過(guò)大量枯燥的文字可能效果并不太好。流程圖是一種用圖形表示邏輯和算法的工具窿撬,特別對(duì)研發(fā)人員擼代碼很有幫助启昧。
Windows 用戶可以使用Visio,Mac用戶可以使用 OmniGraffle劈伴,還可以使用免費(fèi)在線作圖,實(shí)時(shí)協(xié)作工具 ProcessOn密末。
我之前就用ProcessOn 畫(huà)了一個(gè)設(shè)置了緩存的網(wǎng)絡(luò)請(qǐng)求的流程圖,這里作個(gè)參考:
人員角色“實(shí)例化”
跟上面提到的“畫(huà)面感”相結(jié)合跛璧,將人員和角色能夠?qū)嵗?/p>
比如我們的產(chǎn)品要實(shí)現(xiàn)如下功能严里,有兩種表達(dá)方式:
醫(yī)生給患者測(cè)量血壓,并記錄到系統(tǒng)中追城。
上海華山醫(yī)院腎內(nèi)科的王主任醫(yī)生在給32號(hào)病區(qū)1號(hào)病床的患者劉阿姨量血壓刹碾,將測(cè)量到的血壓100/70mmHg輸入到透析管理系統(tǒng)。
哪種方式更便于理解座柱?特別是對(duì)醫(yī)療知識(shí)不太了解的碼農(nóng)們迷帜。當(dāng)然可能有人覺(jué)得第一種方式更簡(jiǎn)潔∩矗可能是我舉的例子不夠好戏锹,也可能是我的理解能力不夠強(qiáng)。(但不要懷疑我的智商火诸!哈哈哈...)
結(jié)合產(chǎn)品原型設(shè)計(jì)圖
產(chǎn)品原型設(shè)計(jì)圖可以幫助粗枝大葉地了解產(chǎn)品大致的框架锦针,便于項(xiàng)目經(jīng)理、研發(fā)人員惭蹂、銷(xiāo)售人員伞插、運(yùn)營(yíng)推廣人員等人在產(chǎn)品未開(kāi)發(fā)之前對(duì)產(chǎn)品有一個(gè)相對(duì)直觀的認(rèn)識(shí)割粮。沒(méi)有一個(gè)原型圖盾碗,就想把這幫人拉到同一個(gè)頻道溝通一定是不可能的事!(如果你做到了舀瓢,來(lái)來(lái)來(lái)廷雅,我們公司就急缺您這樣的人才!)
最后,常用的原型設(shè)計(jì)工具有墨刀航缀、Mockplus商架、Axure。
HOW——如何保證文檔質(zhì)量
要保證需求設(shè)計(jì)文檔能夠?qū)崟r(shí)更新同步芥玉,而不是疲于應(yīng)付蛇摸。然后讓大家都通過(guò)該文檔來(lái)進(jìn)行溝通,誰(shuí)有問(wèn)題直接去看文檔灿巧,需求一旦變更首先就更新到文檔赶袄。
接著研發(fā)人員就應(yīng)該嚴(yán)格按文檔上的描述來(lái)開(kāi)發(fā),所以產(chǎn)品的正確打開(kāi)方式抠藕,NO功能需求文檔饿肺,NO開(kāi)發(fā)!
任何口頭、QQ或郵件上的新的功能需求一概不理盾似!
然后另一個(gè)比較重要的前提是產(chǎn)品狗要比較給力敬辣,否則老板還是會(huì)讓你狂擼代碼...