《A++ 敏捷開發》- 10 二八原則

團隊成員協作,利用項目數據,分析根本原因,制定糾正措施,并立馬嘗試,判斷是否有效,是改善的“基本功”。10-12章會探索里面的注意事項,13章會看兩家公司的實施情況和常見問題。

如果已經獲得高層支持,她也贊同目前返工工作量太多并愿意投入資源進行過程改進,我們首先應該針對哪些方面進行改進呢?

軟件開發的特點是,超過95%的成本都是人力成本。因此,我建議利用二八(20/80)原則,繼續識別哪類工作的占比最高(詳見附件)。

請把過去一年的軟件開發項目,按照不同工種占項目總工作量的比例,從多到少排個序。
  1. 編碼與代碼設計。
  2. 交付后的所有工作,包括維護、更新與缺陷修正。
  3. 交付前的評審,靜態掃描,測試與缺陷修正。
  4. 項目管理與監控。

可以參考軟件開發度量專家卡鉑斯?瓊斯 (Capers Jones) 先生在2012年的研究(詳見附件中的“開發項目工作量(成本)分布”),看看你的選擇與典型分布有多大差距。
軟件開發項目最大的工作量通常是花在找出與修正缺陷上(開發里的“測試與評審”),Capers Jones 發現,對于一個超過10,000個功能點、計劃使用25年的大型系統來說,有接近一半的工作量是與找出并修正缺陷相關。
很多項目中的缺陷大部分還是到后期才發現,這導致了大量返工。如果能提前發現并解決這些缺陷,就可以大大降低研發成本(不僅僅是提升產品質量)。
對于一個軟件項目來說,發現缺陷最多的是在系統測試階段,其次是在驗收測試階段(很多公司都是如此):

微信截圖 20231023085822.png

但很多開發人員誤以為編碼是項目的主要工作,卻忽視了大量因質量問題引起的返工。所以,只有當管理層意識到盡早發現并排除缺陷的重要性并引起重視,公司才有機會改進。

有些偏業務的領導可能會質疑,客戶不一定關注缺陷密度,只要達到可接受的水平就可以了。

我解釋:“在軟件開發中,減少后期測試才發現的缺陷,不僅僅能提升產品質量,更重要的是能降低研發的總工作量,所以最終能幫助公司省錢,減少開發人員加班。”(詳見附件“公司高層不一定關注質量”)

怎樣開始

沒有度量便無法談改進,所以應先考慮如何采集修復缺陷相關的數據。然而,在探索數據收集與分析之前,我們更需要先確定度量分析的策略。

但在探索數據收集與分析之前,我們更需要先想好度量分析的策略。

請問你會使用以下哪種度量分析策略?

Diagram 2.0.png

A:由公司的過程改進組(EPG)專員設計并執行過程改進的度量計劃,包括收集哪些數據、如何收集以及如何分析。然后按計劃收集各項目團隊的數據,進行總體分析,并制定公司的改進方案。

B:將數據收集與分析的任務下放到各團隊,讓團隊制定自己的改進方案。

如果你認為度量與分析需要專業知識,要由專人來做,就請選擇A,并考慮以下幾點:

  1. 提供數據的人需要很長時間才能收到反饋。例如,從團隊成員提交里程碑數據,到項目經理填報,再由度量分析人員收集、整理多個項目的數據,可能需要一到兩個月時間。再經過數據分析,管理層評審,最終到團隊成員收到反饋可能共兩三個月。由于每位提供數據者都希望盡快得到反饋,如果反饋的時間很長,那么團隊成員還會有動力繼續收集數據嗎?缺乏動力還會引發其他問題。
  2. 無法確保數據的準確性,導致分析沒有意義。如果這些指標用于公司考核KPI,情況會更糟。度量分析人員需要什么數據,提供數據的人都會按理想的指標填寫,反正公司級的總體分析人員也無法驗證數據的準確性。
  3. 假定各項目的特性或問題根因都是類似的。
與某質量部經理的對話:

