當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 房地產(chǎn)OA系統(tǒng) > 相關(guān)系統(tǒng) > 房地產(chǎn)項(xiàng)目管理軟件
原型方法論---關(guān)于軟件原型方法若干問(wèn)題的討論
申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114
太多了!終于簽下合同-->得到了“正式”的客戶提供的“需求書”的幾片紙-->憑借自己的理解立即投入開發(fā)-->“木已成舟”,生米終于熬成粥-->用戶拒絕接受?-->艱難地修改,反復(fù)修改,開發(fā)人員厭倦了,而用戶對(duì)系統(tǒng)用之無(wú)味,棄之可惜,遂成雞肋。-->由此后期收款遙遙無(wú)期,軟件公司不再和用戶保持溝通-->互相埋怨,扯皮由此而生?;蛘?,一個(gè)項(xiàng)目拆成為多期,從而收取一部分款項(xiàng),而很多的開發(fā)都作廢。這樣的案例真是何其多也!究其主要原因,與其說(shuō)是沒(méi)有搞定關(guān)鍵客戶,或者項(xiàng)目管理不當(dāng),不如說(shuō)是沒(méi)有幫助客戶解決其問(wèn)題,對(duì)客戶真正的需求研究不夠。實(shí)際上,原型方法是解決此類問(wèn)題、確保項(xiàng)目成功的最佳途徑。
我在寫此文的同時(shí),也試圖尋找資料,不知道是本就沒(méi)有,還是自己所不幸而未找到??磥?lái)原型并沒(méi)有明確的標(biāo)準(zhǔn),而目前不同軟件公司的理解和做法各不相同也就不奇怪了。但從軟件過(guò)程的角度來(lái)考察,原型法仍有著通用的優(yōu)化的做法。本文試圖從作者的實(shí)踐經(jīng)驗(yàn)出發(fā),對(duì)原型方法進(jìn)行思考與探討。
另外,本文是發(fā)散型的,在研究原型的同時(shí),也討論了原型相關(guān)的內(nèi)容。原型本質(zhì)上有些象是拋磚引玉,而本文也旨在拋磚引玉,但無(wú)意于一概地論定什么。
2 什么是原型
原型(prototype)即把系統(tǒng)主要功能和接口通過(guò)快速開發(fā)制作為“軟件樣機(jī)”,以可視化的形式展現(xiàn)給用戶,及時(shí)征求用戶意見,從而明確無(wú)誤地確定用戶需求。同時(shí),原型也可用于征求內(nèi)部意見,作為分析和設(shè)計(jì)的接口之一,可方便于溝通。
2.2 原型的主要價(jià)值
原型法主要價(jià)值是可視化,強(qiáng)化溝通,降低風(fēng)險(xiǎn),節(jié)省后期變更成本,提高項(xiàng)目成功率。一般來(lái)說(shuō),采用原型法后可以改進(jìn)需求質(zhì)量;雖然投入了較多先期的時(shí)間,但可以顯著減少后期變更的時(shí)間;原型投入的人力成本代價(jià)并不大,但可以節(jié)省后期成本;對(duì)于較大型的軟件來(lái)說(shuō),原型系統(tǒng)可以成為開發(fā)團(tuán)隊(duì)的藍(lán)圖;另外,原型通過(guò)充分和客戶交流,還可以提高客戶滿意度。
2.3 基本要求
* 體現(xiàn)主要的功能;
* 提供基本的界面風(fēng)格;
* 展示比較模糊的部分,以便于確認(rèn)或進(jìn)一步明確,防患于未然。
* 原型最好是可運(yùn)行的,至少在各主要功能模塊之間能夠建立相互連接。
2.4 處理方法
原型的處理方法基本上有2種不同類型,即拋棄型和演化型(不同的軟件工程書籍稱發(fā)不同,實(shí)質(zhì)意義則類似)??梢話仐壴停谌〉玫拿鞔_需求基礎(chǔ)上重新開始設(shè)計(jì)與開發(fā);也可在原型的基礎(chǔ)上繼續(xù)開發(fā)。一般小項(xiàng)目不采用拋棄型原型,否則成本和代價(jià)似乎會(huì)偏高。
2.5 表達(dá)工具
原型的表達(dá)工具可以有很多,如果是演化型的原型,當(dāng)然優(yōu)先選用軟件本身的開發(fā)工具。否則還可以應(yīng)用各種快速顯示的工具,例如,HTML,Powerpoint等等,只要能夠充分而形象地表達(dá)就可以了。
根據(jù)筆者的經(jīng)驗(yàn),在原型系統(tǒng)中,可以采用一些與常規(guī)不同的做法,例如,可以在界面上比較顯著的地方寫明當(dāng)前模塊或界面的主要目的,由哪些角色操作,能解決其什么問(wèn)題。這么做可以使得用戶或開發(fā)團(tuán)隊(duì)成員一開始就有非常清楚的概念;又如,對(duì)于決策分析,你可以直接把一些分析結(jié)果畫成圖,并且配上一些文字說(shuō)明,這樣可以避免輸入大量初始數(shù)據(jù),等等。
3 原型在軟件過(guò)程的地位
軟件的根本目的是實(shí)現(xiàn)用戶的需求,提供用戶日常使用,解決用戶工作中有所不便的問(wèn)題,提高其工作效率,改進(jìn)質(zhì)量,加強(qiáng)管理控制,最終直接或間接地提高其效益。因此軟件開發(fā)本質(zhì)上就是需求的處理和實(shí)現(xiàn),而軟件原型對(duì)需求確定來(lái)說(shuō)具有非常重要的意義。原型方法包括2個(gè)基本過(guò)程,即原型制作和原型評(píng)價(jià)。
如果從需求角度看軟件過(guò)程,我們不妨可以把軟件過(guò)程這樣劃分:
3.1 需求收集和分析
搜集需求得到需求說(shuō)明書,了解軟件要做什么,做成什么樣,解決用戶什么問(wèn)題。
這時(shí)候軟件公司以書面文檔方式提出,例如需求問(wèn)詢表等。
3.2 提供原型并進(jìn)行評(píng)價(jià)
制定原型開發(fā)計(jì)劃,根據(jù)用戶需求及不確定的高風(fēng)險(xiǎn)部分進(jìn)行原型開發(fā),在內(nèi)部進(jìn)行原型評(píng)價(jià),請(qǐng)客戶進(jìn)行原型評(píng)價(jià),以保證確實(shí)反映了用戶的真正想法。
3.3 實(shí)現(xiàn)需求
當(dāng)前的軟件開發(fā)過(guò)程常常采用迭代方式進(jìn)行開發(fā),逐步求精,以降低風(fēng)險(xiǎn)和成本。對(duì)迭代的次數(shù),每次迭代的里程碑,要實(shí)現(xiàn)的目標(biāo),及可提交的成果必須有可驗(yàn)證的清晰的計(jì)劃。項(xiàng)目管理是一種藝術(shù),迭代規(guī)劃及里程碑定義都是一種挑戰(zhàn)、一種藝術(shù),但項(xiàng)目管理不在本文討論范圍。
3.4 需求變更
需求變更是正常的,也是難免的,應(yīng)允許用戶和開發(fā)團(tuán)隊(duì)自身對(duì)需求進(jìn)行變更。變更處理的關(guān)鍵在于跟蹤和控制,如何使產(chǎn)生的影響應(yīng)得到控制,這屬于配置管理的內(nèi)容,也不在本文討論范圍。
實(shí)際上我們可以把原型看得更為廣義一些。任何用戶或者內(nèi)部演示的材料,都可以看作為原型。例如,如果你的產(chǎn)品是某種通用的或者行業(yè)解決方案,雖然你其實(shí)還沒(méi)有產(chǎn)品,但先做出一個(gè)原型,再加一個(gè)漂亮的白皮書,就可以在市場(chǎng)上進(jìn)行預(yù)銷售了。
對(duì)于拋棄型和演化型原型來(lái)說(shuō),也不是絕對(duì)的。演化型原型中必然會(huì)不斷拋棄一些內(nèi)容,而拋棄型原型,盡管在完成歷史使命后不再使用,但很多思想以及部分設(shè)計(jì)還是可以繼承的。
4 原型方法的一般過(guò)程
基于原型方法在整個(gè)需求過(guò)程中的地位,我們需要把原型法和需求處理放在一起進(jìn)行討論。
值得一提的是,原型不僅用于給用戶或者最終用戶進(jìn)行評(píng)議,同時(shí)完全可以在公司內(nèi)部組織評(píng)議,看看我們周圍吧,多數(shù)程序員對(duì)技術(shù)的興趣遠(yuǎn)遠(yuǎn)高于對(duì)需求的興趣,因此其對(duì)系統(tǒng)的理解并不會(huì)比市場(chǎng)人員或者項(xiàng)目經(jīng)理理解的深多少。這里的公司內(nèi)部人員角色可以包括很多,系統(tǒng)分析員/程序員自身、項(xiàng)目經(jīng)理、部門經(jīng)理、用戶代表、領(lǐng)域?qū)<摇y(cè)試人員等等,不同的角色往往會(huì)在其不同立場(chǎng)對(duì)系統(tǒng)提出中肯的意見來(lái)。
另外值得注意的是界面設(shè)計(jì)的引入。我們認(rèn)為將界面風(fēng)格在原型階段即進(jìn)行基本確定是一種優(yōu)化的做法,因?yàn)檐浖捌趯?duì)界面的確定可以避免后期開發(fā)時(shí)對(duì)界面進(jìn)行統(tǒng)一調(diào)整所帶來(lái)的不必要的成本花費(fèi),良好的界面也可以使客戶增加對(duì)系統(tǒng)的好感,當(dāng)然,但愿用戶不要只是欣賞界面而忽略了他們對(duì)系統(tǒng)功能的思考。要知道,如果僅僅是讓用戶看到美觀的界面,那么整個(gè)原型幾乎是白做了。
5 使用原型方法的相關(guān)問(wèn)題探討
5.1 為什么要采用原型法?
原型對(duì)一個(gè)項(xiàng)目取得成功具有重要的意義。俗話說(shuō):隔行如隔山,實(shí)際上軟件公司很難保證其制作的軟件正好就是用戶所需要的,用戶也很難一次性把其真實(shí)的要求完全提交,開始階段提出的往往只是對(duì)系統(tǒng)的期望,和比較模糊的設(shè)想而已。而原型系統(tǒng)為用戶提供了一個(gè)靶子,看著原型系統(tǒng),用戶往往就能進(jìn)一步提出他們的真正想法。顯然軟件公司明確用戶需求的最佳方式就是為用戶提供原型并由用戶進(jìn)行評(píng)價(jià)。
也許,跳過(guò)原型可以節(jié)省時(shí)間和前期成本,但你應(yīng)該注意到,跳過(guò)原型的話,后期變更的成本會(huì)明顯增加。
5.2 為什么在需求說(shuō)明書之外需要原型?
1)眼見為實(shí),文字具有歧義性,不同的人理解都不相同;
2)最終用戶往往在看到一套可運(yùn)行的系統(tǒng)的基礎(chǔ)上,才可能提出其真實(shí)的意見,如果到最終提交時(shí)才看到這樣的系統(tǒng)就為時(shí)太晚。這也是以前無(wú)數(shù)軟件開發(fā)留下的教訓(xùn);
3)便于發(fā)現(xiàn)問(wèn)題,及時(shí)糾正;
4)便于進(jìn)一步展開,并取得用戶的細(xì)節(jié)需求;
5)體現(xiàn)原型的其它功能:便于公司內(nèi)部如經(jīng)理、市場(chǎng)部等對(duì)軟件提出意見,便于開發(fā)人員對(duì)整個(gè)產(chǎn)品達(dá)成統(tǒng)一認(rèn)識(shí),等等。對(duì)內(nèi)部人員來(lái)說(shuō),同樣地,一套形象的原型也遠(yuǎn)勝過(guò)一堆專業(yè)術(shù)語(yǔ)文字;也就是說(shuō),原型對(duì)軟件公司內(nèi)部也十分重要。這些評(píng)價(jià)工作無(wú)形之中改進(jìn)了項(xiàng)目質(zhì)量。
5.3 原型方法有什么風(fēng)險(xiǎn)?
任何方法都是有利有弊,在我們可以探討一下原型方法可能存在的風(fēng)險(xiǎn)。以下是一般軟件公司所擔(dān)心的風(fēng)險(xiǎn):需要付出前期進(jìn)度和人力成本;由于程序員對(duì)問(wèn)題的不了解而效率低下,受客戶牽制而在原型上反復(fù)修改;因?yàn)閭}(cāng)促設(shè)計(jì)而做不利于進(jìn)一步在其基礎(chǔ)上繼續(xù)開發(fā);由于過(guò)早展示原型給客戶,使得客戶可能提高其期望值,并提出更多離譜的要求,等等。
值得一提的是原型方法的主要價(jià)值之一就是盡早揭示軟件中可能存在的風(fēng)險(xiǎn)及不確定因素,尤其是關(guān)于用戶需求一致性方面的風(fēng)險(xiǎn)。
5.4 原型方法和其它方法或過(guò)程的關(guān)系如何,是否一致?
生命周期法中并不包括原型,或者說(shuō)沒(méi)有明確提供原型的概念和定義。原型可以認(rèn)為是需求分析中的一個(gè)子部分。另外,應(yīng)該說(shuō)原型方法是對(duì)生命周期法的有益補(bǔ)充和完善。
RUP中是最優(yōu)化的統(tǒng)一軟件過(guò)程,但RUP中似乎沒(méi)有提到原型,RUP的核心過(guò)程是在迭代中精化。我個(gè)人的見解是,原型非常類似于第一次迭代的過(guò)程和結(jié)果。實(shí)際上,如果把原型看作為第一輪交付的成果,那么原型的很多不利之處,諸如花費(fèi)前期成本等等,這些擔(dān)心都將變得不復(fù)存在。
XP方法對(duì)原型非常推崇,這是因?yàn)閄P方法非常強(qiáng)調(diào)需求的重要性,甚至要求客戶參與開發(fā)過(guò)程。但原型方法和XP也有區(qū)別。XP是分批交付,先做一個(gè)幾個(gè)功能點(diǎn)的版本,完成后再每個(gè)開發(fā)周期往上面加其它功能點(diǎn),而原型法一般要求做出比較完整,能覆蓋主要功能點(diǎn)的粗略的版本。XP方法仁者見仁,智者見智,不一而舉。
5.5 如何避免項(xiàng)目團(tuán)隊(duì)做原型的時(shí)候出現(xiàn)部分人員閑置?
在項(xiàng)目管理中,對(duì)人力資源的調(diào)配應(yīng)和項(xiàng)目進(jìn)展相匹配。實(shí)際上在用戶接觸到原型制作的同時(shí),可以進(jìn)行項(xiàng)目計(jì)劃、架構(gòu)設(shè)計(jì)、技術(shù)培訓(xùn)以及技術(shù)難點(diǎn)攻關(guān)等等。
如果從廣義上理解原型的話,架構(gòu)設(shè)計(jì)者甚至可以設(shè)計(jì)出一種用戶開發(fā)團(tuán)隊(duì)使用的所謂框架原型,包含了主要的設(shè)計(jì)成分、模板和示例。
比較理想的結(jié)果是,當(dāng)原型完成后,需求分析、架構(gòu)設(shè)計(jì)和界面風(fēng)格設(shè)計(jì)都趨于完成,從這一點(diǎn)可以看到,原型方法可以作為快速軟件開發(fā)的重要手段。
5.6 如果避免項(xiàng)目在原型上停滯不前?
應(yīng)使用有經(jīng)驗(yàn)的開發(fā)人員,避免因?yàn)槌绦騿T不熟悉業(yè)務(wù)而延誤進(jìn)度;不要在界面設(shè)計(jì)上猶豫不決而占據(jù)時(shí)間;如果用戶對(duì)原型提出了很多意見,其中部分比較明確的意見可以在開發(fā)過(guò)程中進(jìn)行實(shí)現(xiàn);和客戶的交流應(yīng)該簡(jiǎn)潔明了,而不是似是而非;另外,原型方法在項(xiàng)目過(guò)程中占據(jù)的時(shí)間應(yīng)該在項(xiàng)目計(jì)劃中保留出來(lái),而不僅僅是隱含在需求調(diào)研與分析的一個(gè)部分。
5.7 如何避免用戶看了原型后漫無(wú)邊際地提要求?
首先,應(yīng)該充分尊重客戶,想想其它行業(yè)的服務(wù)質(zhì)量吧。有沒(méi)有聽說(shuō)過(guò)這樣的說(shuō)法,項(xiàng)目管理也是客戶滿意度的管理;軟件是一種對(duì)客戶的關(guān)懷,等等。確實(shí),客戶提出的思路可能和你已經(jīng)形成的思路不同,一下子打亂了你的思路,也許項(xiàng)目經(jīng)理并不介意,但這確是讓設(shè)計(jì)者特別心煩的事情。如果確有把握,或者你可以不做到原型中去。有時(shí)候,即使原型很完美,用戶也會(huì)額外地提出一些意見,這也是人之常情。但不管怎樣,你不能認(rèn)為用戶根本不懂軟件,讓他們到時(shí)用就行了,抱這樣想法的多半會(huì)付出代價(jià)。
其次應(yīng)該進(jìn)行坦誠(chéng)協(xié)商,多數(shù)用戶其實(shí)都是通情達(dá)理的。如果你在簽訂合同時(shí)答應(yīng)滿足任何要求,而此時(shí)又無(wú)法忍受用戶的要求,那么孰是孰非應(yīng)是題外之意了。一般來(lái)說(shuō),比較合理的做法可以通過(guò)增加費(fèi)用、延長(zhǎng)進(jìn)度或者把需求實(shí)現(xiàn)分階段來(lái)提交,以保持工作的延續(xù)性。對(duì)有些軟件,尤其是信息管理系統(tǒng)來(lái)說(shuō),客戶的實(shí)施時(shí)間其實(shí)并不是主要的,客戶最需要的不是及時(shí),而是合用。
其實(shí),客戶有著很多種類型,確實(shí),個(gè)別客戶會(huì)參考同類產(chǎn)品來(lái)提要求,極個(gè)別用戶并不真正懂得計(jì)算機(jī)技術(shù)而對(duì)技術(shù)路線、技術(shù)手段等提出其意見,等等。但我們?yōu)槭裁催€可以反過(guò)來(lái)想一下,如果是等到軟件全部提交的時(shí)候,這部分用戶仍有會(huì)提出同樣的意見。提早暴露并解決分歧,對(duì)雙方睹是有利的。如果軟件公司明知可能存在矛盾,仍然先做好,然后等到用戶提出反對(duì)后,再提出補(bǔ)充收費(fèi),如果喜歡,也無(wú)話可說(shuō)。
總之,原型應(yīng)本著對(duì)軟件需求的基本理解來(lái)做,這樣才能預(yù)防不一致性的發(fā)生。尤其應(yīng)該針對(duì)不清楚的地方制作原型,從而盡量暴露問(wèn)題,引發(fā)用戶的聯(lián)想,不能回避問(wèn)題,掩蓋問(wèn)題(以免用戶提出太多的想法),很多問(wèn)題雖然一時(shí)掩蓋了,但最終還是要發(fā)生的。
5.8 如何避免在原型基礎(chǔ)上繼續(xù)開發(fā)時(shí)的可維護(hù)性降低?
問(wèn)題是這樣的,制作原型時(shí)常希望快速提供原型,往往不及對(duì)軟件結(jié)構(gòu)或者數(shù)據(jù)庫(kù)進(jìn)行細(xì)致設(shè)計(jì)。所以在此基礎(chǔ)上繼續(xù)設(shè)計(jì)和開發(fā)的話,有必要在開發(fā)前先進(jìn)行調(diào)整。同時(shí),在設(shè)計(jì)原型前就有必要確定,該原型是要拋棄的,還是要演化要繼承的。對(duì)于要演化的原型,其設(shè)計(jì)不能過(guò)于粗略,顯然這直接影響到今后的開發(fā)成本。
6 小結(jié)
原型方法是可視化的方法,已成為快速軟件開發(fā)常用的手段。軟件公司或部門一旦得到了原型方法的回報(bào),就會(huì)堅(jiān)持使用。原型不是絕對(duì)必要,但非常有意義。
來(lái)自:希賽網(wǎng)