如何衡量一個軟件工程的質(zhì)量?
要提高軟件工程的質(zhì)量,需要先找到一些可以衡量的維度。在改進(jìn)前,先按這些維度打分,然后每隔一段時間再來打分,看看分?jǐn)?shù)的變化情況。
打分可以是主觀的,比如通過發(fā)送問卷調(diào)查的形式,讓工程師按這些維度分別打分,再做一個匯總,得到最終的分?jǐn)?shù)。
以下是一個可供參考的打分表,一共兩大類,每個類別下有若干問題。
一、代碼質(zhì)量、持續(xù)集成/持續(xù)部署、本地開發(fā)和測試
非常不認(rèn)同 |
不認(rèn)同 |
中立 |
認(rèn)同 |
非常認(rèn)同 |
|
代碼容易理解、易于查找,有著高質(zhì)量 |
|||||
有高效的自動化測試 |
|||||
有很好的自動化測試覆蓋率 |
|||||
本地開發(fā)環(huán)境易于從 0 開始設(shè)置起來 |
|||||
技術(shù)債務(wù)可控,并且在持續(xù)償還 |
|||||
有快速的 CI/CD 流水線 |
|||||
部署上線是自動化的,一周好幾次 |
|||||
整個系統(tǒng)(包含所有組件)都是大家知道并且理解的 |
|||||
系統(tǒng)組件之間的交互是合理的,并且是被清晰定義過的 |
|||||
基礎(chǔ)設(shè)施是獨立于應(yīng)用代碼,通過 IaC 來部署到各個環(huán)境的 |
|||||
團(tuán)隊成員理解基礎(chǔ)設(shè)施和其中的資源連接情況 |
|||||
基礎(chǔ)設(shè)施代碼有測試,并且在每次部署前都會執(zhí)行這些測試 |
|||||
文檔充分、以結(jié)構(gòu)化的方式有序組織在一起,并且是最新的 |
二、認(rèn)知負(fù)擔(dān)
非常低的認(rèn)知負(fù)擔(dān)意味著當(dāng)你在做任務(wù)時,你的大腦可以非常放松。你知道可以在哪兒找到你需要的東西,并且所有東西都會在你拿到一個新任務(wù)的同時立即清晰。
非常高的認(rèn)知負(fù)擔(dān)意味著當(dāng)你在做任務(wù)時,你的大腦 100% 滿負(fù)荷運行。你希望有更多的大腦來幫助你理清問題,以及找到解決問題的方式。
非常低 |
低 |
一般/中等 |
高 |
非常高 |
|
內(nèi)在的——如去哪里可以找到相關(guān)功能特性的代碼、在哪里添加新代碼等等 |
|||||
外部的——我怎么配置和部署一個服務(wù)呢? |
|||||
綜合/特殊/關(guān)鍵的——如服務(wù)之間該怎樣交互?從產(chǎn)品側(cè)過來的業(yè)務(wù)需求等 |
認(rèn)知負(fù)擔(dān)會影響團(tuán)隊開發(fā)新功能、為增長的用戶數(shù)量而將應(yīng)用擴(kuò)容的能力。在軟件工程中,認(rèn)知負(fù)擔(dān)是指在閱讀軟件產(chǎn)物(代碼、如何運行服務(wù)等)時在心智努力上的花費。
每天影響開發(fā)人員的認(rèn)知負(fù)荷有三種不同類型(摘自《高效能團(tuán)隊模式》一書):
內(nèi)在認(rèn)知負(fù)荷 - 與任務(wù)本身的問題領(lǐng)域相關(guān)(例如,如何在這個類中創(chuàng)建新方法?)
外部認(rèn)知負(fù)荷 - 與執(zhí)行任務(wù)的環(huán)境相關(guān)(例如,如何部署這個組件?如何配置這項服務(wù)?)
特殊/綜合/關(guān)鍵認(rèn)知負(fù)荷 - 與任務(wù)的特定學(xué)習(xí)或高性能關(guān)注相關(guān)(例如,這項服務(wù)應(yīng)該如何與ABC服務(wù)互動?業(yè)務(wù)需求)
理想情況下,內(nèi)在和外部認(rèn)知負(fù)擔(dān)都應(yīng)該是低的,而特殊認(rèn)知負(fù)荷,則應(yīng)該在中等。
一般來說,為了有效地交付和運維現(xiàn)代軟件系統(tǒng),組織應(yīng)盡量減少內(nèi)在的認(rèn)知負(fù)荷,消除外部的認(rèn)知負(fù)荷,從而為關(guān)鍵認(rèn)知負(fù)荷留出更多空間——而這正是“增值思維”的體現(xiàn)。
- 《高效能團(tuán)隊模式》
行動起來
不妨給自己的工程按照以上維度打個分吧,看看現(xiàn)狀如何?并且,嘗試列出改進(jìn)項,并每次改進(jìn)一點點,定期回顧一下吧!
