在很多人的印象中,敏捷軟件開發(fā)是種類似黑客行為的過程,是程序員最愛的勾當。不寫文檔,不作需求分析,沒有項目經理,做什么東西完全是程序員自己的行為。所以他們認為這樣的過程無法滿足真正大型項目和復雜項目的需要,因此在經過考慮后,放棄了敏捷方法。
真的是這樣嗎?敏捷過程到底是如何做需求分析?用戶故事和用例有什么區(qū)別?敏捷過程如何去管理需求的?這些是一些想要實踐敏捷的人一直在困惑的事情。
我們常常看到書中講,程序員拿到一個用戶故事后,怎么計劃,怎么分解,怎么寫單元測試,怎么小步前進,怎么持續(xù)集成。這是典型的程序員視角。事實上,敏捷方法分為三部分,敏捷項目管理,敏捷需求分析,敏捷軟件開發(fā)。上述書中提到的完全是敏捷開發(fā)中的實踐,很多人了解到的敏捷,只是敏捷的三分之一。
在敏捷的團隊中,作一個敏捷程序員確實是非常舒服的事情。從程序員的角度來看,只需要選擇一張他感興趣的故事卡片,了解清楚該卡片的需求,開始從功能測試寫代碼,等通過了所有測試就完工。基本上不需要考慮太多的事情,非常輕松愉快。但程序員向誰去問清楚需求?故事卡片是怎樣寫出來的呢?讓我們來關注開發(fā)前發(fā)生的事情。
了解敏捷過程的人都知道,Kent Beck在XP過程中提到了現場客戶,如果一個敏捷團隊能夠有現場客戶,這當然是最棒的事情。但多數情況下,客戶都是很忙碌的,很難全力投入到軟件開發(fā)過程中。這時候,我們就需要商務分析師這個角色,來充當客戶的角色。
我在ThoughtWorks的團隊中擔任的就是商務分析師這個角色。商務分析師最重要的職責就是與客戶交談,了解和分析需求,將其制作成用戶故事并將需求轉述給程序員。同時,商務分析師也要代替客戶負責功能驗收測試。
敏捷思想的核心是人與交流。需求問題實際上是一個交流問題。商務分析師要和客戶交流,搞清楚客戶到底需要什么,到底為什么需要這些東西。商業(yè)價值是商務分析師關注的最終目標。有了目標的指向,就可以不迷失方向。和客戶進行交流,最終目的就是挖掘出客戶的商業(yè)目標。可能大家會經常有這樣的經驗,客戶說,我要這個功能,我想要怎么怎么樣。這時候要特別注意,他說的這些東西并不是真正的需求。商務分析師需要詳細的問客戶為什么,挖掘出他真正的目標。
在這個目標下,商務分析師開始進行需求的分析:我們到底是否真的需要這個需求?有沒有更好的解決方案?有沒有簡單并且低廉的方式?換一種形式是不是也能達到這樣的需求?這個需求有多少地方涉及到以前的軟件變更?
搞清楚這些事情后,就可以寫出用戶故事。用戶故事的書寫遵循一定的原則,一般包括三部分:"作為(系統(tǒng)的一個涉眾),我想要(做一件事),從而(達到一個商業(yè)價值)"。在書寫的時候格式比較隨意,可以在故事卡背面寫上注釋或疑問,甚至畫上界面原形圖。
舉一個最常見的用戶故事例子,"作為一個普通用戶,我希望能夠用用戶名和密碼登錄,以便我能享受到個性化的服務"。其中,用戶是系統(tǒng)涉眾,登錄是他想要做的事情,而他的目標是獲得個性化的服務。