雖然有老師給了好多電子書的書目,但是最後還是覺得先讀一讀本學期的教材《需求工程——軟體模組化與分析》。作為教材,淺顯易懂,很容易入門。雖然上個學期已經學了一些這方面的知識,但是并不是很系統。希望可以通過這本書整理一下。
因為有了“軟體危機”的産生,“軟體工程”才被提出。而在“軟體工程”中,需求分析又是重中之重,它對項目的成敗具有至關重要的作用。和軟體需求相關的因素為軟體項目帶來的風險和問題要遠遠超過所有的其他因素,糟糕的軟體生産狀況背後隐藏着軟體工程的需求問題。
軟體生産中産生需求問題的最大原因在于對應用型軟體的模拟特性了解不透徹或應用不堅決,它會導緻軟體開發者産生輕視需求的态度問題,但除此之外,還有一些技術原因也會導緻需求問題的産生。一般有非技術性和社會性因素重視不足;傳統需求分析方法的缺陷;軟體規模的日益擴大;需求問題的高代價性等。
什麼是需求工程?需求工程是所有需求處理活動的綜合,它收集資訊、分析問題、整合挂點、記錄需求并驗證其正确性,最終反應軟體被應用後與其環境互動形成的期望效應。需求工程是為了在軟體開發前需要軟體工程師們去了解并去設計出一套解決方案。因為軟體工程師并不是了解所有領域。是以更加需要更使用者溝通。需求工程十分重要。雖然人們很早就認識到這一點,但是在時間、人力、物力、财力的投入上卻并沒有那麼重要。事後必然會導緻需求分析水準低,軟體開發品質低,使用者抱怨多的問題出現。
然而有時候并不一定是需求分析師的問題,使用者有時候并不能明确的描述出自己想要使用什麼,而需求分析師又不了解使用者所在領域。是以就會出現軟體需求出現“不完整、不準确、不清晰、變化不可控”這些現象。是以需求分析師們必須具備以下技能以友善、明确、成功的做出需求分析。
首先需要專業技能,懂得需求工程的相關知識、了解需求工程的相關理論、熟悉需求工程的各項活動、掌握需求工程的各種辦法與技術是必須得;其次是要有分析技能,必須可以從大量資訊中提取、分析、整合出有用的資訊處理,了解使用者需求中的沖突與遺漏,分析可行性;接着需要交流技能,這是必須的,要掌握交談和提問的技巧,否則很難跟不懂軟體的客戶出現隔閡,隔行如隔山,大家不能各說各的吧;還有觀察技能、模組化技能、寫作技能、創新技能、協調技能等。需求工程師應該具有敏銳的洞察力,可以通過觀察使用者的工作環境和工作過程,發現通過談話及其他方法所無法發現的重要資訊。同時也應該掌握從傳統流程圖到結構化的分析模型,直至當今的統一模組化語言等多種分析工具。因為需要跟客戶、管理人員、開發人員等交涉資訊,是以需要寫好書面的需求規格說明書。寫作技能是必須的。需求工程師需要通過寫作清晰的表達出複雜的概念。
提起需求,不同背景的人會有不同的看法,IEEE對需求的定義為:使用者為了解決問題或達到某些目标所需要的條件;系統或系統部件為了滿足合同、标準、規範或其他正式文檔所規定的要求而需要具備的條件或能力;對前兩條中的一個條件或一種能力的一種文檔化表述。
需求中總是遇到一些困難,因為使用者和開發人員的背景不同,立場不同,是以知識了解困難,心中所想的東西也不一樣。普通使用者缺乏概況性和綜合性的表述能力, 是以很難了解對方心中所想。使用者還總是提出各種需求,固執的堅持某些特性和功能。使用者并不了解軟體的設計情況,是以需要這些困難需要需求工程師們一一解決。
需求是擷取的主要對象,是系統期望達到的目标。它主要來源于使用者、客戶、領域專家等相關涉衆,在湖區中展現為射中的問題、期望、觀點、看法和态度等。常見的擷取資訊的方法有問卷調查、面談、文檔分析、文檔檢查、需求剝離等。也有頭腦風暴、專題讨論、JAD、JRP等。
在實踐中,通過利用原型,可以有很多好處,比如:及時、有力地影響使用者需求的變化;減少返工;幫助控制不完整需求所帶來的風險;可以将一個大的難以處理的開發過程細分成一個更小更容易處理的步驟;減少開發成本,提高經濟效益;增加開發者之間的交流,幫助确定技術解決方案的可行性;有效地識别風險和解決風險,幫助進行風險管理;提高使用者在軟體開發中的參與程度。原型可以幫助需求解決工程師及早解決需求的不求定性。