度量術語之二:應用類和開發類生產率(實際度量案例)

一個令人震驚的事實是連生產率這種常見度量數據都沒有一個簡單的定義。連我們日常經常用到的公式:生產率=工作產品/工作量(工作產品可以是代碼行,功能點,也可以是任何可以計數的東西,比如文檔頁數)都是錯誤的。

如果你正常嘗試使用生產率做度量,那么至少應該先分為下面兩種度量數據。

注意下面的例子為了便于理解使用的是代碼行,但實際上這兩個概念是IFPUG(國際功能點用戶組)對功能點計數時做的分類。

應用類數據 Application Type

下面這段對話將產生一個應用類度量數據:

A:“這個軟件有多少代碼行?”

B:“等我數一下……10000行”。

A:“多少人天開發出來的?”

B:“大約100人天吧”

A:“那么生產率=10000行/100人天=100行/人天”

這種生產率是按一個應用(Application這個詞匯的來歷)的靜態規模度量產生的生產率,過一段時間會發生戲劇性的變化:

三個月后……

B:“我們又修改了一些代碼,增加了一些代碼,但是也刪除了一些代碼”

A:“哦?”

B:“多投入了100人天,不過現在還是10000行。”

A:“那么現在的生產率是:10000行/200人天=50行/人天;如果只算二期么……0,我也幫不了你了”

B:“好吧……二期算是白忙一場”

開發類數據 Development Type

A:“這個軟件有多少代碼行?”

B:“一共有兩期……等我數一下……第一期100人天開發了10000行……第二期也是100人天,增加2500行,刪除2500行,修改5000行”。

A:“那么一期生產率=10000行/100人天=100行/人天”

B:“二期呢?”

A:“二期生產率=(增加2500+刪除2500+修改5000)/100人天=10000行/100人天=100行/人天”

B:“yeah!“

A:”不過,也有的體系說二期生產率=(增加2500+刪除2500/2+修改5000)/100人天=8750行/100人天=87.5行/人天

B:”啊?“

A:”等下……還有體系說二期生產率=(增加2500+刪除2500/4+修改5000/2)/100人天=……這個,你自己算吧。“

B:”好吧,總算比白忙一場好。“

如何使用?

場景一:計劃與績效考核=開發類數據

由于增刪改都要花費工作量,所以用開發類數據做計劃和考核更加公平一些。

不過,一般采用功能點更加合理一些,比如在重構中極有可能刪除大段的代碼(我們曾經在15分鐘左右把4000行代碼重構為55行,功能不變),而實際上應用的變化并不大。如果用這種外界(客戶,高層)難以感受到的“變化”來做度量元,很難得到認同。

三種體系(增刪改權值相同,或/2,或/2/4)選擇哪個好呢?

我也不知道,因為這三種體系都有人在用。我的建議是:

1. 如果剛剛開始做度量

隨便選擇一個方法就好了,但是請記錄下原始數據。

也就是說,要記住有多少新增,多少刪除,多少修改。

2. 數據積累比較多了

