QA、QC,傻傻分不清楚! - iThome

文章推薦指數: 80 %
投票人數:10人

簡單來說,品質保證——即QA的目的,是要在產出產品的過程中,使用正確的方法來進行,而QC 的作用,則是當產品完成時,會去檢查所產出的產品是否正確。

從 ... 移至主內容 文/王建興 | 2014-03-06發表 自己從事軟體開發工作不算久,但也有十幾年的時間了,在這十幾年來,有時候會看到一個奇怪的誤解,關於這個誤解,我時常覺得,有點不吐不快,但是,似乎又不是三言兩語可以說清楚,所以,在這十幾年來,也就一直很少在工作場合裡,向合作的伙伴或同事解釋。

直到最近,覺得還是可以利用撰寫一篇文字的方式,來表達我的看法。

這個誤解是什麼呢?其實也是我們很常會遇到的,就是關於QA(QualityAssurance)和QC(QualityControl)的分別。

我在工作中最常遇到的情況是,把軟體測試的部門或團隊稱為QA部門。

或許在有些人的想法裡:「QA就是品質確保,而軟體測試的目的就是要確保品質啊!軟體測試當然是屬於QA的工作呀!」 在之前,我甚至看過大學教授在軟體測試的課程中,將軟體測試工作列為QA領域的一環。

好吧,就且看我一一道來。

從軟體品質的定義,來細部剖析QA和QC之間的不同之處 首先,什麼是品質? 對軟體產品而言,品質就是其功能及特性滿足所制定需求的能力。

我舉一些更實際的例子,像是軟體規格裡的全部功能都有、所有的功能執行起來都不會發生錯誤、軟體不會突然意外的異常中斷、還有軟體執行的效能符合制定的要求、……等等。

簡單地說,像是該有的功能都有、也都能正常運作、而且還運作得夠快,就是品質好。

想到品質,許多人腦海中首先會浮現的,恐怕是像「ISO品質標準」之類耳熟能詳的詞語。

沒錯,ISO,也就是國際標準化組織,它制定了許多標準,包括我們也同樣時常聽到的ISO9000的品質標準。

有些公司會強調,他們已經通過ISO9000的標準,表示他們的產品是有品質的。

在ISO9000裡,對QualityAssurance的定義是:「為了提供實體滿足品質要求的足夠信心,而實作的所有計畫性以及系統性的活動」。

同樣的,ISO9000裡也定義了何謂QualityControl,也就是「為達品質要求而採用的作業性技術及活動」。

或許看完這定義,你還是不見得能理解其義。

簡單來說,品質保證——即QA的目的,是要在產出產品的過程中,使用正確的方法來進行,而QC的作用,則是當產品完成時,會去檢查所產出的產品是否正確。

從這個角度,你可以回頭來檢測一件事‥我們所熟知的軟體測試工作,究竟是屬於QA?還是QC的一部份呢? 答案其實很明顯,軟體測試是透過檢測已完成的軟體,找出其中不符合軟體規格的瑕疵,以便有機會予以修正,所以,測試工作是在檢查所完成的軟體產品是否正確,因此,這應該屬於QC工作過程的一部份。

如果了解到二者的差異,你可以很容易明白,QA的重點放在製造方法,有了正確(能滿足品質要求)的方法,照著執行,就應該要能夠產出滿足要求的產品。

而QC的重點,則放在開發完成的結果,無論如何,針對最後的產物來做檢查,看看是否當中能夠滿足要求。

所以說,QA是事前的、是在產品完成之前的整個過程,而QC是事後的,當產品完成後檢查工作。

QA目標是在預防產品發生瑕疵,而QC則在找出完成的成品中潛在的瑕疵。

在有些人的軟體開發工作中,或許大家所接觸到最多的,其實可能都歸在QC裡頭,因為大家所意識到的軟體品質,大多都是透過軟體測試來達成。

開發團隊透過各種型態的測試,來找出待測產品中所含的問題,並且搭配瑕疵追蹤機制,監看、管理瑕疵被找出來以及被修正、被檢驗的情況。

那麼,在軟體工作中的QA,又該是什麼呢? 我們回歸到原意,QA的重點是方法,而產出軟體的方法是什麼?就是我們的產品開發方法及開發流程(process),或者,甚至像所用的技術,都在範圍內。

所以,在軟體QA中的工作,主要應該是確保使用了正確的開發方法、流程,以及技術、……等等。

