方木云 劉海波 姜偉 劉輝
摘? 要:表單是信息交流的載體,也是信息管理軟件中工作流的基本單位。提出一種基于表單的軟件自動(dòng)化開發(fā)方法:首先對(duì)表單進(jìn)行形式化描述;其次映射到關(guān)系數(shù)據(jù)庫(kù)表中的一個(gè)表和一個(gè)視圖;然后映射到軟件的一個(gè)主界面和一個(gè)增加界面;最后映射出表單的保存、修改、刪除和查詢等代碼。根據(jù)這個(gè)映射流程,利用VB6.0和SQL Server 2015開發(fā)出CASE工具,使用該工具能自動(dòng)生成表單的數(shù)據(jù)庫(kù)表、界面和代碼。
關(guān)鍵詞:表單;工作流;軟件自動(dòng)化
Abstract: The form is the carrier for information exchange and the basic unit of workflow in information management software. This paper proposes a method of software automation development based on forms. Firstly, the form is described formally; secondly, the form is mapped to a table and a view in a relational database table; thirdly, the form is mapped to a main interface and an additional interface of the software; finally, the form is mapped to the codes of saving, modifying, deleting and querying. Based on this mapping process, a Computer Aided (Assisted) Software Engineering (CASE) tool is developed by using VB6.0 and SQL server 2015. The tool can be used to automatically generate the database table, interface and codes of the form.
Keywords: form; workflow; software automation development
1? ?引言(Introduction)
軟件生產(chǎn)長(zhǎng)期處于作坊式的手工階段,如何提高軟件生產(chǎn)效率、降低生產(chǎn)成本,一直是軟件工程界研究的課題。信息化管理軟件在我國(guó)軟件產(chǎn)業(yè)中占比大,發(fā)展信息化管理軟件能促進(jìn)我國(guó)工業(yè)和信息產(chǎn)業(yè)升級(jí)換代。信息化管理軟件中信息傳遞都是以表單作為載體,例如:個(gè)人與個(gè)人之間的信息交流是書信和論文等;個(gè)人與單位之間的信息交流是申請(qǐng)書和請(qǐng)假條等;政府部門之間的信息來(lái)往是公文和通知等;公司之間的買賣交流是協(xié)議和合同等;企業(yè)采供流程中的物資交流是入庫(kù)單和出庫(kù)單等。這些書信、論文、申請(qǐng)書、請(qǐng)假條、公文、通知、協(xié)議、合同、入庫(kù)單和出庫(kù)單等都是表單。這些表單作為信息載體在工作流中進(jìn)行流轉(zhuǎn),保證工作流各個(gè)節(jié)點(diǎn)的信息主體相同,差別在于表單狀態(tài)和經(jīng)辦人等流轉(zhuǎn)信息。因此表單可以作為軟件建模的基本單位,并且是實(shí)現(xiàn)自動(dòng)化編程的基礎(chǔ)[1]?;诒韱蔚倪@種特點(diǎn)建立了表單向數(shù)據(jù)庫(kù)表、軟件界面和代碼轉(zhuǎn)換的映射模型,最后采用VB6.0和SQL Server 2015開發(fā)出CASE工具,實(shí)現(xiàn)局部軟件自動(dòng)化。對(duì)于軟件公司規(guī)范軟件開發(fā)行為和降低人員培訓(xùn)費(fèi)用等等方面起到較大作用[2,3]。
2? ?基于表單的逐級(jí)映射(Stepwise mapping based on forms)
劉驍建提出了基于表單的企業(yè)建模研究和表單生成器的設(shè)計(jì)[4];殷旭等提出了基于Web的工作流表單的柔性建模[5];肖宇等研究了基于表單和關(guān)系數(shù)據(jù)庫(kù)的工作流管理系統(tǒng)[6];廖斌等提出了基于Web工作流表單的設(shè)計(jì)與實(shí)現(xiàn)[7];劉迎春等提出了基于Web工作流系統(tǒng)中表單的定義與處理[8];唐文忠等提出了基于共享模型的工作流表單系統(tǒng)設(shè)計(jì)[9]。本文提出了基于表單的軟件自動(dòng)化開發(fā)方法。
2.1? ?表單的概念和形式化描述
定義:表單是信息交流的載體,完整的表單分為表頭、表體和表尾三個(gè)部分。表頭是信息交流的主題內(nèi)容;表體是信息交流的核心內(nèi)容;表尾是信息交流的參與人和時(shí)間。具有多個(gè)表體字段的表單稱為復(fù)雜表單,只有一個(gè)表體字段的表單稱為簡(jiǎn)單表單。
入庫(kù)單和出庫(kù)單屬于復(fù)雜表單,表體部分不僅具有多個(gè)字段,而且字段之間往往還需要計(jì)算功能;請(qǐng)假條和申請(qǐng)書屬于簡(jiǎn)單表單,表體部分只有文字,可作為一個(gè)字段保存,而且不需要計(jì)算功能。簡(jiǎn)單表單可視為復(fù)雜表單的特例,圖1是復(fù)雜表單的示意圖。
下面對(duì)表單進(jìn)行形式化描述:設(shè)表頭(Head)有x(x>=1)個(gè)數(shù)據(jù)項(xiàng),表體(Body)有y(y>=1)個(gè)數(shù)據(jù)項(xiàng),表尾(Tail)有z(z>=1)個(gè)數(shù)據(jù)項(xiàng)。表頭數(shù)據(jù)項(xiàng)形式化為H1,H2,…,Hx;表體數(shù)據(jù)項(xiàng)形式化為B1,B2,…,By;表尾數(shù)據(jù)項(xiàng)形式化為T1,T2,…,Tz。圖2是表單的形式化描述。
結(jié)論:表頭必須有一個(gè)單號(hào)數(shù)據(jù)項(xiàng),用來(lái)唯一標(biāo)識(shí)表單的單號(hào);表尾必須有一個(gè)狀態(tài)字段,用來(lái)標(biāo)識(shí)表單處在工作流中的狀態(tài)。
單號(hào)是表單的標(biāo)識(shí)號(hào),是組織、存儲(chǔ)、檢索表單的依據(jù)。狀態(tài)是表單在工作流中的標(biāo)識(shí),是表單上行和下行的依據(jù)。這兩個(gè)字段是表單的控制字段,是表單的公用屬性,與具體的業(yè)務(wù)性質(zhì)相關(guān)性不大。
表單是物理世界信息的建模,是關(guān)系數(shù)據(jù)庫(kù)ER圖中的多個(gè)實(shí)體之間的多對(duì)多聯(lián)系[10],下面討論如何映射到關(guān)系數(shù)據(jù)庫(kù)表當(dāng)中。
2.2? ?表單的數(shù)據(jù)庫(kù)表建模
關(guān)系數(shù)據(jù)庫(kù)的ER模型是現(xiàn)實(shí)世界的抽象,是數(shù)據(jù)庫(kù)和軟件架構(gòu)設(shè)計(jì)的理論基礎(chǔ)。在ER模型理論中,一個(gè)實(shí)體映射成一張表,實(shí)體的主鍵就是表的主鍵;一個(gè)1:1的聯(lián)系跟任意1端的實(shí)體合并映射成一個(gè)表,任意1端實(shí)體的主鍵就是表的主鍵;一個(gè)1:n的聯(lián)系跟1端的實(shí)體合并映射成一個(gè)表,1端實(shí)體的主鍵就是表的主鍵;一個(gè)n:m的聯(lián)系單獨(dú)映射成一個(gè)表,兩個(gè)實(shí)體的主鍵聯(lián)合成為表的主鍵,每個(gè)實(shí)體表中的主鍵成為該表的外鍵[10]。
這個(gè)理論沒有很好地解決三個(gè)以上的多實(shí)體之間的n:m聯(lián)系該如何建表。而表單就是三個(gè)以上的多實(shí)體之間的n:m聯(lián)系。因?yàn)榘凑丈鲜龅霓D(zhuǎn)換規(guī)則,表單的主鍵來(lái)自各個(gè)實(shí)體主鍵的組合,那么表單的主鍵特別長(zhǎng),而且沒有實(shí)際意義,不利于組織和編輯表單。下面給出如何將表單映射到數(shù)據(jù)庫(kù)表的方法。
方法:表單映射成一個(gè)視圖ViewMain和一個(gè)明細(xì)表TabDetail。
視圖ViewMain的字段來(lái)自表頭和表尾,起到簡(jiǎn)要標(biāo)識(shí)表單信息的作用,也是為了提高數(shù)據(jù)訪問速度,以及是映射到軟件主界面的數(shù)據(jù)模型。明細(xì)表TabDetail的字段來(lái)自表頭、表體和表尾,記錄表單的全部數(shù)據(jù),為了數(shù)據(jù)的完整性,也是映射到軟件增加界面的數(shù)據(jù)模型。圖3是映射關(guān)系,表1和表2是數(shù)據(jù)庫(kù)表的結(jié)構(gòu)。其中H1是表單的單號(hào)字段,往往是按照年度組織的流水號(hào),不是來(lái)自各個(gè)實(shí)體主鍵的組合;Tz是表尾的狀態(tài)字段,往往是整型數(shù)值。視圖ViewMain是根據(jù)明細(xì)表TabDetail建立的,其字段來(lái)自表頭和表尾。在軟件實(shí)際開發(fā)過(guò)程中,往往取消主鍵和外部鍵的約束,數(shù)據(jù)的完整性靠界面的調(diào)用來(lái)保證。
2.3? ?表單的界面建模
一個(gè)表單映射成一個(gè)主界面和一個(gè)增加界面。主界面顯示歷史已經(jīng)保存過(guò)的信息,對(duì)應(yīng)視圖ViewMain,只顯示表頭和表尾信息,以表單號(hào)來(lái)修改、刪除和查詢信息。增加界面是用來(lái)增加一個(gè)新表單的信息和修改一個(gè)舊表單的信息,對(duì)應(yīng)明細(xì)表TabDetail,也是以表單號(hào)來(lái)組織信息。圖4表示一個(gè)表單映射成兩個(gè)界面。圖5和圖6分別表示主界面和增加界面。
2.4? ?表單的代碼建模
表單增加界面上的核心代碼是【保存】,可以將一個(gè)新增加的表單內(nèi)容保存進(jìn)去,保存時(shí)首先生成一個(gè)新的單號(hào),然后將表頭、表體和表尾的界面值循環(huán)保存進(jìn)去。
表單主界面上的核心代碼有:【增加】打開一個(gè)空白的增加界面;【修改】打開增加界面,并且把選中單號(hào)的表單內(nèi)容反填回增加界面;【刪除】刪除選中單號(hào)的表單內(nèi)容;【查詢】根據(jù)輸入的條件查詢表單內(nèi)容。
3? ?CASE工具的開發(fā)(Development of CASE tools)
CASE(Computer Aided Software Engineering)工具能夠規(guī)范軟件開發(fā)過(guò)程,提高軟件開發(fā)效率,降低軟件開發(fā)對(duì)人的依賴程度,降低軟件開發(fā)的成本,降低軟件開發(fā)的風(fēng)險(xiǎn),提高軟件公司的利潤(rùn)?;诒韱蔚慕?,可以從EXCEL數(shù)據(jù)字典到關(guān)系數(shù)據(jù)庫(kù)表的自動(dòng)生成,可以從關(guān)系數(shù)據(jù)庫(kù)表到界面的自動(dòng)生成,可以從關(guān)系數(shù)據(jù)庫(kù)表到代碼的自動(dòng)生成。本文根據(jù)上述建模開發(fā)了一個(gè)CASE工具,可以實(shí)現(xiàn)基于表單的軟件自動(dòng)化。
本CASE工具利用VB6.0編程實(shí)現(xiàn)。如圖8以關(guān)系數(shù)據(jù)庫(kù)表為核心,生成C#代碼的例子。有如下功能:首先選擇表名稱,(1)創(chuàng)建窗體。(2)界面存向數(shù)據(jù)庫(kù)的代碼,如從DataSet賦值給表的代碼;從文本框賦值給表的代碼。(3)數(shù)據(jù)表讀向界面的代碼,如從表賦值給DataSet。(4)界面到界面的代碼,如文本框賦值到文本框的代碼。(5)內(nèi)存到內(nèi)存的代碼,如DataSet1賦值給DataSet2。
4? ?結(jié)論(Conclusion)
表單是信息交流的基本單位,也是信息管理系統(tǒng)編程的基本單位,是多個(gè)實(shí)體之間的多對(duì)多聯(lián)系,可以建模映射成一個(gè)表和一個(gè)視圖,映射成一個(gè)主界面和一個(gè)增加界面,映射出一系列操作的代碼。通過(guò)CASE實(shí)現(xiàn)這一系列的映射,實(shí)現(xiàn)基于表單的軟件自動(dòng)化。
參考文獻(xiàn)(References)
[1] 方木云,謝恩文,劉洪彬,等.基于表單的信息管理軟件開發(fā)建模[J].計(jì)算機(jī)技術(shù)與發(fā)展,2015,25(1):41-45.
[2] 方木云,杭婷婷,劉輝,等.軟件工程[D].北京:高等教育出版社,2016.
[3] 費(fèi)宗銘,肖寧.基于軟件自動(dòng)化的開發(fā)環(huán)境[J].計(jì)算機(jī)研究與發(fā)展,1989(09):21-26.
[4] 劉驍建.基于表單的企業(yè)建模研究和表單生成器的設(shè)計(jì)[D].哈爾濱:哈爾濱工程大學(xué),2006.
[5] 殷旭,廖斌,王新平.基于Web的工作流表單的柔性建模[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(14):3429-3432.
[6] 肖宇,許煒.基于表單和關(guān)系型數(shù)據(jù)庫(kù)的工作流管理系統(tǒng)[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2004,32(11):42-44.
[7] 廖斌,殷旭,王新平.基于Web工作流表單的設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2009,9(3):721-724.
[8] 劉迎春,蘭雨晴,金茂忠,等.基于Web的工作流系統(tǒng)中表單定義與處理[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(20):192-195.
[9] 唐文忠,莫偉棟.基于共享模型的工作流表單系統(tǒng)設(shè)計(jì)[J].北京航空航天大學(xué)學(xué)報(bào),2008,34(4):391-395.
[10] 王珊,薩師煊.數(shù)據(jù)庫(kù)系統(tǒng)概論[D].北京:高等教育出版社,2014.
作者簡(jiǎn)介:
方木云(1968-),男,博士,教授.研究領(lǐng)域:軟件工程,信息系統(tǒng).
劉海波(1995-),男,碩士生.研究領(lǐng)域:軟件工程.
姜? ?偉(1984-),男,碩士,副教授.研究領(lǐng)域:軟件工程.
劉? ?輝(1979-),男,碩士,副教授.研究領(lǐng)域: 軟件工程.