複製鏈接
請複製以下鏈接發送給好友

非功能性需求

鎖定
非功能性需求,是指軟件產品為滿足用户業務需求而必須具有且除功能需求以外的特性,包括安全性、可靠性、互操作性、健壯性等。 [1] 
中文名
非功能性需求
外文名
non-functional requirement
定    義
不直接與系統的具體功能相關的一類需求
內    容
系統響應時間等
類    型
產品需求、機構需求、外部需求
所屬領域
軟件工程

非功能性需求簡介

需求分析時,功能性需求是人們普遍關注的,但也不能忽視非功能性需求的分析,因為它所涉及的方面比較廣泛。正因為如此也就往往被人們所忽視。 [2] 
非功能性需求也可稱之為軟件開發的“約束”,這主要是因為從最簡單的到最複雜的軟件系統,都有反映軟件系統質量和特性的額外要求,它從各個角度對所考慮的可能採取的解決方案起約束和限制作用。軟件的非功能性需求主要是軟件系統的性能、可靠性、運行限制等多個方面。 [2] 
對於不同的軟件系統,其非功能性需求不可能完全相同。具體的內容要根據需要和可能由軟件和工作環境等具體情況來確定。在進行非功能性需求分析時,重要的是將精力放在那些至關重要的因素上。 [2] 
非功能性需求是隨着軟件系統的規模成長和複雜性增加這兩個因素才逐漸成為軟件工程師們的新着眼點和關注點的,早期的時候,甲方處於自身對軟件技術的瞭解和自身對系統文件維護的方便性考慮等,對系統有了諸如:開發平台、技術流派、關鍵實現等等方面的要求,這被稱之為“設計約束”。從甲乙雙方合同的角度,設計約束也是一種需求——一種“非功能”性的需求,後來,軟件的質量問題越來越突出,描述軟件質量目標的要求也成為非功能性需求的一部分。於是,目前業界關於軟件的非功能需求,一般就包括:質量屬性要求和約束性要求。 [3] 

非功能性需求主要內容

作為功能需求的補充,非功能需求是指那些不直接與系統的具體功能相關的一類需求,但它們與系統的總體特性相關,如可靠性、響應時間、存儲空間等。非功能需求定義了對系統提供的服務或功能的約束,包括時間約束、空間約束、開發過程約束及應遵循的標準等。它源於用户的限制,包括預算的約束、機構政策、與其他軟硬件系統間的互操作,以及如安全規章、隱私權保護的立法等外部因素。 [4] 
非功能需求不僅與軟件系統本身有關,還與系統的開發過程有關。與開發過程相關的需求包括:對在軟件過程中必須要使用的質量標準的描述、設計中必須使用的CASE工具集的描述以及軟件過程所必須遵守的原則等。 [4] 
按照非功能需求的起源,可將其分為3大類:產品需求、機構需求、外部需求。進而還可以細分。產品需求對產品的行為進行描述;機構需求描述用户與開發人員所在機構的政策和規定;外部需求範圍比較廣,包括系統的所有外部因素和開發過程。 [4] 

非功能性需求指標

非功能需求其主要指標為: [3] 

非功能性需求觀感需求(界面需求)

主要描述了對產品外觀的期望、情緒和風格。這些需求規定了外觀想要達到的目標,它和詳細的界面設計還是有區別的,體現的是客户的感覺。界面需求還包括對控件進行規範和對控件的使用範圍進行一個規定等方面的內容。可以考慮借用一個原型來描述。 [3] 

非功能性需求易用性需求與可執行需求

易用性會使產品提高符合用户習慣的能力以及其對使用的期望。它會對用户使用產品的生產效率、錯誤率以及用户對新產品的接收程度產生很大的影響。 [3] 
可執行需求是指產品可以在給定的時間或者特定的精確度來執行某些任務,或者在一段時間內的極端狀態值。在考慮執行需求時,可以從完成任務的速度、結果的精確度、容量、允許值的範圍、單位時間內完成的任務數、資源的使用效率、兩次故障間的平均無故障時間、連續不停機時間等方面入手。它還應該包括對風險的控制內容。 [3] 