請按三種方法都計算一次,然后對比一下計算結果和實際工作量的相關系數(相關系數日后會科普一下,Excel表里變有這個函數CORREL(B1:G1,B2:G2),相關系數越高表明用這種方法做估算更接近事實。

度量分析沒有“理論上哪個最好”,只有數據本人才有發言權。

或者說,度量分析的本質就是消除各種理論的主觀性、片面性、理想化,把發言權留給數據本身。所以自己做數據分析是免不了的事情。

場景二:需求變更控制

不過,不論有多少理由,一個軟件只修改、刪除功能而不增加功能,都不是一個正常的事情。

過多修改功能表明需求分析最初做的不好,而刪除功能則表明做了過多的無用功能。

為了約束團隊,防止他們把“改軟件”當作工作,需要定期監控兩者的比值:應用類/開發類,如果這個數據不斷下降,表明大家都在修改之前的功能,很久沒有大量增加功能了。

在小而美的產品研發中,修改功能可能是一個常態,但這不能作為開始可以不深入思考“最佳功能”的理由。

在項目開發尤其是外包項目中,只修改而不增加功能是一個災難,因為客戶多數時候不會為修改功能付費,他們認為這是因為乙方未能深入分析需求造成的。

場景三:編碼有效性

也就是用多少代碼能實現多少功能的問題,編碼有效性越高,則所需代碼越少。(日后有詳細文章描述)

當然,這里的“功能”指國際標準功能點度量出來的功能,而不是我們平時所說的“個人理解不同規模也不同”的那種直覺功能。

在這種場景中,應該使用:編碼有效性=總代碼行/總功能點數=總代碼行/應用類功能點數。

比如在之前那個例子中,第二期代碼行可能還是10000行,但是如果功能點增加了,那么編碼有效性實際上增高了。

完整示例

下面是一個功能點、代碼行、編碼有效性、應用類、開發類數據的完整應用場景。

A:“這個軟件有多少代碼行和功能點?”

B:“一共有兩期……等我數一下……第一期100人天開發了10000行,200功能點……第二期也是100人天,增加2500行,刪除2500行,修改5000行;增加50功能點,刪除20功能點,修改30功能點”。

A:“那么一期代碼行生產率=10000行/100人天=100行/人天,功能點生產率=200功能點/100人天=2功能點/人天”

B:“二期呢?”

A:“二期生產率=(增加2500+刪除2500+修改5000)/100人天=10000行/100人天=100行/人天,功能點生產率=(增50+刪20+改30)功能點/100人天=100功能點/100人天=1功能點/人天”(暫時只用第一種增刪改權值算法)

B:“哪期項目做得快呢?“

A:“從代碼行看,一樣;從功能點看,一期項目快一倍。”

B:“以哪個為準好呢?”

A:“功能點好,比較容易給客戶和領導交代”

B:“二期真爛。”

A:“也未必,你們的編碼有效率提升了。”

B:“怎么講?”

A:“二期完成后(不是二期開發本身),整個產品還是10000行,功能點卻增加為300,你們現在的代碼效率已經達到10000/300=33行/功能點了(越低越好,一期是10000/200=50)”

B:“生產率降低,編碼有效性提高……怎么做整體評價呢?”

A:“生產率提高是終極目標,不過編碼有效性的提升有利于未來的生產率和質量的提升。所以,現在總體評價是生產率下降了,未來要看你們以后是否能真正發揮編碼有效率的優勢了。”


怎么樣?如果是我,如果能寫一個由數字組成的項目報告,我才不會寫一大堆模棱兩可的文字呢。

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

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

相關文章

注解 @ModelAttribute 運用詳細介紹

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。1.ModelAttribute注釋方法   例子(1),(2),(3&#x…

編程語言 IDE 對比

IDE是集成開發環境的英文縮寫,所謂集成開發環境,就是將你在開發過程中所需要的工具或功能集成到了一起,比如代碼編寫、分析、編譯、調試等功能,從而最大化地提高開發者的工作效率。每種編程語言都有一些特定的IDE,本文…

強制更新 maven 緩存

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 mvn dependency:purge-local-repository

程序員為什么那么難升職

一個有趣的現象是老程序員很難升職,如果你因為3K工資太低而要辭掉工作,你的上司寧可去外面找一個5K工資的新人,也不會來挽留你。那么程序員為什么那么難升職,這里總結了幾點。你上司的問題你晉升困難,最大的主觀原因在…

Docker 安裝 Redis (Redis 配置)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 獲取 redis 鏡像 docker pull redis 不加版本號默認獲取最新版本,也可以使用 docker search redis 查看鏡像來源 查看本地鏡像…

百度首席科學家 Andrew Ng談深度學習的挑戰和未來

摘要:7月7日上午,百度首席科學家Andrew Ng應邀做客中國科學院自動化研究所并做了《Deep Learning:Overview and trends》的學術報告。 【編者按】人工智能被認為是下一個互聯網大事件,當下,谷歌、微軟、百度等知名的高…

Linux 安裝 jdk ( 兩種方式 )

安裝jdk有兩種方法:手動安裝 yum安裝。 方式一: yum安裝 1、查詢要安裝jdk的版本, 命令:yum -y list java* 2、安裝jdk1.8 yum install -y java-1.8.0-openjdk.x86_64 3、查詢jdk版本:java -version 這樣就安裝成功了。默認…

在動態網絡下實現分布式共享存儲

摘要:本文介紹了分布式環境下實現共享內存模型會遇到的各種問題和挑戰,并針對不同問題介紹多種算法的優劣性。本文是對現階段該領域研究現狀的總體介紹,通過本文能了解動態分布式共享內存研究的前沿狀況、挑戰與機遇。 共享內存系統是普通單…

集合拷貝通用方法、list<A> 轉換成 list<B> (屬性相同)

拷貝2個擁有相同屬性的集合實現: 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 package com.hydbest.app.lbd.marketing.common.utils;import com.alibaba.fastjson.JSON…

Linkedln技術高管Jay Kreps:Lambda架構剖析

摘要:Jay Kreps是Linkedln的一名在線數據架構技術高管,在日常工作中,Jay Kreps經常被問及有關Lambda架構的問題,為此他結合實際經驗和個人體會,針對Lambda架構進行深度剖析,分析了它的優缺點以及采用的替代…

JWT ( JSON Web Token ) 入門教程

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、跨域認證的問題 互聯網服務離不開用戶認證。一般流程是下面這樣。 1、用戶向服務器發送用戶名和密碼。 2、服務器驗證通過后&#x…

優秀程序員必備的15大技能

編程是個很復雜的玩意,但是成就優秀程序員的很多因素和我們在學校中早期學到的相差無幾。本文靈感來源于Robert Fulghum的《All I Really Need to Know I Learned in Kindergarten》。 1.分享 盡可能地使用開源,并且如果有能力的話也可以把自己的成果分…

注解 @Target 用法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Target: Target說明了Annotation所修飾的對象范圍:Annotation可被用于 packages、types(類、接口、枚…

軟件開發者如何準備未來?

摘要:現今,科技領域技術更新非常迅速,作為該領域幕后勤懇勞作的軟件開發者要想在其中永遠保持領先,跟得上時代,就需要時刻面向未來做好準備。但面對各種技術各種開發語言,軟件開發者該如何做? …

java 并發包之 LongAdder 源碼分析

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 LongAdder是java8中新增的原子類,在多線程環境中,它比AtomicLong性能要高出不少,特別是寫多的場景。…

JAVA 內存模型 (Java Memory Model,JMM)

JAVA內存模型 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Java內存模型(Java Memory Model,JMM) 是在硬件內存模型基礎上更高層的抽象&#xf…

解決:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯如下: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.…

解決:Command line is too long. In order to reduce its length classpath file can be used.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 原本可以正常運行的項目,突然出現這個錯: Command line is too long. In order to reduce its length class…

性能提升利器之固態硬盤和序列化漫談

摘要:假設我們已經構建了下一個殺手級應用,而且變得越來越受歡迎,突破負載極限,以我們目前的增長的速度,需要在3個月內將需要將性能提升10倍。我們該怎么做? 【編者按】當面對一個性能擴展問題時&#xff…

查看本機IP的方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 打開網絡和共享中心 2.更改適配器設置 3. 右鍵選擇 狀態 4.選擇詳情 5.找到IP