1. 程式人生 > >軟體開發過程中的7大浪費

軟體開發過程中的7大浪費

1. 額外的功能特性

根據Standish Group的調查報告,傳統的軟體開發過程製造了大量人們不需要的功能特性(7% always used,13% often used,16% sometimes used,19% rarely used,45% never used)。每個功能的實現,都要經歷軟體開發的整個生命週期:需求分析、設計、編碼、測試、釋出和維護,這需要耗費大量的人力、物力和財力,如果最終人們將不會用到這些功能,那麼所有的投入都變成了浪費。而這還沒有考慮過多的功能特性帶來的系統複雜度所增加的開銷。所以額外的功能特性是軟體開發過程中最大的浪費。

2. 部分完成的工作(存貨)

在Lean Thinking這本書裡面,Mary Poppendieck把製造業的七大浪費之一“存貨”對應於軟體開發中的需求列表,她這種判斷所處的環境是軟體需求被寫得非常細緻,細緻到可以直接用於程式設計的程度,同時這些細化了的需求又不會立馬被拿去實現,相反它們會在需求列表中等待相當長的一段時間。當然,毫無疑問這是軟體開發中的“存貨”之一,然而我認為這並不是全部存貨。另外還有一些常見的現象是大部分“已編碼完成”的功能不得不等待很長一段時間才會被測試,而被測試了的功能會等待相當長一段時間才拿去被客戶驗收,這些通通都是軟體開發過程中的存貨。它們是第二大的浪費。

3. 額外的步驟(過度處理)

類似的,這種浪費在Lean Thinking中被識別為對需求的過多細化以及不必要的文件工作,我也認同這種說法。同樣我也認為這種說法並不全面,因為額外的步驟(過度處理)不僅僅存在於需求中,還存在於程式碼中。不少程式設計師會在程式碼中去做很多“預防性”工作,譬如預見可能發生的變化或者可能出現的情況,為了為這些變數留有餘地,結果通常是在程式碼中寫一些額外的程式碼。這種做法一方面增加了不必要的複雜性,另外一方面如果“可能的”情況永遠沒有發生,這些程式碼就成了負債。設計模式的出現可能會讓這種問題緩解很多,然而我們還是要處處留意在開發過程中是否進行了過度的處理。

4. 尋找資訊(上下文切換)

在軟體開發過程中,經常要找客戶確認或者澄清需求,要向開發者傳達設計思路和技術要點,要找團隊成員瞭解專案進展情況,要彼此反應遇到的問題以及解決辦法等等,總而言之就是干係人之間彼此需要大量的溝通,所有這些溝通都是資訊傳遞的過程,所以及時準確地傳達資訊是非常重要的。與此同時,開發團隊經常面臨的境地是很難找到客戶進行需求溝通和確認,或者不得不花費很多時間和精力去尋找各種需要的資訊,也經常遇到由誤解造成的尷尬和浪費。團隊用在尋找資訊上面的時間,並不直接創造軟體的價值,所以是一種浪費,應當努力去減少。

我在一些社群中也看到有些人把上下文切換定義為七大浪費之一,仔細思考之後,我認為上下文切換的過程其實也就是及時找到另一類資訊,並且進入狀態的過程,所以它跟尋找資訊的含義是一致的。

5. 軟體缺陷(Defects)

Bug創造價值麼?不,沒有Bug才是客戶所期望的。Bug產生開銷麼?是,發現Bug、報告Bug、定位Bug、修復Bug、驗證Bug等都要花費開銷。Bug是可以避免的麼?大多數Bug都是可以避免的。所以軟體中的缺陷真是徹頭徹尾的浪費,如果能採取適當的措施減少Bug的出現,那必定會節省下來很多用來處理Bug的時間,然後把這些時間用在有價值的事情上面,這一正一負會產生巨大的差別。

6. 等待

等待也包括讓客戶等待。無論是客戶的等待,還是開發團隊內部的互相等待,都是沒有價值的事情。等待也會推遲問題的暴露和解決時間,所以減少等待就是減少浪費。

