本文轉(zhuǎn)自【林子的空間】
質(zhì)量內(nèi)建的關(guān)鍵是缺陷預(yù)防
近幾年,軟件開發(fā)過程中的質(zhì)量內(nèi)建正在逐漸被大家所重視。越早發(fā)現(xiàn)的軟件缺陷,修復(fù)成本越低。質(zhì)量內(nèi)建要求在軟件開發(fā)生命周期的每個(gè)階段做好質(zhì)量保障工作,預(yù)防缺陷的產(chǎn)生。

說到缺陷預(yù)防,通常能夠想到的就是測試前移(QA從需求階段開始介入、TDD/ATDD等)、Code Review等實(shí)踐,正向的來預(yù)防缺陷的產(chǎn)生。
但是,軟件系統(tǒng)的生態(tài)環(huán)境越來越復(fù)雜,不確定性增加,缺陷預(yù)防的難度也在增加。如果缺陷已經(jīng)產(chǎn)生,是否還能被利用來幫助質(zhì)量內(nèi)建呢?
在《軟件缺陷的有效管理》一文中介紹了基本的缺陷分析方法,接下來我們一起探討一下如何利用缺陷分析來幫助質(zhì)量內(nèi)建。
缺陷分析與質(zhì)量內(nèi)建
缺陷分析最為關(guān)鍵的是根因分析,找到根因,能夠減少缺陷重復(fù)出現(xiàn)的可能性,在后續(xù)階段做到缺陷預(yù)防,幫助質(zhì)量內(nèi)建。
分析根因
引起缺陷的原因主要有下面這幾個(gè)方面:
- 需求缺失或者需求不清晰
- 設(shè)計(jì)問題
- 編碼錯(cuò)誤
- 測試不夠
- 環(huán)境相關(guān)(硬件、軟件、配置等)

利用5 Why分析法[1]根據(jù)缺陷的表象,多問幾個(gè)為什么,找出根因。下面是一個(gè)真實(shí)生產(chǎn)環(huán)境缺陷的根因分析過程:

上圖的根因還可以繼續(xù)細(xì)分,比如為什么這么設(shè)計(jì),可能還會有更深層次的問題;同樣的,進(jìn)度緊張導(dǎo)致的需求沒有實(shí)現(xiàn),也可能還有更詳細(xì)的內(nèi)情可以分析的。最好能一直分析,直到找出真正的根本原因。
定位階段
找出根本原因之后,同樣利用5 Why分析法,基于軟件開發(fā)生命周期由外往內(nèi)的問為什么,從而定位引發(fā)問題的薄弱環(huán)節(jié),找出是哪個(gè)環(huán)節(jié)做的不好導(dǎo)致的問題。拿生產(chǎn)環(huán)境的缺陷為例,下面是可能(不限于)的問題列表:
1. 為什么在預(yù)生產(chǎn)環(huán)境沒有發(fā)現(xiàn)這個(gè)問題?
2. 為什么測試環(huán)境沒有測出這個(gè)問題?
3. 為什么Desk Check沒有發(fā)現(xiàn)這個(gè)問題?
4. 為什么Code review沒有發(fā)現(xiàn)這個(gè)問題?
5. 為什么單元測試沒有覆蓋到這個(gè)問題?
6. 為什么在需求評審的時(shí)候沒有發(fā)現(xiàn)這個(gè)問題?
7. ……

定義改進(jìn)action
找出了根因,并且定位了引發(fā)缺陷的最可能階段,接下來就是通過“What”問題來確定對應(yīng)的action,預(yù)防類似缺陷再次發(fā)生,從而幫助質(zhì)量內(nèi)建。
不同的根因?qū)?yīng)的可能actions有:

總結(jié)
質(zhì)量內(nèi)建的關(guān)鍵是缺陷預(yù)防。
除了正向的考慮加強(qiáng)每個(gè)環(huán)節(jié)的質(zhì)量保障工作可以預(yù)防缺陷,通過分析缺陷的根因、定位問題出現(xiàn)的薄弱環(huán)節(jié)、制定可行的對應(yīng)改進(jìn)措施,可以幫助我們更有的放矢的做好缺陷預(yù)防工作,更有效的做好質(zhì)量內(nèi)建。

注1:5 Why分析法
所謂5 Why分析法,又稱“5問法”,也就是對一個(gè)問題點(diǎn)連續(xù)以5個(gè)“為什么”來提問,以找出其根本原因。根據(jù)實(shí)際情況,問題的數(shù)量不一定要限制在五個(gè),可多可少,適當(dāng)調(diào)整。