軟件開發(fā)質(zhì)量的雙保險(1)——設(shè)計驗證與軟件測試

1 評論 6193 瀏覽 30 收藏 18 分鐘

編輯導(dǎo)語:軟件測試,是使用人工或自動的手段來運行或測定某個軟件系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實際結(jié)果之間的差別。正確的“軟件設(shè)計”是完成一款好的軟件的前提和基礎(chǔ),而設(shè)計驗證是判斷軟件設(shè)計正確與否的一個好方法。

提到對軟件的質(zhì)量檢查,馬上想到的是“軟件測試”,軟件測試的目的主要是檢查“開發(fā)程序”是否符合“軟件設(shè)計”的要求,程序中是否有bug等,也就是說軟件測試是檢查完成軟件“是否滿足設(shè)計要求”的工作。

完成一款好的軟件首先要做到的是“軟件設(shè)計”是正確的、優(yōu)秀的,如果軟件設(shè)計沒有做到正確和優(yōu)秀,后面程序編寫的質(zhì)量再好也沒有價值,設(shè)計是保證軟件正確和優(yōu)秀的前提和基礎(chǔ)。

那么如何判斷軟件設(shè)計的結(jié)果是正確的、優(yōu)秀的呢?這就要用到“設(shè)計驗證”的方法,設(shè)計驗證包括了“業(yè)務(wù)設(shè)計驗證”和“應(yīng)用設(shè)計驗證”兩個部分。

下面重點談一下關(guān)于設(shè)計驗證的方法(軟件測試已有非常多的資料可以參考,省略)。

一、關(guān)于設(shè)計驗證

這里以設(shè)計企業(yè)信息系統(tǒng)的為例來說明設(shè)計驗證存在的意義。

大多數(shù)具有一定規(guī)模的企業(yè)信息系統(tǒng)都是定制的(因為沒有二家企業(yè)的經(jīng)營管理模式是完全相同的),定制型系統(tǒng)不能像產(chǎn)品型系統(tǒng)一樣可以通過不斷地改進、完善、提升,每個系統(tǒng)都是唯一的存在。

因此,要想做到系統(tǒng)上線后不再進行大規(guī)模地返工、改造,就要盡可能地在投入開發(fā)前就通過驗證以獲得客戶對設(shè)計的認可。在進行詳細說明前先談兩個關(guān)于軟件設(shè)計驗證的問題。

1. 為什么要對設(shè)計結(jié)果進行驗證呢?

做過軟件的人(不論需求、設(shè)計、開發(fā)或是測試),都直接或間接地聽過這樣的事:開發(fā)前與客戶確認了需求、并且客戶也在確認書上簽字了,可系統(tǒng)上線后一試用,客戶經(jīng)常會抱怨說:

1)抱怨舉例1

  • 這個系統(tǒng)不是我想要的、這與事前溝通時想象的不一樣。
  • 為什么操作這么費勁(輸入太繁瑣)、為什么要走這么多步才能完成一次輸入?
  • 不用系統(tǒng)工作就夠忙的了,結(jié)果用了系統(tǒng)更忙了。
  • 輸入的數(shù)據(jù)對我的工作沒有幫助,都是給領(lǐng)導(dǎo)輸入的…等等。

2)抱怨舉例2

  • 數(shù)據(jù)計算有錯誤、頁面切換后xx標題就找不到了…
  • 經(jīng)常死機、系統(tǒng)不穩(wěn)定、輸入xx數(shù)據(jù)后就進入了死循環(huán)…
  • 系統(tǒng)反映太慢了,去廁所都回來了,一個頁面還沒打開…
  • 頁面數(shù)據(jù)鏈接錯了,找不到相關(guān)的數(shù)據(jù)…等等。

這兩組舉例的不同之處在于:【舉例1】是軟件設(shè)計問題,【舉例2】是軟件測試問題。從客戶抱怨的內(nèi)容可以看出設(shè)計驗證和軟件測試的不同,【舉例1】的設(shè)計問題在測試階段已經(jīng)無法改變,通常它們也不是測試工程師的檢查對象。

【舉例2】的問題出在編程和測試的質(zhì)量上,不屬于設(shè)計層面的問題。可以看出要想制作一個好的軟件僅對開發(fā)結(jié)果進行軟件測試是不夠的,還要對設(shè)計階段的成果進行驗證。

