軟體設計 質量屬性 非功能性需求

2021-07-13 11:13:17 字數 2761 閱讀 4869

當你在收集需求的時候 人們會很樂意給你乙個願望清單,寫滿了他們想要軟體系統所完成的事,也有完善的方法以使用者故事、用例、傳統的需求規格書、驗收標準等形式來捕捉這些功能需求 但是那些討厭的非功能性需求呢??

非功能性需求通常被看做是能力,主要跟服務質量有關,也就是乙個軟體的質量屬性,下面大致介紹下 常見的非功能性需求:

1.效能

效能也就是乙個東西有多快 通常指響應時間或延遲

響應時間—>從發出請求道收到響應所用的時間

延遲—>訊息從a到b通過你的系統所用的時間

2.可伸縮性

可伸縮性基本上就是軟體處理更多使用者。請求、資料、訊息的能力 可伸縮性和併發機制密不可分,因此能在相同的時間內處理更多的東西

3.可用性

可用性是軟體對服務請求的可操作性和可見程度 也就是軟體可用的時間 通常用「9」來衡量,比如說 99.9% 表示正常執行時間的百分比,意味著留給計畫維護、公升級和故障處理的時間每天只有那0.1%的時間

4.安全性

安全性涵蓋了軟體執行中的所有地方,和效能一樣,在一定程度上它對你很重要。對於部署到網際網路上的程式,安全性很重要,也是很基礎的東西

5.災難恢復

對於發生故障的時候比如你的硬碟、伺服器、資料庫損壞了,如何還能保證程式正常執行,如果你的軟體系統至關重要,經常會聽到人們討論它在發生災難的時候應該如何做才能保證軟體的持續執行

6.可訪問性

指的是如何讓一些能力有限的人 比如 殘疾人 也能使用你的軟體,因為網路可以提供平等的機會給每乙個人,應該讓每乙個人都能享受到我們軟體的便捷

7.監測

有些組織對於如何監測軟體系統才能確保它們正常執行有特定的需求,這就需要提供監測的功能了。。。

8.管理

提供給使用者可管理的能力、、

9.審計

特別是在涉及到重要資料的時候 比如錢的時候 需要對引起資料變化的原因進行審計,記錄變動產生的物件 原因 時間 等等

10.靈活性

指軟體處理多個任務,以不同方式執行單個任務的靈活性 也就是說可以靈活的更改處理這一任務的方式。。

11.可擴充套件性

指的是否可以更好的擴充套件軟體系統的功能

12.可維護性

後期維護的難易

13.法律法規

有些行業需要遵守一定的法律法規,比如有時候需要根據法律來保留審計日誌等資訊

14.國際化

當乙個軟體需要走向國際的時候,就需要考慮國際化的問題,語言的不同,習慣的不同,比如 有些語言是從右向左寫的。。

15.本地化

指以符合終端使用者的文化習俗的方式來展示貨幣數字日期等資訊

對於上述的這些非功能性需求,不同的軟體系統對於不同的非功能性需求有不同的需要,我們需要根據自己軟體的情況,來確定非功能性需求

對於功能需求 使用者往往會給你乙份清單或者文件,可是對於非功能性需求,通常不是那麼明確的,這時候如果你忽視這些非功能性需求,在軟體系統完成之後,使用者就會感覺你的軟體系統與他預想的系統有所差別,不管是效能上還是功能上,這就導致了尷尬悲劇的局面。。。

因此我們需要在軟體開發前來花費一定的時間來處理確定這些非功能性需求

1.捕捉

在軟體開發過程中,客戶明確給出非功能性需求的情況通常很少,在大量的需求規格書中也很少提到有關效能、伸縮性、安全性的資訊,所以我們就得主動的去捕捉它們。

但是這是一件不太好辦的是 因為如果你去問乙個業務人員,你的系統要達到哪種級別的效能,他通常會回答100% 最快 最好 之類的答案,這是完全沒有意義的回答。。。

2.提煉針對和客戶討論的問題 還有如下例子可以參考 :

如果系統在朝九晚六的正常工作時間內出現故障 會發生什麼?(可用性 判斷系統需要什麼時候可用)

如果系統核心在正常工作之外出現故障,會發生什麼? (同上)

系統平均應該支援多少併發使用者?高峰時段呢?(可伸縮性)

多長的響應時間是可以接受的? (效能)

為了保護系統安全 我們應該做什麼 需要對資料加密碼 需要訪問許可權嗎? (安全性)

對於非功能性的需求,收集起來不是很容易的

記住一點,如果你問人們是否需要乙個東西的時候,他們的回答無疑都會是 「是的」 這就會導致最後劃分優先順序的時候 每件事情都變得不可或缺 因為客戶回答都是 是的。。

這時候就需要換一種方法 我們可以提出完成這件事情所需的成本 影響使用者的單一選擇

比如下面例子 :

架構師:你需要乙個正常執行時間是 100%的系統 構建這個系統 需要大量的冗餘來消除每乙個故障點,我們所有的花費都會加倍 這個成本大約需要100萬美元,或者我們可以給你提供乙個相對簡單點的系統,但是發生故障時 你可以通過手動重啟來消除故障,這個成本大約是10萬美元 ,您看一下 您需要哪一種呢?

擔保人:哦 如果是這樣 我要便宜一點的方案吧

我們可以通過上述的方式 來明確需求 不同的做法有不同的代價,我們也不能做代價與利益不相符的事情不是? 客戶也是一樣 所以 解釋那些代價有助於找到客戶和我們所需要的最適合的方案 。

軟體 非功能性需求

軟體需求分為功能需求和非功能性需求,常常會因為注重功能需求而忽略了非功能性需求,以下是對常見幾類非功能性需求的總結。非功能性需求 1 定義 軟體產品為滿足使用者業務需求而必須具有且除功能需求以外的特性。2 影響 影響著產品是否能夠持續穩定並高效的提供服務。3 常見類別 效能需求 響應時間 吞吐量 資...

功能性需求和非功能性需求

需求定義 需求 requirement 就是系統 更廣義的說法是專案 必須提供的能力和必須遵從的條件。需求分類 1 在一般使用中,需求按照功能性 行為的 和非功能性 其它所有的行為 來分類。功能性需求是說有具體的完成內容的需求。非功能性需求是指軟體產品為滿足使用者業務需求而必須具有且除功能需求以外的...

非功能性需求

所謂非功能性需求,是指軟體產品為滿足使用者業務需求而必須具有且除功能需求以外的特性。軟體產品的非功能性需求包括系統的效能 可靠性 可維護性 可擴充性和對技術和對業務的適應性等。下面對其中的某些指標加以說明。在這裡可以看到非功能性需求涉及的範圍很廣,軟體產品本身不是孤立存在的,還涉及到諸多外在環境的影...