淺談軟件項(xiàng)目規(guī)模估計(jì):估什么?
預(yù)測(cè)是一件非常困難的事情,尤其是預(yù)測(cè)未來?!?尼爾斯.玻爾
定制化軟件開發(fā)是一件復(fù)雜的事情,尤其是目前我們主要提供的端到端軟件交付,它極大拓寬了軟件開發(fā)的生命周期,更加著眼于業(yè)務(wù)價(jià)值,但這也增加了整個(gè)設(shè)計(jì)、分析、交付過程中的復(fù)雜度。軟件交付已不僅僅是傳統(tǒng)意義上的技術(shù)交付,更包括了體驗(yàn)設(shè)計(jì)、業(yè)務(wù)分析、測(cè)試、管理、運(yùn)維、運(yùn)營(yíng)支持、以及流程管理的內(nèi)容。
基于筆者幾年淺薄的軟件交付經(jīng)驗(yàn),嘗試總結(jié)在初期進(jìn)行規(guī)模估計(jì)的時(shí)候,應(yīng)該考慮的范圍會(huì)有哪些。
體驗(yàn)設(shè)計(jì)
在筆者看來,在互聯(lián)網(wǎng)產(chǎn)品的影響下,目前客戶對(duì)體驗(yàn)設(shè)計(jì)的要求已經(jīng)到了“奢侈”的程度,經(jīng)常對(duì)僅有幾十個(gè)、甚至幾個(gè)用戶的系統(tǒng)提出很多關(guān)于體驗(yàn)式上的較高要求。但人畢竟是視覺動(dòng)物,好的展示效果、使用體驗(yàn)往往是產(chǎn)品的加分項(xiàng),能帶來比較大的口碑收益。同時(shí),這也是最容易跟客戶(尤其是業(yè)務(wù)客戶)產(chǎn)生交流和互動(dòng)的地方,有利于跟客戶的深入溝通,特別是這些終端用戶還經(jīng)常是項(xiàng)目重要的 Stakeholder。
在端到端交付中,設(shè)計(jì)人員會(huì)參與項(xiàng)目的整個(gè)交付過程,從最開始的 Discovery 一直到產(chǎn)品的上線,從與客戶溝通設(shè)計(jì)需求,到方案設(shè)計(jì)、方案確認(rèn),再到開發(fā)過程中與開發(fā)人員、業(yè)務(wù)人員協(xié)同方案落地,從源頭到落地保證方案的準(zhǔn)確性。
功能性需求
在敏捷軟件開發(fā)中,系統(tǒng)的業(yè)務(wù)功能會(huì)從終端用戶的業(yè)務(wù)價(jià)值交付出發(fā),被拆解為一個(gè)個(gè)用戶故事,形如:
故事卡模板
全部的業(yè)務(wù)功能會(huì)形成一個(gè)用戶故事列表,來從更細(xì)的粒度上描繪業(yè)務(wù)全景。 這部分是項(xiàng)目規(guī)模估計(jì)中最重要的一部分。所以業(yè)務(wù)分析和拆分的整個(gè)過程要非常非常非常的仔細(xì),因?yàn)槌跗诘倪@個(gè)故事列表很可能會(huì)成為對(duì)客戶的一個(gè)承諾,未來如果發(fā)現(xiàn)不在故事列表中,但也必須要做的重要支撐功能時(shí),就需要增加跟客戶協(xié)商談判的成本,或者默默的認(rèn)了。
在拆分完成進(jìn)行復(fù)檢時(shí),敏捷團(tuán)隊(duì)(而不僅僅是BA),可以問自己下面這幾個(gè)問題:
- 客戶所處的行業(yè)是什么?本行業(yè)有沒有固定的業(yè)務(wù)領(lǐng)域模型?客戶想做的是哪個(gè)模型的擴(kuò)展?
- 有沒有類似的競(jìng)品可以參考?
- 有沒有考慮系統(tǒng)交互的全部的用戶角色?
- 有沒有系統(tǒng)自動(dòng)推進(jìn)、不需要用戶交互的任務(wù)?
- 有沒有考慮全部的業(yè)務(wù)場(chǎng)景?正常的場(chǎng)景和異常的場(chǎng)景?
- 每個(gè)場(chǎng)景的每一步是如何對(duì)接的?具體的詳情是什么?是否可以進(jìn)行進(jìn)一步拆分?
- 每個(gè)環(huán)節(jié)使用的用戶數(shù)量是多少,會(huì)有性能要求么(精確到每個(gè)指標(biāo))?
- 系統(tǒng)邊界是什么?待開發(fā)系統(tǒng)和待集成系統(tǒng)各自完成的業(yè)務(wù)功能是什么?
- 是全新的系統(tǒng),還是需要與舊有系統(tǒng)做數(shù)據(jù)遷移,逐步替代?是否有逐步替代的計(jì)劃和方案?
拆分方法可以參考《庖丁解牛:產(chǎn)品需求分析》,在這里就不展開了。
非功能需求
除了功能需求外,非功能需求更要引起重視,這往往是項(xiàng)目容易忽略、掉到坑里的地方。
考慮到我們開發(fā)的往往是 Web 或者 Mobile的產(chǎn)品,最基本的,要考慮:
- 瀏覽器的兼容性問題:兼容哪些瀏覽器,兼容版本。
- 移動(dòng)端的兼容性問題:兼容哪些手機(jī)設(shè)備,操作系統(tǒng),版本號(hào)。
除此之外還包括:性能,可維護(hù)性,可測(cè)試性,可用性,可移植性,可擴(kuò)展性等,項(xiàng)目太多就不展開了,這里單說下性能。
性能是個(gè)比較容易量化的需求,比如同時(shí)并發(fā)訪問的人數(shù)、頁面讀取時(shí)間等。對(duì)于一些用戶量較大、高并發(fā)的場(chǎng)景,可能需要做多級(jí)的性能調(diào)優(yōu):從應(yīng)用代碼級(jí)別、到數(shù)據(jù)庫級(jí)別,再到部署架構(gòu)級(jí)別,甚至CDN緩存級(jí)別,都可能成為需要考慮的部分。
這部分根據(jù)項(xiàng)目的情況不同,差異會(huì)很大。有的項(xiàng)目可能并不需要投入太多精力在這上面,只需要對(duì)其中明顯的性能問題進(jìn)行一些修復(fù),但有的項(xiàng)目可能整個(gè)項(xiàng)目都在滿足性能上的要求,所以不可不察。
技術(shù)架構(gòu)
有些項(xiàng)目,客戶會(huì)比較看重我們對(duì)產(chǎn)品架構(gòu)的設(shè)計(jì)能力。這個(gè)時(shí)候,技術(shù)架構(gòu)不僅僅需要簡(jiǎn)單滿足短期項(xiàng)目的訴求,還需要有更長(zhǎng)遠(yuǎn)的規(guī)劃。在這種情況下,前期 Inception 的時(shí)間不能支撐整個(gè)項(xiàng)目技術(shù)架構(gòu)的設(shè)計(jì)和搭建,可能是需要更長(zhǎng)時(shí)間的設(shè)計(jì)和演進(jìn),這部分可以作為獨(dú)立的工作來進(jìn)行估計(jì)。部署架構(gòu)亦然。
開發(fā)部署環(huán)境
同時(shí),為了能夠支撐持續(xù)集成/持續(xù)交付,整個(gè)交付過程往往需要一系列的開發(fā)、測(cè)試、上線的環(huán)境,包括但不限于:CI環(huán)境、開發(fā)環(huán)境、QA環(huán)境、SIT環(huán)境、UAT環(huán)境、Pre-Prod和Prod環(huán)境。如果這些沒有預(yù)先準(zhǔn)備好的話,這些環(huán)境的準(zhǔn)備工作也會(huì)花不少時(shí)間,尤其是當(dāng)同時(shí)涉及客戶內(nèi)網(wǎng)和外網(wǎng)的情況下,甚至?xí)蔀轫?xiàng)目的嚴(yán)重風(fēng)險(xiǎn)。
與三方的集成
集成往往不是個(gè)小問題。目前的軟件項(xiàng)目,往往都是基于現(xiàn)有的系統(tǒng)進(jìn)行開發(fā),所以集成的工作必不可少。如何進(jìn)行契約的制定、數(shù)據(jù)的遷移、其它供應(yīng)商三方系統(tǒng)開發(fā)工作的推進(jìn)、接口的集成聯(lián)調(diào)等,往往都是項(xiàng)目全周期的工作重點(diǎn)。一定從項(xiàng)目第一天開始就要思考持續(xù)集成、持續(xù)交付,萬不可把這部分工作留到最后處理,血淚經(jīng)驗(yàn)之談。
測(cè)試
敏捷項(xiàng)目中的測(cè)試,跟傳統(tǒng)的先開發(fā)、再測(cè)試的這種方式極為不同的一點(diǎn)是:沒有固定的 Tester,而是全員來保證軟件的質(zhì)量。測(cè)試包括的范疇也比較廣,目前項(xiàng)目中的標(biāo)配包括了:
- 自動(dòng)化測(cè)試:?jiǎn)卧獪y(cè)試/集成測(cè)試/功能測(cè)試
- 迭代內(nèi)探索性測(cè)試
- 業(yè)務(wù)回歸測(cè)試
- 性能測(cè)試
- 安全測(cè)試
- 代碼質(zhì)量測(cè)試
- …
這些測(cè)試根據(jù)項(xiàng)目規(guī)模、復(fù)雜度的不同,規(guī)模估計(jì)上會(huì)有較大差距。就比如安全測(cè)試,有的系統(tǒng)是面對(duì)企業(yè)內(nèi)部用戶使用的,僅部署在內(nèi)網(wǎng),這樣僅實(shí)現(xiàn)內(nèi)部權(quán)限控制即可,一般不會(huì)有安全問題,安全測(cè)試的粒度也可以適當(dāng)放粗;但有的系統(tǒng)要部署在互聯(lián)網(wǎng)上,供終端用戶使用,此時(shí)安全測(cè)試不僅僅要考慮應(yīng)用層面的權(quán)限隔離,還要考慮網(wǎng)絡(luò)層面的防火墻、防攻擊策略等。這部分可以由專業(yè)的安全專家提供建議方案,看如何合理的將測(cè)試任務(wù)放到總的規(guī)模估計(jì)中,并與客戶提早達(dá)成一致。
驗(yàn)收交接流程
這部分是比較容易忽略的,主要包括了軟件的整個(gè)驗(yàn)收流程、代碼交接、文檔撰寫工作,根據(jù)情況不同,可能會(huì)使項(xiàng)目延長(zhǎng)1周~4周不等的時(shí)間,在項(xiàng)目之初也要考慮到。
總結(jié)
在初期進(jìn)行規(guī)模估計(jì)絕不是一件容易的事情,需要跟客戶的深度溝通,敏銳的洞察力,多角色的思考,以及快速的判斷,否則后面……
作者:張久坤,ThoughtWorks高級(jí)咨詢師。程序員出身,參與過多個(gè)國(guó)內(nèi)外大型項(xiàng)目的交付工作,對(duì)敏捷有深入的理解,目前專注于敏捷項(xiàng)目的業(yè)務(wù)分析和項(xiàng)目管理的工作。
題圖來自u(píng)nsplash,基于CC0協(xié)議
- 目前還沒評(píng)論,等你發(fā)揮!