280 likes | 678 Views
軟體工程. 第 6 章 軟體需求 Software Requirements. 學習目標. 瞭解使用者需求和系統需求的概念,並且明白為何應該使用不同方式來表示這些需求 瞭解軟體的功能需求與非功能需求的差異 瞭解在軟體需求文件中如何組織這些需求. 需求工程 Requirement Engineering. 軟體需求包括 描述系統應提供的服務 系統運作的限制 顧客為何需要這個系統 需求 工程 發現、探索、誘導 使用者需求與系統限制 分析 使用者 需求與系統限制 紀錄 使用者 需求與系統限制 檢查 使用者 需求與系統 限制. 使用者需求和系統需求.
E N D
軟體工程 第6章 軟體需求 Software Requirements
學習目標 瞭解使用者需求和系統需求的概念,並且明白為何應該使用不同方式來表示這些需求 瞭解軟體的功能需求與非功能需求的差異 瞭解在軟體需求文件中如何組織這些需求
需求工程Requirement Engineering • 軟體需求包括 • 描述系統應提供的服務 • 系統運作的限制 • 顧客為何需要這個系統 • 需求工程 • 發現、探索、誘導 使用者需求與系統限制 • 分析 使用者需求與系統限制 • 紀錄 使用者需求與系統限制 • 檢查 使用者需求與系統限制
使用者需求和系統需求 • 使用者需求(User Requirement) • 高階的抽象需求 • 以自然語言加上圖表所形成的敘述 • 系統需求(System Requirement) • 詳細定義系統的功能、服務與限制 • 功能規格(Functional Specification)
6.1 功能需求與非功能需求 • 軟體系統的需求通常可以分為功能需求、非功能需求或是領域需求。 • 功能需求(Functional Requirement) • 系統提供的服務、系統對特定輸入的反應,以及系統在特定情況下的行為 • 有時候也會在功能需求中明確描述系統不應該做什麼。 • 非功能需求(Non-Functional Requirement) • 系統提供的服務或功能的限制。包括時間上的限制、開發程序上的限制和標準等。 • 通常套用在整個系統,比較少只套用在個別系統功能或服務 • 領域需求(Domain Requirement) • 來自系統應用領域的需求,以及該領域所反映的特性和限制。 • 可以是功能需求或非功能需求。
功能需求 系統的功能需求主要是描述系統所能提供的功能或服務。 這些需求會依據軟體類型、該軟體的預期使用者,以及組織所採取的一般做法而定。
非功能需求 非功能需求就像它的名稱一樣,凡是沒有直接與系統提供功能有關的其他需求,就稱作非功能需求。 非功能需求很少與個別的系統功能有關,它們通常是與系統外顯性質有關,如系統執行效能、安全性、可用性等。 非功能需求並不一定都跟將要開發的軟體系統有關。 非功能需求是透過使用者的需求產生的,可能是由於預算限制、公司政策,或者與其他軟硬體系統相互操作的需求;也可能是其他外部因素,如安全規則或隱私權等。
非功能需求分類 產品需求(product requirement):這類需求是指定產品的行為。例如系統必須執行多快和它需要多少記憶體這類執行效能需求,設定可接受的故障率的可靠性需求、可移植性需求以及使用方便性需求。 組織需求(organisational requirement):這類需求是衍生自客戶公司和軟體開發公司的組織政策和程序。例如必須使用的程序標準、規定使用的程式語言或設計方法的實作需求,以及指定何時交付產品與說明文件的交付需求。 外部需求(external requirement):這是系統與其開發程序之外的其他因素所產生的所有需求。包括定義如何與其他組織的系統互動的相互操作需求、確保系統合法運作的法律需求,以及其他的道德需求等。此處的道德需求是為了確保此系統可為使用者和一般大眾所接受。
領域需求 領域需求是來自系統應用領域的需求,不是系統使用者的特定需求。它們通常會包含有專業領域的術語,或者參考到專業領域的觀念。 它們自己本身可能是新的功能需求、限制現有的功能需求,或是設定某個運算要如何執行。 領域需求通常會反映出應用程式領域的基本觀念。
6.2 使用者需求 • 系統的使用者需求應該描述功能需求與非功能需求兩者,以便能夠讓沒有專業技術背景的系統使用者也能瞭解這些需求。 • 這些需求應該只需要指定系統的外部行為,儘量避免敘述系統設計特性。因此,不要使用軟體術語、結構化符號表示法或正規化符號表示法來描述需求。 • 不過,若使用自然語言來撰寫需求,可能會產生下列這些問題: • 不夠清楚:使用語言時有時候很難精確、清晰的描述,而且文件常常會變得很冗長,難以閱讀。 • 需求混淆:功能需求、非功能需求、系統目標和設計資訊可能不容易分清楚。 • 需求合併:好幾種不同的需求可能只表達在一個需求中。
需求撰寫的原則 創造一個標準的格式,並確定所有的需求定義都遵照這個格式。標準化比較不容易發生疏忽或遺漏的情形,並且讓需求更容易檢查。我使用的格式是以粗體來顯示一開始的需求敘述,並提供原因說明以及詳細系統需求規格的參考資源。也許還可以考慮記錄是誰提出這個需求(來源),這樣萬一需求必須變更時,才知道要找誰商量。 語言的使用要一致。例如把強制和期望的需求區分清楚。強制的需求通常使用「必須」(shall)來定義,期望的需求則使用「應該」(should)。 利用字型功能(粗體、斜體或彩色)強調需求的重要部分。 儘量避免使用電腦術語。但是無可避免的,有時候使用者需求還是多少會有些技術詞彙。
6.3 系統需求 系統需求是把使用者需求描述得更詳細。軟體工程師可將它當成系統設計的起點,在裡面加上細節,並說明系統應該如何提供相對應的功能。 它也可以當作承包系統實作合約的一部分,因此應該是完整的,而且與整個系統的規格一致。 在撰寫使用者需求時,選擇一種能讓非技術人員瞭解的語言是必要的。不過,你可以使用比較專業的符號表示法(圖6.11)來撰寫系統需求。
使用結構化語言撰寫規格 結構化自然語言是一種撰寫系統需求的方式,是一種形式有限的自然語言,而且所有的需求都是以標準方式來撰寫。 它的優點是保有自然語言的大部分表達能力和易理解性,而又可確保規格有某種程度的一致。
使用標準的表單描述功能需求 欲指定的功能或實體的描述。 系統的輸入和輸入來源的描述。 系統的輸出和輸出去向的描述。 說明會使用到的其他實體(必要條件部分)。 描述所採取的行動。 假如是採用功能性方法,則在前置條件處設定呼叫此功能之前必須為真的條件,並且在後續條件處指定呼叫此功能之後必須為真的條件。 描述可能的副作用(如果有的話)
6.4 介面規格 • 有3種類型的介面可能必須描述定義: • 程序介面:呼叫現有程式或子系統的程序,即可使用它的各項服務。這類介面有時被稱作「應用程式介面」(API)。 • 資料結構:在子系統之間互相傳遞的資料結構。這類敘述使用圖形資料模型(第8章)來表達最適合。必要時還可以從這些描述中自動產生Java或C++語言的程式描述。 • 資料表示法:現有系統的資料表示法,例如位元的順序。這類介面在嵌入式、即時系統中最常見。有些語言能支援這麼細節的規格,但是Java不行。不過也許這應該使用圖形搭配文字標記來表達最適合。
6.5 軟體需求文件 軟體需求文件有時候也稱為軟體需求規格書(software Requirements Specification, SRS)。 它是一份用來說明系統開發者應該實作什麼功能的正式文件,其內容應該包括系統的使用者需求,以及系統需求的詳細規格。 需求文件可能的使用者範圍廣泛,表示該文件不但要能夠讓客戶看懂需求,需求定義的詳細程度對於開發人員和測試人員而言也要夠詳細,並且還要涵蓋系統可能的演進預測