上述舉例存在的問題如果沒有很好地解決,往往會造成在客戶企業(yè)中系統(tǒng)推廣受到阻力、難以執(zhí)行,其結(jié)果可能有兩個:

  1. 由于存在的問題太多不能推廣、最終軟件被擱置了;
  2. 在領(lǐng)導(dǎo)的壓力下勉強推廣,但是運行一段時間后就會形成兩張皮:線上用系統(tǒng)做一套數(shù)據(jù)(給領(lǐng)導(dǎo)看)、線下用手工按照傳統(tǒng)方式再做一套數(shù)據(jù)(實際使用),這造成了時間、精力和成本的浪費,造成了用戶對信息系統(tǒng)導(dǎo)入有了不信感。

2. 設(shè)計驗證為什么不能與軟件測試工作一同進行呢?

要回答這個問題首先看一下其它的行業(yè)是如何做的,蓋房子、造機器、制衣服等行業(yè)能否等到完成后再檢查判斷設(shè)計方面是否有缺陷呢?

顯然是不可能的,因為“木已成舟”!因此這些行業(yè)通過圖紙(2D)、實物模型(用木材、塑料、金屬等制作)、或用電腦制成3D模型等,讓相關(guān)人直觀地看到按照設(shè)計制作完成后的產(chǎn)品效果。

他們可以利用圖紙、實物模型或是電腦3D模型進行反復(fù)的推演、驗證,以保證完成的產(chǎn)品達到預(yù)期的效果。

而在產(chǎn)品制造完成后到交付前的檢驗都是圍繞著“制造質(zhì)量”為核心進行的(而非“設(shè)計質(zhì)量”)。由于有多樣的驗證手段,所以建筑業(yè)、制造業(yè)很少出現(xiàn)制作完成后才發(fā)現(xiàn)設(shè)計有錯誤的現(xiàn)象。

建筑物或機器完成后發(fā)現(xiàn)嚴重的設(shè)計問題時要修改,甚至推到重來,軟件也是一樣的,完成的軟件出現(xiàn)了設(shè)計問題后,修改某一處,由于邏輯關(guān)聯(lián)就可能帶來其它地方的變動,造成連鎖變化。

如果是原則性的設(shè)計問題,就有可能需要重新構(gòu)建系統(tǒng),造成重大的損失。因此,設(shè)計完成后立即進行設(shè)計驗證是最有高效的方法,不但可以解決軟件設(shè)計問題、開發(fā)過程管理的可控性,還可以極大地提升客戶對未來完成系統(tǒng)的信任度和滿意度。

二、設(shè)計驗證的內(nèi)容

設(shè)計驗證包括兩個部分:業(yè)務(wù)設(shè)計驗證、應(yīng)用設(shè)計驗證,它們目的是是檢查“設(shè)計成果”是否滿足“客戶需求”。

1. 業(yè)務(wù)設(shè)計驗證(以下簡稱:業(yè)務(wù)驗證)

編寫一套業(yè)務(wù)數(shù)據(jù),這套數(shù)據(jù)可以模擬某個業(yè)務(wù)處理場景的全過程,用這套數(shù)據(jù)將系統(tǒng)中要驗證的對象串聯(lián)起來,用以驗證業(yè)務(wù)設(shè)計的整體架構(gòu)、業(yè)務(wù)流程、界面字段、數(shù)據(jù)關(guān)系、計算公式、管控規(guī)則等內(nèi)容是否正確,確保系統(tǒng)中的業(yè)務(wù)邏輯、數(shù)據(jù)邏輯是正確的。

  • 業(yè)務(wù)驗證保證了 “系統(tǒng)可用” 的最低要求。

2. 應(yīng)用設(shè)計驗證(以下簡稱:應(yīng)用驗證)

編寫一套系統(tǒng)運行的腳本,這個腳本可以模擬客戶的某個角色(如經(jīng)理、會計、庫管員等)、或某個流程(采購、報銷、物流等)操作的運行全過程,用以驗證操作過程的每個細節(jié)是否合理、高效,讓用戶獲得最佳的體驗,包括:界面布局、操作效率、設(shè)計與角色工作的匹配度、智能化程度等。

  • 應(yīng)用驗證保證了 “系統(tǒng)好用” 的最高要求。

