如何編寫高品質軟體需求說明書)

來源:互聯網
上載者:User

http://www.writly.cn/index.php?title=%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E9%AB%98%E8%B4%A8%E9%87%8F%E8%BD%AF%E4%BB%B6%E9%9C%80%E6%B1%82%E8%AF%B4%E6%98%8E%E4%B9%A6

你的工程應該有個好的起點。一個小組要帶領客戶進入需求啟發階段而且你要寫軟體需求說明書。這份說明有些大,但客戶會很重視,所以說明必須得到贊同。

現在你正在設計其中的一個特性,已經發現了需求的一些問題。你可以用多種不同的方式解釋需求15;需求9
的說明正好與需求21相反,你因該相信哪一個?需求24非常含糊,你根本不明白它的意思;你不得不花上一個小時與2位開發人員討論需求30,只因為你們對其各有各的理解;並且,唯一能夠澄清這些問題的客戶沒有給你們回覆。你被迫破解眾多需求的含義,並且你能預料到,如果你錯了,你要做大量的重複工作。

許多軟體需求說明書(SRS)寫得非常糟糕。任何產品的品質需要其原始材料的品質保證,糟糕的軟體需求說明書不可能產出優秀的軟體。不幸的是,幾乎沒有開發人員受過與需求的抽象、分析、文檔、質檢有關的教育。而且,沒有非常多的好需求可以借鑒學習,部分原因是很少有工程可以找到一個好的借鑒,其他原因是公司不願意將其產品說明書放在公用地區。

這篇文章描述了高品質需求敘述和說明的幾個特性(特點)。我們將用這些觀點檢查一些有缺陷的需求,帶著痛楚重新編寫。而且我會談一些如何編寫好的需求的提示。你也許想通過這些品質標準評估你的工程需求。對於修訂,也許遲了,但你會學到一些有用的東西,並協助你的小組在下次編寫出更好的需求。

不要期望能夠編寫出一份能體現需求應具備的所有特性的SRS。無論你怎麼細化、分析、評論和最佳化需求,都不可能達到完美。但是,如果你牢記這些特性,你就會編寫出更好的需求,生產出更好的產品。高品質需求敘述的特性

我們如何從一些有問題的需求中分辨出好的軟體需求?這一節將分別介紹需求敘述應體現的6個特性,下一節將從整體上介紹SRS文檔應具備的特性。判斷每個需求是否具備應有的特性的一種方式是由持有不同觀點的工程資金管理人所作的正規檢查。另一種有力的方法是在編寫代碼前依據需求編寫測試例子。測試例子能夠明確顯現在需求中描述的產品行為(特性),能夠顯現缺陷、冗餘和含糊之處。

正確:每個需求必須精確描述要交付的功能。正確性依據於需求的來源,如真實的客戶或進階別的系統需求說明書。一個軟體需求與其對應的系統需求說明書相抵觸是不正確的(當然,系統需求說明書本身可能不正確)。

只有使用者的代表能夠決定使用者需求的正確性,這就是為什麼在檢查需求時,要包括他們或他們的代理的關鍵所在。不包括使用者的需求檢查就會導致開發人員的:“這是沒意義的”,“這可能是他們的意思”等眾所周知的猜測。

可行性:在已知的能力、有限的系統及其環境中每個需求必須是可實現的。為了避免需求的不可行性,在需求分析階段應該有一個開發人員參與,在抽象階段應該有市場人員參與。這個開發人員應能檢查在技術上什麼能做什麼不能做,哪些需要需要額外的付出或者和其他的權衡。

必要性:每個需求應載明什麼是客戶確實需要的,什麼要順應於外部的需求,介面或標準。每個需求源於你認可、具有權說明需求的原始資料,這是考慮必需的另外情形(譯註,此句翻譯不順,請參照原文:Another
way to think of “necessary” is that each requirement originated from a source
you recognize as having the authority to specify
requirements)。跟蹤每個需求回溯到出處,如用例,系統需求,規章,或來自其他使用者的意見。如果你不能標識出處,可能需求只是個鍍金的例子,沒有真正的必須。

優先權:為了表明在一個詳細的產品版本中應包含哪些要點,需要為每個需求,特徵,或用例分配實現的優先權。客戶或其代理都應有強烈的責任建立優先權。如果所有的需求都被視為同等重要,那麼由於在開發中,預算削減,計劃逾時或組員的離開導致新的需求時,
專案經理將不能起到作用。優先權的作用是提供給客戶的價值,實現的相關費用,實現相關聯的有關技術風險。

我是用3種層級的優先權:高優先權表明需求必須體現在下一個產品版本中,中優先權表明需求是必須的,但是如果需要可以延遲到晚一些的產品版本中,低優先權表明有它很好,但我們必須認識到如果沒有充足的時間或資源,它可以被放棄掉。