非功能性需求安全性需求

安全性指產品消除潛在風險的能力和對風險的承受能力。包含、保密性、可靠性和完整性三個子特性。保密性指的是數據不能被授權用户以外的任何人訪問的能力。可靠性指的是授權用户可以不受阻止的訪問數據、與其它軟件的兼容的能力和產品的強壯度。完整性指的是安預期目標完成任務的能力。 [3] 
一般分為程序安全、系統安全、數據安全。程序安全是指開發的程序是否是安全的,程序上有沒有安全的漏洞,例如Web開發中服務器代碼沒有對輸入的參數進行驗證,從而導致客户端機器人輕易的獲取數據。系統安全指的是系統整體的安全,例如安全的粒度,未經授權的用户是否可以輕易的訪問非法的數據等。數據的安全是對數據的保護,數據庫中數據有沒有做審核,用户之間是否會共享數據等。 [3] 

非功能性需求系統的完整性需求

指為完成業務需求和系統正常運行本身要求而必須具有的功能,這些功能往往是用户不能提出的。典型的功能有:聯機幫助、數據管理、用户管理、軟件發佈管理、在線升級,等等。 [3] 
並不是所有的系統都必須包括以上所有的功能,而是可以根據產品的使用環境和企業的產品發展決策進行挑選。因此,完整的系統應該包括數據備份、恢復、日誌管理、垃圾數據清除等基本功能,哪怕這些功能的核心只是一條語句或命令。用户管理功能是另一項必不可少的功能,它定義哪些用户可以以什麼樣的功能使用系統。好的用户管理功能不僅可以有效控制用户對系統的使用,使系統處於一個安全、負載合理的運行狀況,還能提高系統的應用適應性。 [3] 

非功能性需求系統的可擴充性與可維護性

這裏指的是當系統達到瓶頸的時候怎樣在不修改代碼的情況下提供系統的負載能力,擴展一般分為Scale UP和Scale Out。一般情況下會綜合運用UP和OUT。例如,增加服務器的性能來提高系統的處理能力,但是任何計算機都會有一定的瓶頸,當增加服務器性能不能達到提高系統性能的時候,我們需要考慮橫向的擴展服務器,也即Scale Out。在Scale Out時一般需要我們的系統是狀態無關的,即Stateless。 [3] 
當技術變化或業務變化時,不可避免將帶來系統的改變——不僅要進行設計實現的修改,甚至要進行產品定義的修改。好的軟件設計應在系統構架上考慮能以儘量少的代價適應這種變化。常用的技術方法有面向對象的分析與設計以及設計模式。 [3] 
通過認識以上非功能性需求的常見指標,非功能需求的重要性主要程度要看項目具體情況而定,比如對於一個嵌入式系統軟件運行開銷非常重要,如果是實時系統,響應時間就很關鍵,如果是聯機交易系統可靠性、安全性、性能都很重要。 [3] 

非功能性需求非功能需求檢驗

非功能需求檢驗起來非常困難。這此非功能需求可能來自於系統的易用性、可恢復性和對用户輸入的快速反映性能的要求,同時需求描述的不詳細和不確定也會給開發者帶來許多困難。雖然理論上非功能需求能夠量化,通過一些可用來指定非功能性系統特性的度量的測試可使其驗證更為客觀,但在實際過程中,對需求描述進行量化是很困難的。這種困難性體現為客户沒有能力把目標需求進行量化的同時,有些目標(如可維護性)本身也沒有度量可供使用。因此,在需求文檔中的目標陳述中,開發者應該明確用户對需求的優先順序,同時也要讓用户知道一些目標的模糊性和無法客觀驗證性。 [4] 
參考資料