1. 你們的項目組使用源代碼管理工具了么?
   
應該用。 VSS CVS PVCS ClearCase CCC/Harvest FireFly 都可以。我的選擇是 VSS

 2. 你們的項目組使用缺陷管理系統了么?
   
應該用。 ClearQuest 太復雜,我的推薦是 BugZilla

 3. 你們的測試組還在用 Word 寫測試用例么?
   不要用 Word 寫測試用例( Test Case )。應該用一個專門的系統,可以是 Test Manager ,也可以是自己開發一個 ASP.NET 的小網站。主要目的是 Track Browse

 4. 你們的項目組有沒有建立一個門戶網站?
  要有一個門戶網站,用來放 Contact Info Baselined Schedule News 等等。推薦 Sharepoint Portal Server 2003 來實現, 15 分鐘就搞定。買不起 SPS 2003 可以用 WSS (Windows Sharepoint Service)

 5. 你們的項目組用了你能買到最好的工具么?
  應該用盡量好的工具來工作。比如,應該用 VS.NET 而不是 Notepad 來寫 C# 。用 Notepad 寫程序多半只是一種炫耀。但也要考慮到經費,所以說是 " 你能買到最好的 "
 
 6.
你們的程序員工作在安靜的環境里么?
  需要安靜環境。這點極端重要,而且要保證每個人的空間大于一定面積。

 7. 你們的員工每個人都有一部電話么?需要每人一部電話。而且電話最好是帶留言功能的。當然,上這么一套帶留言電話系統開銷不小。不過至少每人一部電話要有,千萬別搞得經常有人站起來喊: " 某某某電話 " 。《人件》里面就強烈譴責這種做法。

 8. 你們每個人都知道出了問題應該找誰么?
  應該知道。任何一個 Feature 至少都應該有一個 Owner ,當然, Owner 可以繼續 Dispatch 給其他人。

 9. 你遇到過有人說 " 我以為 …" 么?
  要消滅 " 我以為 " Never assume anything

10. 你們的項目組中所有的人都坐在一起么?
  需要。我反對 Virtual Team ,也反對 Dev 在美國、 Test 在中國這種開發方式。能坐在一起就最好坐在一起,好處多得不得了。

11. 你們的進度表是否反映最新開發進展情況?
  應該反映。但是,應該用 Baseline 的方法來管理進度表:維護一份穩定的 Schedule ,再維護一份最新更改。 Baseline 的方法也應該用于其它的 Spec Baseline 是變更管理里面的一個重要手段。

12. 你們的工作量是先由每個人自己估算的么?
  應該讓每個人自己估算。要從下而上估算工作量,而不是從上往下分派。除非有其他原因,比如政治任務工期固定等。

13. 你們的開發人員從項目一開始就加班么?
  不要這樣。不要一開始就搞疲勞戰。從項目一開始就加班,只能說明項目進度不合理。當然,一些對日軟件外包必須天天加班,那屬于剝削的范疇。

14. 你們的項目計劃中 Buffer Time 是加在每個小任務后面的么?
  不要。 Buffer Time 加在每個小任務后面,很容易輕易的就被消耗掉。 Buffer Time 要整段的加在一個 Milestone 或者 checkpoint 前面。

15. 值得再多花一些時間,從 95% 做到 100% 好值得,非常值得。
  尤其當項目后期人困馬乏的時候,要堅持。這會給產品帶來質的區別。

16. 登記新缺陷時,是否寫清了重現步驟?
  要。這屬于 Dev Test 之間的溝通手段。面對面溝通需要,詳細填寫 Repro Steps 也需要。

17. 寫新代碼前會把已知缺陷解決么?
   
要。每個人的缺陷不能超過 10 個或 15 個,否則必須先解決老的 bug 才能繼續寫新代碼。

18. 你們對缺陷的輕重緩急有事先的約定么?
  必須有定義。 Severity 要分 1 2 3 ,約定好:藍屏和 Data Lost Sev 1 Function Error Sev 2 ,界面上的算 Sev 3 。但這種約定可以根據產品質量現狀適當進行調整。

19. 你們對意見不一的缺陷有三國會議么?
   
必須要有。要有一個明確的決策過程。這類似于 CCB (Change Control Board) 的概念。

20. 所有的缺陷都是由登記的人最后關閉的么?
   Bug 應該由 Opener 關閉。 Dev 不能私自關閉 Bug

21. 你們的程序員厭惡修改老的代碼么?
  厭惡是正常的。解決方法是組織 Code Review ,單獨留出時間來。 XP 也是一個方法。