明確:需求敘述的讀者應只能從其得到唯一的解釋說明,同樣,一個需求的多個讀者也應達成共識。自然語言極易導致含糊。要避免使用一些對於SRS作者很清楚但對於讀者不清楚的主觀詞彙,如:方便使用性,容易,簡單,快速,有效,幾個,藝術級,改善的,最大,最小等等。每寫一個需要都應簡潔,簡單,直觀的採用使用者熟知的語言,不要採用電腦術語。檢查需求模糊的有效方式包括需求說明書的正規檢查,根據需求寫測試,建立使用者的假想來說明產品某個特定部分預期的特性。

可證實:看你是否能夠做出測試計劃或其他驗證方式,如檢查和實證,來決定在產品中每個需求是否正確的實現。如果需求是不可驗證的,決定需求是不是正確的實現就成了判斷的事。需求之間不一致,不可行,不明確也能導致不可證實。任何需求如果說產品將要支援什麼也是不可證實的。

高品質需求說明的特徵

一個完整的SRS不僅是包括長長的功能性需求列表,還包括外部介面描述和一些諸如品質屬性,期望效能的非功能性需求。下面描述了高品質的SRS的一些特性。

完整:不應該遺漏要求和必需的資訊。完整性也是一個需求應具備的。發現缺少的資訊很難,因為根本不存在。在SRS中將需求以分層目錄方式組織,將協助評審人員理解功能性描述的結構,使他們很容易指出遺失的東西。

在需求抽象時,相對於系統功能,你過多的注意使用者的業務,將導致在需求的全域觀和引進不是真正必需的需求上顯得不足。在需求抽象上,應用用例方法會發揮很好的作用。能夠從不同角度察看需求的圖形分析模型也可以檢查出不完整性。

如果你知道已缺少一些資訊,使用TBD(to be
determined)標準標誌可以突出這些缺陷,當你在構建產品的相關部分時,就可以從一個給定的需求集中解決所有的缺陷。

一致性:一致性需求就是不要於其他的軟體需求或進階別的系統(商業)需求發生衝突。需求中的不一致必須在開發開始前得到解決。只有經過調研才能確定哪些是正確的。修改需求時一定要謹慎,如果只審定修改的部分,沒有審定於修改相關的部分,就可能導致不一致性。

可修改性:當每個需求的要求修改了或維護其曆史更改時,你必須能夠審定SRS。也就是說每個需求必須相對於其他需求有其單獨的標示和分開的說明,便於清晰的查閱。通過良好的組織可以使需求易於修改,如:將相關的需求分組,建立目錄表,索引,以及前後參考(照)。

可追蹤:你應能將一個軟體與其原始材料相對應,如進階系統需求,用例,使用者的提議等。也能夠將軟體需求與設計項目,原始碼,用於構造實現和驗證需求的測試相對應。可追蹤的需求應該具有獨立標示,細密和結構化的編寫,不應過大,不應是敘述性的文字和公告式的列表。需求品質的評審

這些有關需求品質的特性的描述在理論上都是非常好的,但一個好的需求到底是個什麼樣子的呢?為了體現得更切合實際,我們做個小練習。下面有幾個從實際的工程選出的需求,依據上面的品質標準,評估每個需求,看看有什麼問題,然後用更好的方式重寫。我將對每個例子都提出自己的分析和改進的建議。也歡迎你提出不同的見解。我所佔優的只是我知道每個需求的出處。因為你我都不是真正的客戶,我們只能猜測每個需求的意圖。

例1.“產品應在不少於每60秒的正常周期內提供狀態資訊”

這個需求是不完整的:狀態資訊是什麼,如何顯示給使用者。這個需求有幾處含糊。我們在談論產品的哪部分?狀態資訊間隔真的假定為不少於60秒?,甚者每10年顯示一條新的狀態資訊也可以?也許它的意圖是訊息間隔不應超過60秒,那麼1毫秒是不是太短?“每”這個詞導致了不確定性。問題的後果,就是需求的不可證實。

彌補缺陷,重寫需求的一種方法:

狀態資訊
背景工作管理器因該以誤差上下不超過10秒的60秒間隔,在使用者介面的指定位置顯示狀態資訊

如果後台進程處理正常,那麼應該顯示任務已完成的百分數/比
任務完成時,應顯示相關的資訊
背景工作出錯應該顯示錯誤資訊

為了分別測試和追蹤,我將其分成了多個需求。如果將幾個需求串接在一節中,在構造和測試時就很容易漏掉一個。

例2.“產品應瞬間在顯示和隱藏不可列印字元間切換”

