需求驗證主要是分析需求規(guī)格說明的正確性和可行性,檢驗需求是否反映客戶的意愿,從而確定能否轉(zhuǎn)入概要設(shè)計階段;而概要設(shè)計驗證主要是檢查《概要設(shè)計規(guī)格說明》是否滿足《軟件需求規(guī)格說明》的各項要求,設(shè)計是否合理,是否可以據(jù)此產(chǎn)生《詳細設(shè)計規(guī)格說明》,并確定能否轉(zhuǎn)入詳細設(shè)計階段。
軟件需求驗證
如果在構(gòu)造設(shè)計開始之前,通過驗證基于需求的測試計劃和原型測試來驗證需求的正確性及其質(zhì)量,就能大大減少項目后期的返工現(xiàn)象。而如果在后續(xù)的開發(fā)或當(dāng)系統(tǒng)投入使用時才發(fā)現(xiàn)需求文檔中的錯誤,就會導(dǎo)致更大代價的返工,因為需求的變化總會帶來系統(tǒng)設(shè)計和實現(xiàn)的改變,從而使系統(tǒng)必須重新測試,由需求問題對系統(tǒng)做變更的成本比修改設(shè)計或代碼錯誤的成本要大得多。需求的驗證過程主要是檢查需求規(guī)格說明,這個過程中要對需求文檔中定義的需求執(zhí)行多種類型的驗證,主要包括:
1. 有效性驗證
有效性驗證是指開發(fā)人員和用戶應(yīng)該對需求進行認真地復(fù)查,以確保將用戶的需要充分、正確地表達出來,并且對于提出的每項需求,必須保證它確實能夠滿足用戶的需要、解決用戶的問題。
2. 一致性驗證
一致性是指需求之間以及需求和相應(yīng)的規(guī)范或標準之間不應(yīng)該出現(xiàn)沖突,對同一個系統(tǒng)功能不應(yīng)出現(xiàn)不同的描述或矛盾的約束。一致性驗證主要包括四方面內(nèi)容:一是驗證各個需求之間是否一致,是否有沖突或矛盾;二是驗證《軟件需求規(guī)格說明》中規(guī)定的模型、算法和數(shù)值方法相互是否兼容;三是驗證《軟件需求規(guī)格說明》中所采用的技術(shù)和方法是否與用戶要求的技術(shù)及方法保持一致;四是驗證需求的軟硬件接口是否具有兼容性。
3. 完備性驗證
完備性驗證是指檢查需求文檔是否包括用戶需要的所有功能和約束,滿足用戶的所有要求。一個完備的需求文檔應(yīng)該對所有可能的狀態(tài)、狀態(tài)變化、轉(zhuǎn)入、約束都進行了完整、準確的描述。主要包括以下六個方面的內(nèi)容:一是驗證《軟件需求規(guī)格說明》是否包括了所有需求,并且是否按優(yōu)先級作了排序;二是驗證《軟件需求規(guī)格說明》是否明確規(guī)定了哪些是絕對不能發(fā)生的故障或設(shè)計缺陷;三是驗證《軟件需求規(guī)格說明》中出現(xiàn)所有的需求項是否都被列入需求描述表,在這張表中各需求項是否都被編號并能支持索引或回溯;四是驗證《軟件需求規(guī)格說明》中出現(xiàn)的各種圖表、表格是否都有標號,各類專業(yè)術(shù)語及測量單位是否都給出了相應(yīng)的定義或引用的標準化文件;五是驗證軟件需求規(guī)格說明中時間關(guān)鍵性功能是否都被清晰地標識出來了,對時間的具體要求是否作了規(guī)定。六是驗證功能需求部分是否包括了對所有異常的響應(yīng)(尤其是對各種有效的、無效的輸入值的響應(yīng)規(guī)定),對各種操作模式(如:正常、非正常、有干擾等)下的環(huán)境條件、系統(tǒng)響應(yīng)時間等是否都作了相應(yīng)的規(guī)定。
4. 可行性驗證
可行性驗證是指根據(jù)現(xiàn)有的軟硬件技術(shù)水平和系統(tǒng)的開發(fā)預(yù)算、進度安排,對需求的可行性進行驗證,以保證所有的需求都能實現(xiàn)。
可行性驗證主要包括以下三方面的內(nèi)容:一是驗證《軟件需求規(guī)格說明》中定義的需求對軟件的設(shè)計、實現(xiàn)、運行和維護而言是否是可行的;二是驗證《軟件需求規(guī)格說明》中規(guī)定的模型、算法和數(shù)值方法對于要解決的問題而言是否合適,他們是否能夠在給定的約束條件下實現(xiàn);三是驗證約束性需求中所規(guī)定的質(zhì)量屬性是個別地還是成組地可以達到。
5. 可驗證性驗證
可驗證性是指為了減少客戶和開發(fā)商之間可能產(chǎn)生的爭議,系統(tǒng)需求應(yīng)該能夠通過一系列檢查方法來進行驗證,以確定交付的系統(tǒng)是否滿足需要。
可驗證性驗證主要包括以下三個方面的內(nèi)容:一是驗證各個需求項是否能夠通過測試軟件產(chǎn)品和軟件開發(fā)文檔來證明這些需求項已經(jīng)被實現(xiàn);二是驗證各個需求項描述是否清楚、最好能量化。避免使用模糊不清的詞匯;三是驗證《軟件需求規(guī)格說明》中每一個需求是否都對應(yīng)于一個驗證方法。
6.可跟蹤性驗證
可跟蹤性是指需求的出處應(yīng)該被清晰地記錄,每一項功能都能夠追溯到要求它的需求,每一項需求都能追溯到用戶的要求??筛櫺则炞C主要包括以下三方面的內(nèi)容:一是驗證每個需求項是否都具有唯一性并且被唯一標識,以便被后續(xù)開發(fā)文檔引用;二是驗證在需求項定義描述中是否都明確地注明了該項需求源于上一階段中哪個文檔,包含該文檔中哪些有關(guān)需求和設(shè)計約束;三是驗證是否可以從上一階段的文檔中找到需求定義中的相應(yīng)內(nèi)容。
7. 可調(diào)節(jié)性驗證
可調(diào)節(jié)性是指需求的變更不會對其他系統(tǒng)帶來大規(guī)模的影響??烧{(diào)節(jié)性驗證主要包括以下三方面的內(nèi)容:一是驗證需求項是否被組織成可以允許修改的結(jié)構(gòu),(例如采用列表形式);二是驗證每個特有的需求是否被規(guī)定了多余一次,有沒有如何冗余的說明?(可以考慮采用交叉引用表避免重復(fù));三是驗證是否有一套規(guī)則用來在余下的軟件生命周期里對《軟件需求規(guī)格說明》進行維護,(這很重要,原則上講,SRS不是可以隨便修改的)。
8. 其他方面的驗證
主要包括以下幾個方面內(nèi)容:一是驗證《軟件需求規(guī)格說明》編寫格式是否符合相應(yīng)的規(guī)范或標準(如GB 8567-88、或GJB1091-91);二是驗證需求中提出的算法和方法方面的需求項是否有科技文獻或其他文獻作為基礎(chǔ);三是驗證《軟件需求規(guī)格說明》中是否出現(xiàn)“待定”之類的不確定性詞匯,如果出現(xiàn),是否注明是何種原因?qū)е碌牟淮_定性。
對于一個中型軟件項目而言,以上驗證項絕大多數(shù)是必須的,各測試團隊可以根據(jù)項目的實際工程環(huán)境對此做裁減和細化。需求驗證的執(zhí)行應(yīng)該遵循“策劃→執(zhí)行→檢查→評估”的順序完成。驗證采取的形式可以是走查、審查、會議評審以及用戶正式、非正式會議。不管采用哪種形式,上述驗證的內(nèi)容應(yīng)該盡量覆蓋到。
概要設(shè)計是軟件開發(fā)過程中決定軟件產(chǎn)品質(zhì)量的關(guān)鍵階段。這個階段設(shè)計人員需要站在全局的高度,在比較抽象的層次上分析、對比多種可能的系統(tǒng)實現(xiàn)方案和多種可能的軟件體系結(jié)構(gòu),從中選出最佳的方案和最合理的軟件結(jié)構(gòu)。概要設(shè)計驗證在這個階段是非常必要的,通過驗證可以確?!盾浖O(shè)計說明書》中所描述的軟件概要設(shè)計在總體結(jié)構(gòu)、外部接口、主要部件功能分配、全局數(shù)據(jù)結(jié)構(gòu)以及各主要部件之間的接口等方面的合適性、完整性,從而以保證用較低的成本開發(fā)出較高質(zhì)量的軟件系統(tǒng)。
1.1概要設(shè)計驗證的主要內(nèi)容
(1)設(shè)計系統(tǒng)在項目軟件中所處的層次結(jié)構(gòu)描述是否準確以及在本設(shè)計系統(tǒng)中的指導(dǎo)性作用。
重點驗證以下兩個方面:
一是驗證《概要設(shè)計規(guī)格說明》中對所要設(shè)計的系統(tǒng)在整個項目軟件(或在大系統(tǒng)中)中所處的地位、作用,及其與同級、上級系統(tǒng)之間的關(guān)系描述是否準確;二是《概要設(shè)計規(guī)格說明》是否可以作為《詳細設(shè)計規(guī)格說明》撰寫的基礎(chǔ)性文檔是否對《詳細設(shè)計規(guī)格說明》具有指導(dǎo)性作用。
(2) 驗證系統(tǒng)描述是否具有可追溯性
重點驗證以下四個方面
一是驗證《概要設(shè)計規(guī)格說明》的每一部分的設(shè)計是否都可以追溯到《軟件需求說明書》、《接口設(shè)計說明書》或其他開發(fā)文檔;二是驗證非功能需求項(如:接口需求、操作需求、資源需求、可靠性需求、安全性需求等)是否已經(jīng)分配到《概要設(shè)計規(guī)格說明》中。三是驗證對《軟件需求說明書》中不完整、易變動或潛在的需求項是否都進行了相應(yīng)的設(shè)計分析,對各種設(shè)計限制是否做了全面的考慮;四是驗證《概要設(shè)計說明書》中模塊的規(guī)格及大小劃分是否和《軟件需求說明書》中的功能需求項以及約束性需求項之間保持一致。
(3)驗證總體設(shè)計是否合理
重點驗證以下五個方面:
一是檢查《概要設(shè)計規(guī)格說明》的設(shè)計目標描述是否明確清晰;二是檢查《概要設(shè)計規(guī)格說明》是否闡述了設(shè)計所依賴的運行環(huán)境,并核對是否和《軟件需求規(guī)格說明》中規(guī)定的運行環(huán)境相一致;三是檢查《概要設(shè)計規(guī)格說明》中的業(yè)務(wù)邏輯是否準確并且完備;四是《概要設(shè)計規(guī)格說明》中是否對不同的設(shè)計方案作了介紹并比較,是否有選擇方案的結(jié)論,是否清楚闡述了方案選擇的理由。五是檢查
《概要設(shè)計規(guī)格說明》是否合理地劃分了模塊并對各模塊之間的關(guān)系作了清晰的闡述。六是檢查《概要設(shè)計規(guī)格說明》中給出的系統(tǒng)設(shè)計結(jié)構(gòu)和數(shù)據(jù)處理流程是否能滿足軟件需求規(guī)格說明中所要求的全部功能性需求。
(4)接口設(shè)計是否合理
重點驗證以下幾個方面:
一是驗證《概要設(shè)計規(guī)格說明》中用戶接口設(shè)計是否正確全面,是否有單獨的用戶界面設(shè)計文檔;二是驗證《概要設(shè)計規(guī)格說明》是否包含有硬件接口設(shè)計,硬件接口設(shè)計是否正確且全面;三是驗證概要設(shè)計規(guī)格說明是否包含有軟件接口設(shè)計,軟件接口設(shè)計是否正確且全面;四是驗證《概要設(shè)計規(guī)格說明》是否包含有通信接口設(shè)計,通信接口設(shè)計是否正確且全面;五是驗證《概要設(shè)計規(guī)格說明》是否描述了各類接口的功能、各接口與其他接口或模塊之間的關(guān)系已經(jīng)接口的設(shè)計是否具有可測試性。
(5) 驗證模塊及模塊內(nèi)部分的設(shè)計是否合理
重點驗證以下四個方面:
一是驗證模塊的劃分是合適(如:代碼規(guī)模是否適中?是否便于協(xié)同開發(fā)?)、模塊與模塊之間是否具有一定的獨立性(如:模塊與模塊之間應(yīng)做到低耦合,模塊設(shè)計應(yīng)做到高內(nèi)聚)。二是驗證每個模塊的功能和接口定義是否正確(如:數(shù)據(jù)的輸入輸出、模塊間的通信等等)。三是驗證數(shù)據(jù)結(jié)構(gòu)的定義(比如面向?qū)ο缶幊讨械臄?shù)據(jù)封裝是否適當(dāng)?繼承的使用是否合適?各方法中的的參數(shù)定義及使用是否適當(dāng)?各數(shù)據(jù)項的數(shù)據(jù)類型是否適當(dāng)?數(shù)據(jù)項的初始值設(shè)定和值域范圍是否有考慮?等等)是否正確。四是驗證模塊內(nèi)的數(shù)據(jù)流和控制流的定義(如:串行操作和并行操作、同步和異步等)是否正確。
(6) 驗證概要設(shè)計是否包含相關(guān)屬性設(shè)計
重點驗證以下幾個方面:
一是驗證《概要設(shè)計規(guī)格說明》中是否有可靠性設(shè)計,設(shè)計是否合理、有效;二是驗證概要設(shè)計規(guī)格說明中是否有安全性設(shè)計,設(shè)計是否合理、有效;三是驗證《概要設(shè)計規(guī)格說明》中是否有可維護性設(shè)計,設(shè)計是否合理、有效;四是驗證《概要設(shè)計規(guī)格說明》中是否有可移植性設(shè)計,設(shè)計是否合理、有效。五是驗證《概要設(shè)計規(guī)格說明中》是否有可測試性設(shè)計,設(shè)計是否合理、有效。六是驗證是否對上述屬性設(shè)計進行了性能分析,是否有論證過程的性能數(shù)據(jù)。
(7) 驗證計算機資源的利用和余量設(shè)計是否合理
重點驗證《概要設(shè)計規(guī)格說明》是否對余量設(shè)計做了相應(yīng)考慮。包括:CPU的處理能力要求是否留有余量;內(nèi)存的容量要求是否留有余量;外存儲設(shè)備的容量要求是否留有余量;算法的效率是否可接受;安全關(guān)鍵軟件部件發(fā)生故障時是否有快速恢復(fù)能力等等。
以上我們討論了概要設(shè)計驗證的一般性內(nèi)容,各測試團隊可以根據(jù)待測項目的規(guī)模進行裁減和細化。概要設(shè)計在執(zhí)行中采取的形式以評審會形式為多,也可以采用非正式審查或內(nèi)部專題會議的形式進行。由于概要設(shè)計的驗證在很大程度上與軟件需求規(guī)格說明的內(nèi)容有關(guān),建議聘請軟件需求規(guī)格說明的起草人參與到概要設(shè)計的驗證活動中來。
|