VM曾經(jīng)發(fā)了篇題為《
如何用正確的方法來(lái)寫出質(zhì)量好的軟件的75條體會(huì)》的blog,后來(lái)他又給出了相應(yīng)的回答:
《七十五條》的解釋?。而我亦給出了我自己的答案,有些不錯(cuò),有些差強(qiáng)人意,有些則非常不足了。為便于比較,我的答案附在了MVM答案的后面。
1. 你們的項(xiàng)目組使用源代碼管理工具了么?
MVM : 應(yīng)該用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的選擇是VSS。
郁也風(fēng) : 公司使用的是VSS,在網(wǎng)上與朋友玩的就是CVS了。
2. 你們的項(xiàng)目組使用缺陷管理系統(tǒng)了么?
MVM : 應(yīng)該用。ClearQuest太復(fù)雜,我的推薦是BugZilla。
郁也風(fēng) : 嫌BugZilla安裝太費(fèi)事,界面太簡(jiǎn)陋,我選擇的是Jira的破解版。
3. 你們的測(cè)試組還在用Word寫測(cè)試用例么?
MVM : 不要用Word寫測(cè)試用例(Test Case)。應(yīng)該用一個(gè)專門的系統(tǒng),可以是Test Manager,也可以是自己開發(fā)一個(gè)ASP.NET的小網(wǎng)站。主要目的是Track和Browse。
郁也風(fēng) : 用Word,而且測(cè)試工作很是不上臺(tái)面(中國(guó)軟件的通病,所以我們公司也沒(méi)少得了犯)。
4. 你們的項(xiàng)目組有沒(méi)有建立一個(gè)門戶網(wǎng)站?
MVM : 要有一個(gè)門戶網(wǎng)站,用來(lái)放Contact Info、Baselined
Schedule、News等等。推薦Sharepoint Portal Server 2003來(lái)實(shí)現(xiàn),15分鐘就搞定。買不起SPS
2003可以用WSS (Windows Sharepoint Service)。
郁也風(fēng) : 沒(méi)有,不過(guò)看你這么介紹,回頭試試去。
5. 你們的項(xiàng)目組用了你能買到最好的工具么?
MVM : 應(yīng)該用盡量好的工具來(lái)工作。比如,應(yīng)該用VS.NET而不是Notepad來(lái)寫C#。用Notepad寫程序多半只是一種炫耀。但也要考慮到經(jīng)費(fèi),所以說(shuō)是“你能買到最好的”。
郁也風(fēng) : 我一向認(rèn)為所謂的Notepad開發(fā)是自虐狂的不良嗜好。我們使用Eclipse,不要錢的,但我認(rèn)為是java開發(fā)最好的工具了。
6. 你們的程序員工作在安靜的環(huán)境里么?
MVM : 需要安靜環(huán)境。這點(diǎn)極端重要,而且要保證每個(gè)人的空間大于一定面積。
郁也風(fēng) : 看來(lái)這位兄臺(tái)是看過(guò)人件了,可惜我們公司的辦公環(huán)境只能說(shuō)是一般,極為一般。
7. 你們的員工每個(gè)人都有一部電話么?
MVM : 需要每人一部電話。而且電話最好是帶留言功能的。當(dāng)然,上這么一套帶留言電話系統(tǒng)開銷不小。不過(guò)至少每人一部電話要有,千萬(wàn)別搞得經(jīng)常有人站起來(lái)喊:“某某某電話”。《人件》里面就強(qiáng)烈譴責(zé)這種做法。
郁也風(fēng) : 你果然看了人件了,但請(qǐng)認(rèn)清形式吧,那是美國(guó),這是中國(guó),“中國(guó)國(guó)情”四個(gè)字會(huì)噎死你的,現(xiàn)在的實(shí)際情況是很多公司都不讓用QQ,MSN(肯定包括我們公司了)。
8. 你們每個(gè)人都知道出了問(wèn)題應(yīng)該找誰(shuí)么?
MVM : 應(yīng)該知道。任何一個(gè)Feature至少都應(yīng)該有一個(gè)Owner,當(dāng)然,Owner可以繼續(xù)Dispatch給其他人。
郁也風(fēng) : 我們知道去找誰(shuí),但這不代表就能解決問(wèn)題。
9. 你遇到過(guò)有人說(shuō)“我以為…”么?
MVM : 要消滅“我以為”。Never assume anything。
郁也風(fēng) : 我也經(jīng)常說(shuō)“我認(rèn)為”,尤其在我驗(yàn)證之前。當(dāng)然,我會(huì)考慮改正。
10. 你們的項(xiàng)目組中所有的人都坐在一起么?
MVM : 需要。我反對(duì)Virtual Team,也反對(duì)Dev在美國(guó)、Test在中國(guó)這種開發(fā)方式。能坐在一起就最好坐在一起,好處多得不得了。
郁也風(fēng) : 需要,很多問(wèn)題不是面對(duì)面的話,還真無(wú)法解決,或是有時(shí)候面對(duì)面更能開拓思路,也能更好地交互。
11. 你們的進(jìn)度表是否反映最新開發(fā)進(jìn)展情況?
MVM : 應(yīng)該反映。但是,應(yīng)該用Baseline的方法來(lái)管理進(jìn)度表:維護(hù)一份穩(wěn)定的Schedule,再維護(hù)一份最新更改。Baseline的方法也應(yīng)該用于其它的Spec。Baseline是變更管理里面的一個(gè)重要手段。
郁也風(fēng) : 這是我一直很頭疼的問(wèn)題,如何維護(hù)一個(gè)有效的進(jìn)度表不亞于任何一個(gè)模塊的開發(fā)啊。
12. 你們的工作量是先由每個(gè)人自己估算的么?
MVM : 應(yīng)該讓每個(gè)人自己估算。要從下而上估算工作量,而不是從上往下分派。除非有其他原因,比如政治任務(wù)工期固定等。
郁也風(fēng) : 可惜我們的任務(wù)多是政治任務(wù),工期固定的就像螺絲釘。
13. 你們的開發(fā)人員從項(xiàng)目一開始就加班么?
MVM : 不要這樣。不要一開始就搞疲勞戰(zhàn)。從項(xiàng)目一開始就加班,只能說(shuō)明項(xiàng)目進(jìn)度不合理。當(dāng)然,一些對(duì)日軟件外包必須天天加班,那屬于剝削的范疇。
郁也風(fēng) : 我們加班是很多是因?yàn)橘Y源的到位晚導(dǎo)致的,無(wú)可奈何。誰(shuí)都知道問(wèn)題的所在,誰(shuí)都找不到解決問(wèn)題的方法。
14. 你們的項(xiàng)目計(jì)劃中Buffer Time是加在每個(gè)小任務(wù)后面的么?
MVM : 不要。Buffer Time加在每個(gè)小任務(wù)后面,很容易輕易的就被消耗掉。Buffer Time要整段的加在一個(gè)Milestone或者checkpoint前面。
郁也風(fēng) : 我們盡量這么做了。
15. 值得再多花一些時(shí)間,從95%做到100%好
MVM : 值得,非常值得。尤其當(dāng)項(xiàng)目后期人困馬乏的時(shí)候,要堅(jiān)持。這會(huì)給產(chǎn)品帶來(lái)質(zhì)的區(qū)別。
郁也風(fēng) : 我們多是在客戶的逼迫下完成那最后的5%的。而且100%并不代表Over,而是另一個(gè)100%的開始,成就了一個(gè)完美的惡性循環(huán)。
16. 登記新缺陷時(shí),是否寫清了重現(xiàn)步驟?
MVM : 要。這屬于Dev和Test之間的溝通手段。面對(duì)面溝通需要,詳細(xì)填寫Repro Steps也需要。
郁也風(fēng) : 絕對(duì)要,理由同上。
17. 寫新代碼前會(huì)把已知缺陷解決么?
MVM : 要。每個(gè)人的缺陷不能超過(guò)10個(gè)或15個(gè),否則必須先解決老的bug才能繼續(xù)寫新代碼。
郁也風(fēng) : 沒(méi)別的說(shuō)的,一定要。
18. 你們對(duì)缺陷的輕重緩急有事先的約定么?
MVM : 必須有定義。Severity要分1、2、3,約定好:藍(lán)屏和Data Lost算Sev 1,F(xiàn)unction Error算Sev 2,界面上的算Sev 3。但這種約定可以根據(jù)產(chǎn)品質(zhì)量現(xiàn)狀適當(dāng)進(jìn)行調(diào)整。
郁也風(fēng) : 知道需要,但是做的相當(dāng)不夠,需要努力改進(jìn)。
19. 你們對(duì)意見不一的缺陷有三國(guó)會(huì)議么?
MVM : 必須要有。要有一個(gè)明確的決策過(guò)程。這類似于CCB (Change Control Board)的概念。
郁也風(fēng) : 要由最后拍板的。而且不能陷入爭(zhēng)論的泥淖。
20. 所有的缺陷都是由登記的人最后關(guān)閉的么?
MVM : Bug應(yīng)該由Opener關(guān)閉。Dev不能私自關(guān)閉Bug。
郁也風(fēng) : 同意。
21. 你們的程序員厭惡修改老的代碼么?
MVM : 厭惡是正常的。解決方法是組織Code Review,單獨(dú)留出時(shí)間來(lái)。XP也是一個(gè)方法。
郁也風(fēng) : Code Review?我們老板不喜歡。
22. 你們項(xiàng)目組有Team Morale Activity么?
MVM : 每個(gè)月都要搞一次,吃飯、唱歌、Outing、打球、開卡丁車等等,一定要有。不要剩這些錢。
郁也風(fēng) : 這點(diǎn)絕對(duì)不會(huì)少的,至少我?guī)н^(guò)的團(tuán)隊(duì)的凝聚力還是不錯(cuò)的。
23. 你們項(xiàng)目組有自己的Logo么?
MVM : 要有自己的Logo。至少應(yīng)該有自己的Codename。
郁也風(fēng) : 沒(méi)想過(guò),今天頭要搞個(gè)我們部門的文化衫,我強(qiáng)烈反對(duì)了。不過(guò)Logo可以考慮。
24. 你們的員工有印有公司Logo的T-Shirt么?
MVM : 要有。能增強(qiáng)歸屬感。當(dāng)然,T-Shirt要做的好看一些,最好用80支的棉來(lái)做。別沒(méi)穿幾次就破破爛爛的。
郁也風(fēng) : 哦,前一個(gè)我說(shuō)了,我反對(duì)了。我不喜歡千人一面的感覺。
25. 總經(jīng)理至少每月參加次項(xiàng)目組會(huì)議
MVM : 要的。要讓team member覺得高層關(guān)注這個(gè)項(xiàng)目。
郁也風(fēng) : 好像是個(gè)不可能完成的任務(wù)。不知?jiǎng)e的公司如何。
26. 你們是給每個(gè)Dev開一個(gè)分支么?
MVM : 反對(duì)。Branch的管理以及Merge的工作量太大,而且容易出錯(cuò)。
郁也風(fēng) : 反對(duì),管理困難,也沒(méi)有必要,可以加Lable。
27. 有人長(zhǎng)期不Check-In代碼么?
MVM : 不可以。對(duì)大部分項(xiàng)目來(lái)說(shuō),最多兩三天就應(yīng)該Check-In。
郁也風(fēng) : 不可以,我每天都監(jiān)控VSS的。
28. 在Check-In代碼時(shí)都填寫注釋了么?
MVM : 要寫的,至少一兩句話,比如“解決了Bug No.225”。如果往高處拔,這也算做“配置審計(jì)”的一部分。
郁也風(fēng) : 要寫!
29. 有沒(méi)有設(shè)定每天Check-In的最后期限?
MVM : 要的,要明確Check-In Deadline。否則會(huì)Build Break。
郁也風(fēng) : 沒(méi)有,整合就是個(gè)明確的Deadline了。
30. 你們能把所有源碼一下子編譯成安裝文件嗎?
MVM : 要的。這是每日編譯(Daily Build)的基礎(chǔ)。而且必須要能夠做成自動(dòng)的。
郁也風(fēng) : 當(dāng)然,我不喜歡出現(xiàn)源碼和類文件不匹配。
31. 你們的項(xiàng)目組做每日編譯么?
MVM : 當(dāng)然要做。有三樣?xùn)|西是軟件項(xiàng)目/產(chǎn)品開發(fā)必備的:1. bug management; 2. source control; 3. daily build。
郁也風(fēng) : 至少項(xiàng)目負(fù)責(zé)人要做。
32. 你們公司有沒(méi)有積累一個(gè)項(xiàng)目風(fēng)險(xiǎn)列表?
MVM : 要。Risk Inventory。否則,下個(gè)項(xiàng)目開始的時(shí)候,又只能拍腦袋分析Risk了。
郁也風(fēng) : 沒(méi)有。也是一個(gè)需要考慮的內(nèi)容。
33. 設(shè)計(jì)越簡(jiǎn)單越好
MVM : 越簡(jiǎn)單越好。設(shè)計(jì)時(shí)候多一句話,將來(lái)可能就帶來(lái)無(wú)窮無(wú)盡的煩惱。應(yīng)該從一開始就勇敢的砍。這叫scope management。
郁也風(fēng) : 不同意,過(guò)度簡(jiǎn)單就成了簡(jiǎn)陋了。而且什么樣的叫簡(jiǎn)單?沒(méi)有一個(gè)量的界定。設(shè)計(jì)是需要讓別人看明白的。
34. 盡量利用現(xiàn)有的產(chǎn)品、技術(shù)、代碼
MVM :
千萬(wàn)別什么東西都自己Coding。BizTalk和Sharepoint就是最好的例子,有這兩個(gè)作為基礎(chǔ),可以把起點(diǎn)提高很多。或者可以盡量多用現(xiàn)成
的Control之類的。或者盡量用XML,而不是自己去Parse一個(gè)文本文件;盡量用RegExp,而不是自己從頭操作字符串,等等等等。這就是“軟
件復(fù)用”的體現(xiàn)。
郁也風(fēng) : 同意,我的原則是:有穩(wěn)定的,經(jīng)過(guò)實(shí)踐驗(yàn)證的開源組件或產(chǎn)品的話,絕對(duì)不再自己搭爐灶。
35. 你們會(huì)隔一段時(shí)間就停下來(lái)夯實(shí)代碼么?
MVM : 要。最好一個(gè)月左右一次。傳言去年年初Windows組在Stevb的命令下停過(guò)一個(gè)月增強(qiáng)安全。Btw,“夯”這個(gè)字念“hang”,第一聲。
郁也風(fēng) : 肯定做了,不過(guò)可能并不是有意識(shí)地去做的。
36. 你們的項(xiàng)目組每個(gè)人都寫Daily Report么?
MVM : 要寫。五分鐘就夠了,寫10句話左右,告訴自己小組的人今天我干了什么。一則為了溝通,二則鞭策自己(要是游手好閑一天,自己都會(huì)不好意思寫的)。
郁也風(fēng) : 這是公司的規(guī)定。也是少有的能讓我支持的規(guī)定。
37. 你們的項(xiàng)目經(jīng)理會(huì)發(fā)出Weekly Report么?
MVM : 要。也是為了溝通。內(nèi)容包括目前進(jìn)度,可能的風(fēng)險(xiǎn),質(zhì)量狀況,各種工作的進(jìn)展等。
郁也風(fēng) : 也是公司的規(guī)定。
38. 你們項(xiàng)目組是否至少每周全體開會(huì)一次?
MVM : 要。一定要開會(huì)。程序員討厭開會(huì),但每個(gè)禮拜開會(huì)時(shí)間加起來(lái)至少應(yīng)該有4小時(shí)。包括team meeting, spec review meeting, bug triage meeting。千萬(wàn)別大家悶頭寫code。
郁也風(fēng) : 要,至少這點(diǎn)我們實(shí)施的還可以。
39. 你們項(xiàng)目組的會(huì)議、討論都有記錄么?
MVM : 會(huì)前發(fā)meeting request和agenda,會(huì)中有人負(fù)責(zé)主持和記錄,會(huì)后有人負(fù)責(zé)發(fā)meeting minutes,這都是effective meeting的要點(diǎn)。而且,每個(gè)會(huì)議都要形成agreements和action items。
郁也風(fēng) : 有記錄,最后要形成會(huì)議紀(jì)要的。
40. 其他部門知道你們項(xiàng)目組在干什么么?
MVM : 要發(fā)一些Newsflash給整個(gè)大組織。Show your team’s value。否則,當(dāng)你坐在電梯里面,其他部門的人問(wèn):“你們?cè)诟陕铩保慊卮稹癆BC項(xiàng)目”的時(shí)候,別人全然不知,那種感覺不太好。
郁也風(fēng) : 我們公司的項(xiàng)目開始時(shí)要求所有的技術(shù)骨干坐在一起評(píng)審的,別人想不知道都難。
41. 通過(guò)Email進(jìn)行所有正式溝通
MVM : Email的好處是免得抵賴。但也要避免矯枉過(guò)正,最好的方法是先用電話和當(dāng)面說(shuō),然后Email來(lái)確認(rèn)。
郁也風(fēng) : 很少使用Email,更多是當(dāng)面解決問(wèn)題,畢竟都在一個(gè)辦公室。
42. 為項(xiàng)目組建立多個(gè)Mailing Group
MVM : 如果在AD+Exchange里面,就建Distribution
List。比如,我會(huì)建ABC Project Core Team,ABC Project Dev Team,ABC Project All
Testers,ABC Project Extended
Team等等。這樣發(fā)起Email來(lái)方便,而且能讓該收到email的人都收到、不該收到不被騷擾。
郁也風(fēng) : 沒(méi)有這個(gè)條件,這個(gè)更應(yīng)該根據(jù)項(xiàng)目組的規(guī)模來(lái)進(jìn)行吧。
43. 每個(gè)人都知道哪里可以找到全部的文檔么?
MVM : 應(yīng)該每個(gè)人都知道。這叫做知識(shí)管理(Knowledge Management)。最方便的就是把文檔放在一個(gè)集中的File Share,更好的方法是用Sharepoint。
郁也風(fēng) : 所有需要的開發(fā)文檔都放在一個(gè)統(tǒng)一的地方,這是規(guī)定。
44. 你做決定、做變化時(shí),告訴大家原因了么?
MVM : 要告訴大家原因。Empower team
member的手段之一是提供足夠的information,這是MSF一開篇的幾個(gè)原則之一。的確如此,tell me why是人之常情,tell
me
why了才能有understanding。中國(guó)人做事喜歡搞限制,限制信息,似乎能夠看到某一份文件的人就是有身份的人。大錯(cuò)特錯(cuò)。權(quán)威、權(quán)力,不在于
是不是能access information/data,而在于是不是掌握資源。
郁也風(fēng) : 對(duì)我們來(lái)說(shuō),需做變化時(shí),也就是臨時(shí)會(huì)議的需要進(jìn)行的時(shí)候。
45. Stay agile and expect change
MVM : 要這樣。需求一定會(huì)變的,已經(jīng)寫好的代碼一定會(huì)被要求修改的。做好心理準(zhǔn)備,對(duì)change不要抗拒,而是expect change。
郁也風(fēng) : 這點(diǎn)只能說(shuō)談何容易。希望能做到吧。
46. 你們有沒(méi)有專職的軟件測(cè)試人員?
MVM : 要有專職測(cè)試。如果人手不夠,可以peer test,交換了測(cè)試。千萬(wàn)別自己測(cè)試自己的。
郁也風(fēng) : 我們都知道需要,可是往往實(shí)際情況差強(qiáng)人意。
47. 你們的測(cè)試有一份總的計(jì)劃來(lái)規(guī)定做什么和怎么做么?
MVM : 這就是Test Plan。要不要做性能測(cè)試?要不要做Usability測(cè)試?什么時(shí)候開始測(cè)試性能?測(cè)試通過(guò)的標(biāo)準(zhǔn)是什么?用什么手段,自動(dòng)的還是手動(dòng)的?這些問(wèn)題需要用Test Plan來(lái)回答。
郁也風(fēng) : 知道需要,可實(shí)際情況同46。
48. 你是先寫Test Case然后再測(cè)試的么?
MVM : 應(yīng)該如此。應(yīng)該先設(shè)計(jì)再編程、先test case再測(cè)試。當(dāng)然,事情是靈活的。我有時(shí)候在做第一遍測(cè)試的同時(shí)補(bǔ)上test case。至于先test case再開發(fā),我不喜歡,因?yàn)椴涣?xí)慣,太麻煩,至于別人推薦,那試試看也無(wú)妨。
郁也風(fēng) : 至少目前的習(xí)慣和你類似,將來(lái)打算試試TDD。
49. 你是否會(huì)為各種輸入組合創(chuàng)建測(cè)試用例?
MVM : 不要,不要搞邊界條件組合。當(dāng)心組合爆炸。有很多test case工具能夠自動(dòng)生成各種邊界條件的組合——但要想清楚,你是否有時(shí)間去運(yùn)行那么多test case。
郁也風(fēng) : 不會(huì),沒(méi)那個(gè)精力先。
50. 你們的程序員能看到測(cè)試用例么?
MVM : 要。讓Dev看到Test Case吧。我們都是為了同一個(gè)目的走到一起來(lái)的:提高質(zhì)量。
郁也風(fēng) : 當(dāng)然能夠,項(xiàng)目中所有的東西都是對(duì)大家透明的。
51. 你們是否隨便抓一些人來(lái)做易用性測(cè)試?
MVM : 要這么做。自己看自己寫的程序界面,怎么看都是順眼的。這叫做審美疲勞——臭的看久了也就不臭了,不方便的永久了也就習(xí)慣了。
郁也風(fēng) : 我是非常推薦這樣的測(cè)試的,很多時(shí)候,客戶也會(huì)參與進(jìn)來(lái)。
52. 你對(duì)自動(dòng)測(cè)試的期望正確么?
MVM : 別期望太高。依我看,除了性能測(cè)試以外,還是暫時(shí)先忘掉“自動(dòng)測(cè)試”吧,忘掉WinRunner和LoadRunner吧。對(duì)于國(guó)內(nèi)的軟件測(cè)試的現(xiàn)狀來(lái)說(shuō),只能“矯枉必須過(guò)正”了。
郁也風(fēng) : 從不期望。
53. 你們的性能測(cè)試是等所有功能都開發(fā)完才做的么?
MVM : 不能這樣。性能測(cè)試不能被歸到所謂的“系統(tǒng)測(cè)試”階段。早測(cè)早改正,早死早升天。
郁也風(fēng) : 同意,非常同意。
54. 你注意到測(cè)試中的殺蟲劑效應(yīng)了么?
MVM : 蟲子有抗藥性,Bug也有。發(fā)現(xiàn)的新Bug越來(lái)越少是正常的。這時(shí)候,最好大家交換一下測(cè)試的area,或者用用看其他工具和手法,就又會(huì)發(fā)現(xiàn)一些新bug了。
郁也風(fēng) : 同意。
55. 你們項(xiàng)目組中有人能說(shuō)出產(chǎn)品的當(dāng)前整體質(zhì)量情況么?
MVM : 要有。當(dāng)老板問(wèn)起這個(gè)產(chǎn)品目前質(zhì)量如何,Test Lead/Manager應(yīng)該負(fù)責(zé)回答。
郁也風(fēng) : 這當(dāng)然是TL/PM的活了。
56. 你們有單元測(cè)試么?
MVM : 單元測(cè)試要有的。不過(guò)沒(méi)有單元測(cè)試也不是不可以,我做過(guò)沒(méi)有單元測(cè)試的項(xiàng)目,也做成功了——可能是僥幸,可能是大家都是熟手的關(guān)系。還是那句話,軟件工程是非常實(shí)踐、非常工程、非常靈活的一套方法,某些方法在某些情況下會(huì)比另一些方法好,反之亦然。
郁也風(fēng) : 我同意,雖然我們做的很不好。
57. 你們的程序員是寫完代碼就扔過(guò)墻的么?
MVM : 大忌。寫好一塊程序以后,即便不做單元測(cè)試,也應(yīng)該自己先跑一跑。雖然有了專門的測(cè)試人員,做開發(fā)的人也不可以一點(diǎn)測(cè)試都不做。微軟還有Test Release Document的說(shuō)法,程序太爛的話,測(cè)試有權(quán)踢回去。
郁也風(fēng) : 這樣的選手是要挨罵的。
58. 你們的程序中所有的函數(shù)都有輸入檢查么?
MVM : 不要。雖然說(shuō)做輸入檢查是write secure code的要點(diǎn),但不要做太多的輸入檢查,有些內(nèi)部函數(shù)之間的參數(shù)傳遞就不必檢查輸入了,省點(diǎn)功夫。同樣的道理,未必要給所有的函數(shù)都寫注釋。寫一部分主要的就夠了。
郁也風(fēng) : 更多的時(shí)候是在最外面進(jìn)行檢查。太多的檢查沒(méi)有意義。
59. 產(chǎn)品有統(tǒng)一的錯(cuò)誤處理機(jī)制和報(bào)錯(cuò)界面么?
MVM : 要有。最好能有統(tǒng)一的error message,然后每個(gè)error
message都帶一個(gè)error number。這樣,用戶可以自己根據(jù)error number到user
manual里面去看看錯(cuò)誤的具體描述和可能原因,就像SQL
Server的錯(cuò)誤那樣。同樣,ASP.NET也要有統(tǒng)一的Exception處理。可以參考有關(guān)的Application Block。
郁也風(fēng) : 有,這也是j2ee 的規(guī)范了。
60. 你們有統(tǒng)一的代碼書寫規(guī)范么?
MVM : 要有。Code Convention很多,搞一份來(lái)發(fā)給大家就可以了。當(dāng)然,要是有FxCop這種工具來(lái)檢查代碼就更好了。
郁也風(fēng) : 有,首先是IDE的format工具,然后是Checkstyle之類的檢查工具在每天的day build之前使用。
61. 你們的每個(gè)人都了解項(xiàng)目的商業(yè)意義么?
MVM :
要。這是Vision的意思。別把項(xiàng)目只當(dāng)成工作。有時(shí)候要想著自己是在為中國(guó)某某行業(yè)的信息化作先驅(qū)者,或者時(shí)不時(shí)的告訴team
member,這個(gè)項(xiàng)目能夠?yàn)槟衬衬硣?guó)家部門每年節(jié)省多少多少百萬(wàn)的納稅人的錢,這樣就有動(dòng)力了。平凡的事情也是可以有個(gè)崇高的目標(biāo)的。
郁也風(fēng) : 剛才說(shuō)了,我們的項(xiàng)目的每個(gè)部分對(duì)每個(gè)人都是透明的。
62. 產(chǎn)品各部分的界面和操作習(xí)慣一致么?
MVM : 要這樣。要讓用戶覺得整個(gè)程序好像是一個(gè)人寫出來(lái)的那樣。
郁也風(fēng) : 需要,這也是規(guī)范的一部分。
63. 有可以作為宣傳亮點(diǎn)的Cool Feature么?
MVM : 要。這是增強(qiáng)團(tuán)隊(duì)凝聚力、信心的。而且,“一俊遮百丑”,有亮點(diǎn)就可以掩蓋一些問(wèn)題。這樣,對(duì)于客戶來(lái)說(shuō),會(huì)感覺產(chǎn)品從質(zhì)量角度來(lái)說(shuō)還是acceptable的。或者說(shuō),cool feature或者說(shuō)亮點(diǎn)可以作為質(zhì)量問(wèn)題的一個(gè)事后彌補(bǔ)措施。
郁也風(fēng) : 同意,我前一個(gè)項(xiàng)目的界面風(fēng)格,被客戶定為其它項(xiàng)目的參考標(biāo)準(zhǔn)了^_^。
64. 盡可能縮短產(chǎn)品的啟動(dòng)時(shí)間
MVM : 要這樣。軟件啟動(dòng)時(shí)間(Start-Up time)是客戶對(duì)性能好壞的第一印象。
郁也風(fēng) : 需要,另外一方面,等待對(duì)我們開發(fā)方也是一種折磨。
65. 不要過(guò)于注重內(nèi)在品質(zhì)而忽視了第一眼的外在印象
MVM : 程序員容易犯這個(gè)錯(cuò)誤:太看重性能、穩(wěn)定性、存儲(chǔ)效率,但忽視了外在感受。而高層經(jīng)理、客戶正相反。這兩方面要兼顧,協(xié)調(diào)這些是PM的工作。
郁也風(fēng) : 這也是我在最近的項(xiàng)目中轉(zhuǎn)變最大的方面。
66. 你們根據(jù)詳細(xì)產(chǎn)品功能說(shuō)明書做開發(fā)么?
MVM : 要這樣。要有設(shè)計(jì)才能開發(fā),這是必須的。設(shè)計(jì)文檔,應(yīng)該說(shuō)清楚這個(gè)產(chǎn)品會(huì)怎么運(yùn)行,應(yīng)該采取一些講故事的方法。設(shè)計(jì)的時(shí)候千萬(wàn)別鉆細(xì)節(jié),別鉆到數(shù)據(jù)庫(kù)、代碼等具體實(shí)現(xiàn)里面去,那些是后面的事情,一步步來(lái)不能著急。
郁也風(fēng) : 我更喜歡迭代,你的設(shè)計(jì)是根據(jù)需求,而需求是來(lái)自客戶,而客戶。。。永遠(yuǎn)不變的是變化。
67. 開始開發(fā)和測(cè)試之前每個(gè)人都仔細(xì)審閱功能設(shè)計(jì)么?
MVM : 要做。Function Spec review是用來(lái)統(tǒng)一思想的。而且,review過(guò)以后形成了一致意見,將來(lái)再也沒(méi)有人可以說(shuō)“你看,當(dāng)初我就是反對(duì)這么設(shè)計(jì)的,現(xiàn)在吃苦頭了吧”
郁也風(fēng) : 要做,而且要求每個(gè)人都提出意見,這是開發(fā)工作開始之前,開始之后,我更傾向于“一言堂”了。
68. 所有人都始終想著The Whole Image么?
MVM : 要這樣。項(xiàng)目里面每個(gè)人雖然都只是在制造一片葉子,但每個(gè)人都應(yīng)該知道自己在制造的那片葉子所在的樹是怎么樣子的。我反對(duì)軟件藍(lán)領(lǐng),反對(duì)過(guò)分的把軟件制造看成流水線、車間。參見第61條。
郁也風(fēng) : 我也同樣反對(duì)“軟件藍(lán)領(lǐng)”,一向唾棄這個(gè)學(xué)院派制造的名詞。我們采取的方式也同樣可以參加61。
69. Dev工作的劃分是單純縱向或橫向的么?
MVM : 不能單純的根據(jù)功能模塊分,或者單純根據(jù)表現(xiàn)層、中間層、數(shù)據(jù)庫(kù)層分。我推薦這么做:首先根據(jù)功能模塊分,然后每個(gè)“層”都有一個(gè)Owner來(lái)Review所有人的設(shè)計(jì)和代碼,保證consistency。
郁也風(fēng) : 同意。
70. 你們的程序員寫程序設(shè)計(jì)說(shuō)明文檔么?
MVM : 要。不過(guò)我聽說(shuō)微軟的程序員1999年以前也不寫。所以說(shuō),寫不寫也不是絕對(duì)的,偷懶有時(shí)候也是可以的。參見第56條。
郁也風(fēng) : 做的不夠,我們從來(lái)沒(méi)寫過(guò)。
71. 你在招人面試時(shí)讓他寫一段程序么?
MVM : 要的。我最喜歡讓人做字符串和鏈表一類的題目。這種題目有很多循環(huán)、判斷、指針、遞歸等,既不偏向過(guò)于考算法,也不偏向過(guò)于考特定的API。
郁也風(fēng) : 我認(rèn)為交流更能看出一個(gè)人的實(shí)際情況。
72. 你們有沒(méi)有技術(shù)交流講座?
MVM : 要的。每一兩個(gè)禮拜搞一次內(nèi)部的Tech Talk或者Chalk Talk吧。讓組員之間分享技術(shù)心得,這筆花錢送到外面去培訓(xùn)劃算。
郁也風(fēng) : 同意,也在著手準(zhǔn)備啟動(dòng)。
73. 你們的程序員都能專注于一件事情么?
MVM :
要讓程序員專注一件事。例如說(shuō),一個(gè)部門有兩個(gè)項(xiàng)目和10個(gè)人,一種方法是讓10個(gè)人同時(shí)參加兩個(gè)項(xiàng)目,每個(gè)項(xiàng)目上每個(gè)人都花50%時(shí)間;另一種方法是5
個(gè)人去項(xiàng)目A,5個(gè)人去項(xiàng)目B,每個(gè)人都100%在某一個(gè)項(xiàng)目上。我一定選后面一種。這個(gè)道理很多人都懂,但很多領(lǐng)導(dǎo)實(shí)踐起來(lái)就把屬下當(dāng)成可以任意拆分的
資源了。
郁也風(fēng) : 我也懂,可實(shí)際情況是,現(xiàn)在有4個(gè)項(xiàng)目和我有關(guān)聯(lián)。
74. 你們的程序員會(huì)夸大完成某項(xiàng)工作所需要的時(shí)間么?
MVM : 會(huì)的,這是常見的,尤其會(huì)在項(xiàng)目后期夸大做某個(gè)change所需要的時(shí)間,以次來(lái)抵制change。解決的方法是坐下來(lái)慢慢磨,磨掉程序員的逆反心理,一起分析,并把估算時(shí)間的顆粒度變小。
郁也風(fēng) : 會(huì)的,就算我在上報(bào)工作量的時(shí)候也會(huì)夸大的。對(duì)下,我采取的措施同你;上面對(duì)我,采取的措施是打折。
75. 盡量不要用Virtual Heads
MVM : 最好不要用Virtual Heads。Virtual
heads意味著resource is not secure,shared
resource會(huì)降低resource的工作效率,容易增加出錯(cuò)的機(jī)會(huì),會(huì)讓一心二用的人沒(méi)有太多時(shí)間去review spec、review
design。一個(gè)dedicated的人,要強(qiáng)過(guò)兩個(gè)只能投入50%時(shí)間和精力的人。我是吃過(guò)虧的:7個(gè)part
time的tester,發(fā)現(xiàn)的Bug和干的活,加起來(lái)還不如兩個(gè)full-time的。參見第73條。73條是針對(duì)程序員的,75條是針對(duì)
Resource Manager的。
郁也風(fēng) : 我想說(shuō)的同73。