經理:從去年開始我們進行度量分析以來,就發現員工會對數據造假,導致結果失真。度量什么,他們就造假什么,所以我們想通過工具代替人工,不僅能提升效率,還能幫助判斷數據是否合理。現在我們的主管很反感度量,因為每次度量就會有人造假——大家了解算法原理后,就開始造假。比如我們搞了紅黑榜,但很多人聰明得很,就會想辦法作弊。我們有很多數據統計分析,比如看測試用例與需求的比例。盡管客戶發現的缺陷比例降低了,但由于我們對質量特別注重,產品經過多年的逐步演化,過程很復雜,導致軟件缺陷的修復很耗時,客戶不太滿意。而且公司要求交付的頻率要比以前高了很多,我們團隊做這些分析都忙不過來,所以希望利用自動化工具加快速度。
我:除了數據收集問題,你們這種總體分析策略可能還有另一個問題:沒有考慮各個項目的特性并不一樣。現在你們對幾十個項目的總體趨勢進行分析,但每個項目的根本原因很可能不同。比如,同樣是測試用例比例數,你們采集的數據范圍從最低的0.3到最高的超過200,但你們取平均值5.1來做分析。

但如果把數據分析下放到團隊自己做,便靈活多了;也正因為他們有參與收集和分析討論,過程改進組便可以節省很多溝通(數據收集)成本與失真。反而應該重新定位自己是內部老師,輔導團隊怎么做好數據分析,效果會更好。
你可能疑問:“團隊自己討論便可以得到改進嗎?不需要領導監督?”
如果團隊有能力,就應該放手讓他們自己收集數據、利用數據進行分析并做出改進。質量經理應把自己重新定位為團隊的教練,去輔導他們如何收集與分析數據。千萬不要以為這項工作會比以前自己做分析更輕松,其實需要更熟悉整個過程,才能真正輔導好團隊。要公司從定性管理提升到定量管理,最大的挑戰并非數據分析,反而是要讓管理層了解并贊同需要讓團隊自主分析數據,自己尋找糾正措施。

下一章會繼續探索團隊協作與分析根因;團隊如何利用迭代沖刺數據,在敏捷沖刺回顧,做好根因分析,得到提升。

附件

二八原則(80/20)

帕里托(Pareto) ,16世紀意大利威尼斯人,他發現雖然威尼斯很富有,但財富并非平均分布,80%財富在20%手里,他也發現很多其他分布都非平均。

ToolsParetoScreenshot 2023-06-02 191628.jpg

因為過程改進需要公司額外的資源投入,必須有針對性地找出最容易取得改進效果的原因,才可能擁有最大的成功機會。所以,應該利用二八原則去識別影響最大的幾個因素. 以上圖為例,原本A類問題出現最多,針對這類問題做過程改進之后, A類問題就少了很多,下一輪便應針對最多的B類問題做改進。
有些人以為,只需要對某個維度做分析即可,并沒有從多個維度進行分析。例如,某紙制產品工廠會計數據顯示,8成的產品問題相關成本都歸屬于5類。

例如,某紙制產品工廠會計數據顯示,因紙質量問題被客戶退貨類的損失最大,共5560千美元,占總損失的61%。針對這類損失,發現里面八成是由6個產品引起(共有53個產品),共4480千美元,占5560的 80%。針對這6個產品把損失按缺陷種類細分,發現B產品容易斷裂缺陷(Tear)的占比最高,612千美元,我們就應該針對這一問題研究如何改善。

162頁替換圖片.png

開發項目工作量(成本)分布

參考Capers Jones先生2012的例子,匯總成以下比例:

AR1成本占比.jpg

測試與評審一般占開發工作量的30%,測試與評審一般占總質量成本(包括發布后維護與改缺陷工作)的66%,把所有工作量都加起來,測試與評審還是占最大(26%),編碼第二 (22%)。

注意:測試與評審包括所有與缺陷相關的成本,包括單元測試、靜態掃描、評審與相關的缺陷修正,而編碼只包括設計與編寫代碼部分。例如有些人會覺得比例應該是開發30%,測試和Bug修改25%,需求和設計20%,項目管理和溝通20%,文檔5%。但如果按上面的定義,開發部分很可能已包括單元測試、靜態掃描與改正缺陷工作,如把這些都歸到測試評審里會變回類似上圖的比例。

公司高層不一定關注質量

Q&A