22. 你們項目組有 Team Morale Activity 么?
  每個月都要搞一次,吃飯、唱歌、 Outing 、打球、開卡丁車等等,一定要有。不要剩這些錢。

23. 你們項目組有自己的 Logo 么?
  要有自己的 Logo 。至少應該有自己的 Codename

24. 你們的員工有印有公司 Logo T-Shirt 么?
  要有。能增強歸屬感。當然, T-Shirt 要做的好看一些,最好用 80 支的棉來做。別沒穿幾次就破破爛爛的。

25. 總經理至少每月參加次項目組會議要的。
  要讓 team member 覺得高層關注這個項目。

26. 你們是給每個 Dev 開一個分支么?
  反對。 Branch 的管理以及 Merge 的工作量太大,而且容易出錯。

27. 有人長期不 Check-In 代碼么?
  不可以。對大部分項目來說,最多兩三天就應該 Check-In

28. Check-In 代碼時都填寫注釋了么?
  要寫的,至少一兩句話,比如 " 解決了 Bug No.225 (給 bug 編號) " 。如果往高處拔,這也算做 " 配置審計 " 的一部分。

29. 有沒有設定每天 Check-In 的最后期限?
  要的,要明確 Check-In Deadline 。否則會 Build Break

30. 你們能把所有源碼一下子編譯成安裝文件嗎?
  要的。這是每日編譯( Daily Build )的基礎。而且必須要能夠做成自動的。

31. 你們的項目組做每日編譯么?
  當然要做。有三樣東西是軟件項目 / 產品開發必備的: 1. bug management; 2. source control; 3. daily build

32. 你們公司有沒有積累一個項目風險列表?
  要。 Risk Inventory 。否則,下個項目開始的時候,又只能拍腦袋分析 Risk 了。

33. 設計越簡單越好越簡單越好。
  設計時候多一句話,將來可能就帶來無窮無盡的煩惱。應該從一開始就勇敢的砍。這叫 scope management

34. 盡量利用現有的產品、技術、代碼千萬別什么東西都自己 Coding BizTalk Sharepoint 就是最好的例子,有這兩個作為基礎,可以把起點提高很多。或者可以盡量多用現成的 Control 之類的。或者盡量用 XML ,而不是自己去 Parse 一個文本文件;盡量用 RegExp ,而不是自己從頭操作字符串,等等等等。這就是 " 軟件復用 " 的體現。

35. 你們會隔一段時間就停下來夯實代碼么?
  要。最好一個月左右一次。傳言去年年初 Windows 組在 Stevb 的命令下停過一個月增強安全。 Btw " " 這個字念 "hang" ,第一聲。

36. 你們的項目組每個人都寫 Daily Report 么?
  要寫。五分鐘就夠了,寫 10 句話左右,告訴自己小組的人今天我干了什么。一則為了溝通,二則鞭策自己(要是游手好閑一天,自己都會不好意思寫的)。

37. 你們的項目經理會發出 Weekly Report 么?
  要。也是為了溝通。內容包括目前進度,可能的風險,質量狀況,各種工作的進展等。

38. 你們項目組是否至少每周全體開會一次?
  要。一定要開會。程序員討厭開會,但每個禮拜開會時間加起來至少應該有 4 小時。包括 team meeting, spec review meeting, bug triage meeting 。千萬別大家悶頭寫 code

39. 你們項目組的會議、討論都有記錄么?
  會前發 meeting request agenda ,會中有人負責主持和記錄,會后有人負責發 meeting minutes ,這都是 effective meeting 的要點。而且,每個會議都要形成 agreements action items

40. 其他部門知道你們項目組在干什么么?
  要發一些 Newsflash 給整個大組織。 Show your team's value 。否則,當你坐在電梯里面,其他部門的人問: " 你們在干嘛 " ,你回答 "ABC 項目 " 的時候,別人全然不知,那種感覺不太好。

41. 通過 Email 進行所有正式溝通
   Email 的好處是免得抵賴。但也要避免矯枉過正,最好的方法是先用電話和當面說,然后 Email 來確認。

42. 為項目組建立多個 Mailing Group
  如果在 AD+Exchange 里面,就建 Distribution List 。比如,我會建 ABC Project Core Team ABC Project Dev Team ABC Project All Testers ABC Project Extended Team 等等。這樣發起 Email 來方便,而且能讓該收到 email 的人都收到、不該收到不被騷擾。

43. 每個人都知道哪里可以找到全部的文檔么?
  應該每個人都知道。這叫做知識管理( Knowledge Management )。最方便的就是把文檔放在一個集中的 File Share ,更好的方法是用 Sharepoint