電腦在瞬間不能做任何事,所以這個需求不切實可行。它的不完整性表現在沒有聲明觸發狀態切換的條件。軟體要在某些條件下更改自己?或者使用者為了模仿更改要做一些動作?而且,在文檔中改變顯示的範圍是多大:選中的文本,整個的文檔,或其他的?這也是個模糊的問題。不可列印字元合隱藏字元一樣嗎?或者是一些屬性標誌或一些控制字元?問題的後果,就是需求的不可證實。

象這樣編寫需求也許更好一些:“使用者能夠在一個由特定觸發條件啟用處於編輯的文檔中在顯示和隱藏所有HTML標記間切換”。現在就很清楚,不可列印字元是HTML標記。由於沒有定義觸發條件,需求對設計沒有約束力。只有設計人員選定了觸發條件後,你才能編寫測實驗證觸發的正確操作。

例3.“HTML分析器可以產生HTML標記錯誤報表,協助HTML入門者快速解決錯誤”。單詞“快速”使其模糊,沒  有加進錯誤報表的定義也是其部完整。我不知道,你怎麼驗證這個需求。找一個自稱為HTML的入門者,看看能不能根據錯誤報表快速解決錯誤?

試試這個:“HTML分析器可以產生一個錯誤報表,錯誤報表包含有在被分析檔案中出錯的HTML文本和行號以及錯誤的描述。如果沒有錯誤,就不會產生錯誤報表”。現在我們知道了,什麼會被加到出錯報告中,但是出錯報告是個什麼樣子,則留由設計人員決定。我們還指定了一個例外:如果沒有發現錯誤,不產生錯誤報表。

例4.“如果可能,主管號碼應通過聯機校正,而不是通過主全體主管號碼列表校正”。真感到絕望,什麼是“如果可能”:如果技術上可行?如果主全體主管號碼列表可以聯機獲得?要避免象“應該”的這類不確切的詞。客戶是需要這個功能性還是不需要。我曾看過一些需求說明書,採用諸如:應,將,應該/將要等一些詞描述優先順序的細微差別。但我更喜歡用“應”清楚的說明需求的意圖,指明優先順序。這是修改後的:系統應校正輸入的主管號碼而不通過聯機的主全體主官號碼列表。如果在列表中沒有發現主管號碼,將會顯示一條錯誤資訊,也不接受指令。

在理解各個已完成的糟糕需求上,開發人員將會遇到的難題是:開發人員與客戶將會在審核需求,未達成共識前發生激烈的爭論。詳細檢查大的需求文檔不是一件輕鬆的事情。我清楚有人做過,而且他們花在檢查上的每一分鐘都是值得的。相對於開發階段和使用者的抱怨電話,在這個階段修補缺陷是便宜的,編寫品質需求的方針

編寫優秀的需求是沒有公式化的方法的。這需要大量的經驗,要從你在過去的文檔中發現的問題學習。請在組織軟體需求文檔時,嚴格遵從這些方針。

句子和段落要短。採用主動語氣。使用正確的文法,拼字,標點。使用術語,要保持一致性,並在術語表或資料字典中定義它們

要看需求是否被有效定義,可以以開發人員的觀點看看。在內心將“當你們做完了找我”這句加到文檔尾部,看看能不能是你緊張起來。換句話說,你是否需要SRS的編寫者的額外解釋協助開發人員很好的理解需求,以便於設計和實現?如果是的話,在繼續工作前,需求還需要細化。

需求編寫者還要努力正確地把握細化程度。要避免包含多個需求的長的敘述段落。有協助的提示是編寫獨立的可測試的需求。如果你認為一小部分測試可以驗證一個需求的正確,那麼它已經正確的細化了。如果你預想到多種不同類的測試,幾個需求可能已擠到了一起,需要拆分開。

密切關注多個需求合成了單個需求。一個需求中的串連詞“和”/“或”建議幾個需求合并。不要在一個需求中使用“和”/“或”。

通篇文檔細節上要保持一致。我曾看見過多個需求說明書前後不一致。如:“對於紅色合法的顏色代碼應是R”及“對於綠色合法的顏色代碼應是G”就有可以以分散的需求分離開,而“產品應能對來自語音編輯指示做出反應”應作為一個子系統,不應作為單個的功能性需求。

避免在SRS中過多的申述需求。在多處包含相同的需求可以使文檔更易於閱讀,但也會給文檔的維護增加困難。文檔的多份文本要在同一時間內全部更新,避免不一致性。

如果你遵從了這些方針,你能夠儘早地經常正式或非正式的審查需求,這些需求對於產品的構造,系統測試以及最後的客戶滿意,都會成為好的奠基石。並且要記住,沒有高品質的需求,軟體就象一盒巧克力,你永遠不知道你會得到什麼。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.