
討論來自一個(gè)社區(qū)朋友。

1.1 千行代碼缺陷率被廢棄
千行代碼缺陷率 = Bug數(shù)量 / 千行代碼數(shù)
這是一個(gè)經(jīng)典指標(biāo),以前在研發(fā)側(cè)經(jīng)常用來衡量代碼質(zhì)量,近年被逐漸棄用。
原因是這個(gè)指標(biāo)有負(fù)面的引導(dǎo),似乎不鼓勵(lì)寫高質(zhì)量的簡(jiǎn)潔代碼,而稀釋代碼或造輪子則能帶來比較好看的數(shù)據(jù),這與指標(biāo)設(shè)置的初衷“提升代碼質(zhì)量”相悖。
因此,該指標(biāo)不建議橫向比較,不建議作為績(jī)效指標(biāo)。但可以作為代碼質(zhì)量指導(dǎo)基線,或作為工程師的自我修養(yǎng),用于自我評(píng)估和改進(jìn)。
附上在CMMI里對(duì)千行代碼缺陷率的標(biāo)準(zhǔn),不難看出缺陷率還是以一個(gè)滿足該等級(jí)的基線值存在的,也就是說它不能用來衡量代碼質(zhì)量有多好,但可以用來衡量代碼質(zhì)量最差不能低于什么水平。

