周珍娟
面向?qū)ο筌浖O計中,產(chǎn)生大量的類、接口、組件、包等模型元素,以及用例圖、類圖、活動圖、序列圖、狀態(tài)圖等UML圖。一些面向?qū)ο筌浖椖康哪P驮睾蚒ML圖多達幾十至幾百個,導致其UML設計模型難以組織,且相應的設計文檔難以編制,不可避免地遇到如何建立軟件設計模型描述框架的技術(shù)問題。UML標準(1.5版)[1]中對模型組織做了初步的規(guī)定。文獻[2]給出了組織UML系統(tǒng)模型的五種視圖、動態(tài)與靜態(tài)兩方面、層次性等觀念。文獻[3]給出了包括接口、接口語義、功能、內(nèi)部關(guān)系等描述的構(gòu)件描述框架。文獻[4]給出了設計文檔模板的實現(xiàn)方法,一些軟件工具(如:Rose工具[5]、SoDA工具)提供了示例性的UML設計模型和設計文檔模板。
多年來,筆者在多個軟件項目中,使用UML語言和Rose工具進行面向?qū)ο笤O計,使用SoDA工具生成設計文檔。隨著設計細化產(chǎn)生了多達上百個的模型元素和UML圖,遇到了以上所述的模型描述框架問題,并得到了較好的解決,還推廣應用到多個軟件開發(fā)單位。本文利用UML擴充機制提出了邏輯用例包、運行設計包、邏輯CSC、邏輯接口數(shù)據(jù)包等模型擴充描述要素,基于“4+1”視圖體系結(jié)構(gòu)和用例驅(qū)動方法建立了包含用例實現(xiàn)、軟件進程、軟件結(jié)構(gòu)、外部/內(nèi)部接口的設計模型描述框架,并利用該設計模型描述框架在Rose和SoDA工具上建立了UML設計模型模板和設計文檔模板,實現(xiàn)了建模模板化和文檔生成自動化。
“4+1”視圖體系結(jié)構(gòu)[8]包括邏輯視圖、進程視圖、開發(fā)視圖、物理視圖和用例視圖。用例視圖描述了軟件需要的功能,并協(xié)調(diào)其他視圖,保持設計的一致性,利用該視圖可以建立軟件用例實現(xiàn)模型。邏輯視圖描述了組成軟件的若干類及其關(guān)系,利用該視圖可以建立軟件結(jié)構(gòu)模型和接口設計模型。進程視圖描述了系統(tǒng)至進程和任務的分解以及這些并發(fā)元素之間的通信和同步,利用該視圖可以建立軟件進程模型。開發(fā)視圖描述了在開發(fā)環(huán)境中軟件的靜態(tài)組織結(jié)構(gòu),利用該視圖可以建立軟件組件模型。物理視圖描述了物理網(wǎng)絡的配置,軟件至硬件的映射,通過軟件設計建立軟件部署模型。這些模型共同構(gòu)成軟件設計模型。筆者用BNF范式來表示軟件設計模型描述框架。
<軟件設計模型>∷=<軟件用例實現(xiàn)設計子模型>+<軟件結(jié)構(gòu)設計子模型>+<軟件組件設計子模型>+<接口設計子模型>+<軟件進程設計子模型>+<軟件部署設計子模型>
其中,前四個模型一般均要用于軟件設計建模,軟件用例實現(xiàn)設計模型通過用例驅(qū)動方法與其他模型銜接,軟件進程設計模型只用于多進程設計建模,軟件部署設計模型只用于分布式軟件設計建模。以下針對各設計模型,進一步給出其描述框架。
在軟件設計過程中,每個用例均有相應的實現(xiàn),可以用用例圖表示相關(guān)用例和角色之間的關(guān)系,用序列圖表示實現(xiàn)該用例的若干參與對象及其時序消息關(guān)系,用類圖表示實現(xiàn)用例的這些參與對象所屬類的相互關(guān)系,用活動圖表示實現(xiàn)該用例的若干活動之間的關(guān)系,用狀態(tài)圖表示實現(xiàn)該用例的若干狀態(tài)之間的轉(zhuǎn)換關(guān)系。由此,得到用例實現(xiàn)的基本構(gòu)成。
如果用例實現(xiàn)較多(一般多于5~7個),可以根據(jù)情況將用例實現(xiàn)分包,形成用例實現(xiàn)包。如果用例實現(xiàn)包還是比較多,可以根據(jù)情況將用例實現(xiàn)包繼續(xù)分包,形成邏輯用例實現(xiàn)包。如果邏輯用例實現(xiàn)包仍然比較多,還可以進一步分包,形成高層的邏輯用例實現(xiàn)包。
這樣就由用例實現(xiàn)、用例實現(xiàn)包、邏輯用例實現(xiàn)包逐層構(gòu)成了軟件用例實現(xiàn)設計模型,其BNF范式描述形式如下:
<軟件用例實現(xiàn)設計子模型>∷={<邏輯用例實現(xiàn)包>|<用例實現(xiàn)包>}|{<用例實現(xiàn)>}+<用例圖>+[<活動圖>]
<邏輯用例實現(xiàn)包>∷={<邏輯用例實現(xiàn)包>|<用例實現(xiàn)包>}+<用例圖>+[<活動圖>]
<用例實現(xiàn)包>∷={<用例實現(xiàn)>}+<用例圖>+[<活動圖>]
<用例實現(xiàn)>∷=<用例圖>+<序列圖>+[<類圖>]+[<活動圖>]+[<狀態(tài)圖>]
軟件結(jié)構(gòu)設計模型以類和類之間關(guān)系為基礎(chǔ)描述軟件組成和結(jié)構(gòu)。若干類組成具有語意的類包,如果類包對應于某個組件,就為CSC。若干類包可以組成具有語意的邏輯類包,多個邏輯類包和類包可以組成具有語意的、更大的邏輯類包,若干CSC可以組成具有語意的邏輯CSC。對于較復雜的軟件可以先分邏輯層,再按類包、邏輯類包組織類。
這樣就由類、類包、CSC、邏輯類包、邏輯CSC、邏輯層構(gòu)成了軟件結(jié)構(gòu)設計模型,其BNF范式描述形式如下:
<軟件結(jié)構(gòu)設計子模型>∷={<邏輯層>}|{<邏輯CSC>|<邏輯類包>|<類包>}+<類圖>
<邏輯層>∷={<邏輯CSC>|<邏輯類包>|<類包>}+<類圖>
<邏輯CSC>∷= {
<邏輯類包>∷={<類包>}+<類圖>
<類包>∷={<類>}+{<類圖>}
軟件組件設計子模型描述軟件組件及其關(guān)系。每個組件實行相應的若干類,若干組件構(gòu)成有語意的組件包,若干組件包和已構(gòu)成的邏輯組件包可以構(gòu)成新的、有語意的邏輯組件包。
這樣就由組件、組件包、邏輯組件包構(gòu)成了軟件組件模型,其BNF范式描述形式如下:
<軟件組件設計子模型>∷={<邏輯組件包>|<組件包>}|{<組件>}+<組件圖>
<邏輯組件包>∷={<邏輯組件包>|<組件包>}+<組件圖>
<組件包>∷={<組件>}+<組件圖>
<組件>∷={<實現(xiàn)組件的類>}
接口設計子模型描述軟件的外部接口和內(nèi)部接口,細分為外部接口設計模型和內(nèi)部接口設計模型。外部接口設計模型由接口類、接口設計包構(gòu)成的外部接口設計架構(gòu)以及由接口數(shù)據(jù)、接口數(shù)據(jù)包、邏輯接口數(shù)據(jù)包構(gòu)成的外部接口數(shù)據(jù)架構(gòu)兩大部分組成。內(nèi)部接口設計模型由接口類、接口設計包、CSC接口設計包構(gòu)成的內(nèi)部接口設計架構(gòu)以及由接口數(shù)據(jù)、接口數(shù)據(jù)包、邏輯接口數(shù)據(jù)包構(gòu)成的內(nèi)部接口數(shù)據(jù)架構(gòu)兩大部分組成。接口設計模型的BNF范式描述形式如下:
<接口設計子模型>∷=<外部接口設計子模型>+<內(nèi)部接口設計子模型>
<外部接口設計子模型>∷=<外部接口設計架構(gòu)>+<外部接口數(shù)據(jù)架構(gòu)>
<外部接口設計架構(gòu)>∷={<接口設計包>}+<類圖>
<接口設計包>∷={<接口類>}+{<類圖>}
<外部接口數(shù)據(jù)架構(gòu)>∷={<邏輯接口數(shù)據(jù)包>|<接口數(shù)據(jù)包>}+<類圖>
<邏輯接口數(shù)據(jù)包>∷={<邏輯接口數(shù)據(jù)包>|<接口數(shù)據(jù)包>}+<類圖>
<接口數(shù)據(jù)包>∷={<接口數(shù)據(jù)>}+{<類圖>}
<內(nèi)部接口設計模型>∷=<內(nèi)部接口設計架構(gòu)>+<內(nèi)部接口數(shù)據(jù)架構(gòu)>
<內(nèi)部接口設計架構(gòu)>∷={<接口設計包>|
<內(nèi)部接口數(shù)據(jù)架構(gòu)>∷={<邏輯接口數(shù)據(jù)包>|<接口數(shù)據(jù)包>}+<類圖>
軟件進程設計模型描述進程及其之間的通信關(guān)系,分為一個進程結(jié)構(gòu)包、一個進程間通信包和若干進程包。其BNF范式描述形式如下:
<軟件進程設計子模型>∷=<進程結(jié)構(gòu)包>+<進程間通信包>+{<進程包>}
<進程結(jié)構(gòu)包>∷={<類圖>}+{<序列圖>}+{<狀態(tài)圖>}
<進程間通信包>∷={<類圖>}+{<序列圖>}
<進程包>∷={<類圖>}+{<序列圖>}+{<狀態(tài)圖>}
軟件部署設計子模型描述軟件運行平臺和軟件在該平臺上的部署,可以有若干處理機、若干設備和一個可視化的部署圖。其BNF范式描述形式如下:
<軟件部署設計子模型>∷={<部署的處理機>}+{<部署的設備>}+<部署圖>
<部署的處理機>∷={<部署的進程及優(yōu)先級>}
在以上的UML設計模型描述框架中,提出了若干新的描述元素,這些元素可以利用UML的構(gòu)造型擴充機制構(gòu)造出來。
筆者在多個軟件項目的軟件設計過程中,應用上面的UML軟件設計描述框架,在Rose工具上建立了設計模型模板,在SoDA工具上建立了配套的設計文檔生成模板,實現(xiàn)了建??蚣芑臀臋n生成自動化。
由UML軟件設計描述框架可以建立層次化的設計模型模板,如:由邏輯層、邏輯CSC、CSC、邏輯類包、類包組成的層次化軟件結(jié)構(gòu)設計模型模板,參見圖1。
圖1 由UML軟件設計描述框架到軟件結(jié)構(gòu)模型模板示例
根據(jù)UML軟件設計模型描述框架,可以在SoDA工具上建立與設計模型模板配套的設計文檔自動生成模板,通過SoDA工具可以將邏輯CSC/CSC/邏輯類包/類包/類的說明、類圖、活動圖、狀態(tài)圖等自動抽取為設計文檔內(nèi)容。圖2給出了設計文檔自動生成模板的一段實例,表i對應CSC/類包的類及其說明,圖j對應邏輯CSC/CSC/邏輯類包/類包的類圖。
筆者在建立UML軟件設計模型描述框架的基礎(chǔ)上,利用軟件設計模型模板可以比較方便地進行軟件設計和組織軟件設計模型,利用設計文檔生成模板可以比較方便地由軟件設計模型自動生成設計文檔,實現(xiàn)了建模模板化和文檔生成自動化,并保證了文檔與模型的一致性。
圖2 設計文檔自動生成模板實例
本文提出了基于“4+1”視圖的UML設計模型描述框架,給出其在設計模型模板和設計文檔模板方面的應用,說明結(jié)合Rose和SoDA能實現(xiàn)建??蚣芑⒔Ec文檔編制一體化、文檔生成自動化,能提高面向?qū)ο笤O計建模和文檔編制效率。本文的UML設計模型框架雖然具有通用性,但領(lǐng)域性還不強。因此,下一步工作重點是結(jié)合不同領(lǐng)域特點開展UML設計模型框架研究。
[1] Object Management Group,UML1.5[EB/OL].[2003-03-01].http://www.omg.org/spec/UML/1.5/PDF.
[2] 麻志毅. UML系統(tǒng)模型的組織[J].計算機工程,2002,28 (4):287-289.
[3] 張涌,王淵峰,錢樂秋. 一個集成式的軟件構(gòu)件描述框架[J].計算機學報,2002(5):502-507.
[4] 崔紅軍,曹淑青,邵培南. 文檔模板的設計與實現(xiàn)[J].計算機工程,2000(12):84-86.
[5] 王智學.Rose對象建模方法與技術(shù)[M].北京:機械工業(yè)出版社,2003.