轉載于:http://www.infoq.com/cn/articles/skills-for-scrum-agile-teams
敏捷項目的工程獨特性
1.
設置開發環境
在傳統項目中,團隊可以投入充分的時間來設置開發環境;而在敏捷團隊里面,他們需要從第一刻時間起就能產出。根據我們的經驗,我們認識到缺乏設置開發環境的相關文檔是設置環境如此耗時的一個關鍵原因。第二個關鍵原因是在設置過程中涉及的手工步驟數。在第0次sprint,我們必須記錄每一件開發人員必須做了才能開始編寫代碼,并集成團隊其他人工作的小事。
2.
自動構建
讓我們盡早失敗!我們領悟到,手工構建可能既脆弱,又特定于某一臺機器,而且當時間耗費在手工構建的基礎工作上面時,開發和測試的時間就被擠占掉了。除去最小的項目,自動構建過程對于每一個項目都是必不可少的。我們認識到,即使需要抽出時間來創建自動構建的環境,你以后是能把這些時間賺回來的。這也使得我們更易于確保項目有一個人人共有的標準化構建。
3.
持續集成
根據我們過去的經驗,我們領悟到,等到最后的幾個星期才去把不同團隊成員的代碼集成到一起是一個災難。如果你已經擁有了自動構建,接下來的事情就是持續集成。當然,版本控制(或者軟件配置管理——另一個更為正式的和令人印象深刻的名字)是自動構建和持續集成環境的前提。我們學到的一個重要教訓是,你越快識別出集成的錯誤,你就能越快地解決這些問題。我們曾經使用過的主要工具包括
CruiseControl、
CruiseControl.Net和
Bamboo。 hadson,基礎集成還是不錯的。
4.
單元測試
在高度流動的環境中,隨著多個開發人員一起工作、需求的變更和優先級的不斷變化,確保昨天可以運行的東西今天也能運行,這是至關重要的。此外,我們還要與集成出現的錯誤為戰。一種方法(我們從艱難歲月中學習得來)是使用單元測試,這樣代碼的更改不會破壞現有的功能。我們也開始在開發編碼之前編寫單元測試用例。我們曾經使用過的主要工具包括
JUnit(以及其他的xUnit工具如
NUnit、
HttpUnit等)和
MockObjects。
5.
重構
在傳統的項目中,通常有一個人保護他們的代碼庫,直到代碼集成階段。但是在敏捷里面,我們持代碼集體所有制的觀點——所有的代碼屬于所有的開發人員,只要開發人員認為有必要,每個人都能不受約束地去改善代碼。在一段時間里面,我們的代碼庫開始出現奇怪的行為——解決辦法就是重構(感謝Martin
Fowler在他的同名著作中把重構一詞推廣開來)。重構的本質歸結為修改代碼以改善代碼的結構和清晰度,但不改變代碼的功能。我們學到的一個重要教訓是在重構代碼之前使用單元測試作為安全網,我們曾經使用過的一些主要工具包括Eclipse、NetBeans、IntelliJ IDEA的和Visual
Studio.NET。
在敏捷團隊之中工作所必備的行為特征
由于敏捷團隊不同于普通的團隊,并且非常倚賴于有效果和有效率的溝通和快速執行,敏捷團隊更需要使用軟技能。如果我們意識到這一點,并積極鼓勵使用這些特征和技能,我們可以使得敏捷團隊更有價值和富有成效。
自組織往往倚賴于諸如正反饋、負反饋、深度探索和廣度調研之間取得平衡以及多重互動的基本要素。根據我們的經驗,團隊可能由于許多文化和社會因素無法給予正確的反饋或者回避人與人之間的互動。
根據我個人的經驗,這仍然是一個“神話”。我們總是傾向于患有“可預測性綜合癥”——如果我們做更多的規劃,我們將更加功能預測。
團隊需要有良好的紀律、有能力承擔責任、盡忠盡責以及承擔職責和所有權。
團隊需要擁有的關鍵技能之一是有能力尋求幫助,并尋求他人的評價。在某些情形下,我們已經看到了“自我”因素表現為一個主要的障礙。
有些時候,承擔責任,盡忠盡責和協作精神是理所當然的,但是根據以往的經驗,為了這些能夠出現,我們有時需要外部干預。
有些我們常常傾向于忽視的關鍵技能是積極主動、在激烈的環境中享受工作和易于適應新的形勢和框架。
我們的大多數項目都是分布式的,這意味著在客戶和服務供應商之間將會共同使用Scrum。在這種情況下,諸如管理多樣化團隊、時間管理、外交技巧和領導力等技能是非常關鍵的。
敏捷團隊的成功“咒語”
對于任何一個希望成功和高效的敏捷項目,團隊需要對向同儕學習(不管資歷和專業知識)表現出更大的熱情和正確的態度。必須保證一個無畏表達的安全網,這樣才會展現出真正的友情,而這反過來會增強團隊成員對團隊目標的關注,而不是“哪些由我來做”?
結論
根據我個人的經驗和觀察,對于提高生產率所需的技能,敏捷項目與傳統項目有所不同。本文定義了團隊提高生產率所需的行為和技術技能。具有這些“delta”
特征的人應該具備了合適的行為和技術技能,這些技能使得他們在敏捷項目中的工作能夠富有成效。對于這些技能的總結請見下表。
技能表
角色
|
技術技能(在不同的方面)
|
行為技能
|
開發人員
|
CRUD操作,開發框架不同層之間的調用
單元測試(工具——NUnit、JUnit)
代碼覆蓋率的概念和工具
代碼審查的概念和工具
持續集成工具
重構的概念
代碼味道的概念
Scrum過程
|
溝通
合作
時間管理/計劃
思維
沖突管理
處理更改/靈活性
決策
團隊合作/團隊建設
處理壓力
問題解決
領導
外交
|
QA
|
“完成”的定義 —> 驗收標準
測試管理
自動化/腳本
環境設置
數據庫概念
|
與開發人員相同
|
Scrum Master
|
Scrum過程
模板和使用
項目管理工具
持續集成工具
設置開發環境
|
開發人員的技能+推動力
|
作者簡介
Prasad,擁有10年的IT服務行業經驗,他第一次接觸敏捷項目是在2005年微軟的一個項目;從那時起,他為許多公司如GE、思科、可口可樂等,針對敏捷及其變體提供了解決方案開發、培訓、咨詢以及指導。目前他正在Symphony
Services的敏捷實驗室擔任經理。Symphony40%的項目都是關于敏捷或其不同的形式,并且自2004年起就通過敏捷為客戶提供商務的關鍵價值。你可以通過pprabhak@symphonsysv.com與他聯系。
查看英文原文:Skills for
Scrum Agile Teams