我們在不斷探尋更好的軟件開(kāi)發(fā)方法,希望能找到適合自己和團隊的好辦法。不過(guò),基于既有的教條,關(guān)于各種開(kāi)發(fā)方法孰優(yōu)孰劣的討論最終總會(huì )演變成激烈的爭吵。字典中教條的定義是“一種權威性觀(guān)點(diǎn),但并沒(méi)有充分的依據”。我們經(jīng)常會(huì )看到,各種方法的擁護者們都堅持認為自己的方法才是開(kāi)發(fā)軟件唯一正確的方法。
我們不斷聽(tīng)到一些從業(yè)人員這么講,他們執著(zhù)地采用某種方式開(kāi)發(fā)軟件,即使這種方法明顯危害到團隊的其他人甚至整個(gè)組織,卻仍然固執己見(jiàn)。事實(shí)上,開(kāi)發(fā)軟件根本沒(méi)有所謂“絕對正確的方法”。倒是有很多錯誤的方法,不過(guò)沒(méi)有哪一種方法、觀(guān)點(diǎn)、哲學(xué)或工具能“以不變應萬(wàn)變”,在所有時(shí)間、所有場(chǎng)合對所有項目和所有人都適用。軟件是人創(chuàng )建的,不會(huì )有兩個(gè)人完全一樣。
在人生中,我們應該選擇優(yōu)秀的一些習慣,我們要刻意去培養它,使得其成為自己的習慣。讓自己習慣性?xún)?yōu)秀,那么就會(huì )獲得成功?!拔覀兠恳惶煸鯓佣冗^(guò),一生就會(huì )怎樣度過(guò)”
習慣性?xún)?yōu)秀,如果我們堅持不懈,那么優(yōu)秀就不再是一種行為,而成為一個(gè)習慣。
采石工人信條:
盡管我們只是采石頭,但腦海中必須想象著(zhù)最終建造出的宏偉教堂。
一流的產(chǎn)品只不過(guò)是好習慣的副產(chǎn)品
1. 在沙箱中開(kāi)發(fā),只需記住一個(gè)基本原則,在你準備好之前,要與其他人隔離,使他們不會(huì )受到你的工作的影響。把這個(gè)原則描述為“隔離原代碼”。
2. 管理資產(chǎn),需要一個(gè)源代碼管理(SCM)系統,也稱(chēng)為版本控制(VC)系統,跟蹤存儲庫(或數據庫)中的所有資產(chǎn), 并協(xié)調對這些文件的安全訪(fǎng)問(wèn)。
3. 建立構建腳本,構建會(huì )把源代碼轉換為一個(gè)可運行的程序,根據需要打包圖像和其它資源。自動(dòng)完成構建過(guò)程 不僅可以更準確地完成各個(gè)步驟(更不容易出錯),還能讓我們按時(shí)收工。
4. 跟蹤問(wèn)題,一個(gè)好的問(wèn)題跟蹤系統會(huì )為給定的產(chǎn)品生成活動(dòng)報告,遇到多少個(gè)問(wèn)題,多少個(gè)問(wèn)題得到解決, 花費了多長(cháng)時(shí)間等,從而用來(lái)找出項目中的問(wèn)題地帶。
5. 跟蹤特性,跟蹤特性的方法與跟蹤問(wèn)題列表相同,需要維護一個(gè)統一的特性請求列表,為特性指定優(yōu)先級, 并對研究或增加這個(gè)特性可能需要的時(shí)間做一個(gè)基本估算,并在白板上保留最高優(yōu)先級的特性列表,
讓大家一目了然。如果一個(gè)任務(wù)不在指定優(yōu)先級的列表中,就不要做任何處理。
6. 使用自動(dòng)化測試框架來(lái)創(chuàng )建和運行自動(dòng)化測試,也可以手工編寫(xiě)獨立的測試。
包括單元測試、功能測試、性能測試、負載測試、煙霧測試、集成測試、模擬客戶(hù)測試。
單元測試:驗證一個(gè)代碼單元中邏輯操作的正確性
功能測試:測試整個(gè)產(chǎn)品的操作或功能是否正確
性能測試:運行速度
負載測試:在很大負載情況下的表現
煙霧測試:冒煙測試
7. 選擇工具,工欲善其事、必先利其器,使用的每一個(gè)工具都應當最勝任相關(guān)工作,
要在每個(gè)領(lǐng)域中尋求“最出類(lèi)拔萃”的工具。
任務(wù)清單
使用任務(wù)清單相當容易,不過(guò),任務(wù)清單要真正做到有效,必須遵循一些原則。包括以下所有特點(diǎn):
1. 可以公開(kāi)獲得
團隊的任務(wù)清單必須可以公開(kāi)獲取,一個(gè)秘密的任務(wù)清單對協(xié)作沒(méi)有任何幫助。要把任務(wù)清單放在你的白板上或者放在網(wǎng)站上為它建立一個(gè)RSS提要,不然至少要讓人們很容易很明了的讀到。把任務(wù)清單一直放在面前,有助于保證工作重點(diǎn)。
2. 已指定優(yōu)先級
任務(wù)清單必須已經(jīng)指定優(yōu)先級,要區分產(chǎn)品中不同類(lèi)型的特性 --- 必要特性、可取特性和無(wú)用特性。在對任務(wù)清單指定優(yōu)先級時(shí)必須有所區別,否則不分輕重緩急最后只會(huì )浪費時(shí)間。通常會(huì )有一組核心任務(wù)必須在產(chǎn)品交付前完成,這些就是優(yōu)先級最高的特性。絕對不要忽視你設置的優(yōu)先級,在處理較低優(yōu)先級任務(wù)之前,一定要先完成所有高優(yōu)先級的任務(wù),除非確實(shí)有充分的理由暫緩某個(gè)任務(wù)。
3. 有時(shí)間表
任務(wù)清單總有一個(gè)關(guān)聯(lián)的時(shí)間表,這個(gè)時(shí)間表并非一成不變。但應該包括估計時(shí)間,指出任務(wù)清單中的各項任務(wù)大致需要多長(cháng)時(shí)間完成。然后,當你完成一個(gè)任務(wù)時(shí),要記錄實(shí)際所花的時(shí)間,并注意二者之差。
4. 活躍
任務(wù)清單必須是活的,不能一成不變。你的團隊必須能夠適應變化。技術(shù)領(lǐng)導人會(huì )隨著(zhù)項目進(jìn)展調整特性的優(yōu)先級;一些新的特性會(huì )出現,而有些特性會(huì )退出。任務(wù)清單有變化通常意味著(zhù)客戶(hù)或干系人在關(guān)注這個(gè)項目,而且確實(shí)提出了想法和有價(jià)值的反饋。
5. 可測量
為了保證有效,任務(wù)清單上的每一項必須是可測量的。畢竟,如果你想從任務(wù)清單中去除某項任務(wù),就必須能確定這項任務(wù)已經(jīng)完成?;谶@個(gè)原則,要避免一些模糊不清的任務(wù),如“提高性能”,而傾向于一些具體的任務(wù),如”保證登錄在5秒內完成“或者”在10秒內生成報告X“。通過(guò)創(chuàng )建一個(gè)只有“是”和“否”兩種狀態(tài)的目標,你就能明確這個(gè)目標是否已完成。如果你的任務(wù)清單上有一些任務(wù)是不可測量的,那么要花些時(shí)間查看真正的需求是什么。把這個(gè)任務(wù)分解為明確的只有兩種狀態(tài)的任務(wù),然后讓原先提出要求的人檢查這些任務(wù)。如果一項任務(wù)無(wú)法轉換為可測量的目標,就把它設置為優(yōu)先級最低,先處理更高優(yōu)先級的任務(wù)。
6. 有針對性
有兩類(lèi)任務(wù)清單:團隊任務(wù)清單和個(gè)人任務(wù)清單,都非常重要,必須針對適當的對象。團隊任務(wù)清單包含整個(gè)項目的所有重要工作,個(gè)人任務(wù)清單包含的任務(wù)較少,一旦完成,就要從團隊的任務(wù)清單中復制一項任務(wù),把它加到個(gè)人任務(wù)清單中
集體參與架構設計:
1.一個(gè)會(huì )議主持人,任何人說(shuō)話(huà)之前必須經(jīng)他“許可”
2.整個(gè)會(huì )議中應在白板上記錄要點(diǎn)
3.可以用LEGO或積木表示系統中的對象
4.記錄接口并發(fā)布。
5.保證會(huì )議不被中斷。要盡量減少轉移話(huà)題和回答問(wèn)題的次數。
增加總線(xiàn)數:
總線(xiàn)數是指當損失的開(kāi)發(fā)人員達到這個(gè)數,則極有可能導致項目失敗。如果你的團隊有一個(gè)“超級明星”,項目大部分信息都在他手里,那么你的團隊總線(xiàn)數就是1。
曳光彈開(kāi)發(fā)流程:
提出系統目標->提出接口->連接接口->增加功能->重構、求精、重復->提出系統目標(新目標)->...如此重復
工作流程:
1.定義系統對象。
2.定義系統對象間的接口。
3.編寫(xiě)接口樁stub。
簡(jiǎn)言之:
address fundamental problems as soon as possible
give the client a useful result as soon as possible
構建 自動(dòng)化構建 模擬用戶(hù)功能測試 單元測試
測試之前不要修改遺留代碼
盡早而且經(jīng)常發(fā)布真實(shí)演示系統。
另類(lèi)開(kāi)發(fā)人員:與團隊步調不一致,經(jīng)常造成破壞但堅信自己是正確的。
使用每日站會(huì )修正另類(lèi)開(kāi)發(fā)人員的航向
保證另類(lèi)開(kāi)發(fā)人員只能完成任務(wù)清單上的任務(wù)
使用代碼審查和自動(dòng)代碼變更通知來(lái)追蹤另類(lèi)開(kāi)發(fā)人員的工作
使用CI來(lái)作為最后一道防線(xiàn)監視另類(lèi)開(kāi)發(fā)人員的工作
制定團隊任務(wù)清單和個(gè)人任務(wù)清單,定期(例如每2周)讓經(jīng)理審查
讓經(jīng)理(例如每周)掌握團隊和你的最新進(jìn)展(例如郵件)
如果遇到每天檢查你好幾遍的老板,則給他看任務(wù)清單,讓他能夠在特定的時(shí)間得到定期的狀態(tài)更新。
每個(gè)團隊成員需要十分鐘或者更多時(shí)間。
某個(gè)團隊成員總是占用太多時(shí)間,幾乎是其他成員時(shí)間的總和。
人們以一種不友善的方式相互責問(wèn)。
會(huì )議總是很晚才開(kāi)始(或結束)
會(huì )議變得空洞無(wú)物,開(kāi)發(fā)人員僅僅只是宣稱(chēng)“我完成了90%”,或者“我在做關(guān)于***的工作”
團隊成員在漫無(wú)目的地聊天,忘記要報告他們做了些什么,你要私下里要求這些團隊成員把他們的工作寫(xiě)下來(lái),這樣在開(kāi)會(huì )時(shí)他們就能保證目標集中,報告簡(jiǎn)潔,他們還可以建立自己的任務(wù)清單從而更有條理。
確保團隊的工作優(yōu)先級與客戶(hù)的需求一致;
確保將團隊的工作適當地展示給管理層;
將團隊與不懂技術(shù)的管理層隔離;
為不懂技術(shù)的干系人解釋技術(shù)問(wèn)題;
讓開(kāi)發(fā)團隊了解非技術(shù)問(wèn)題。
為團隊成員設定方向;
管理項目的特性列表;
為項目的特性確定優(yōu)先級;
隔離你的團隊,使他們不受外部干擾。
你知道團隊的每一個(gè)成員都在做什么嗎?
你能不能在5分鐘內生成一個(gè)關(guān)于項目狀態(tài)的總結?
產(chǎn)品接下來(lái)要事先的5到10個(gè)特性是什么?
你能不能很容易地列出產(chǎn)品中優(yōu)先級最高的缺陷?
你為團隊成員解決的最近的問(wèn)題時(shí)什么?
如果一個(gè)團隊成員需要解決一個(gè)重要問(wèn)題,他會(huì )來(lái)向你求助嗎?
警告信號:
缺乏對每一個(gè)團隊成員工作方向的全局認識。
他一來(lái),工作就要停下來(lái)。
團隊工作出色,但只要他得到好評。
不能解決問(wèn)題,或者更糟糕地,反而會(huì )帶來(lái)問(wèn)題。
不能準確地預測工作時(shí)間表。
不清楚團隊成員的技術(shù)能力,也不知道團隊成員希望了解什么。
對團隊中的沖突視而不見(jiàn)。
聯(lián)系客服