衡量AI輔助編程帶來(lái)的收益
本文主要介紹了如何度量研發(fā)效能,以及AI輔助編程是如何影響效能的,進(jìn)而闡述如何衡量AI輔助編程帶來(lái)的收益。
理解度量:有效區(qū)分度量指標(biāo)
為了幫助研發(fā)團(tuán)隊(duì)更好地理解和度量研發(fā)效能,可以將指標(biāo)分為三類:能力和行為指標(biāo)、交付效能指標(biāo)和業(yè)務(wù)結(jié)果指標(biāo)。該分類有助于從不同維度評(píng)估和改進(jìn)研發(fā)工作。
能力和行為指標(biāo):反映團(tuán)隊(duì)的實(shí)際工作方式和能力,影響交付效率,可以被改進(jìn)。例如,單元測(cè)試覆蓋率、代碼掃描問(wèn)題數(shù)、持續(xù)集成頻次、圈復(fù)雜度、解耦度(Decoupling Level)等因素。
交付效能指標(biāo):反映技術(shù)團(tuán)隊(duì)的效率,與業(yè)務(wù)結(jié)果有一定相關(guān)性,但不直接影響業(yè)務(wù)結(jié)果。例如,速度、吞吐量和質(zhì)量等因素。
業(yè)務(wù)結(jié)果指標(biāo):反映真實(shí)的經(jīng)營(yíng)情況,直接與公司的收入、規(guī)模和成本等相關(guān),可以直接用于績(jī)效考核。例如,營(yíng)收GAAP、毛利、凈利、成本及月活躍用戶等數(shù)據(jù)均可作為業(yè)務(wù)結(jié)果指標(biāo)。
什么是研發(fā)效能,如何度量?
研發(fā)效能是指軟件研發(fā)團(tuán)隊(duì)持續(xù)、快速、高質(zhì)量交付有效價(jià)值的能力。具體來(lái)說(shuō),包括以下幾個(gè)方面:
做正確事情的能力:即交付有效價(jià)值。
正確地做事的能力:即持續(xù)性、速度和質(zhì)量三個(gè)方面,其中質(zhì)量是對(duì)速度的約束條件,持續(xù)性是對(duì)速度和質(zhì)量的一貫性要求。
研發(fā)效率的度量
有效的度量能夠引導(dǎo)正確的改進(jìn)行為,決定后續(xù)的改進(jìn)行動(dòng)。團(tuán)隊(duì)的職責(zé)范圍決定了采用什么樣的指標(biāo)。通常對(duì)于技術(shù)團(tuán)隊(duì)會(huì)從以下幾個(gè)方面進(jìn)行衡量:
效率:速度(流動(dòng)效率,單個(gè)工作項(xiàng)的流速)和吞吐量(資源效率,單位時(shí)間內(nèi)完成的工作項(xiàng)數(shù)量)。
質(zhì)量:交付質(zhì)量,即交付物離開團(tuán)隊(duì)之后的質(zhì)量。
員工幸福感:?jiǎn)T工幸福感是一個(gè)主觀性調(diào)研指標(biāo),與持續(xù)性有正相關(guān)。
AI輔助編程是如何影響研發(fā)效能的?
AI輔助編程以AI為技術(shù)手段,提升編程效率,反映的編碼的能力和行為。具體可以從以下幾個(gè)方面衡量:
編碼效率:開發(fā)者的編碼時(shí)間占比 × AI生成代碼占比 = 節(jié)省的開發(fā)時(shí)間比例。例如,員工有30%的時(shí)間花在編碼上,AI生成了40%的代碼,則可以理解為節(jié)省了12%的開發(fā)時(shí)間。
代碼的缺陷密度:代碼的缺陷密度是一個(gè)滯后指標(biāo),反映代碼質(zhì)量,如千行代碼缺陷量。
員工編程體驗(yàn)的滿意度:?jiǎn)T工編程體驗(yàn)的滿意度是一個(gè)主觀指標(biāo),反映工具對(duì)于員工編程工作的幫助,如工具的易用性和實(shí)際工具的使用效果。
編碼效率提升
在軟件研發(fā)過(guò)程中,編碼效率是影響研發(fā)效率的重要因素。除編碼效率外,還有許多其他因素對(duì)整體研發(fā)效率產(chǎn)生影響,主要包括需求質(zhì)量、協(xié)作流程、測(cè)試自動(dòng)化及持續(xù)集成/持續(xù)交付(CI/CD)的工程能力等。這些因素可歸納為兩個(gè)方面:個(gè)體效率(單點(diǎn)改進(jìn))和協(xié)作效率(流程改進(jìn))。從問(wèn)題改進(jìn)的角度來(lái)看,可以總結(jié)為四個(gè)方面:阻塞、返工、負(fù)債和失能。
編碼時(shí)間占比與AI生成代碼占比
開發(fā)者的編碼時(shí)間占比 × AI生成代碼占比 = 節(jié)省的開發(fā)時(shí)間比例。例如,員工有30%的時(shí)間花在編碼上,AI生成了40%的代碼,則節(jié)省了12%的開發(fā)時(shí)間。
數(shù)據(jù)來(lái)源顯示,受訪者花費(fèi)不到三分之一的時(shí)間編寫新代碼或改進(jìn)現(xiàn)有代碼(32%),35% 的時(shí)間用于管理代碼(包括代碼維護(hù) 19%、測(cè)試 12% 和響應(yīng)安全問(wèn)題 4%),另有 23% 的時(shí)間用于會(huì)議和管理運(yùn)營(yíng)任務(wù)
綜合開發(fā)行為的提升
程序員在開發(fā)階段不僅寫代碼,還包括調(diào)試、測(cè)試、信息檢索等工作。因此,在每項(xiàng)工作中是否有提升點(diǎn),以及提升了多少,可以形成如下的計(jì)算公式:
這里設(shè)定一個(gè)假設(shè)基線,即在沒(méi)有 AI 工具的情況下,單位工作量的成本是多少。該基線一般在企業(yè)內(nèi)有相關(guān)統(tǒng)計(jì)數(shù)據(jù),如果沒(méi)有,則可以參考行業(yè)統(tǒng)計(jì)數(shù)據(jù)。此外,還需考慮在每個(gè)開發(fā)行為中,AI提升效率的同時(shí)是否會(huì)產(chǎn)生額外成本,例如接受代碼后仍需進(jìn)行修改,這可能會(huì)影響手工基線的準(zhǔn)確性。
無(wú)論選擇選項(xiàng)一還是選項(xiàng)二,其背后的方法均為:行為 × 效果 = 效率。一般而言,不必過(guò)于追求數(shù)據(jù)的精確性,因?yàn)檫^(guò)于精確的統(tǒng)計(jì)可能會(huì)引導(dǎo)錯(cuò)誤的行為或增加額外的管理成本。統(tǒng)計(jì)意義上的準(zhǔn)確性就夠了,其關(guān)鍵在于能夠有效回答一個(gè)本質(zhì)問(wèn)題,并指導(dǎo)相應(yīng)的改進(jìn)。
開發(fā)效率提升對(duì)整體研發(fā)效能的影響
根據(jù)利特爾法則(Little's Law),速度 = 在制品數(shù)量(WIP) / 吞吐量,換算過(guò)來(lái)就是吞吐量 = 在制品數(shù)量(WIP) / 速度。通過(guò)AI方式,可以改變以下幾點(diǎn):
交付的速度:?jiǎn)蝹€(gè)工作項(xiàng)的速度提升了,吞吐量會(huì)增加,在途任務(wù)(任務(wù)的WIP)也會(huì)顯著下降。對(duì)于待排期需求會(huì)是一個(gè)很好的消耗,從而減少待排期需求的數(shù)量。待排期需求的數(shù)量下降,對(duì)于整個(gè)產(chǎn)品研發(fā)的在途需求數(shù)(需求WIP)也會(huì)下降,進(jìn)而提升了整體研發(fā)速度。
交付的確定性:速度提升,對(duì)于軟件研發(fā)在時(shí)間上的確定性會(huì)有著與之相應(yīng)的提升。
員工的編碼體驗(yàn)的滿意度
為了評(píng)估智能編碼助手對(duì)員工編碼體驗(yàn)的滿意度,可以通過(guò)用戶調(diào)研的方式獲取反饋,并發(fā)現(xiàn)可以改進(jìn)的地方。問(wèn)卷設(shè)計(jì)需要考慮三個(gè)因素:用戶畫像、用戶滿意度、用戶使用效率。以下是具體的問(wèn)卷設(shè)計(jì)示例:
用戶畫像
你有多少年的編程經(jīng)驗(yàn)?
不足 1 年。
1-3 年。
3-5 年。
5-10 年。
10 年以上。
你在工作中的主要角色?
初級(jí)開發(fā)者。
中級(jí)開發(fā)者。
高級(jí)開發(fā)者。
架構(gòu)師。
技術(shù)經(jīng)理。
其他(請(qǐng)說(shuō)明)。
你常用的編程語(yǔ)言有哪些?(多選)
Java。
Python。
C++。
JavaScript。
Go。
Ruby。
PHP。
SQL。
XML。
其他(請(qǐng)說(shuō)明)。
你使用智能編碼助手的頻率如何?
每天多次。
每天一次。
每周幾次。
每月幾次。
很少使用。
用戶滿意度
你對(duì)智能編碼助手的總體滿意度如何?(打分 1-5 分,5 分最高)
關(guān)于使用智能編碼助手的一些描述,你的看法是?
視覺(jué)舒適、操作符合習(xí)慣。
沒(méi)有被打擾的感覺(jué)。
上手成本低、操作流暢。
愿意采納生成的建議代碼。
編碼問(wèn)題能夠得到有效回答。
代碼和問(wèn)答生成速度快。
較少遇到報(bào)錯(cuò)。
用戶使用效率
通過(guò)使用智能編碼助手,你覺(jué)得對(duì)你的編碼工作效率有多大的提升?(單選)
顯著提升。
有所提升。
沒(méi)有變化。
有所下降。
顯著下降。
回想一下,你使用智能編碼助手的場(chǎng)景,下方的描述,你的觀點(diǎn)是什么?
工作更加有成就感。
編碼時(shí)更加自信。
使用熟悉的語(yǔ)言時(shí),效率更高。
使用不熟悉的語(yǔ)言時(shí),進(jìn)度更快。
減少編寫重復(fù)性代碼。
可以保持編碼心流。
減少搜索引擎使用。
最后,您可能會(huì)得到如下方所示的結(jié)論:
AI輔助編程的效果如何衡量?
針對(duì)“到底使用采納率合適,還是AI代碼生成占比合適”的問(wèn)題,首先需要明確兩者的定義及其計(jì)算邏輯:
采納率 | AI代碼生成占比 | |
定義 | 在單位時(shí)間周期內(nèi),代碼補(bǔ)全的采納次數(shù)與推薦次數(shù)的比率。具體計(jì)算公式為: 采納率=采納次數(shù)/推薦次數(shù) | 在單位時(shí)間周期內(nèi),開發(fā)者采納的AI生成的代碼行數(shù)與變更代碼行數(shù)的比率。具體計(jì)算公式為:代碼生成占比=采納的AI成生的代碼行數(shù)/變更代碼行數(shù) |
優(yōu)點(diǎn) |
|
|
缺點(diǎn) |
|
|
同時(shí),可能還會(huì)有這樣的疑問(wèn),為什么不使用AI代碼生成的入庫(kù)占比來(lái)計(jì)算呢?主要原因如下:
版本管理工具無(wú)法識(shí)別:版本管理工具無(wú)法區(qū)分代碼是由AI生成的還是人工編寫的。代碼提交的作者是提交人本身,而非AI。
引入復(fù)雜度:追求入庫(kù)率會(huì)導(dǎo)致度量變得異常復(fù)雜。追求構(gòu)建并發(fā)到生產(chǎn)環(huán)境的數(shù)量,引入了更多變量。
因此,建議采用最直觀的 AI 生成占比來(lái)統(tǒng)計(jì)編碼行為的效果是一個(gè)比較推薦的方式。如果無(wú)法獲得 AI 生成占比,采用采納率也是一種可取的方式,但過(guò)分追求統(tǒng)計(jì)精確性的意義不大。
衡量AI編碼工具收益的具體方式
為了更好地衡量AI編碼工具對(duì)效率的影響,可以從以下幾個(gè)方面進(jìn)行觀測(cè)和分析:
工具使用量:
開發(fā)者數(shù)量:統(tǒng)計(jì)使用AI編碼工具的開發(fā)者數(shù)量。
活躍度:統(tǒng)計(jì)活躍用戶的數(shù)量和活躍頻率。
行為:某些能力使用的頻次,統(tǒng)計(jì)特定功能(如代碼補(bǔ)全、單元測(cè)試生成、代碼注釋生成等)的使用頻次。
效果:采納或有效生成占比,統(tǒng)計(jì)采納的AI生成代碼行數(shù)占總變更代碼行數(shù)的比例。
開發(fā)效率提升:通過(guò)觀測(cè)開發(fā)者在使用 AI 編碼工具前后的編碼效率變化,建立相關(guān)性。同時(shí),通過(guò)“工具使用的行為 x 效果 ≈ 效率”這個(gè)簡(jiǎn)單公式,來(lái)獲得對(duì)于個(gè)人開發(fā)效率提升的統(tǒng)計(jì)。
研發(fā)效率的貢獻(xiàn):研發(fā)效率涉及多個(gè)方面,包括需求質(zhì)量、協(xié)作流程、測(cè)試自動(dòng)化、CI/CD工程能力等,但開發(fā)階段的效率提升對(duì)整體研發(fā)效率有顯著貢獻(xiàn)。
從系統(tǒng)思考的方式建立因果關(guān)系:從整體系統(tǒng)的角度出發(fā),分析各個(gè)行為、效率和結(jié)果之間的因果關(guān)系。找到關(guān)鍵的杠桿點(diǎn),即能夠帶來(lái)最大效益的改進(jìn)點(diǎn)。
度量原則:度量指標(biāo)需要回答一個(gè)本質(zhì)的問(wèn)題,即AI編碼工具是否真正提升了開發(fā)效率。度量指標(biāo)應(yīng)引導(dǎo)正確的改進(jìn)行動(dòng),而非誤導(dǎo)。