:在傳統 IT的 公司,無論是 缺陷(Bug) 率還是其他質量指標對業務的影響的相關性都不容易度量,只有重大事件才會讓公司在客戶面前失去信任,所以高層不會真正的重視質量。
:理解,但軟件BUG的暴露越往后,返工的工作量就越高,而且是幾何級數的增加(例如在單元測試或評審發現都可以1人時內解決;系統測試通常要花起碼20人時,客戶使用后才發現便更高)。但在很多IT公司,大部分缺陷都是在系統測試、甚至到驗收測試才發現。如果能把軟件缺陷的發現前移,把通過系統測試、驗收測試發現的缺陷減半,便可以大量降低質量成本,提升開發生產率。所以我建議利用缺陷數估算返工的工作量來引起老板重視。(而不是僅僅說降低缺陷率)

MGR f1.1.jpg

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44706.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44706.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linq的常用方法

LINQ(Language Integrated Query)是.NET Framework中用于數據查詢的組件,它將查詢功能集成到C#等.NET語言中。LINQ提供了豐富的查詢操作符,這些操作符可以應用于各種數據源,如內存中的集合、數據庫、XML等。以下是一些…

java中的String 以及其方法(超詳細!!!)

文章目錄 一、String類型是什么String不可變的原因(經典面試題)String不可變的好處 二、String的常用構造形式1.使用常量串構造2.使用newString對象構造3.字符串數組構造 三、常用方法1. length() 獲取字符串的長度2. charAt() 獲取字符串中指定字符的值 (代碼單元)3. codePoin…

水的幾個科學問題及引發的思考

