程序員生產力提升之路——Step1:需求分析
9:00 AM,你的老板突然沖進辦公室,說:“市場希望我們的網站能夠做一個新的花式登錄框。只需要提供用戶名和密碼字段成不?也許加上恢復鏈接也成。時間應該不用超過兩天。哦,我得走了,趕緊的!”
碰到這樣的情況,通常會讓人瞬間變身咆哮帝,但是,這一會,你可以保持冷靜了:因為你學會了如何解構。
什么是解構?
解構就是將需求分解成盡可能小的片段,然后對這些片段予以整理和闡述,最后成為你(程序員)和你老板/客戶之間的共識。
如果有人給你的是一個現成的規范,也沒關系。一切始于解構!
我已經在編碼了,為什么還要解構呢?
是的,也許你已經在使用AngularJS搗鼓如何ng-submit()你的登陸表單了,并且感覺比按部就班地先進行Struts 1要容易得多了。哦,no,趕緊懸崖勒馬吧!
我們首先要做的是對需求做穩健性的檢查。分解。 “我希望用戶能夠通過框來登錄”并不是一個正確的需求。
聽起來特別easy,有木有?我的意思是,你可以在短短的幾分鐘的時間內搞定,是不是?好吧,讓我們繼續往下看…
有沒有一些關于現實生活中的實例呢?
這個還真有,從我的經歷來看,這個真實的例子就發生于2011年2月,德國的一家汽車制造商對于他們新網站的需求。
請看下面這張圖片的左下角。請注意看那個登錄框。看上去多么小巧簡單啊,但實際上是非常復雜。讓我們來看看為什么…
首先,關于如何解構?
你應該和技術驅動和業務驅動人員一起攜手。所以需要說服老板獲得更多的INPUT!
哦,對了,如果必要的話,可以加人。不過,根據我以往的經驗來看,整個團隊來做解構工作將會大大浪費時間、金錢和精力——但這是另一個話題了。
接下來,打開你喜歡的書寫工具,可以開始問一些“幼稚”的問題了。然后將答案一一記下來整理。這些“幼稚”問題是什么呢?—— “那是什么?”,“是什么造成這樣的后果?”,“為什么我們需要它?”,“還有沒有其他部分?”。
至于要問多久?要么問完問題,要么其他人嫌棄你了
關于實例?
繼續回來說上面的例子:“我們需要一個登錄框”。首先進行分解: [1]我們需要[2]登錄[3]框。假設[1]在那個時候已經給出,那么可以從[2]開始。
關于[登錄]部分的問題
你:“登錄是什么?”
商務人員:“嗯,用戶名和密碼應該就足夠登陸了。 ”
你:“用戶名亦或是電子郵件?”
商務人員:“都可以!”
你:“等一下,誰是我們的用戶呢?”
商務人員:“這么笨。想要我開掉你么?每個通過網站注冊的就是用戶。”
你:“每個都是嗎?”
商務人員:“嗯,是的。不過,高層管理人員這么提過,如果是那些已經買了寶馬車的用戶,就可以通過客戶編號登錄到網站,并自動獲取訪客帳戶。”
你:“呃,那我們怎么獲取這些客戶的表單呢?”
商務人員:“從CRM系統。平行于我們自己新建的用戶數據庫。哦,順便說一句,有幾種不同的CRM系統,所以需要說明原因。”
你:“呃,客戶編號,然后給他們發送密碼,還是他們已經有密碼了直接登錄就可以了?”如果CRM系統不可用的時候怎么辦?什么是自動訪客帳戶?他們怎么知道他們突然就能登錄?……救命!
=>繼續問問題
先暫停會,來看看[框] 部分
你:“框是什么?”
商務人員:“差不多都已經設計好了。用戶名/密碼字段,登錄按鈕。還有什么難的呢?”
你:“框只要顯示在首頁上嗎?”
商務人員:“不是的,我們要在若干網頁上顯示,如有些活動頁面。所以在你的CMS系統中應該將它做成一個組件。”
你:“組件?啊哈。呃,你知道HTTP/HTTPS的區別嗎?我們的網站是運行在HTTP上的,這有點棘手啊(https的內聯框架放到http頁面上,有點小腦袋爆炸的感覺)……嗯……是不是我們一定要確保用戶安全地傳輸數據呢。”
商務人員:“是啊,是啊。你可以的,我相信你。說到安全,我順便說一句,也可以禁止用戶。他們需要接受新的“條款和條件”,才可以登錄到相應的層。否則,我們的律師又要叫了。”
你:“天哪!禁止用戶?條款和條件?層?嵌入到內聯框架的層還是放到父頁上的層?”
=>繼續問問題
拜托!我們才剛剛開始!
還有很多很多的內容是沒有覆蓋到。比如說,基礎設施,SSL-Loadbalancers,忘記密碼的工作流程,錯誤消息/信息消息,等等等等。以及究竟是誰說“我們需要登錄框”的?客戶?那么,誰才是真正的客戶呢?
關于HTTP/HTTPS的問題,在制定需求之前,技術和商務人員得先坐在一起討論。如果沒有雙向交流,那么你就真的只能在夢里實現了。
最后但并非是最不重要的,關于這個例子,我們甚至還沒有完全解構——相反,這還只是冰山一角而已。
森林森林森林,沒有樹哪來的森林?
在問了一系列的問題之后,我們首先需要整理闡述這些問題。在沒有整理闡述之前,你不能規劃,亦無法估算,否則,差之毫厘,謬以千里。
自然,在沒有完成這些步驟之前,先去敲代碼肯定是不正確的。先好好提煉這些問題吧,就像淘金一樣,去偽存真。
下一步:是的,離完成任務還遠得很呢。這還僅僅是解構的開始。
在以后的文章里,我會繼續寫解構以及后面的步驟,敬請期待。如有不同意見,也歡迎指正。
英文原文: A PROGRAMMER’S ROAD TO PRODUCTIVITY – STEP 1 : DECONSTRUCTION OF REQUIREMENTS
翻譯作者: 碼農網 – 小峰