一、非功能性需求定義
軟件非功能性需求,是指軟件產品為滿足用戶業務需求而必須具有且除功能需求以外的特性,包括安全性、可靠性、互操作性、健壯性等。(來自百度百科-非功能性需求)
功能需求是【計算、操作數據等活動】,規定產品要做什么事情,來滿足業務,一般用動詞+名詞描述。
非功能需求是【描述產品要做到何種程度】,【為產品增加某些特征的需求】,相當於【修飾產品的形容詞】。
注意:非功能需求有些與某個功能需求關聯,有些適用於某個用例,有些適用於整個產品。
非功能性需求對於不同的行業、環境等有不同的非功能性需求,本文主要結合自己所處環境,通過舉例方式說明講述軟件非功能性需求的內容以及自己的一些理解,請各位不吝批評指正。下文如無特殊說明,非功能需求均指的是軟件方面的非功能性需求。
實際上,在功能性需求不同公司基本都能夠滿足用戶使用的情況下,非功能性需求可以使得公司產品更具有競爭力,例如Iphone、百度等大廠家、大企業,都在非功能性需求上下足了功夫。
二、非功能性需求重要性
非功能性需求往往影響整個系統用戶體驗,在資源、時間有限的情況下,有限完成功能性需求,很多情況下是優先功能性需求,從而忽略了非功能性需求,這樣導致后面軟件穩定性差、擴展困難等問題,比如我查詢一個數據要等1分鍾(性能),系統三天兩頭宕機(穩定性),用戶要增加一個簡單的功能都需要程序員改很多東西,往往加班加點好幾天拿不出來(可擴展性)等等,估計所有的用戶都會砸桌子,這樣往往會得不償失。
另外,非功能性需求需要在設計過程中在軟件開發后期或者軟件交付后調整困難,經常涉及顛覆性改動,改造成本大,增加軟件開發風險。
例如之前遇到過用戶有EOS統一框架的要求,因為沒有采用相應的框架,最后導致整個系統重新開發,浪費大量的人力物力。
三、非功能性需求特點
1、可變性
非功能性需求並不是一成不變的,而是隨着環境、行業等情況有所變化。
2、易忽視
功能性需求是客戶最看重的,也是測試和度量的最主要方向,也是技術設計和開發部門的工作量的考核依據。用戶往往是從能看到的東西來衡量,很多非功能需求都是不可見的,例如安全性、可移植性、可擴展性等等,這些方面往往會被用戶所忽視。
非功能性需求經常被忽略,因為它們不易被發現,發現后不易表達、實現以及測試。
3、衡量困難或不可衡量
非功能性需求管理的幾個難點在於,他們難以度量,很多時候難於計算工作量,從而納入考核體系。雖然理論上可以通過一些用來指定非功能性系統特性的度量的測試可使其驗證更為客觀,但在實際過程中,對需求描述進行量化是很困難的。這種困難性體現為客戶沒有能力把目標需求進行量化的同時,有些目標(如可維護性)本身也沒有度量可供使用。例如功能響應時間、最大並發量、資源利用率等,要進行衡量,需要較深的技術能力;界面等感官多於客觀的內容也很難對其進行衡量。
4、投入成本高大部分的非功能性需求投入資源較高,且成果並非功能需求那樣顯而易見,不容易讓用戶所認可。例如一套軟件預算為80w,其中40w用於實現功能性需求,40w用於優化非功能性需求,一般的用戶很難采納這種方案。
四、非功能性需求內容
軟件非功能性需求包含多個方面,有不同的分類方式,ISO9126-1質量模型標准中,將質量屬性分了(功能性、可靠性、易用性、效率、維護性、可移植性)6大類以及27個小類,這里參考《軟件架構的非功能性需求指標和區域化支持》(張宏升)的分類方式,將非功能性需求的常見指標分為觀感需求(界面需求)、安全性需求、系統的完整性需求、易用性需求與可執行需求、系統的可擴充性與可維護性幾個方面進行描述。
1、觀感需求(界面需求)
主要描述了對產品外觀的期望、情緒和風格。這些需求規定了外觀想要達到的目標,它和詳細的界面設計還是有區別的,體現的是客戶的感覺。界面需求還包括對控件進行規范和對控件的使用范圍進行一個規定等方面的內容。可以考慮借用一個原型來描述。
風格需要和局內其他系統風格保持一致;
地圖模塊工具欄布局以及常用界面布局和現有系統保持一致;
用戶確認以及用戶提示,方式保持統一;
界面布局方便用戶操作;
2、易用性需求與可執行需求
易用性會使產品提高符合用戶習慣的能力以及其對使用的期望。它會對用戶使用產品的生產效率、錯誤率以及用戶對新產品的接收程度產生很大的影響。
可執行需求是指產品可以在給定的時間或者特定的精確度來執行某些任務,或者在一段時間內的極端狀態值。在考慮執行需求時,可以從完成任務的速度、結果的精確度、容量、允許值的范圍、單位時間內完成的任務數、資源的使用效率、兩次故障間的平均無故障時間、連續不停機時間等方面入手。它還應該包括對風險的控制內容。
業務審批時候,常用語設置;
對於錯誤情況應該有較為友好的提示,防止系統崩潰、卡死情況的發生;
增加表單關聯,避免重復輸入等問題;
使用的詞語、標簽含義明確,易於理解;
本地化以及國際化需求;
等待過程增加進度條等提示;
系統響應時間要在可空范圍內(一般1s以內);
瀏覽器打開模式(新的tab頁面還是原有頁面打開);
數據小數位數以及計算精度要求;
數據時效性要求;
長時間執行操作后台任務執行;
運行穩定,發生故障要在指定時間內恢復;
用戶是否要求不間斷運行?是否集群部署,保證可用性;
系統並發量要求;
服務器資源估算,磁盤、cpu、內存的初始需求以及增長量等;
3、安全性需求
安全性指產品消除潛在風險的能力和對風險的承受能力。包含、保密性、可靠性和完整性三個子特性。保密性指的是數據不能被授權用戶以外的任何人訪問的能力。可靠性指的是授權用戶可以不受阻止的訪問數據、與其它軟件的兼容的能力和產品的強壯度。完整性指的是安預期目標完成任務的能力。
一般分為程序安全、系統安全、數據安全。程序安全是指開發的程序是否是安全的,程序上有沒有安全的漏洞,例如Web開發中服務器代碼沒有對輸入的參數進行驗證,從而導致客戶端機器人輕易的獲取數據。系統安全指的是系統整體的安全,例如安全的粒度,未經授權的用戶是否可以輕易的訪問非法的數據等。數據的安全是對數據的保護,數據庫中數據有沒有做審核,用戶之間是否會共享數據等。
用戶體系,是否與已有的門戶系統集成;密碼策略可以參考門戶;
滿足等保測評三級要求,web漏洞、滲透測試漏洞、服務器掃描漏洞;
是否有文件存儲,文件存儲大小,是否需要分離存儲。現場對於大容量文件統一要求采用分布式文件系統存儲。
容災備份以及應急預案;
數據存儲安全,配置文件加密;
數據備份;
網絡環境(業務內網、政務外網、互聯網);
多網絡環境數據交換機制;
文件上傳控制,大小、格式等校驗;
4、系統的完整性需求
指為完成業務需求和系統正常運行本身要求而必須具有的功能,這些功能往往是用戶不能提出的。典型的功能有:聯機幫助、數據管理、用戶管理、軟件發布管理、在線升級,等等。
並不是所有的系統都必須包括以上所有的功能,而是可以根據產品的使用環境和企業的產品發展決策進行挑選。因此,完整的系統應該包括數據備份、恢復、日志管理、垃圾數據清除等基本功能,哪怕這些功能的核心只是一條語句或命令。用戶管理功能是另一項必不可少的功能,它定義哪些用戶可以以什么樣的功能使用系統。好的用戶管理功能不僅可以有效控制用戶對系統的使用,使系統處於一個安全、負載合理的運行狀況,還能提高系統的應用適應性。
升級管理;
幫助手冊;
日志、字典、用戶等管理;
5、系統的可擴充性與可維護性
這里指的是當系統達到瓶頸的時候怎樣在不修改代碼的情況下提供系統的負載能力,擴展一般分為Scale UP和Scale Out。一般情況下會綜合運用UP和OUT。例如,增加服務器的性能來提高系統的處理能力,但是任何計算機都會有一定的瓶頸,當增加服務器性能不能達到提高系統性能的時候,我們需要考慮橫向的擴展服務器,也即Scale Out。在Scale Out時一般需要我們的系統是狀態無關的,即Stateless。
當技術變化或業務變化時,不可避免將帶來系統的改變——不僅要進行設計實現的修改,甚至要進行產品定義的修改。好的軟件設計應在系統構架上考慮能以盡量少的代價適應這種變化。常用的技術方法有面向對象的分析與設計以及設計模式。
考慮軟件生命周期內的擴展;
模塊化、松耦合、可復用;
用戶操作環境要求(操作系統、瀏覽器、分辨率等),例如麒麟操作系統,瀏覽器版本等;
熱更新,是否可以通過集群實現不間斷業務更新;
版本管理;
代碼規范、數據庫規范、服務規范
開發平台:如無特殊要求,流程的采用普元平台,其他的可以采用數據中心框架;
軟件要求:采用相同版本軟件,ArcGIS10.1 Oracle11.2.0.4 PostgreSQL11 Tomcat8 ;
操作系統:Windows Server2008 R2,Centos7.6
網絡要求、寬帶要求、不同網絡數據交換要求;
通過認識以上非功能性需求的常見指標,非功能需求的重要性主要程度要看項目具體情況而定,比如對於一個嵌入式系統軟件運行開銷非常重要,如果是實時系統,響應時間就很關鍵,如果是聯機交易系統可靠性、安全性、性能都很重要。
五、非功能性需求獲取
1、直接提供,用戶直接提出要求(可能性較低)或者可以從招投標文件或者合同中獲取,例如很多項目招投標中都對響應時間、軟硬件平台等有所要求。
2、提問式(對話式)獲取,架構師以軟件系統各方面的質量屬性為索引,系統的啟發用戶,獲取具體需求。例如可以通過獲取系統使用人數、使用頻率、主要使用時間段等來初步判斷並發量以及資源情況。
3、自行分析,提前發現可能存在或者發生的事宜並納入考慮。例如后續是否有遷移的需要,可能需要與那些網絡環境的那些外部系統進行對接等。
對於非功能性的需求,收集起來不是很容易的,如果你問人們是否需要一個東西的時候,他們的回答無疑都會是 “是的” 這就會導致最后划分優先級的時候 每件事情都變得不可或缺,因為客戶回答都是 是的。這時候就需要換一種方法 我們可以提出完成這件事情所需的成本等因素來影響用戶的單一選擇。
六、參考
http://www.woshipm.com/pmd/3391140.html 常見的非功能性需求和應對方式
https://www.yuque.com/eureka/pm/no5b6t 非功能性需求
https://www.jianshu.com/p/423ad251a520?from=groupmessage 性能分析
https://blog.csdn.net/u012760183/article/details/51660393 軟件設計--質量屬性(非功能性需求)