1.2 缺陷率無法體現(xiàn)軟件質(zhì)量
缺陷率 = 失敗的用例數(shù) / 執(zhí)行的用例總數(shù)
從字面意義上理解,這個(gè)指標(biāo)看著像是衡量軟件質(zhì)量的。但放入研發(fā)體系內(nèi)思考,通常在不同版本間,執(zhí)行的用例總數(shù)是變化的,失敗的用例數(shù)也取決于用例執(zhí)行者的判斷,而失敗的用例又不一定會(huì)以缺陷的形式來跟蹤。所以這個(gè)指標(biāo)很難有確定的標(biāo)準(zhǔn),那么它還是有意義的嗎?
我認(rèn)為是有意義的,意義在于它揭示了測(cè)試設(shè)計(jì)的質(zhì)量,即經(jīng)過設(shè)計(jì)的測(cè)試用例能否有效發(fā)現(xiàn)缺陷。從這個(gè)維度上講,這個(gè)指標(biāo)恐怕叫“用例有效率”更恰當(dāng)一點(diǎn)。
不管是千行代碼缺陷率,還是測(cè)試統(tǒng)計(jì)的缺陷率,統(tǒng)計(jì)時(shí)難免會(huì)陷入數(shù)據(jù)的迷思。片面追求數(shù)據(jù)好看,對(duì)團(tuán)隊(duì)的副作用很大,結(jié)果可能是既不經(jīng)濟(jì)、也沒成效,平白做了很多無用功。思考質(zhì)效工作如何經(jīng)濟(jì)又高效,有助于避開局部?jī)?yōu)化的泥沼。
2.1 不是指標(biāo)的鍋,而是思路偏差
由上面的討論容易得出以下結(jié)論:
- 第一,從度量引導(dǎo)團(tuán)隊(duì)改進(jìn)的意義角度來看:指標(biāo)數(shù)量絕對(duì)值 < 指標(biāo)的環(huán)比(無任何時(shí)間間隔,連續(xù)周期內(nèi)的變化),應(yīng)更多關(guān)注團(tuán)隊(duì)指標(biāo)的變化趨勢(shì),以及思考是什么原因引起的變化,該如何改進(jìn);
- 第二,團(tuán)隊(duì)內(nèi)的任何投資,都需要考慮投入產(chǎn)出比 ROI,為了得到結(jié)果而付出巨大的代價(jià),本身就是一種失效。尤其當(dāng)資源被投入到“質(zhì)效提升或管理”這類成本高見效慢的活動(dòng)時(shí),考慮是否經(jīng)濟(jì)尤為重要。
為了獲得更高的投資回報(bào),不得不思考團(tuán)隊(duì)可能采取的投資和收益之間的關(guān)系,以及可能的影響因素:成本、反饋周期、效率等互相制約的程度。在軟件研發(fā)活動(dòng)中,有些事屬于決定做什么和怎么做的定義范疇,如需求方案、技術(shù)架構(gòu)、測(cè)試策略等;而有些事情屬于落地實(shí)施范疇,如:工序拆解和研發(fā)、測(cè)試和運(yùn)維。當(dāng)決定做研發(fā)治理時(shí),在不同層次發(fā)力,所需成本、見效周期/觀察期、治理效果也不盡相同。- 在定義階段發(fā)力,成本低、見效期長(zhǎng),但治理效果最好,問題根因也往往會(huì)追溯到此;
- 在實(shí)施階段發(fā)力,成本高、見效期短,但治理效率偏低,數(shù)據(jù)好看但治標(biāo)不治本。
因此,當(dāng)我們追求不同的提升或治理目標(biāo)時(shí),所采取的策略也不盡相同。假設(shè)團(tuán)隊(duì)處在新組建期,軟件也處在MVP或0-1階段,此時(shí)從底層思考比較好,在做前把問題定義清楚,架構(gòu)和策略都想清楚,定義好后續(xù)實(shí)施階段的各種門禁和標(biāo)準(zhǔn),會(huì)為后續(xù)研發(fā)過程的順利進(jìn)行打造良好的基礎(chǔ)。假設(shè)團(tuán)隊(duì)較大,處于穩(wěn)定期,軟件也處在增強(qiáng)和維護(hù)期,軟件的質(zhì)量反饋出團(tuán)隊(duì)的潛在問題較多,此時(shí)比較短平快的方式是先抓實(shí)施層面,讓團(tuán)隊(duì)快速看到效果,從而建立信心。通過實(shí)施層面反饋的問題,進(jìn)一步根因分析,可能會(huì)發(fā)現(xiàn)在定義階段需要進(jìn)行測(cè)試策略的重塑。在團(tuán)隊(duì)調(diào)整的接受度和靈活性都較好時(shí),再進(jìn)行底層的改造,持續(xù)的觀察和改進(jìn),就比較容易看到效果。三、質(zhì)效工作本質(zhì)是打造高效高響應(yīng)系統(tǒng)
系統(tǒng)是若干部分相互聯(lián)系、相互作用,形成的具有某些功能的整體。系統(tǒng)動(dòng)力學(xué)認(rèn)為系統(tǒng)中的因、果回饋關(guān)系環(huán)環(huán)相扣,系統(tǒng)結(jié)構(gòu)決定系統(tǒng)功能。舉個(gè)例子,“三體”即為一個(gè)系統(tǒng),在這個(gè)系統(tǒng)中,三個(gè)天體間的萬有引力相互影響,相互制約,對(duì)外呈現(xiàn)一個(gè)動(dòng)態(tài)系統(tǒng)。在系統(tǒng)思考中,是以開了掛的全局眼光審視整個(gè)系統(tǒng),而不僅僅是尋求局部最優(yōu)解。雪崩時(shí),沒有一片雪花是無辜的,也沒有一片雪花能夠幸免。系統(tǒng)整體功能不好,牽涉其中的每個(gè)人都是受害者,也都是加害者。因此在討論系統(tǒng)時(shí),我們既要研究系統(tǒng)中的各個(gè)組成元素,又要各元素之間相互影響的關(guān)系。3.2 系統(tǒng)思考看待系統(tǒng)問題為了更好地說明質(zhì)效工作需要系統(tǒng)的看待問題,我們舉一個(gè)常見的例子。在質(zhì)量領(lǐng)域,有一個(gè)老生常談的問題:自動(dòng)化測(cè)試的投入產(chǎn)出比。由此衍生更多的問題:自動(dòng)化測(cè)試難開展、難維護(hù)、難持續(xù)。以往在看待這個(gè)問題時(shí),可能的思路是:測(cè)試人員的自動(dòng)化能力較低,或者時(shí)間緊任務(wù)急沒資源。在采用系統(tǒng)思考看待這個(gè)問題時(shí),就不會(huì)只是盯著測(cè)試人員做改進(jìn),而是思考整個(gè)研發(fā)系統(tǒng)在自動(dòng)化測(cè)試上的瓶頸所在,追求的也是整個(gè)研發(fā)系統(tǒng)在自動(dòng)化測(cè)試上面的投資回報(bào)率。現(xiàn)在來推演一下,當(dāng)要做決策時(shí),我們追求高投資回報(bào)。而投資回報(bào)取決于成本和收益,成本越高投資回報(bào)率越低。那么,都有哪些因素影響自動(dòng)化測(cè)試的成本呢? - 軟件本身的可測(cè)性:當(dāng)軟件可測(cè)性較低時(shí),自動(dòng)化成本就會(huì)飛升,甚至根本不具備可自動(dòng)化的條件。而這個(gè)因素的可控性受制于軟件的架構(gòu)設(shè)計(jì),在軟件成熟期不具備可改進(jìn)的靈活性。因此建議在做架構(gòu)設(shè)計(jì)時(shí)就充分考慮軟件可測(cè)性,否則后續(xù)的自動(dòng)化測(cè)試會(huì)難以開展。
- 人員能力:這里不僅僅指自動(dòng)化測(cè)試的編碼能力,更要求測(cè)試人員具備一定的測(cè)試設(shè)計(jì)能力。能夠充分理解測(cè)試分層,不同層的測(cè)試服務(wù)于什么目標(biāo),解決什么問題,以及測(cè)試的框架選型等能力。
- 資源配置:指團(tuán)隊(duì)的研發(fā)節(jié)奏,能否有余力進(jìn)行充分的自動(dòng)化測(cè)試。
- 環(huán)境依賴:自動(dòng)化測(cè)試如果不能持續(xù)運(yùn)行,就會(huì)失去盡早暴露缺陷的時(shí)機(jī),而持續(xù)運(yùn)行依賴于能排除干擾的穩(wěn)定環(huán)境。
- 工具鏈割裂:指團(tuán)隊(duì)的工具鏈體系是否支持自動(dòng)化測(cè)試持續(xù)集成,或者不同層級(jí)的自動(dòng)化測(cè)試工具是否具備一致性。這在一定程度上影響自動(dòng)化測(cè)試的可維護(hù)性。
基于以上的討論,當(dāng)思考如何提升自動(dòng)化測(cè)試投資回報(bào)率時(shí),我們就有了更多可能的改進(jìn)方向。抽象一下,當(dāng)思考質(zhì)效工作本身時(shí),我們需要打造的是一個(gè)高效高響應(yīng)的系統(tǒng)。系統(tǒng)中包含各種元素:干系人、策略、實(shí)踐、流程、資源、工具……各個(gè)元素之間又相互影響,相互制約。當(dāng)需要作出決策時(shí),充分分析系統(tǒng)中的各元素及其之間的關(guān)系,有助于我們得出全局優(yōu)化方案。接下來選取觀察元素,思考相互關(guān)系,有機(jī)的組建一個(gè)系統(tǒng)。一個(gè)典型的系統(tǒng)思考應(yīng)用就是冰玉老師的《一頁(yè)紙測(cè)試策略》,如圖:基于這樣一個(gè)決策系統(tǒng),我們就很容易對(duì)齊質(zhì)量領(lǐng)域下的預(yù)期和優(yōu)先級(jí),從而更好的促使團(tuán)隊(duì)進(jìn)行改進(jìn)。而幫助團(tuán)隊(duì)設(shè)計(jì)和實(shí)施一個(gè)高效的、高響應(yīng)力的質(zhì)效系統(tǒng),正是質(zhì)效管理者的價(jià)值體現(xiàn)。IDCF DevOps黑客馬拉松,獨(dú)創(chuàng)端到端DevOps體驗(yàn),精益創(chuàng)業(yè)+敏捷開發(fā)+DevOps流水線的完美結(jié)合,2021年僅有的3場(chǎng)公開課,數(shù)千人參與并一致五星推薦的金牌訓(xùn)練營(yíng),追求卓越的你一定不能錯(cuò)過!9月11-12日,上海站,企業(yè)組隊(duì)參賽&個(gè)人參賽均可,一年等一回,錯(cuò)過等一年,趕緊上車~??