為了做對比,這里舉幾個典型的軟件測試內(nèi)容:頁面顯示、操作功能(按鈕:增加、刪除、修改、保存、查詢…)、權(quán)限(身份驗證、操作權(quán)限)、流程流轉(zhuǎn)、報表打印、兼容性、可擴展性、穩(wěn)定性、運行速度等??梢钥闯鲕浖y試與設(shè)計驗證的關(guān)注點是不一樣的。

開發(fā)完成后的測試,不但要進行有測試用例,而且還應(yīng)該測試業(yè)務(wù)用例和應(yīng)用用例的內(nèi)容,只有如此,才能交給客戶一份滿意的答卷。

注1:可能有人會說,我們使用“原型法”做的需求調(diào)研,還需要進行設(shè)計驗證碼?

這個說法是不對的,因為需求調(diào)研階段使用的原型法僅僅是確認了界面的基本內(nèi)容、粗粒度的業(yè)務(wù)邏輯,而說到設(shè)計驗證,則必須是要有嚴格的目標、方法、標準和規(guī)范的,否則是不能得出設(shè)計結(jié)果正確、優(yōu)秀的結(jié)論的。

注2:應(yīng)用設(shè)計等同于UI和美工設(shè)計嗎?

UI、美工等工作都是構(gòu)成應(yīng)用設(shè)計的部分,但它們是輔助內(nèi)容,不是核心內(nèi)容。

三、設(shè)計驗證與軟件測試的關(guān)系

三個階段的檢查使用了三種用例形式,從前到后繼承疊加、最后驗證出綜合效果,這三者是包含關(guān)系,測試用例 > 應(yīng)用用例 > 業(yè)務(wù)用例。三者各自包含的內(nèi)容、三者之間的繼承關(guān)系如圖1所示:

軟件質(zhì)量的雙保險 — 1.設(shè)計驗證與軟件測試

圖1:三種用例之間的關(guān)系

1. 三個檢查的作用

1)業(yè)務(wù)驗證(對業(yè)務(wù)設(shè)計成果的推演)

以需求為依據(jù),對業(yè)務(wù)的梳理、優(yōu)化內(nèi)容進行推演,重點在于對“業(yè)務(wù)邏輯、數(shù)據(jù)邏輯”的確認,是“內(nèi)涵”。

2) 應(yīng)用驗證(對應(yīng)用設(shè)計成果的推演)

以業(yè)務(wù)用例的數(shù)據(jù)作為主線,加入系統(tǒng)功能(流程機制、高保真界面、功能按鈕等),進行用戶操作過程的合理性、友好性推演,重點在于“信息化環(huán)境”的確認,是“外表”。

3)軟件測試(對完成系統(tǒng)的測試)

軟件測試除去按照自有的測試用例(比如:功能、bug、性能、安全、集成等)進行檢查外,還要再加入前述兩個驗證用例的內(nèi)容,以測試完成的系統(tǒng)是否可以準確地演出這個“劇本”。

2. 三個檢查的區(qū)別

1)業(yè)務(wù)驗證與應(yīng)用驗證的區(qū)別

這兩者的區(qū)別從設(shè)計的目的上就可以看出來:

  • 業(yè)務(wù)設(shè)計決定了系統(tǒng)的主體、內(nèi)涵,業(yè)務(wù)正確保證了系統(tǒng)核心價值的存在;
  • 應(yīng)用設(shè)計決定了系統(tǒng)易操作性、功能的智能化,用信息化手段提升客戶的工作效率等。

用戶對業(yè)務(wù)價值的感受是通過操作界面來獲得的,因此,應(yīng)用設(shè)計的不好用,用戶就感受不到業(yè)務(wù)設(shè)計的價值了(因為他不想用)。

2)設(shè)計驗證與軟件測試的區(qū)別

這兩者的區(qū)別從系統(tǒng)完成后的效果上就可以看出來:

  • 設(shè)計驗證(業(yè)務(wù)&應(yīng)用):要證明的是“設(shè)計是按照需求進行的,設(shè)計是正確的”,但是無法保證后續(xù)軟件開發(fā)是否會出錯。設(shè)計做好了,會得到客戶的贊揚,提升滿意度,因為軟件的客戶價值絕大部分來源于設(shè)計。
  • 軟件測試:要證明的是“軟件是按照設(shè)計編寫的,程序沒有錯”,但不保證軟件設(shè)計是否是正確的。

