【上次回答了 軟件開(kāi)發(fā)者面試百問(wèn) 中測試部分,這次,由于時(shí)間關(guān)系,簡(jiǎn)單回答一下軟件項目管理部分的問(wèn)題。這些問(wèn)題的答案,一般沒(méi)有正確與否,各個(gè)人回答不同,這里僅供大家參考?!?/span>
1.范圍、時(shí)間、成本,這三項中哪些是可以由客戶(hù)控制的?
范圍、時(shí)間、成本,是項目管理中常說(shuō)的三角關(guān)系。任何一方改變都可能牽扯到其他兩方的變動(dòng)。項目管理的本質(zhì),就是在保證質(zhì)量的前提下,尋求這三者之間的最佳平衡。因為客戶(hù)是需求方和投資方,客戶(hù)有權對這三者進(jìn)行控制,當然客戶(hù)主要控制范圍,即提出他們的需求——項目要實(shí)現的功能特性,其次,客戶(hù)也非常關(guān)心能交付的時(shí)間和所付出的成本。在滿(mǎn)足客戶(hù)的需求情況下,可以在時(shí)間、成本上和客戶(hù)進(jìn)行交流、談判。從項目管理的角度看,最好固定其中一項,其他兩項可以根據實(shí)際狀況來(lái)調節保證項目質(zhì)量。
2.誰(shuí)該對項目中所要付出的一切做出估算?誰(shuí)有權設置最后期限?
項目成功是團隊協(xié)作的結果。在對項目進(jìn)行估算的時(shí)候,需要由參與項目各個(gè)環(huán)節的人進(jìn)行符合實(shí)際的估算,最后匯總起來(lái)進(jìn)行綜合分析計算,獲得項目總的估算結果。
項目的最后期限設置除了客戶(hù)定死最后交付時(shí)間,其他的情況都是根據項目的進(jìn)度估算結果而進(jìn)行符合實(shí)際的計劃得出的。
3. 減少交付的次數,或是減少每個(gè)每個(gè)交付中的工作量,你喜歡哪種做法?
根據項目的類(lèi)型和項目進(jìn)行中的實(shí)際情況來(lái)決定,如果項目是規模比較大,時(shí)間長(cháng)的,那么就應增加交付次數或者減少每個(gè)每個(gè)交付中的工作量,以便及時(shí)考察項目進(jìn)展,保證項目進(jìn)度。例如,一個(gè)項目按計劃進(jìn)行到第一個(gè)里程碑發(fā)現項目進(jìn)度明顯落后,而下一個(gè)檢查點(diǎn)(也就是交付的工作量)距離還很長(cháng)管理層需要及時(shí)了解其進(jìn)展,那么交付的次數的就要根據現在的時(shí)間狀況來(lái)增加。反過(guò)來(lái),如果這個(gè)項目的進(jìn)度非常好,甚至超前,而下一個(gè)檢查點(diǎn)(也就是交付的工作量)距離還很短,我們就可以減少交付次數。
在傳統的軟件項目中,開(kāi)發(fā)周期比較長(cháng),往往減少交付的次數,更好地控制質(zhì)量;而現在,有一部分公司比較傾向于敏捷方法,喜歡減少每個(gè)交付中的工作量,交付周期只有幾周時(shí)間(最短的周期,可能是一周),擁抱變化,更好地、更及時(shí)地滿(mǎn)足用戶(hù)的需求。而對互聯(lián)網(wǎng)上的web應用軟件開(kāi)發(fā),“減少每個(gè)每個(gè)交付中的工作量”是一個(gè)比較好的策略,力求及時(shí)獲得用戶(hù)的反饋,將用戶(hù)的需求及時(shí)融入新的版本,及時(shí)發(fā)布出去,贏(yíng)得競爭市場(chǎng)。例如,在我新書(shū)《軟件工程導論》中專(zhuān)門(mén)有一節討論“永遠的Beta”的軟件工程思想。
4.你喜歡用哪種圖來(lái)跟蹤項目進(jìn)度?
還是要根據項目的特點(diǎn)來(lái)決定,具體項目具體對待,當然,有時(shí)也不能由自己決定,而是取決于公司已有的工具和習慣。對于復雜、規模大的項目,可能要借助甘特圖和網(wǎng)絡(luò )圖來(lái)分析和跟蹤進(jìn)度。簡(jiǎn)單、規模小的項目根據進(jìn)度報告百分比和表格跟蹤就可以了。
5.迭代和增量的區別在哪里?
軟件開(kāi)發(fā)不是一躇而就,其過(guò)程猶如雕琢一件工藝品,由無(wú)形到有形、由粗到細,很難一次就能開(kāi)發(fā)出功能完善、強大的一個(gè)版本,而往往是分階段進(jìn)行,一個(gè)版本接一個(gè)版本的發(fā)布出去。軟件開(kāi)發(fā)分階段可以通過(guò)兩種模型來(lái)描述,即增量模型和迭代模型。
增量模型描述軟件產(chǎn)品的不同階段是按產(chǎn)品所具有的功能進(jìn)行劃分,先開(kāi)發(fā)主要功能或用戶(hù)最需要功能,然后,隨著(zhù)時(shí)間推進(jìn),不斷增加新的輔助功能或次要功能,最終開(kāi)發(fā)出一個(gè)強大的、功能完善的、高質(zhì)量的、穩定的產(chǎn)品。
迭代模型描述軟件產(chǎn)品的不同階段是按產(chǎn)品深度或細化的程度來(lái)劃分,先將產(chǎn)品的整個(gè)框架都建立起來(lái),在系統的初期,已經(jīng)具有用戶(hù)所需求的全部功能。然后,隨著(zhù)時(shí)間推進(jìn),不斷細化已有的功能或完善已有功能,這個(gè)過(guò)程好像是一個(gè)迭代的過(guò)程。最終的目標是一致的,也是為了實(shí)現一個(gè)強大的、功能完善的、高質(zhì)量的、穩定的產(chǎn)品。
舉一個(gè)例子:假設現在要開(kāi)發(fā)A,B,C,D四個(gè)大的業(yè)務(wù)功能,每個(gè)功能都需要開(kāi)發(fā)兩周的時(shí)間.則對于增量方法而言可以將四個(gè)功能分為兩次增量來(lái)完成,第一個(gè)增量完成A,B功能,第二次增量完成C,D功能;而對于迭代開(kāi)發(fā)來(lái)將則是分兩次迭代來(lái)開(kāi)發(fā),第一次迭代完成A,B,C,D四個(gè)基本業(yè)務(wù)功能但不含復雜的業(yè)務(wù)邏輯,而第二個(gè)功能再逐漸細化補充完整相關(guān)的業(yè)務(wù)邏輯.在第一個(gè)月過(guò)去后采用增量開(kāi)始時(shí)候A,B全部開(kāi)發(fā)完成而C,D還一點(diǎn)都沒(méi)有動(dòng);而采用迭代開(kāi)發(fā)的時(shí)候A,B,C,D四個(gè)的基礎功能都已經(jīng)完成.
6. 試著(zhù)解釋一下風(fēng)險管理中用到的實(shí)踐。風(fēng)險該如何管理?
風(fēng)險管理的實(shí)踐很多,包括頭腦風(fēng)暴、風(fēng)險列表(checklist)等。例如,人們常采用十大風(fēng)險清單:在項目進(jìn)行中,不時(shí)地更新和處理項目當前風(fēng)險最高的前十項風(fēng)險,以保證項目不脫離主軌道。因為項目中的風(fēng)險大大小小會(huì )很多。十大風(fēng)險清單就是抓住重要的風(fēng)險及時(shí)處理,而又關(guān)系的小風(fēng)險可能也就隨之消失。從這里可以看出,風(fēng)險也是動(dòng)態(tài)的,需要經(jīng)常地、及時(shí)地評估當前的風(fēng)險,例如每周或每?jì)芍苓M(jìn)行一次風(fēng)險評估。
風(fēng)險管理就是通過(guò)風(fēng)險的識別、預測、估算和衡量、選擇有效的方法和手段,對風(fēng)險進(jìn)行預防、避免、降低或者轉移的管理過(guò)程。
7. 你喜歡任務(wù)分解還是滾動(dòng)式計劃?
根據項目特點(diǎn)來(lái)定,一般會(huì )選用任務(wù)分解的計劃,責任清楚,可控性更強。滾動(dòng)式計劃的靈活性比較強,適應性比較好,但容易引起大家對計劃不夠重視,計劃能力降低,或者可控性會(huì )差些。有時(shí)會(huì )將這兩種方法結合起來(lái)使用。
8. 你需要哪些東西幫助你判斷項目是否符合時(shí)間要求,在預算范圍內運作?
那么就可以根據項目時(shí)間與計劃的內容進(jìn)行對比來(lái)判斷項目符合時(shí)間要求,在預算范圍內運作。常用的方法有基線(xiàn)對比法和掙值法。
9. DSDM、Prince2、Scrum,這三者之間有哪些區別?
管理Scrum過(guò)程有很多實(shí)施方法,從白板上的即時(shí)貼到軟件包。Scrum最大的好處是它非常容易學(xué)習,而且應用Scrum不需要太多的投入。詳見(jiàn):http://zh.wikipedia.org/w/index.php?title=Scrum&variant=zh-cn
方法的應用,同樣由項目規模、業(yè)務(wù)特點(diǎn)(需求是否穩定)等決定,而且還受企業(yè)文化、流程和領(lǐng)導意識等決定。如果需求穩定、項目規模比較大或周期比較長(cháng),一般會(huì )選用PRINCE2,相反,可能會(huì )選擇DSDM或Scrum,后兩者沒(méi)有本質(zhì)區別,只是具有不同的最佳實(shí)踐。
正如有人評論,國內對Scrum還比較熟悉,對DSDM、PRINCE2等不夠熟悉,應用不多。而業(yè)界最熟悉的還是CMMI、RUP(IBM Rational Unify Process 統一過(guò)程)、XP(敏捷方法的極限編程 eXtreme Programming)和MSF(Microsoft Solution Framework,微軟公司軟件開(kāi)發(fā)解決方案框架),可參考:
10.如果客戶(hù)想要的東西太多,你在范圍和時(shí)間上怎樣跟他達成一致呢?
首先要向客戶(hù)說(shuō)明,如果在某個(gè)時(shí)間內去做不可能完成的工作,其結果必然是質(zhì)量得不到保證,或者所化的成本過(guò)大。應該沒(méi)有客戶(hù)想做賠本的生意,每個(gè)客戶(hù)都會(huì )重視質(zhì)量,而不愿意損害自己的利益。
然后,和客戶(hù)一起,按需求重要性、緊急性等對需求進(jìn)行分類(lèi),分為不同的等級,然后從優(yōu)先級高的需求開(kāi)始,來(lái)估算不同優(yōu)先級類(lèi)別的需求實(shí)現的工作量。設定幾個(gè)不同的開(kāi)發(fā)周期或交付時(shí)間,從而由用戶(hù)作出選擇,例如:
(1) 只做優(yōu)先級最高的那類(lèi)需求,開(kāi)發(fā)周期需要3個(gè)月;
(2) 做優(yōu)先級最高和優(yōu)先級高的那兩類(lèi)需求,開(kāi)發(fā)周期需要7個(gè)月;
(3) 做優(yōu)先級最高、高和中等的共3類(lèi)需求,開(kāi)發(fā)周期需要12個(gè)月;
(4) 所有需求都實(shí)現,開(kāi)發(fā)周期需要18個(gè)月
用戶(hù)可能選(2), 先完成兩類(lèi)需求,簽訂合同。等這合同履行很好之后,再繼續下一步的開(kāi)發(fā)。
聯(lián)系客服