44. 你做決定、做變化時,告訴大家原因了么?
  要告訴大家原因。 Empower team member 的手段之一是提供足夠的 information ,這是 MSF 一開篇的幾個原則之一。的確如此, tell me why 是人之常情, tell me why 了才能有 understanding 。中國人做事喜歡搞限制,限制信息,似乎能夠看到某一份文件的人就是有身份的人。大錯特錯。權威、權力,不在于是不是能 access information/data ,而在于是不是掌握資源。

45. Stay agile and expect change 要這樣。
  需求一定會變的,已經寫好的代碼一定會被要求修改的。做好心理準備,對 change 不要抗拒,而是 expect change

46. 你們有沒有專職的軟件測試人員?
  要有專職測試。如果人手不夠,可以 peer test ,交換了測試。千萬別自己測試自己的。

47. 你們的測試有一份總的計劃來規定做什么和怎么做么?
   
這就是 Test Plan 。要不要做性能測試?要不要做 Usability 測試?什么時候開始測試性能?測試通過的標準是什么?用什么手段,自動的還是手動的?這些問題需要用 Test Plan 來回答。

48. 你是先寫 Test Case 然后再測試的么?
  應該如此。應該先設計再編程、先 test case 再測試。當然,事情是靈活的。我有時候在做第一遍測試的同時補上 test case 。至于先 test case 再開發,我不喜歡,因為不習慣,太麻煩,至于別人推薦,那試試看也無妨。

49. 你是否會為各種輸入組合創建測試用例?
  不要,不要搞邊界條件組合。當心組合爆炸。有很多 test case 工具能夠自動生成各種邊界條件的組合 -- 但要想清楚,你是否有時間去運行那么多 test case

50. 你們的程序員能看到測試用例么?
  要。讓 Dev 看到 Test Case 吧。我們都是為了同一個目的走到一起來的:提高質量。

51. 你們是否隨便抓一些人來做易用性測試?
  要這么做。自己看自己寫的程序界面,怎么看都是順眼的。這叫做審美疲勞 -- 臭的看久了也就不臭了,不方便的永久了也就習慣了。

52. 你對自動測試的期望正確么?
  別期望太高。依我看,除了性能測試以外,還是暫時先忘掉 " 自動測試 " 吧,忘掉 WinRunner LoadRunner 吧。對于國內的軟件測試的現狀來說,只能 " 矯枉必須過正 " 了。

53. 你們的性能測試是等所有功能都開發完才做的么?
  不能這樣。性能測試不能被歸到所謂的 " 系統測試 " 階段。早測早改正,早死早升天。

54. 你注意到測試中的殺蟲劑效應了么?
  蟲子有抗藥性, Bug 也有。發現的新 Bug 越來越少是正常的。這時候,最好大家交換一下測試的 area ,或者用用看其他工具和手法,就又會發現一些新 bug 了。

55. 你們項目組中有人能說出產品的當前整體質量情況么?
  要有。當老板問起這個產品目前質量如何, Test Lead/Manager 應該負責回答。

56. 你們有單元測試么?
  單元測試要有的。不過沒有單元測試也不是不可以,我做過沒有單元測試的項目,也做成功了 -- 可能是僥幸,可能是大家都是熟手的關系。還是那句話,軟件工程是非常實踐、非常工程、非常靈活的一套方法,某些方法在某些情況下會比另一些方法好,反之亦然。

57. 你們的程序員是寫完代碼就扔過墻的么?
  大忌。寫好一塊程序以后,即便不做單元測試,也應該自己先跑一跑。雖然有了專門的測試人員,做開發的人也不可以一點測試都不做。微軟還有 Test Release Document 的說法,程序太爛的話,測試有權踢回去。

58. 你們的程序中所有的函數都有輸入檢查么?
  不要。雖然說做輸入檢查是 write secure code 的要點,但不要做太多的輸入檢查,有些內部函數之間的參數傳遞就不必檢查輸入了,省點功夫。同樣的道理,未必要給所有的函數都寫注釋。寫一部分主要的就夠了。

59. 產品有統一的錯誤處理機制和報錯界面么?
  要有。最好能有統一的 error message ,然后每個 error message 都帶一個 error number 。這樣,用戶可以自己根據 error number user manual 里面去看看錯誤的具體描述和可能原因,就像 SQL Server 的錯誤那樣。同樣, ASP.NET 也要有統一的 Exception 處理。可以參考有關的 Application Block

60. 你們有統一的代碼書寫規范么?
  要有。 Code Convention 很多,搞一份來發給大家就可以了。當然,要是有 FxCop 這種工具來檢查代碼就更好了。