軟件測試的結(jié)果再好(假定100分),只是證明了軟件是按照設(shè)計開發(fā)的,客戶只會在設(shè)計正確的前提下給予表揚,因為客戶買的是業(yè)務(wù)設(shè)計和應(yīng)用設(shè)計的價值,而軟件不出bug、性能良好、安全等不是購買的目的(是應(yīng)該的!)。相反,如果測試結(jié)果不好,所有的客戶反饋都是差的,因為無法使用,業(yè)務(wù)和應(yīng)用價值再高也無法證明。

3. 軟件合格的標準

軟件開發(fā)完成在交給客戶前,到底要測試到什么程度呢?

關(guān)于這個的“度”的問題有不同的說法,其中強調(diào)“軟件不同于其它行業(yè)…”的說法也不在少數(shù),但是有一個原則不論什么行業(yè)都是要遵守的,那就是交到客戶手中的產(chǎn)品原則上是不能有質(zhì)量問題的,不論這個質(zhì)量問題是設(shè)計造成的(業(yè)務(wù)、應(yīng)用和技術(shù))還是編寫程序造成的。

“沒有bug了,所以測試完成了”的說法是不正確的,測試完成的標準應(yīng)該是:測試結(jié)果證明產(chǎn)品的開發(fā)完全符合設(shè)計要求。

按照這個標準做測試,不但要有測試用例,還必須有業(yè)務(wù)用例和應(yīng)用用例,一定要記?。嚎蛻舻臐M意度是針對整個軟件的設(shè)計、開發(fā)和服務(wù)而言的,沒有“bug”不是軟件開發(fā)合同的內(nèi)容。

另外,“測試結(jié)果”是不能直接用于驗證“客戶需求”的,而只能用于驗證“設(shè)計結(jié)果”,因為客戶需求都要經(jīng)過多重的設(shè)計(業(yè)務(wù)、應(yīng)用、技術(shù))之后才能確定下來交付開發(fā)。

因此,測試開發(fā)是對軟件設(shè)計要求負責的,而不是對需求調(diào)研結(jié)果負責的。三個檢查的作用不同,效果不同,缺一不可。通常前兩個檢查沒有被重視(或做到不夠),所以完成的軟件即使是沒有bug也沒有獲得客戶的好評其原因就在于此。

四、由誰來做設(shè)計驗證

軟件測試用例通常是由測試工程師編寫的。那么設(shè)計驗證的用例由誰來做呢?回答是:需求工程師。當然前提條件是這名需求工程師參與了需求調(diào)研和軟件設(shè)計的工作。

設(shè)計的驗證用例,與軟件的測試用例視角不同、關(guān)注點不同、需要的知識和經(jīng)驗不同、編寫的方法也不同,更重要的是設(shè)計驗證用例只有參與了調(diào)研和設(shè)計工作的人才能寫出來。

從上述的說明中可以看出,測試工程師是難以做出這樣的設(shè)計用例的,而且在時間上也不允許,相反,如果有了需求工程師編寫的設(shè)計用例,也會對測試工程師編寫測試用例提供很大的幫助。

設(shè)計驗證小結(jié):

對于一名需求工程師來說,能夠?qū)懗鲈O(shè)計用例是一個比較高的要求,如果你做了需求收集、分析、業(yè)務(wù)和應(yīng)用設(shè)計,但是沒有做設(shè)計驗證,那你就不敢說自己設(shè)計的正確、優(yōu)秀,很可能設(shè)計是完全咬合不到一起的你也不知道,更不敢保證開發(fā)完成的軟件是可以讓客戶滿意的。

所以,作為一名合格的需求工程師,必須要掌握所設(shè)計驗證的方法,通過設(shè)計驗證,可以讓自己對設(shè)計的產(chǎn)品有一個整體的認知、查出問題,同時也讓客戶、程序員和測試工程師等相關(guān)人對要開發(fā)和完成的軟件有一個完整的認知。

能夠獨立地完成咨詢、調(diào)研、設(shè)計和驗證4個環(huán)節(jié)的需求工程師,才可以稱之為一名成熟的、合格的需求工程師。

以下兩篇本文,重點對業(yè)務(wù)設(shè)計驗證和應(yīng)用設(shè)計驗證的方法進行說明。

 

本文由 @李鴻君 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自?Unsplash,基于 CC0 協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 感謝分享,受教了

    來自陜西 回復(fù)