軟體產業存在的一個普遍問題就是缺乏統一定義的名詞術語來描述我們的工作。客戶所定義的"需求"對開發人員似乎是一個較高層次的產品概念,而開發人員所說的"需求"對使用者來說又像是詳細設計了。實際上,軟體需求包含著多個層次,不同層次的需求從不同角度與不同程度反映著細節問題。
IEEE軟體工程標準詞彙表(1997年)將需求定義為:
(1)使用者解決問題或達到目標所需的條件或能力。
(2)系統或系統組件要滿足合約、標準、規範或其它正式規定文檔所需具有的條件或能力。
(3)一種反映上面(1)或(2)所描述的條件或能力的文檔說明。
IEEE的定義包括從使用者角度(系統的外部行為),以及從開發人員角度(一些內部特性)來闡述需求,其關鍵的問題是一定要編寫需求文檔。
另外,以下列出其他幾種關於"需求"的定義:
*需求是使用者所需要的並能觸發一個程式或系統開發工作的說明;
*需求是從系統外部能發現系統所具有的滿足於使用者的特點、功能及屬性等;
*需求是指明必須實現什麼的規格說明。它描述了系統的行為、特性或屬性,是在開發過程中對系統的約束。
從以上的定義中,我們依然無法得到有關"需求"的清晰概念,真正的"需求"實際上存在人們的腦海中,任何文檔形式的需求(例如:需求規格說明)僅是一個模型或一種敘述。
需求分析奠定了軟體工程和專案管理的基礎。我們在建造軟體系統這座大廈的時候,如果需求分析的基礎不夠堅實和牢固,那麼往往會導致軟體系統問題百出,甚至被馬上丟棄。在建造軟體系統的過程中,我們經常習慣地沿用一些不規範的方法,其後果便是產生一條鴻溝--開發人員開發的與使用者所想得到的軟體存在著巨大的"期望差異"。
我們也許會問:為什麼人們開發一個軟體系統會比建造一座摩天大廈要難得多?一是因為軟體行業缺乏準確而又統一的語言來定義或描述相應的工作,真正的"需求"實際上存在於人們的頭腦中;二是因為軟體開發過程難以用一種工程化的方法來統一規範和有效實施。因此"需求"這個名詞的定義不僅僅是從使用者角度對系統外部行為的描述,以及從開發人員角度對系統內部特性的描述,其關鍵的一點是"需求"必須文檔化。