軟體專案的鐵三角模型:軟體質量與快速開發的矛盾 - Richard
在“鐵三角”模型中,有 3 個約束條件:
- 資源Resource:有多少人投入
- 範圍Scope:需要完成多少工作
- 時間Time:完成工作的時間
它們形成了一個三角形,三角形的面積代表質量。
如果您曾經聽過人們談論“遺留程式碼”、“技術債務”等,那麼您現在可能已經發現這個模型在起作用!質量和速度的關係沒那麼簡單!不是簡單認為:質量越高,速度越快,這是一種二分法的極端概念,高質量不代表高效高速,如果我們在短期內犧牲質量,就會損害速度?
平衡質量和速度並非易事 如果我們花大量時間尋求質量,一切都需要更長的時間,我們會失去速度;但是如果我們不主動嘗試保持高質量,那麼複雜性就會接管,一切又需要更長的時間,我們又失去速度。
同時,我們正在企業中構建軟體。這意味著時間和金錢很重要!軟體進展緩慢對企業來說是毀滅性的,顯然需要緊急解決!
新增資源既昂貴又困難;此外,我們知道布魯克斯的定律:“在一個遲到的專案中增加更多的人會使其晚一些”——所以這可能不是一個選擇。
大多數企業自以為自己“掌握”“需求”,因此將範圍縮小排除在質量與速度之間。。。這就造成複雜性的原因!
當然,對於短期的速度提升,我們可以在質量上偷工減料……但這會很快導致更多的複雜性、錯誤、返工和其他壞事,這會損害速度。
如果事情變得非常糟糕,最可能的答案是“重新編寫”……讓我們重新開始,不要犯同樣的錯誤……這次我們將真正專注於質量!所以新專案開始了,每個人都非常樂觀。讓我們引入儘可能多的質量工具!單元測試、整合測試、TDD、BDD、沒有空值的外來新語言……當然還有行業標準,Pull Requests - 一切為了質量!
需要明確的是,其中許多都是提高質量的好工具,一個能夠及早快速檢測問題的良好測試套件非常有價值。你可能應該確保你有很好的測試!但問題是,擁有所有這些東西會讓你慢下來......
如果你進展緩慢,在一個時間和金錢都很重要的企業中,那是行不通的……如果你進展緩慢,管理者必須參與,不參與是不負責任的。我們又回到了質量與速度的較量——你需要走得更快……
顯然,我們需要在不損害速度的情況下儘可能提高質量,同時在不損害質量的情況下儘可能提高速度。
這意味著批判性地看待每個工具,並誠實地瞭解它帶來的好處以及這些好處的成本。一些工具——例如自動化測試——非常強大,但非常昂貴,所以也許我們會謹慎使用它們(想想“測試金字塔”)
Pull Requests拉取請求
最無法通過平衡測試的工具是 Pull Requests拉取請求。這有很多原因,即“物理定律”的東西,同時又是 PR 設計的內在因素,因此是不可避免的。
拉取請求的“作用機制”是讓多人看到每個更改,以捕獲並解決Bug。
拉取請求客觀地產生很多額外開銷:
- - 增加中斷和上下文切換
- - 引入阻塞、瓶頸、爭用和等待
- - 增加在製品和批量大小
- - 延遲缺陷檢測並增加返工
這些都是導致損害速度的最明顯的問題。拉取請求被提升為幫助提升質量的工具。但是,拉取請求會損害速度。當速度受損時,團隊會面臨時間壓力。當有時間壓力時,人們更可能匆忙,質量受到損害。
Pull Requests 的好處是:多個人在做同一件事——協作。然而,Pull Requests 是一種非常間接的協作形式!如果您重視 Pull Requests 的好處,您可能想看看有沒有其他其他協作機制!
將“範圍”作為常量的問題
傳統觀點是:鐵三角中範圍(需要完成多少工作)幾乎總是更像是一個常數,是團隊的上文,而不是團隊可以對其產生任何影響的變數,是一個前提假設,但是挑戰這個假設為我帶來了巨大的突破。
到目前為止,我看到的最常見的對付"範圍"方法是團隊有一組“ticket票”,並且一次只做一些,或者更有可能同時做幾張票。它們被視為原子,無論是“完成”還是“未完成”,而遊戲就是儘可能多地“做”。
計劃通常是通過“估計”每個原子票需要多長時間來完成的,可能是抽象的形式,例如故事點,但票的內容同樣被視為固定的。
問題在於,這種“估計”是建立在理論之上的,然後再受制於往往殘酷的現實世界。有時會出現不可預見的問題,這意味著完成一項任務需要更長的時間。
我們還需要注意帕金森定律——“工作會擴大,以填補完成它的可用時間”——這意味著雖然有時事情會比預期的要長得多,但事情花費的時間卻少得多。 . 這是一個偏態分佈!
讓我們也瞭解一下 侯世達(Hofstadter)定律:“做事所花費的時間總是比你預期的要長,即使你的預期中考慮了侯世達定律。” 如果您希望新增“緩衝區”可以拯救您,對不起...
範圍作為變數
那麼,我們如何才能可靠地交付進展?會有很多解決方案,但以下是對我有用的方法...
- 不要以完成為目標,以更好為目標
不要問多長時間,設定固定時間預算並尋找最佳花費方式
也就是說,使用“範圍”作為變數,
您可以向需要看到可預測進展的企業承諾,您將分享自上次以來取得的進展的確切時間。你可以對事情的進展完全透明,如果遇到問題,你可以一起做出選擇。
現在不再是“嘗試做很多工作”,而是“嘗試從固定的工作量中做出最大的改變”。這意味著使用帕累託(80:20 規則),並尋找最具影響力的改進!
在實踐中會發生的情況是,一開始,您將能夠做出重大改進,然後會出現收益遞減的情況。這時問題應該是“我們下一步應該改進什麼”?
在每個固定的時間週期內,您決定要改進什麼,並嘗試做出最大的改進。有時它會很順利,有時不會那麼順利。您可以從中吸取教訓,並將反饋包含在下次的決策中。
能夠快速改變方向......我們有一個詞.:敏捷
總結
所以,總結一下: - 質量與速度是一場失敗的遊戲
- - 不要玩!
- - 平衡是關鍵
- - 關鍵,尋找成本/收益
- - 請記住,在業務中,時間和金錢很重要(!),並且往往會在衝突中獲勝
- - 進展很重要
- - 專注於穩定改進,儘早交付
相關文章
- 軟體專案管理 8.4.軟體專案質量計劃專案管理
- 軟體專案質量管理(轉)
- 軟體開發質量管理層次模型(二)(轉)模型
- 軟體專案管理的質量保證(轉)專案管理
- 軟體專案管理 8.1.軟體質量基本概念專案管理
- 專案管理: 軟體質量的可靠保證(轉)專案管理
- 快速軟體開發專案中的有效溝通(轉)
- 軟體質量與公司盈利
- 軟體專案管理 8.3.敏捷專案質量活動專案管理敏捷
- 專案管理: 軟體質量的可靠保證2(轉)專案管理
- 專案管理: 軟體質量的可靠保證3(轉)專案管理
- 小軟體專案開發的管理
- 軟體開發的專案管理(轉)專案管理
- 軟體專案開發流程
- 軟體測試——軟體安全質量的保證
- 軟體開發與軟體研發
- 熟悉一個“高質量”軟體的開發過程
- 關於軟體專案開發的分析與設計
- 小軟體專案開發的管理 (轉)
- 小軟體專案開發的管理(轉)
- 軟體開發中的專案管理(轉)專案管理
- 軟體開發專案的風險管理(轉)
- 軟體質量名言
- 淺談軟體企業專案質量管理標準與模式模式
- 軟體開發中的矛盾——一個簡單的例子 (轉)
- 軟體專案質量保證:編碼規範
- 軟體專案管理的實質(一)(轉)專案管理
- 軟體專案管理的實質(三)(轉)專案管理
- 軟體開發,如何快速有效縮短專案週期
- 敏捷開發專案管理軟體敏捷專案管理
- PDCA迴圈——快速提升軟體質量的必備工具
- 軟體測試對軟體質量的影響有那些?
- Coverity:2013年全球C/C++專案開源軟體程式碼質量超過專有軟體C++
- 行軟體開發中的專案管理 (轉)專案管理
- 專案管理軟體三要素:時間、質量、成本專案管理
- 敏捷軟體質量保證的方法與實踐敏捷
- 自由軟體,和Richard Stallman的演講
- 分析如何使用專案管理軟體管理軟體開發團隊專案管理