水的幾個科學問題及引發的思考 兩個相同的容器A和B,分別裝有同質量的水,然后,在A容器中加入水,在B容器中加入冰,如果加入水和冰的質量相同。問,容器B的水位將與容器A的水位相同嗎(假設冰未融化時…

Log4j的原理及應用詳解(二)

本系列文章簡介: 在軟件開發的廣闊領域中,日志記錄是一項至關重要的活動。它不僅幫助開發者追蹤程序的執行流程,還在問題排查、性能監控以及用戶行為分析等方面發揮著不可替代的作用。隨著軟件系統的日益復雜,對日志管理的需求也日…

MySQL和SQlServer的區別

MySQL和SQlServer的區別 說明:在一些常用的SQL語句中,MySQL和SQLServer存在有一些區別,后續我也會將我遇到的不同點持續更新在這篇博客中。 1. 獲取當前時間 SQLServer: -- SQLServer -- 1.獲取當前時間 SELECT GETDATE(); --…

Vue2切換圖片小案例

代碼中 v-show "index>0",是表示下標只有大于零時上一頁按鈕才會顯示v-show "index<list.length-1",是表示下標只有小于list數組的最大值才會顯示&#xff0c;反之隱藏。click "index--"和click "index",是點擊按鈕后加減數…

【ZooKeeper學習筆記】

1. ZooKeeper基本概念 Zookeeper官網&#xff1a;https://zookeeper.apache.org/index.html Zookeeper是Apache Hadoop項目中的一個子項目&#xff0c;是一個樹形目錄服務Zookeeper翻譯過來就是動物園管理員&#xff0c;用來管理Hadoop&#xff08;大象&#xff09;、Hive&…

AR0132AT 1/3 英寸 CMOS 數字圖像傳感器可提供百萬像素 HDR 圖像處理(器件編號包含:AR0132AT6R、AR0132AT6C)

AR0132AT 1/3 英寸 CMOS 數字圖像傳感器&#xff0c;帶 1280H x 960V 有效像素陣列。它能在線性或高動態模式下捕捉圖像&#xff0c;且帶有卷簾快門讀取。它包含了多種復雜的攝像功能&#xff0c;如自動曝光控制、開窗&#xff0c;以及視頻和單幀模式。它適用于低光度和高動態范…

QML界面控件加載與顯示順序

一、QML界面控件加載順序 QML在界面加載時的順序和我們認知的有很大的不同&#xff0c;有時候會對我們獲取參數以及界面實現造成很大的困擾 1、加載順序 import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.VirtualKeyboard 2.4Window {id: …

Open3D點云算法與點云深度學習案例匯總(長期更新)

目錄 引言 Open3D算法匯總 Open3D快速安裝 測試點云資料 一、點云的讀寫與顯示 二、KD tree和八叉樹的應用 三、點云特征提取 四、點云濾波算法 五、點云配準算法 六、點云分割算法&#xff08;待更新&#xff09; 七、常用操作 八、數據轉換 九、常用小工具 三維…

交換機的二三層原理

相同VLAN的交換機交換原理&#xff08;二層交換原理&#xff09;&#xff1a; 交換機收到數據幀&#xff0c;首先會檢查數據幀的VLAN標簽和目標MAC&#xff0c;若屬于相同VLAN&#xff0c;且該目標MAC在本地MAC表中&#xff0c;則直接根據出接口進行數據轉發 不同VLAN的交換機…

九盾安防:如何調控叉車限速器的報警速度呢

在繁忙的物流倉儲和制造業環境中&#xff0c;叉車是不可或缺的搬運設備。然而&#xff0c;其高速行駛也帶來了潛在的安全隱患。為了確保作業人員和貨物的安全&#xff0c;又車限速器的設置顯得尤為關鍵。那么&#xff0c;如何調控叉車限速器的報警速度呢? 叉車限速器的速度調整…

復制vmware虛擬機文件并改名(文件名使用python替換)得到一臺新的虛擬機

文章目錄 需求實驗復制文件夾并重命名使用python將所有文件名“WinSer2022”字符替換成“wingetmac”修改虛擬機配置文件&#xff08;.vmx&#xff09;打開新的虛擬機成功 需求 將已有的Winser2022虛擬機復制成wingetmac并開機 實驗 復制文件夾并重命名 將"WinSer2022…

《人生苦短,我用python·九》python之線程池ThreadPoolExecutor的使用

Python線程池是一種管理和使用線程的高級抽象&#xff0c;使得線程的創建、分配和管理更加方便。通過線程池&#xff0c;可以避免頻繁地創建和銷毀線程&#xff0c;從而提高程序的性能。Python的concurrent.futures模塊提供了一個ThreadPoolExecutor類&#xff0c;可以方便地使…

了解并緩解 IP 欺騙攻擊

欺騙是黑客用來未經授權訪問計算機或網絡的一種網絡攻擊&#xff0c;IP 欺騙是其他欺騙方法中最常見的欺騙類型。通過 IP 欺騙&#xff0c;攻擊者可以隱藏 IP 數據包的真實來源&#xff0c;使攻擊來源難以知曉。一旦訪問網絡或設備/主機&#xff0c;網絡犯罪分子通常會挖掘其中…

1559. 二維網格圖中探測環

1559. 二維網格圖中探測環 給你一個二維字符網格數組 grid &#xff0c;大小為 m x n &#xff0c;你需要檢查 grid 中是否存在 相同值 形成的環。 一個環是一條開始和結束于同一個格子的長度 大于等于 4 的路徑。對于一個給定的格子&#xff0c;你可以移動到它上、下、左、右…

【Qt 初識】QPushButton 的詳解以及 Qt 中的坐標

文章目錄 1. Qt 中的信號槽機制 &#x1f34e;2. 通過圖形化界面的方式實現 &#x1f34e;3. 通過純代碼的方式實現按鈕版的HelloWorld &#x1f34e;4. 設置坐標 &#x1f34e; 1. Qt 中的信號槽機制 &#x1f34e; 》&#x1f427; 本質就是給按鈕的點擊操作&#xff0c;關聯…

C++之復合資料型態 第一部(參考 列舉 指標)

復合資料型態(compound type) 是由其他資料型態(data type) 定義出來的型態&#xff0c; C 中的復合資料型態包括參考(reference) 、列舉(enumeration) 、陣列(array) 、指標(pointer ) 、結構(structure) 及聯合(union) 。 參考 參考是變數(variable) 的別名(alias) &#x…

GuLi商城-商品服務-API-品牌管理-OSS獲取服務端簽名(續)

如何進行服務端簽名直傳_對象存儲(OSS)-阿里云幫助中心 gulimall-third-party服務的代碼: package com.nanjing.gulimall.thirdparty.controller;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.utils.BinaryUtil; impor…

Linux開發:Fuse介紹

Fuse(filesystem in userspace),是一個用戶空間的文件系統。通過fuse內核模塊的支持&#xff0c;開發者只需要根據fuse提供的接口實現具體的文件操作時所對應的回調函數&#xff0c;就可以實現一個文件系統。由于其主要實現代碼位于用戶空間中&#xff0c;因此不需要重新編譯內…