需求結構化:數據定義

1 背景
前文以實例的形式討論了用例生成、需求檢查等功能。這些功能可行的前提,是需求邏輯能夠被計算機程序正確的識別、計算。

所謂需求結構化,是將非結構化需求轉換爲結構化需求的過程。而所謂結構化需求,是指基於明確語法表達的需求。結構化需求是半形式化的(semi-formal),可以轉換爲嚴格語義的形式化模型。

 

將需求結構化後,需求能夠被計算機程序自動化處理,實現需求缺陷檢查、基於需求的用例生成等功能。這一方法已經在多個工程應用中展現出顯著價值,例如對系統需求生成十萬級別的覆蓋用例、對複雜決策邏輯進行缺陷檢查等。

功能是好的,但是先要解決的眼前問題是:結構化需求從哪裏來?

2 一般而言
一般而言,需求有三種情況:一是非結構化需求,典型是以自然語言描述的需求;二是結構化需求,一般是基於特定工具形成的設計開發產物;第三種,則屬於灰色地帶,即雖然有語法約束,但是由人工編寫,語法沒有得到嚴格執行和檢查,導致結構化不徹底。

好消息是,需求的結構化程度在變高。各種形式的MBSE、MBD的實施,面向特定領域的輔助設計工具的應用,設計的規範化、模板化程度的提高,都使得設計輸出呈現更好的結構化。在已有結構化需求的基礎上,可以自動轉換爲能夠被程序化處理的形式。

另一方面,自然語言雖然有語義模糊、二義性等缺點,但由於表達靈活度高、易於被各方理解,仍然是廣泛使用的需求描述形式。大量需求仍然是自然語言,是非結構化的。

3 OneLogic的需求結構化
OneLogic提供了需求結構化功能,關鍵應用場景就是自然語言需求結構化。

例如,對下述需求:

Req01:當 艙溫(cabin_temperature)大於等於 68℃,保持時間超過2s但不超過10秒,則觸發短時超溫事件(short_time_overtemperature);

轉換爲OneLogic中的需求如下:

上圖可見,OneLogic提供了一種自然語言風格的需求描述方式。簡要來講,OneLogic採用類似軟件“設計模式”的思想,將常見需求實例進行抽象,形成一套面向需求的“模式庫”,能夠以較爲直接的方式,將常見自然語言需求轉換爲結構化需求。由於每種需求模式具有嚴格語義,從而所描述的需求實例也具有嚴格語義。

這裏暫不展開對需求模式的討論。本文先討論需求結構化的第一個障礙,即數據定義問題。

4 數據定義
程序員習慣了編程語言中變量、對象的標識符語法,例如必須以字母、下劃線開頭等。然而,對於需求則不然。需求結構化的第一個障礙是:你不能要求按照軟件代碼語法進行需求數據定義!

一方面,需求中的數據標識,不能按照編程語言的標識符語法來約束。在需求中,標識符應具有更大的命名自由度,例如可以中英文、數字混用,甚至包含#、@之類的特殊符號。

另一方面,需求中的數據定義,是設計活動的關鍵輸出。如何形成數據定義,是由設計體系所約束的。高層需求中的數據對象,被低層需求逐步細化直至具體實現。從測試角度講,正是這種設計上的追溯關係,使得基於高層需求形成的用例,能夠最終關聯到具體實現的數據對象,使測試用例可執行。

下圖FACE 數據模型架構也體現了上述數據定義過程。

OneLogic在如下方面對需求的上述特徵提供支持。

4.1 支持用任意字符串對數據進行命名
OneLogic支持用任意字符串對數據進行命名,包括中文、英文、特殊字符、空格等。

前文討論的帶內部狀態的多需求耦合用例生成實例,可直接使用中文定義數據名稱,仍可正常求解。例如:

Req01:當艙溫大於等於68℃,保持時間超過2s但不超過10秒,則觸發短時超溫事件;

Req02:當艙溫大於等於68℃,保持時間超過10秒,則觸發長時超溫事件;

採用中文變量的結構化需求如下:

基於中文變量的求解結果如下(關於該實例的討論,可具體參見帶內部狀態的多需求耦合用例生成實例)。

當然,爲了能夠求解,需要對變量類型進行設置。OneLogic內置類型包括布爾、整型、浮點,可自定義數據類型,例如枚舉類型等。

4.2 支持雙向數據定義
爲了適應不同的設計體系,OneLogic支持雙向數據定義。

所謂雙向數據定義,指一方面OneLogic可以導入外部數據定義,以此爲基礎進行需求邏輯設計,此時在OneLogic中不新建數據對象;另一方面,如果沒有外部數據定義,則在OneLogic中進行需求設計時創建數據對象,並自動彙總,形成數據字典(如下圖),支持多人在同一套數據字典上進行設計協作,保持命名、指稱的一致性。

4.3 支持高層數據到低層數據的映射
基於需求生成的測試用例,其操作的數據往往是抽象的、邏輯的,是與平臺無關的。這就帶來一個問題:這樣的測試用例能實際執行嗎?

生成的測試用例要能夠可執行,能夠對目標軟件、設備、系統進行測試,才更具有價值。這其中的關鍵,就是實現高層數據到低層數據的映射。基於數據映射關係,測試用例可以被自動轉換成可執行的腳本,實現自動測試。這也是結構化所帶來的好處。

5 總結
結構化是需求能夠被計算機自動處理的前提。現實中大量需求是採用自然語言描述的。如何使自然語言需求被高效的結構化並具有嚴格語義,是OneLogic期望解決的問題之一。本文首先討論了在數據定義上OneLogic所做的考慮,包括中文命名、雙向數據定義等。
————————————————

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

原文鏈接:https://blog.csdn.net/ZigZag_Garden/article/details/129355172

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章