田苗苗 孫宏波 范寶德
摘要:作為企業(yè)信息系統(tǒng)的一個(gè)必備模塊,統(tǒng)計(jì)與分析模塊需要將不同功能、不同模塊的數(shù)據(jù)連接起來(lái)按報(bào)表進(jìn)行查詢,然而結(jié)構(gòu)化方法或面向?qū)ο蠓椒ǘ紡?qiáng)調(diào)信息的隱蔽和封裝,因此在進(jìn)行報(bào)表分析和設(shè)計(jì)時(shí)不直觀、便捷。為了在報(bào)表分析和設(shè)計(jì)中更直觀地表示數(shù)據(jù)來(lái)源,且更便捷地導(dǎo)出SQL語(yǔ)句,提出了基于改進(jìn)Jackson圖的分析與設(shè)計(jì)方法。實(shí)驗(yàn)結(jié)果表明,在實(shí)際系統(tǒng)應(yīng)用中,該方法具有很強(qiáng)的可行性,能夠更方便地實(shí)現(xiàn)自動(dòng)化程序生成,提高軟件開(kāi)發(fā)生產(chǎn)率,同時(shí)更有利于報(bào)表數(shù)據(jù)的一致性驗(yàn)證,減少軟件出錯(cuò)概率。
關(guān)鍵詞:報(bào)表;軟件分析方法;軟件設(shè)計(jì)方法;改進(jìn)Jackson圖
DOIDOI:10.11907/rjdk.172469
中圖分類號(hào):TP301
文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2018)003004505
英文摘要Abstract:As an unavoidable module of enterprise information systems, module statistics and analysis rearranges data from various functions and modules into report forms. While both structural method and object oriented method are all emphases on information transparency and encapsulation, when it comes to report forms these methods are lack of intuitive and convenient. In order to display the data source more intuitively and to export the SQL statement more conveniently in the analysis and design of the report, an improved Jackson diagram based analysis and design method for report forms is proposed. Finally,experimental results show an industrial case validates the feasibility of this approach.The conclusion is that this approach is more convenient for automated program generation, and can improve the productivity of software development. It is more conducive to the consistency verification of report data and to reduce the probability of software error.
英文關(guān)鍵詞Key Words:report form; software analysis method; software design method; improved Jackson diagram
0引言
企業(yè)信息系統(tǒng)已經(jīng)被大部分企業(yè)廣泛使用[1]。在企業(yè)信息系統(tǒng)中,統(tǒng)計(jì)與分析數(shù)據(jù)往往以報(bào)表形式展現(xiàn)[2]。報(bào)表是進(jìn)行數(shù)據(jù)存儲(chǔ)、瀏覽、分析、統(tǒng)計(jì)的有效工具[3],也為企業(yè)經(jīng)營(yíng)者和決策者了解企業(yè)運(yùn)行情況并作出戰(zhàn)略決策提供了重要的數(shù)據(jù)支撐[4]。然而,現(xiàn)有企業(yè)信息系統(tǒng)往往采用結(jié)構(gòu)化方法或面向?qū)ο蠓椒ㄟM(jìn)行分析和設(shè)計(jì)[5],這兩種方法都強(qiáng)調(diào)了信息的隱蔽和封裝[6]。而報(bào)表數(shù)據(jù)往往來(lái)源于不同的模塊和功能,這就對(duì)報(bào)表的分析和設(shè)計(jì)造成了一定困難。
另一方面,作為面向數(shù)據(jù)結(jié)構(gòu)的分析和設(shè)計(jì)方法,傳統(tǒng)的Jackson圖能夠用于報(bào)表分析和設(shè)計(jì)[7],卻很難與結(jié)構(gòu)化方法或者面向?qū)ο蠓椒ńY(jié)合起來(lái)[8]。本文借鑒Jackson方法,提出一種基于改進(jìn)Jackson圖的分析與設(shè)計(jì)方法,不僅能夠有效地分析與設(shè)計(jì)報(bào)表,還能與已有的結(jié)構(gòu)化方法及面向?qū)ο蠓椒ㄟM(jìn)行有機(jī)結(jié)合。
1基于改進(jìn)Jackson圖的分析方法
1.1基本屬性表示
在改進(jìn)的Jackson圖中,圓角矩形表示最基本的數(shù)據(jù)元素,在此基礎(chǔ)上還有若干屬性的表示方法,如圖1所示。其中,A表示報(bào)表需要顯示的數(shù)據(jù)元素名稱,用正體表示。報(bào)表中不需要顯示的數(shù)據(jù)元素名稱用斜體表示。F(A)表示對(duì)數(shù)據(jù)元素A的函數(shù)操作,F(xiàn)表示函數(shù)名,F(xiàn)也可以為嵌套函數(shù)。左上角標(biāo)G(p)表示數(shù)據(jù)元素A與參數(shù)p的關(guān)系,G表示關(guān)系運(yùn)算符或BETWEEN…AND…。當(dāng)G表示BETWEEN…AND…時(shí),表示為G(p1,p2)。右上角標(biāo)β表示對(duì)A操作的關(guān)鍵字,如β=g表示“GROUP BY”,β=o表示“ORDER BY”,β=d表示“DISTINCT”。A表示臨時(shí)表中存儲(chǔ)的數(shù)據(jù),(a)表示對(duì)A重命名。
1.3臨時(shí)表表示
報(bào)表有時(shí)需要建立臨時(shí)表,以方便查詢和數(shù)據(jù)操作,如圖3所示。臨時(shí)表有兩種表示方法,一種是通過(guò)實(shí)體中的數(shù)據(jù)元素連接得到結(jié)果集合,如圖3(a)所示;另一種是程序執(zhí)行過(guò)程中需要存放臨時(shí)數(shù)據(jù),將臨時(shí)數(shù)據(jù)存放到臨時(shí)表中,有些臨時(shí)數(shù)據(jù)通過(guò)子過(guò)程得到,如圖3(b)所示。臨時(shí)表也是實(shí)體的一種。
1.4實(shí)體關(guān)系表示
實(shí)體與實(shí)體之間的關(guān)系通過(guò)實(shí)體間的數(shù)據(jù)元素建立連接,如圖4所示。在實(shí)體1中起到連接作用的數(shù)據(jù)元素通過(guò)連線與實(shí)體4連接,在實(shí)體4中起到連接作用的數(shù)據(jù)元素用左上角標(biāo)G(p)標(biāo)記,實(shí)體1與實(shí)體4則建立了關(guān)系。其中,P表示外界接口傳入的參數(shù),F(xiàn)(A)表示對(duì)A的函數(shù)操作。圖4的實(shí)體可以是視圖也可是臨時(shí)表。
臨時(shí)表不僅可以與其它實(shí)體建立連接,還可以對(duì)臨時(shí)表中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)操作。當(dāng)統(tǒng)計(jì)臨時(shí)實(shí)體中的數(shù)據(jù)時(shí),可直接對(duì)臨時(shí)表中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總,如圖5(a)所示;也可以通過(guò)臨時(shí)表中的某些數(shù)據(jù)統(tǒng)計(jì)出不同的匯總信息,如圖5(b)所示,通過(guò)數(shù)據(jù)A統(tǒng)計(jì)出不同的匯總信息。這僅表示臨時(shí)表的信息匯總,不表示匯總信息存儲(chǔ)在臨時(shí)表中。
1.5程序結(jié)構(gòu)定義
改進(jìn)Jackson圖包含矩形框、框內(nèi)文字、連線等。矩形框與矩形框之間的關(guān)系不是調(diào)用關(guān)系,而是組成關(guān)系,一個(gè)矩形框中包含的操作僅由它下層矩形框中的操作組成。框內(nèi)文字用來(lái)表達(dá)數(shù)據(jù)的具體內(nèi)容。
改進(jìn)Jackson圖中元素彼此間的邏輯關(guān)系有順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)[9],如圖6所示。順序結(jié)構(gòu)由一個(gè)或多個(gè)元素組成,每個(gè)元素按照確定次序出現(xiàn)一次,一般為從左到右的順序,如圖6(a)所示;選擇結(jié)構(gòu)包含兩個(gè)或多個(gè)元素,每次使用這些元素時(shí),按照一定條件從這些元素中選擇一個(gè)執(zhí)行,如圖6(b)所示。其中“0”表示選擇,S(i)為執(zhí)行條件;循環(huán)結(jié)構(gòu)包含一個(gè)循環(huán)體,根據(jù)使用時(shí)的條件每進(jìn)入循環(huán)結(jié)構(gòu)一次,循環(huán)體將被執(zhí)行多次,也可能執(zhí)行0次,如圖6(c)所示,其中“*”表示循環(huán)。
2基于改進(jìn)Jackson圖的設(shè)計(jì)方法
報(bào)表的最終目的是為用戶呈現(xiàn)有指導(dǎo)意義的數(shù)據(jù)[10],經(jīng)過(guò)基于改進(jìn)Jackson圖的分析之后,進(jìn)一步進(jìn)行設(shè)計(jì)工作。
2.1定義
為了敘述方便,本文作以下定義:
終端實(shí)體:在改進(jìn)Jackson圖中,終端實(shí)體是只能由其它實(shí)體生成而不能生成其它實(shí)體的實(shí)體。
非終端實(shí)體:在改進(jìn)Jackson圖中,非終端實(shí)體是能生成其它實(shí)體的實(shí)體。
生成框:在矩形框內(nèi),帶有“生成”字眼的矩形框稱為生成框。
程序結(jié)構(gòu)框:通過(guò)報(bào)表的輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)的對(duì)應(yīng)關(guān)系,導(dǎo)出報(bào)表程序結(jié)構(gòu)時(shí),表示程序結(jié)構(gòu)的矩形框稱為程序結(jié)構(gòu)框。在SQL SELECT轉(zhuǎn)化規(guī)則中,將忽略程序結(jié)構(gòu)框。
公式框:如果矩形框內(nèi)是公式,稱為公式框。
內(nèi)部連接條件:在視圖或臨時(shí)表中,數(shù)據(jù)庫(kù)中的多張表通過(guò)相同的數(shù)據(jù)元素連接起來(lái),這種連接條件稱為內(nèi)部連接條件。
外部連接條件:在實(shí)體與實(shí)體之間的關(guān)系中,上一個(gè)實(shí)體的數(shù)據(jù)元素通過(guò)生成框,連接下一個(gè)實(shí)體中有左上角標(biāo)G(p)的實(shí)體數(shù)據(jù)元素,這種連接條件稱為外部連接條件。
2.2終端實(shí)體轉(zhuǎn)化規(guī)則
在建立實(shí)體之間關(guān)系時(shí),實(shí)體1中的數(shù)據(jù)元素與實(shí)體2的數(shù)據(jù)元素建立連接,這就對(duì)應(yīng)了一條SQL SELECT語(yǔ)句。所以,每一個(gè)生成框生成一條SQL SELECT語(yǔ)句。按照以下定義的規(guī)則得到的SQL SELECT語(yǔ)句,如圖7所示。
定義的規(guī)則為:①每一個(gè)生成框生成一條SQL SELECT語(yǔ)句;②在生成的實(shí)體中,實(shí)體中正常字體的數(shù)據(jù)元素依次在SELECT關(guān)鍵字后,用逗號(hào)分隔;③在生成的實(shí)體中,該實(shí)體中包括的實(shí)體名依次在FROM關(guān)鍵字之后,用逗號(hào)分隔;④在生成的實(shí)體中,內(nèi)部連接條件轉(zhuǎn)化成WHERE條件子句,每一個(gè)連接線對(duì)應(yīng)一個(gè)WHERE條件子句,連接線相當(dāng)于等號(hào);⑤外部連接條件也轉(zhuǎn)化為WHERE條件子句,根據(jù)生成實(shí)體中數(shù)據(jù)元素的左上角標(biāo)G(p)轉(zhuǎn)化為WHERE條件子句;⑥如果在生成的實(shí)體中,數(shù)據(jù)元素有右上角標(biāo)β,在得到這些數(shù)據(jù)元素時(shí)要寫(xiě)上這些標(biāo)記。
2.3非終端實(shí)體轉(zhuǎn)化規(guī)則
非終端實(shí)體轉(zhuǎn)化規(guī)則與終端實(shí)體轉(zhuǎn)化規(guī)則基本相同,區(qū)別在于SELECT關(guān)鍵字之后的規(guī)則。在非終端實(shí)體中規(guī)則為:SELECT關(guān)鍵字之后為連接該實(shí)體之后生成框的數(shù)據(jù)元素。按照非終端實(shí)體轉(zhuǎn)化規(guī)則轉(zhuǎn)化的SQL SELECT語(yǔ)句,如圖8所示。
2.4子過(guò)程轉(zhuǎn)化規(guī)則
子過(guò)程獲得的數(shù)據(jù)存放在臨時(shí)表中。子過(guò)程中包含公式框,框內(nèi)是對(duì)數(shù)據(jù)計(jì)算的公式。子過(guò)程轉(zhuǎn)化為的SQL SELECT語(yǔ)句如圖9所示。下面定義公式框的規(guī)則:①將公式框以及公式框以下的部分全都去掉,成為終端實(shí)體,按照終端實(shí)體的轉(zhuǎn)化規(guī)則轉(zhuǎn)化為SQL SELECT語(yǔ)句;②每一個(gè)公式框生成一條SQL SELECT語(yǔ)句;③將公式框內(nèi)的操作方法寫(xiě)在SELECT關(guān)鍵字之后,再寫(xiě)關(guān)鍵字AS,AS之后為緊跟公式框的數(shù)據(jù)元素名稱;④FROM關(guān)鍵字以及WHERE關(guān)鍵字之后的規(guī)則與終端實(shí)體的轉(zhuǎn)化規(guī)則相同。
3應(yīng)用案例
以煙臺(tái)某公司受訂年度統(tǒng)計(jì)表為例,用改進(jìn)Jackson圖分析受訂年度統(tǒng)計(jì)表的數(shù)據(jù)結(jié)構(gòu),然后轉(zhuǎn)化為SQL語(yǔ)句??蛻粢蟮氖苡喣甓冉y(tǒng)計(jì)表的數(shù)據(jù)結(jié)構(gòu)如圖10所示。報(bào)表中顯示的數(shù)據(jù)分為表頭信息和表體信息,表頭信息從基礎(chǔ)資料模塊中獲得,表體信息從多個(gè)業(yè)務(wù)模塊中獲得。
改進(jìn)Jackson圖的報(bào)表分析過(guò)程為:①分析報(bào)表的輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu),找出輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元,即有直接的因果關(guān)系,在程序中可以同時(shí)處理,對(duì)于每對(duì)有對(duì)應(yīng)關(guān)系的單元畫(huà)一個(gè)程序框,導(dǎo)出程序結(jié)構(gòu)[11];②根據(jù)程序結(jié)構(gòu)確定實(shí)體,以及實(shí)體關(guān)系;③根據(jù)定義的規(guī)則,導(dǎo)出SQL SELECT語(yǔ)句。
報(bào)表的輸入數(shù)據(jù)結(jié)構(gòu)為數(shù)據(jù)庫(kù)中的數(shù)據(jù),而數(shù)據(jù)庫(kù)中的數(shù)據(jù)都存儲(chǔ)在數(shù)據(jù)庫(kù)表中,數(shù)據(jù)庫(kù)中的表又分為基礎(chǔ)資料模塊表和業(yè)務(wù)模塊表,輸入數(shù)據(jù)結(jié)構(gòu)見(jiàn)圖11(a);報(bào)表的輸出數(shù)據(jù)結(jié)構(gòu)是多條報(bào)表記錄,一條報(bào)表記錄包括表頭信息和表體信息,輸出數(shù)據(jù)結(jié)構(gòu)見(jiàn)圖11(b);報(bào)表中的記錄從數(shù)據(jù)庫(kù)中獲得,報(bào)表中表頭信息從數(shù)據(jù)庫(kù)的基礎(chǔ)資料模塊獲得,表體信息從數(shù)據(jù)庫(kù)的業(yè)務(wù)模塊獲得,從而得出報(bào)表輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)的關(guān)系,如圖11(c)所示;根據(jù)輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)的關(guān)系導(dǎo)出程序結(jié)構(gòu),如圖11(d)所示;進(jìn)一步分析受訂年度統(tǒng)計(jì)表得到詳細(xì)程序結(jié)構(gòu),如圖11(e)所示。
由于篇幅有限,本文僅以受訂年度統(tǒng)計(jì)表Jackson圖中的一部分——生成表體索引為例,導(dǎo)出SQL語(yǔ)句。生成表體索引的Jackson圖如圖12所示,表體索引實(shí)體為非終端實(shí)體,應(yīng)用非終端實(shí)體轉(zhuǎn)化規(guī)則,轉(zhuǎn)化為SQL SELECT語(yǔ)句,如圖13所示。
受訂年度統(tǒng)計(jì)表的Jackson圖應(yīng)用上述SQL語(yǔ)句自動(dòng)轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)了自動(dòng)化程序的生成,提高了軟件開(kāi)發(fā)效率,有利于報(bào)表數(shù)據(jù)的一致性驗(yàn)證,有效地指導(dǎo)了后續(xù)編碼階段。受訂年度統(tǒng)計(jì)表的運(yùn)行結(jié)果如圖14所示。
4結(jié)語(yǔ)
現(xiàn)有企業(yè)信息系統(tǒng)往往采用結(jié)構(gòu)化方法或面向?qū)ο蠓椒ㄟM(jìn)行分析和設(shè)計(jì),這兩種方法中都強(qiáng)調(diào)了信息的隱蔽和封裝。然而作為企業(yè)信息系統(tǒng)的一個(gè)必備模塊,統(tǒng)計(jì)與分析模塊卻需要將不同功能、不同模塊的數(shù)據(jù)連接起來(lái)進(jìn)行統(tǒng)一查詢,該模塊往往由多個(gè)報(bào)表構(gòu)成,對(duì)于這些報(bào)表功能的分析和設(shè)計(jì)尚缺乏有效手段。本文提出了一種基于Jackson圖的分析與設(shè)計(jì)方法,相比于其它分析設(shè)計(jì)方法,本方法具有如下優(yōu)點(diǎn):①重新定義的Jackson圖對(duì)于報(bào)表分析的表達(dá)更為直觀,與報(bào)表的實(shí)際分析過(guò)程更加契合,更便于理解;②提出的SQL語(yǔ)句自動(dòng)轉(zhuǎn)換規(guī)則,更便于實(shí)現(xiàn)自動(dòng)化程序生成,提高軟件開(kāi)發(fā)的生產(chǎn)率;③形式化的生成過(guò)程,更有利于報(bào)表數(shù)據(jù)的一致性驗(yàn)證,減少軟件出錯(cuò)概率。最后,本文在實(shí)際案例中驗(yàn)證了該方法的可行性和有效性。
參考文獻(xiàn)參考文獻(xiàn):
[1]林世明.計(jì)算機(jī)集成信息系統(tǒng)在企業(yè)管理中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2016(2):244.
[2]潘永才,劉海龍.可定制報(bào)表系統(tǒng)的設(shè)計(jì)與應(yīng)用[J].物聯(lián)網(wǎng)技術(shù),2015(1):104106.
[3]劉麗欽.基于非線性模型的報(bào)表工具的研究[D].北京:華北電力大學(xué)(北京),2009.
[4]湯加,符云清,萬(wàn)煊民.一種基于單數(shù)據(jù)源的可視化自定義報(bào)表模型[J].計(jì)算機(jī)科學(xué),2017,44(5):184188.
[5]張淑娟.軟件工程技術(shù)發(fā)展趨勢(shì)研究[J].軟件導(dǎo)刊,2014(2):1213.
[6]仲輝,曹淑艷,邱滌珊.面向?qū)ο笈c結(jié)構(gòu)的系統(tǒng)分析與設(shè)計(jì)方法應(yīng)用研究[J].計(jì)算機(jī)工程與應(yīng)用,2003,39(23):105107.
[7]JACKSON M A. Principles of program design[M].New York: Academic Press,1975.
[8]史濟(jì)民,顧春華,鄭紅.軟件工程:原理、方法與應(yīng)用[M].第3版.北京:高等教育出版社,2009.
[9]張海藩.軟件工程導(dǎo)論[M].第5版.北京:清華大學(xué)出版社,2008.
[10]馬瑞敏.基于Web的報(bào)表生成技術(shù)研究及其應(yīng)用[D].重慶:重慶大學(xué),2009.
[11]姜宏偉,呂勵(lì),梁田,等.Jackson設(shè)計(jì)方法中關(guān)于結(jié)構(gòu)沖突的處理[J].智能計(jì)算機(jī)與應(yīng)用,2001(2):3031.
責(zé)任編輯(責(zé)任編輯:黃?。?