程式設計師不要成為工具的奴隸

JustinWu發表於2014-06-22

開發人員很容易迷戀上工具,因為工具通常比較實用,而且具備明確定義的行為,比起學習最佳實踐或方法,學習工具更為簡單。然而,工具僅僅為解決問題提供協助,他們並不能自行解決問題。
Abstract-Slave-300x267

一位理解問題實質的開發人員能夠使用工具提高生產率和質量,而拙劣的程式設計師從來不投入時間或精力去理解如何更好的程式設計和如何避免缺陷,他們會花時間學習如何使用工具,但這種學習方式脫離了對工具目標以及如何高效使用的正確理解。

在某種程度上說,這其中有一部分是工具供應商的錯,他們嗅到了為一些普遍問題提供支援是一條財路,比如說:
6a00e5521cccd0883401676611800c970b-320wi

*缺陷追蹤器,幫助你進行缺陷追蹤管理
*版本控制系統,管理原始碼更改
*敏捷開發支援工具(Version One, JIRA)
*偵錯程式,幫助你尋找缺陷

市面上有很多工具,但在這裡我僅僅瀏覽一下下面的列表,同時指出在哪些地方開發人員和組織正在經受挑戰。記住,以下所有的統計資料都來源於40多年間的超過15000個專案。

缺陷跟蹤器

busettingIcon

一些公司還沒有用過缺陷跟蹤軟體,不管你信不信,我反正是信了,我遇到過這樣幾個奇葩公司,你一定覺得難以置信吧。沒有缺陷跟蹤軟體的結果是相當杯具的,我們有證據證實。

不充分的缺陷跟蹤方法:生產率 -15%,質量 -21%
就此我們達成了高度共識,那就是我們需要進行缺陷跟蹤,並且我們都清楚,離開了這類工具,管理大量缺陷是不可能的。

自動化缺陷跟蹤工具:生產率 +18%,質量 26%*

Caution-Bug

先說一個問題,開發人員總是愛爭執哪個缺陷跟蹤系統最好,這裡的根本問題在於,幾乎每個缺陷跟蹤系統設定不好都會導致糟糕的結果。實際上,如果每個缺陷跟蹤系統都能進行合理配置的話,結果都會大有裨益。這裡最常見的誤區是:
*在缺陷生命週期狀態中引入了不相關屬性,即建立諸如”延期“, ”無法解決“或 ”已設計的功能“這樣的狀態。
*無法指出問題是否已被修復。
*無法理解誰負責解決缺陷。

工具的供應商非常樂意繼續提供這些缺陷跟蹤器的新版本,然而要高效地使用缺陷跟蹤器,更多的是取決於如何使用好這個工具,而非選擇哪一種工具。

很多公司都在設法解決的一個最基本的問題是:如何定義缺陷?缺陷通常是指程式碼沒有遵照規範工作,但是假設我們沒有規範或規範很爛,那又會如何?你可以看一下《It’s not a bug, it’s…》獲取更多資訊。

聰明的公司知道,是否理解缺陷跟蹤器的工作方式會帶來很大不同,你可以在《Bug Tracker Hell and How to Get Out》中找到更多缺陷跟蹤系統的周邊知識。

另一個普遍的問題是,公司通常會嘗試在缺陷跟蹤系統中管理新功能和需求,畢竟無論是需求還是缺陷都會導致程式碼變動,那麼為什麼不將所有資訊都放到缺陷跟蹤器中呢?你可以在《Don’t manage enhancements in the bug tracker》中學到為什麼在缺陷跟蹤系統中管理需求和新功能是愚蠢的。

版本控制系統

royalty-free-hygiene-clipart-illustration-442348

和缺陷控制系統一樣,大部分開發人員都將版本控制視為是一個必須的“保健”過程,如果離開它,你就可能換上嚴重疾病(在最不合適的時間)。

不充分的變動控制:生產率 -11%,質量 -16%
其實,所有的程式設計師都不喜歡版本控制系統,並且他們會相當直言不諱地指出版本控制系統所不能做到的事情。如果你很不幸,需要拍板最後用哪個版本控制系統,那麼就寬慰一下自己吧,你的背後一定會有成群結隊的傢伙在詛咒你。

版本控制只是個開始,與選擇哪個版本控制系統相比,理解如何組織程式碼、整合持續構建技術、確保缺陷對應正確的版本,這些也同樣重要。

敏捷開發支援工具

很抱歉,對於Version One和JIRA,至簡的真理是,使用敏捷開發工具並不能讓你變得敏捷,看這裡

當你真正理解敏捷開發的時候,你才能將這些工具的作用最大化,我有一個最高效的敏捷開發實現僅僅用到了Google Docs而已。

毋庸贅言。

偵錯程式

airbag

我已經寫了大量的文章,說明為什麼偵錯程式不是跟蹤缺陷的最好工具,所以這裡我會換一種說法!

在軟體工程領域,最經久不衰的比率是1:10:100。也就是說,如果在測試前就能跟蹤缺陷(即QA前)的成本為1的話,那麼在QA階段發現缺陷的成本就是10倍,如果在部署的時候被你的客戶發現了,成本就是100倍,而大部分偵錯程式在整個過程的10倍至100倍階段才會被使用。

這並不是說我不喜歡偵錯程式,我只是相信所謂的預先測試消除缺陷策略,因為它的成本很低,又能保證高質量,預先測試消除缺陷策略包括:
規劃程式碼,即PSP
測試驅動開發,TDD
契約式設計,DbC
程式碼審查
對複雜程式碼段進行結對程式設計

你可以在下面找到更多資訊:
Defects are for Losers
Not planning is for Losers
Debuggers are for Losers
Are debuggers crutches

很少用到的工具

以下這些工具能夠帶來巨大的不同,但是很多開發人員卻不用它們:
自動化靜態分析:生產率 +21%,質量 +31%
自動化單元測試:生產率 +17%,質量 +24%

自動化單元測試經常在測試驅動開發(TDD)或資料驅動開發中引入,同時伴隨著持續開發技術。
自動化功能點分級:生產率 +17%,質量 +24%
自動化質量與風險預測:生產率 +16%,質量 +23%
自動化測試覆蓋率分析:生產率 +15%,質量 +21%
自動化部署支援:生產率 +15%,質量 +20%
自動化圈複雜度計算:生產率 +15%,質量 +20%

還沒有工具支援的一些重要技術

我們還有一些軟體開發的重要技術存在,但是那些工具供應商還沒有找到賺錢的方式。這些技術往往被大多數開發人員忽略,即便它們能在生產率和質量上帶來巨大改變。

個人軟體過程和團隊軟體過程是由Watts Humphrey建立的,他是致力於構建高質量軟體產品的先驅。
個人軟體過程:生產率 +21%,質量 +31%
團隊軟體過程:生產率 +21%,質量 +31%

程式碼審查的重要性可以在下面兩篇文章中找到:
Inspections are not Optional
Software Professionals do Inspections

程式碼審查:生產率 +21%,質量 +31%
需求審查:生產率 +18%,質量 +27%
正式的測試計劃:生產率 +17%,質量 +24%
功能點分析(IFPUG):生產率 +16%,質量 +22%

總結

肯定是一大群開發人員認為使用工具能夠使他們變得更給力。

但現實是,如果你脫離了對所要解決問題的實質的學習,僅僅去學一門工具的話,那就像你覺得你能夠在籃球場上贏下喬丹,僅僅因為你擁有一雙好的跑鞋。
學習工具並不能取代學習如何把一件事情做好。

真正給力的開發人員會持續學習那些能帶來更高生產率和質量的技術,無論這門技術是不是有工具支援。

相關文章