蘇晶
山東理工大學 山東 淄博 255049
UML用例模型是系統需求獲取及分析的重要手段,是最終用戶與開發人員溝通和交流的有效途徑。用例模型一旦被確定,所有分析、設計和開發,包括之后的部署及測試等工作都需要以此為依據開展。
用例圖中的模型元素之間并非相互獨立,參與者之間、用例之間、參與者與用例之間均存在著不同類型的關系。從用戶層面來看,關系描述了模型元素間具體化的語義連接,反映了參與者使用系統的具體方式;從開發者層面來看,關系體現了事件處理的流程與協作,決定了系統功能的實現方式。由此可以看出,關系的識別在構建用例模型的過程中發揮著至關重要的作用。
其中,用例間的依賴關系是表現形式及使用方法最為相似且最容易產生混淆的一類關系,本文以網上選課系統為例,對常用依賴關系的建模要點進行比較和分析。
用例之間存在著多種不同的依賴關系,為了強化其具體語義,可通過附加不同的構造型表示不同的關系,用戶也可以自定義帶有新構造型的依賴關系。其中,包含和擴展關系是用例圖中應用最廣泛的兩種依賴關系[1]。
包含關系是指一個用例可以簡單地包含其他用例具有的行為,并將其所包含的用例行為作為自身行為的一部分,這兩個用例分別被稱為基礎用例和被包含用例。包含關系的具體表現形式為被包含用例的事件流可插入至基礎用例的事件流中。
在對用例的事件流進行描述的過程中,若發現多個用例同時使用到同一段行為,則可將這段共同的行為單獨抽象成為一個用例,然后建立兩者之間的包含關系,從而實現重用并簡化事件流描述的目的。
以網上選課系統為例,學生可以進行“查看課程信息”、“選擇課程”和“刪除已選課程”操作,管理員可以進行“維護課程信息”操作,所有操作均需在“登錄系統”后方可完成。根據描述,“登錄系統”為多個用例的共同行為,可將其抽象出來,成為一個新的用例,并建立其與4個基礎用例之間的包含關系。關系一旦創建,這4個基礎用例在用例規約的事件流描述中可直接對“登錄系統”用例的事件流進行引用,避免了對公共行為的重復描述,提高了模型的可維護性。
擴展關系是指一個用例擴充了另一個用例的功能,但這個擴充功能不是必需的,只有在滿足特定條件的情況下才會被執行,這兩個用例分別被稱為擴展用例和基礎用例。
在網上選課系統中,學生和管理員進行“登錄系統”操作時,如果忘記密碼,則可使用“找回密碼”功能。根據描述,作為“找回密碼”這一操作,雖然不是由參與者主觀意愿驅動執行的,但卻是“登錄系統”用例執行過程中所產生的一個值得關注的可選行為,因此考慮將“找回密碼”抽象為一個擴展用例,并建立其與基礎用例之間的擴展關系。
擴展關系往往被用于處理異常或者構建靈活的系統框架。使用擴展關系可以降低系統的復雜度,有利于系統的擴展、提高系統的性能。擴展關系還可用于處理基礎用例中那些不易描述的問題,使系統顯得更加清晰、易于理解[2]。
包含關系和擴展關系均屬于用例間的依賴關系,且基本表現形式都是從現有用例的事件流中抽取出部分行為,將其作為一個單獨的用例,從而達到增強現有用例的行為,并提高模型可維護性的目的。但兩者在實際使用過程中又存在著顯著的區別。以網上選課系統為例,結合用例的事件流描述過程,分析兩者的區別主要包括以下三方面。
在擴展關系中,基礎用例“登錄系統”的執行并不一定會涉及擴展用例“找回密碼”,擴展用例只有在滿足特定條件的情況下才會被執行。而在包含關系中,當基礎用例“選擇課程”執行后,被包含用例“登錄系統”是一定會被執行的。
因此擴展用例描述的是基礎用例的可選行為,而被包含用例描述的是基礎用例的必然行為。
在擴展關系中,即使沒有擴展用例“找回密碼”,基礎用例“登錄系統”本身也是完整的,而對于包含關系,基礎用例“選擇課程”在沒有被包含用例“登錄系統”的情況下就是不完整的存在。
在擴展關系中,擴展用例“找回密碼”不是一個完整的用例,必須依賴于基礎用例“登錄系統”,且不能單獨被參與者所調用。
而在包含關系中,被包含用例“登錄系統”脫離于基礎用例“選擇課程”可獨立存在,并且可以單獨被參與者所調用[3]。
包含關系和擴展關系是用例圖中應用最為廣泛的兩種依賴關系,兩者相似度極高,為了能夠做到準確識別、科學建模,有效描述用戶訪問行為,確保后續軟件開發活動順利開展,建議在用例模型構建過程中,遵循以下設計要點:
(1)將公共的行為抽取出來,放到一個被包含用例中,建立與基礎用例間的包含關系。通過這種方式,可以避免對公共行為的重復描述,有效提高了模型的可維護性。
(2)將異常處理或變化的行為抽取出來,放到一個擴展用例中,建立與基礎用例間的擴展關系。通過這種方式,可以把當前用例中值得關注的可選行為從必需的行為中分離出來,從而達到增強現有用例行為的目的。