7. 移交(Handoffs)

據研究一個人若表達能力尚可,大概能表達出70%左右的意思,若對方理解能力尚可,大概能理解70%~80%的意思。若真如此,設想資訊從一個人手裡傳遞到另一個人手裡,然後再傳遞到下一個人手裡,再往下傳,還剩多少了?工作的交接也是一樣的道理,經手的人越多,需要交接的地方越多,花費的代價就越高。所以減少交接就是減少浪費。

相關推薦

軟體開發過程7浪費

1. 額外的功能特性 根據Standish Group的調查報告,傳統的軟體開發過程製造了大量人們不需要的功能特性(7% always used,13% often used,16% sometimes used,19% rarely used,45% never used

軟體開發過程浪費——詳細設計

詳細設計是V模型或者瀑布開發中的一個重要的環節。這個階段負責把概要設計進行細化,併為程式碼書寫作出指導。可以說是一個承上啟下的重要環節。 但是現實的情況真的如此嗎?我們來反思一下: (1)詳細設計和程式碼的吻合程度有多高?      假設在專案中,程式碼在測試後修改完畢提交後,並不修改詳細設計,則詳細設計

觸控式螢幕點餐軟體開發過程的掛單取單程式設計思路視訊課程

課程目標軟體開發最重要的是開發思路,而在學校學的程式設計基本上沒有涉及到思路。程式設計思路較多的來源於實戰,經過大量軟體開發總結出開發思路。本課程通過對例項解析讓學員快速掌握掛單取單程式設計思路。適用人群電腦愛好者、所有職場人士,IT軟體開發人員課程簡介軟體開發最重要的是開發思路,而在學校學的程式設計基本上沒

軟體開發過程涉及到的圖

軟體開發過程中涉及到的圖 名稱 作用 工具 組成 連結 系統架構圖 應用層級說明 PowerPoint 第一層資料儲存層,儲存了系統所依賴

C# 基礎(十三)C# 軟體開發過程,可執行檔案.exe 出現bug,該怎麼排查、解決:找到出現bug的位置

一、簡介 之前是完成了寫軟體,從而實現軟體的基本功能。到了今天,需要對自己寫的可執行檔案.exe找bug了。那麼下面,我將結合自己的軟體的使用過程中,講自己的經驗融入進來,解釋下什麼是bug、以及該怎麼找Bug。 二、Bug的分類 主要參考: https://blog.csdn.ne

軟體開發過程遇到的問題(Java 、JavaScript)

6. Parameter 'xxx' not found. Available parameters are [1, 0, param1, param2] 原因:Mapper介面的方法沒有引數沒有加:@Param("xxx") 7. java.lang.IllegalStateException: Amb

軟體開發過程使用Visio用例總結

物理3D架構圖 網路->網路和外設-3D,如下圖所示: 物理平面架構圖 軟體和資料庫->web圖表->網站總體設計形狀,如下圖所示: 類圖 軟體和資料庫->軟體->UML類,如下圖所示: 網站功能模組架構圖 軟體和資料庫-&g

軟體開發過程的一些感悟

工作快四年了,從事開發工作也有兩三年了(頭一兩年從事設計工作),這期間有些感悟,寫下來以備以後回過頭來見證自己的成長。 對一個本科學的設計,畢業的時候對於計算機的知識瞭解甚少的人而言,靠著自學以及同事的幫助能夠從事軟體開發工作,我自己都感覺到不可思議。這期間不僅有自己奮鬥

軟體開發過程所使用的生命週期模型比較

       軟體開發的過程中,我們使用生命週期模型簡潔地描述軟體過程。針對軟體工程的各個階段提供了一套範形,使工程的進展達到預期的目的。對一個軟體的開發無論其大小,我們都需要選擇一個合適的軟體過程模型。在20世紀80年代之前,瀑布模型(也稱為傳統生存模型)一直是唯一被廣泛採

軟體開發過程的各種圖

 軟體的開發過程,也可以說是軟體生命週期。主要包括四個基本活動:描述、開發、確認、演進。四個基本活動分八個階段進行,各個階段都用到了各色圖形工具。而且在我們寫文件的過程中,這些圖都是寶貝啊! (前言:這些圖,大多來自網路,經個人整理而成。給自己,也算是給大家以後寫文件畫圖做個參考。) 一、巨集觀導圖  

淺談軟體開發過程的專案管理

摘要:大量軟體開發例項表明,如果不能在軟體開發中加強專案管理,隨著國內軟體行業的不斷髮展與壯大,國內的軟體開發企業將面臨嚴峻的挑戰性與風險性。因此,為了確保軟體開發的效率與質量,必須認識到強化專案管理的必要性,並且堅持多管齊下的方針,積極採取有效的管理策略。   關鍵詞:軟體;開發;專案管理   軟體開發

軟體開發過程的文件總結

(一)、在系統軟體的開發前期,需要的文件有: 1.系統開發立項報告,需要包含的:   (a).專案的定位及價值   (b).開發中的主要難點及可能出現的問題   (c).時間規劃及人員安排 2.系統設計原理,需要包含:  (a).總體框架  (b).實現原理  (c).存

軟體開發過程測試用例圖、E-R圖的理解和使用

研一上學學期分別修了《軟體工程》、《面向物件分析和設計》兩門課程,雖然沒有認真聽講。但是知道要想在該專業領域走的更遠,有全域性觀念。這門課程還是相當重要的。尤其是用例圖和關係實體圖,對於從全域性快速的

總結軟體開發過程最常犯的10個問題

先總結一下Top10吧 Array轉ArrayList 判斷一個數組是否包含某個值 在迴圈內部刪除List中的一個元素 HashTable與HashMap 使用集合原始型別(raw type) 訪問級別 ArrayList和LinkedList 可變與不可變 父類和子類的構造方法 “”還是構造方法 這個

InfoQ:軟體開發7浪費

個人觀點: 究竟需要誰來設計,誰來實現。 誰來為浪費的資源買單! 軟體開發中的7大浪費 精益軟體開發的基本原則是追求浪費最小化。TPS總結了製造業的7種主要浪費,而Poppendiecks已經把它們引入到我們軟體開發的領域中。Jack Mulinsky最近在agiles

【C語言】實際專案開發過程常用C語言函式的9用法

C語言是當中最廣泛的計算機程式語言,是所有計算機程式語言的祖先,其他計算機程式語言包括當前流行的Java語言,都是用C語言實現的,C語言是程式設計效率最高的計算機語言,既能完成上層應用開發,也能完成底層硬體驅動程式設計,在計算機程式設計當中,特別是在底層硬體驅動開發當中,具有不可替代的作用。

人工智慧和資料的開發過程需要注意這12點

https://www.toutiao.com/i6636522371094151694/   2018-12-19 10:16:15 人工智慧是近年來科技發展的重要方向,在大資料時代,對資料採集、挖掘、應用的技術越來越受到矚目。在人工智慧和大資料的開發過程中,有哪些特別需要注

資料開發過程遇到的問題

1.由於記憶體不夠引起 在linux下執行top命令檢視各程序使用記憶體情況 如果發現沒有程序耗費太大的記憶體 檢視空閒記憶體:free -m 發現空閒記憶體所剩無幾: buffers與cached佔用了將近一半的記憶體 什麼是buffer/cache? bu

軟體專案開發過程主要遇到的核心問題小結

1、軟體專案開發合同的訂立,合同需要對將來幾個月甚至幾年需要做的事情有個明確的定義說明,限定好工作範圍、工作內容、承擔的責任、專案總費用,每個階段支付的費用都需要有明確的說明甚至付款條件等都需要一清二楚,很多東西都沒講明白是將來合作不愉快的導火索,這些都需要白紙黑字寫清楚