61. 你們的每個人都了解項目的商業意義么?
  要。這是 Vision 的意思。別把項目只當成工作。有時候要想著自己是在為中國某某行業的信息化作先驅者,或者時不時的告訴 team member ,這個項目能夠為某某某國家部門每年節省多少多少百萬的納稅人的錢,這樣就有動力了。平凡的事情也是可以有個崇高的目標的。

62. 產品各部分的界面和操作習慣一致么?
  要這樣。要讓用戶覺得整個程序好像是一個人寫出來的那樣。

63. 有可以作為宣傳亮點的 Cool Feature 么?
  要。這是增強團隊凝聚力、信心的。而且, " 一俊遮百丑 " ,有亮點就可以掩蓋一些問題。這樣,對于客戶來說,會感覺產品從質量角度來說還是 acceptable 的。或者說, cool feature 或者說亮點可以作為質量問題的一個事后彌補措施。

64. 盡可能縮短產品的啟動時間要這樣。
  軟件啟動時間( Start-Up time )是客戶對性能好壞的第一印象。

65. 不要過于注重內在品質而忽視了第一眼的外在印象程序員容易犯這個錯誤:太看重性能、穩定性、存儲效率,但忽視了外在感受。而高層經理、客戶正相反。這兩方面要兼顧,協調這些是 PM 的工作。

66. 你們根據詳細產品功能說明書做開發么?
  要這樣。要有設計才能開發,這是必須的。設計文檔,應該說清楚這個產品會怎么運行,應該采取一些講故事的方法。設計的時候千萬別鉆細節,別鉆到數據庫、代碼等具體實現里面去,那些是后面的事情,一步步來不能著急。

67. 開始開發和測試之前每個人都仔細審閱功能設計么?
  要做。 Function Spec review 是用來統一思想的。而且, review 過以后形成了一致意見,將來再也沒有人可以說 " 你看,當初我就是反對這么設計的,現在吃苦頭了吧 "

68. 所有人都始終想著 The Whole Image 么?要這樣。項目里面每個人雖然都只是在制造一片葉子,但每個人都應該知道自己在制造的那片葉子所在的樹是怎么樣子的。我反對軟件藍領,反對過分的把軟件制造看成流水線、車間。參見第 61 條。

69. Dev 工作的劃分是單純縱向或橫向的么?
  不能單純的根據功能模塊分,或者單純根據表現層、中間層、數據庫層分。我推薦這么做:首先根據功能模塊分,然后每個 " " 都有一個 Owner Review 所有人的設計和代碼,保證 consistency

70. 你們的程序員寫程序設計說明文檔么?
  要。不過我聽說微軟的程序員 1999 年以前也不寫。所以說,寫不寫也不是絕對的,偷懶有時候也是可以的。參見第 56 條。

71. 你在招人面試時讓他寫一段程序么?
  要的。我最喜歡讓人做字符串和鏈表一類的題目。這種題目有很多循環、判斷、指針、遞歸等,既不偏向過于考算法,也不偏向過于考特定的 API

72. 你們有沒有技術交流講座?
  要的。每一兩個禮拜搞一次內部的 Tech Talk 或者 Chalk Talk 吧。讓組員之間分享技術心得,這筆花錢送到外面去培訓劃算。

73. 你們的程序員都能專注于一件事情么?
  要讓程序員專注一件事。例如說,一個部門有兩個項目和 10 個人,一種方法是讓 10 個人同時參加兩個項目,每個項目上每個人都花 50% 時間;另一種方法是 5 個人去項目 A 5 個人去項目 B ,每個人都 100% 在某一個項目上。我一定選后面一種。這個道理很多人都懂,但很多領導實踐起來就把屬下當成可以任意拆分的資源了。

74. 你們的程序員會夸大完成某項工作所需要的時間么?
  會的,這是常見的,尤其會在項目后期夸大做某個 change 所需要的時間,以次來抵制 change 。解決的方法是坐下來慢慢磨,磨掉程序員的逆反心理,一起分析,并把估算時間的顆粒度變小。

75. 盡量不要用 Virtual Heads 最好不要用 Virtual Heads
   Virtual heads 意味著 resource is not secure shared resource 會降低 resource 的工作效率,容易增加出錯的機會,會讓一心二用的人沒有太多時間去 review spec review design 。一個 dedicated 的人,要強過兩個只能投入 50% 時間和精力的人。我是吃過虧的: 7 part time tester ,發現的 Bug 和干的活,加起來還不如兩個 full-time 的。參見第 73 條。 73 條是針對程序員的, 75 條是針對 Resource Manager 的。