所以說,執行QC工作的人員,通常是開發團隊中的成員,受團隊管理者所領導及管理,因為QC工作通常是軟體開發階段中的一環。

但QA工作人員通常是獨立於開發團隊之外,因為,他們關心的重點,主要包括:像是所用的方法和流程是否正確,是否能更好,以及開發團隊是否有依據所制定的方法、流程、甚至是規範,來開發軟體。

產品開發規範的制定與落實,屬於軟體品質保證的範疇 我們在軟體的開發過程,可能會制定很多規範,其中包含了一些小地方,像是程式碼中的命名慣例、排版原則,或像版本控制系統的使用規範,大到軟體需求規格書的寫法、設計書的內容、測試案例、……等等。

更大的範圍,則可能涉及到開發的方法和流程,例如,採XP方法開發,所以,必須要做搭檔編程、也必須測試先行、更必須執行重構、……等等。

而且,我們為什麼需要這些規範?是因為,我們相信這麼做,可以產出符合品質要求的軟體。

因此,這些規格、流程,都應該是產出正確軟體的方法,所以,讓開發團隊使用正確的方法,並且,確保開發團隊都照著這些方法來做,就應該是落在QA的工作範疇裡。

單就以開發流程來看,QA的工作過程中,可能就包括了:制定流程、監控管理開發團隊是否依據流程來進行工作,以及收集開發團隊對於流程的回饋,進而甚至持續改善流程。

因此,QA的工作中,可能就包括了為數不少的審查,例如:審查計畫書、審查規格書、審查設計書、審查程式碼、審查測試案例、……等等,它們施行的目的,就是在於審查開發各階段的各項產出,是否符合所制定的規範。

倘若沒有,代表開發團隊並沒有採用了「正確的方法」,那麼產品的品質自然可能受到影響。

所以說,QA是一個預防性的工作,同時是個事先性質的工作,在產品開發過程中的前、中、後期,都透過不斷的審核過程,來確保開發團隊依循流程、依循方法、依循規範。

正因為QA的工作如此,所以,QA人員自然是獨立於開發團隊之外,因為,他們是輔助開發團隊的角色。

人們對於品質確保意義有不同的理解,因此產生認知上的歧異 QA和QC的工作,雖然最終目的都是希望產品滿足所規範的品質要求,兩者之間,卻有著諸多不同的特性。

或許,從QA字面上的「品質確保」意思,讓許多人因而誤解了QA的性質,進而造成了目前QA、QC混為一談的情況。

另一方面,QC的工作在大多數人的開發生活中都會接觸到,但是QA卻相對少的多,然而,它的作用事實上並不小。

如果能明白它的真正作用,或許,也可以讓一些開發團隊開始重視QA吧。

專欄作者 王建興 目前在一家網路應用軟體公司擔任技術長的工作,專長是物件導向設計以及Internet應用系統的開發。

他過去的研究興趣包括:點對點網路、分散式網路管理、行動式代理人、感知網路。

從企業應用軟體系統,到個人行動裝置上的應用,他都有一些開發的經驗。

並且對於網路創業及網路應用的發展趨勢,持續保持高度的關心。

熱門新聞 全家史上最大規模POS改造,不只砸上億導混合雲,雙模式三大設計一機通吃大小店種和戶外擺攤 2022-09-15 【資安週報】2022年9月12日到9月16日 2022-09-18 Uber疑似被駭,內部多項系統遭取得權限 2022-09-19 營業秘密保護不只是高科技業需要,台積電建議金融、旅遊、餐飲服務業也應及早建立保護制度 2022-09-18 Akamai攔下每秒超過7億封包的DDoS攻擊 2022-09-16 與Nvidia關係決裂?EVGA退出顯示卡市場 2022-09-19 以太坊合併後,GPU挖礦已幾乎無利可圖 2022-09-19 英特爾Pentium、Celeron低階筆電處理器2023年將改名IntelProcessor 2022-09-19 Advertisement 2022iThome鐵人賽 專題報導 iThome2022資安大調查(下) iThome2022資安大調查(上) 【iThome2022CIO大調查(下)】各產業數位轉型加速,IT大步邁向雲原生 分散式RAID躍居主流儲存應用 【iThome2022CIO大調查(中)】企業IT新戰力 更多專題報導



請為這篇文章評分?