任艷娜 余 華
[摘 要]本文開發(fā)了Bug管理系統(tǒng),目的就在于提供有效和直觀的Bug管理工具,為開發(fā)人員提供全面的Bug分析圖,從而為軟件開發(fā)過程改進(jìn)提供支持。開發(fā)BugDirectory時(shí)采用了現(xiàn)在比較流行的b/s結(jié)構(gòu)和MVC模式分層結(jié)構(gòu),使頁(yè)面表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)庫(kù)支持層能夠分離開,更易于軟件的開發(fā)、后期擴(kuò)展和維護(hù)。而Struts運(yùn)用就是為了能讓web程序更好的使用MVC這一經(jīng)典模式而推出的,運(yùn)用這種模式大大增強(qiáng)了BugDirectory的可維護(hù)性,而且使開發(fā)的難度大大降低。
[關(guān)鍵詞]mvc struts Bug管理
[中圖分類號(hào)]TP311[文獻(xiàn)標(biāo)識(shí)碼]A[文章編號(hào)]1007-9416(2009)12-0047-04
開發(fā)一款好質(zhì)量的軟件,除了精益求精的需求分析,高水平的編碼技術(shù)外,可靠和完善的軟件測(cè)試也是相當(dāng)重要的。它直接決定了軟件編碼完成后是否能夠滿足客戶的需求。同時(shí),軟件測(cè)試也是軟件開發(fā)過程中非常重要的一環(huán),但測(cè)試文檔的填寫繁瑣,一般都耗時(shí)較長(zhǎng),而且質(zhì)量很難得到保證。如何高質(zhì)量和高效率的進(jìn)行軟件測(cè)試,并進(jìn)行相應(yīng)的管理是一個(gè)關(guān)鍵的問題。傳統(tǒng)的文檔管理雖然已經(jīng)很成熟,但隨著系統(tǒng)規(guī)模化,軟件測(cè)試的管理開始變得難于控制,而且很難直觀的了解和分析開發(fā)過程中Bug的高發(fā)區(qū),不利于開發(fā)過程的改進(jìn)。所以開發(fā)BugDirectory這樣一套工具,就是要提高在測(cè)試過程中管理Bug的效率,進(jìn)而提高軟件測(cè)試的效率和質(zhì)量,同時(shí)也能為我們分析軟件的品質(zhì)提供依據(jù)[1]。
1 MVC和Struts
1.1 MVC簡(jiǎn)介
MVC模式是“Model-View-Controller”的縮寫,中文翻譯為“模式-視圖-控制器”。視圖(View)代表用戶交互界面,對(duì)于Web應(yīng)用來說,可以概括為HTML界面,但有可能為XHTML、XML和Applet。隨著應(yīng)用的復(fù)雜性和規(guī)模性,界面的處理也變得具有挑戰(zhàn)性。一個(gè)應(yīng)用可能有很多不同的視圖,MVC設(shè)計(jì)模式對(duì)于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理,以及用戶的請(qǐng)求。業(yè)務(wù)流程的處理交予模型(Model)處理。比如一個(gè)訂單的視圖只接受來自模型的數(shù)據(jù)并顯示給用戶,以及將用戶界面的輸入數(shù)據(jù)和請(qǐng)求傳遞給控制和模型。模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。業(yè)務(wù)流程的處理過程對(duì)其它層來說是黑箱操作,模型接受視圖請(qǐng)求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計(jì)可以說是MVC最主要的核心[2~3]。控制(Controller)可以理解為從用戶接收請(qǐng)求, 將模型與視圖匹配在一起,共同完成用戶的請(qǐng)求。劃分控制層的作用也很明顯,它清楚地告訴你,它就是一個(gè)分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請(qǐng)求??刂茖硬蛔鋈魏蔚臄?shù)據(jù)處理。例如,用戶點(diǎn)擊一個(gè)連接,控制層接受請(qǐng)求后, 并不處理業(yè)務(wù)信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。因此,一個(gè)模型可能對(duì)應(yīng)多個(gè)視圖,一個(gè)視圖可能對(duì)應(yīng)多個(gè)模型。
1.2 Struts簡(jiǎn)介
Struts的推出正是為了將MVC模式的經(jīng)典框架更好的應(yīng)用的Web的開發(fā)中。Struts是基于Model 2之上的,而Model 2是經(jīng)典的MVC(模型-視圖-控制器)模型的Web應(yīng)用變體。Struts框架中視圖組件對(duì)應(yīng)于一個(gè)簡(jiǎn)單的JSP文件,這個(gè)JSP文件包含了Struts定義的標(biāo)簽,控制器是Struts框架中的中樞,它由org.apache.struts.Action.ActionServlet這個(gè)Servlet來貫徹和執(zhí)行的。這個(gè)Servlet接收所有客戶端的請(qǐng)求,并把請(qǐng)求委派到指定的Action類,ActionServlet委派請(qǐng)求是基于客戶端傳入的URI。一旦Action類完成處理,ActionServlet根據(jù)Action返回的鍵值來決定在什么視圖中顯示Action的類處理結(jié)果。ActionServlet類似于一個(gè)創(chuàng)建Action對(duì)象的工廠,由Action對(duì)象去執(zhí)行應(yīng)用中實(shí)際的業(yè)務(wù)邏輯??刂破魇荢truts框架中最重要的部分[4]。
2 BugDirectory系統(tǒng)簡(jiǎn)要分析
軟件測(cè)試是每軟件開發(fā)過程中必不可少且很重要的過程,特別是在軟件開發(fā)流程不太嚴(yán)格的情況下,測(cè)試過程中會(huì)出現(xiàn)很多的Bug,一般在傳統(tǒng)上都是采用普通文檔的Bug管理方式,但給測(cè)試人員帶來了很大的工作量。而且也不利于Bug的分析統(tǒng)計(jì)以從中發(fā)現(xiàn)問題,及時(shí)的在以后的過程中進(jìn)行改進(jìn)。BugDirectory就是問了彌補(bǔ)傳統(tǒng)文檔管理模式的缺陷而產(chǎn)生的。首先,BugDirectory可以提供記錄Bug信息的功能,并將所有的Bug記錄到指定的數(shù)據(jù)庫(kù)中,便于Bug信息的管理和維護(hù),也減少了測(cè)試人員的工作量,從而提高了軟件開發(fā)的質(zhì)量和效率。其次,BugDirectory提供了軟件開發(fā)人員的管理,可以幫助項(xiàng)目經(jīng)理有效的管理項(xiàng)目實(shí)施人員,提高團(tuán)隊(duì)開的效率。為了開發(fā)人員能夠更加直觀的發(fā)現(xiàn)開發(fā)過程中Bug出現(xiàn)的規(guī)律,BugDirectory還提供了圖示,其中Bug新增曲線圖可以方便工作人員發(fā)現(xiàn)每天Bug產(chǎn)生的數(shù)量。Bug狀態(tài)柱狀圖可以直觀的分析出目前所有Bug的解決狀態(tài),更清晰的了解問題解決的進(jìn)度。Bug產(chǎn)生時(shí)期餅圖可以幫助開發(fā)人員清楚的了解在軟件開發(fā)過程中那些地方出現(xiàn)Bug頻率較高,為以后的軟件開發(fā)提供參考。Bug人員對(duì)應(yīng)圖是對(duì)所有Bug發(fā)現(xiàn)、修改和確認(rèn)者工作狀態(tài)的反應(yīng),可以直觀的了解項(xiàng)目組成員的工作狀態(tài),給項(xiàng)目經(jīng)理一些幫助。BugDirectory以上功能都是現(xiàn)在文檔Bug管理模式所不具備的,無(wú)論對(duì)于開發(fā)人員、項(xiàng)目經(jīng)理還是軟件開發(fā)的本身都是一件利器[5~6]。
3 BugDirectory系統(tǒng)實(shí)現(xiàn)
3.1 數(shù)據(jù)庫(kù)表結(jié)構(gòu)
BugDirectory的數(shù)據(jù)庫(kù)采用了SQLServer2000,主要由四部分表組成:
用戶表(tr_userinfo),Bug信息表(tr_BugInfo),工程信息表(tr_projectinfo)。在數(shù)據(jù)庫(kù)設(shè)計(jì)的過程中為每一個(gè)項(xiàng)目都建立了一個(gè)單獨(dú)的數(shù)據(jù)表,避免了把所有的項(xiàng)目都存儲(chǔ)在一個(gè)表里面,如果項(xiàng)目很多的話,不利于數(shù)據(jù)的維護(hù)性。同時(shí)在設(shè)計(jì)Bug信息表時(shí),添加了一個(gè)Bug是否刪除的標(biāo)志位,該標(biāo)志用來標(biāo)示一條Bug信息是否已經(jīng)被刪除,在具體實(shí)現(xiàn)的時(shí)候我們不是直接的從數(shù)據(jù)庫(kù)中刪除要放棄的記錄,而是把它相應(yīng)的標(biāo)示為設(shè)置為刪除狀態(tài),更有利于數(shù)據(jù)的安全性。但是這樣做會(huì)給以后的開發(fā)過程中留下一個(gè)問題,當(dāng)需要往數(shù)據(jù)庫(kù)中插入一條記錄時(shí),BugID號(hào)必須是自動(dòng)生成的,因?yàn)橛脩魪臄?shù)據(jù)庫(kù)中查詢出來的記錄都是標(biāo)示為沒有被刪除狀態(tài)的記錄,如果用戶自己添加BugID時(shí)可能會(huì)造成id重復(fù)而無(wú)法正常插入記錄[7]。
3.2 前臺(tái)jsp代碼實(shí)現(xiàn),相當(dāng)于MVC模式中的View
<%@ page language="java" pageEncoding="GB18030"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
這是頁(yè)面需要的一些頭文件,首先需要指定頁(yè)面文件的編碼格式。通過page設(shè)置。taglib是引入的struts的標(biāo)簽庫(kù),基于Struts標(biāo)記庫(kù)主要有4種標(biāo)記組成。它們分別是 Bean,HTML,Logic和Nested。其中,HTML標(biāo)記用來創(chuàng)建表單中的各種供用戶輸入的控件以及生成各種基于HTML的用戶界面的元素。Bean標(biāo)記庫(kù)中包含用于定義新Bean,訪問Bean及其屬性的標(biāo)記。Logic標(biāo)記庫(kù)中的標(biāo)記能夠用來處理外觀邏輯而不需要使用Scriptlet腳本。
前臺(tái)不僅要能向后臺(tái)傳送數(shù)據(jù),同時(shí)我們還要能把后臺(tái)數(shù)據(jù)處理的反饋信息顯示到頁(yè)面。在Struts中為我們提供了bean標(biāo)簽,可以方便的把后臺(tái)的數(shù)據(jù)顯示到前臺(tái)頁(yè)面。錯(cuò)誤信息的標(biāo)簽—html:errors,后臺(tái)只要把相應(yīng)的錯(cuò)誤信息返回到頁(yè)面就可以。如下所示。
String str_Errors;//聲明一個(gè)錯(cuò)誤變量
str_Errors=(String) request.getAttribute("error");
if (str_Errors!=null){out.println(str_Errors)}
3.3 Struts中的配置文件
在Struts中有兩個(gè)很重要的配置文件,Struts-config.xml和web.xml,其中Struts-config.xml是最關(guān)鍵的配置文件,我們所用到的bean的定義以及頁(yè)面、bean和后臺(tái)Action之間的聯(lián)系都是定義在Struts-config.xml中的。下面是bean在它中的定義。
在Struts-config.xml文件中form-bean name 指明了項(xiàng)目中現(xiàn)有的form Bean的名稱,type指定了其相關(guān)的屬性,項(xiàng)目開發(fā)中所有用到的bean都需要在這里定義。
input="/login.jsp" name="loginForm" path="/login" type="org.topcomm.struts.Action.LoginAction">
Action中的input則將頁(yè)面和其對(duì)應(yīng)的FormBean對(duì)應(yīng)起來,當(dāng)頁(yè)面提交的時(shí)候,會(huì)自動(dòng)的把頁(yè)面屬性的值填充到FormBean中相同的屬性中。前臺(tái)頁(yè)面和后臺(tái)的Action是通過Action中path關(guān)聯(lián)起來的,頁(yè)面的表單中的Action指定表單提交后訪問資源的路徑,頁(yè)面提交后系統(tǒng)會(huì)根據(jù)Struts-config.xml配置文件找到對(duì)應(yīng)路徑的Action,可見,Struts-config.xml在Struts中起到了中樞的作用。
從Stunts的配置管理中我們就可以看出,做這樣的配置就是起了一個(gè)橋梁的作用,在不同業(yè)務(wù)層分開的同時(shí)還要能讓它們相互配合起來。這樣就實(shí)現(xiàn)了把業(yè)務(wù)邏輯分離出來,當(dāng)模型發(fā)生變化的時(shí)候,只需要該動(dòng)業(yè)務(wù)邏輯層,也就是Action中的操作,而無(wú)須修改頁(yè)面,使軟件提高了靈活性和可維護(hù)性。
3.4 后臺(tái)Action的實(shí)現(xiàn):相當(dāng)于MVC中的model
和bean的實(shí)現(xiàn)一樣,在Action中用到的類我們也可以把它所在的包導(dǎo)入到其中,更有利于代碼的維護(hù)。在Action中只有一個(gè)默認(rèn)的execute方法,頁(yè)面提交后,系統(tǒng)找到對(duì)應(yīng)的Action后就執(zhí)行其中默認(rèn)的execute()方法。
public class LoginAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {LoginForm loginForm = (LoginForm) form;}
由于Action中只有一個(gè)默認(rèn)的execute方法,如果要在一個(gè)Action中處理頁(yè)面的不同請(qǐng)求,單純的實(shí)現(xiàn)Action的execute方法是難以滿足的。如在BugDirectory的Bug添加和修改功能,就是一個(gè)頁(yè)面提交訪問同一個(gè)Action,但是要完成不同的任務(wù),這時(shí)就需要去繼承LookupDispatchMap這個(gè)類,在繼承這個(gè)類時(shí)還要實(shí)現(xiàn)getKeyMethodMap()方法。如下。
protected Map getKeyMethodMap(){Map map=new HashMap(); map.put("main.button.return", "back");…..return map;}
這個(gè)方法用來指定和后臺(tái)Action中具體方法的聯(lián)系。同時(shí)要修改Struts-config.xml文件在Action中添加屬性parameter的值。這樣如果頁(yè)面提交相同的表單Struts的系統(tǒng)會(huì)根據(jù)頁(yè)面?zhèn)鬟f的parameter的值用getKeyMethodMap()找到對(duì)應(yīng)的方法。在開發(fā)系統(tǒng)時(shí),把類似的操作放到一起,提高了代碼的清晰度和維護(hù)性。
3.5 成Bug狀態(tài)的圖形
繪制圖形時(shí)主要是運(yùn)用了一款開源類包JFreeChart。JFreeChart是JAVA平臺(tái)上的一個(gè)開放的圖表繪制類庫(kù)。它完全使用JAVA語(yǔ)言編寫,是為applications, applets, servlets 以及JSP等使用所設(shè)計(jì)。JFreeChart可生成餅圖(pie charts)、柱狀圖(bar charts)、散點(diǎn)圖(scatter plots)、時(shí)序圖(time series)、甘特圖(Gantt charts)等等多種圖表,并且可以產(chǎn)生PNG和JPEG格式的輸出,還可以與PDF和EXCEL關(guān)聯(lián)。在使用需要將JFreeChart的lib包下的文件到如到相應(yīng)的項(xiàng)目文件的lib中。
BugDirectory共從四個(gè)方面對(duì)系統(tǒng)中的Bug進(jìn)行了分析。
Bug產(chǎn)生時(shí)期餅狀圖主要描述了項(xiàng)目中所有Bug在不同產(chǎn)生時(shí)期的比例關(guān)系圖,有了這張圖我們可以清晰、直觀的了解當(dāng)前Bug是在軟件開發(fā)的那個(gè)階段產(chǎn)生的,從而認(rèn)識(shí)到在軟件開發(fā)過程中哪些是開發(fā)的薄弱環(huán)節(jié),為以后的過程改進(jìn)提供充分的數(shù)據(jù),如圖1。
新增Bug折線圖主要描述了在項(xiàng)目開發(fā)的時(shí)期內(nèi),每天出現(xiàn)的Bug數(shù)量,給項(xiàng)目管理者一個(gè)直觀的數(shù)據(jù),以及時(shí)的了解到當(dāng)天項(xiàng)目組成員的工作情況,也從側(cè)面反映了項(xiàng)目開發(fā)中最容易出現(xiàn)的問題點(diǎn)以及軟件開發(fā)的質(zhì)量,如圖2。
Bug人員對(duì)應(yīng)圖主要描述了項(xiàng)目組各個(gè)成員在測(cè)試過程中發(fā)現(xiàn)、修改、對(duì)處和確認(rèn)的Bug數(shù)量圖,是各個(gè)項(xiàng)目成員工作狀態(tài)的反映,項(xiàng)目管理人員可以很方便的得到這些信息,從中發(fā)現(xiàn)問題,及時(shí)地做出相應(yīng)的調(diào)整,提高軟件項(xiàng)目開發(fā)的效率,如圖3。
Bug狀態(tài)柱狀圖主要描述了項(xiàng)目中所有不同狀態(tài)Bug的情況,反應(yīng)了項(xiàng)目問題解決的進(jìn)度,從中可以知道當(dāng)前項(xiàng)目是否已經(jīng)可以正常的運(yùn)行。以上圖形都是適時(shí)地根據(jù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)動(dòng)態(tài)生成的,通過以上的圖表,可以及時(shí)直觀的反應(yīng)項(xiàng)目不同時(shí)期的不同狀態(tài),不僅利于項(xiàng)目測(cè)試期間的管理[8~9],而且在項(xiàng)目開發(fā)的整個(gè)過程中都能發(fā)揮巨大的推動(dòng)作用。
4 結(jié)語(yǔ)
通常而言,實(shí)現(xiàn)模式應(yīng)該有助于除去重復(fù)代碼、簡(jiǎn)化邏輯、說明意圖和提高靈活性。好的開發(fā)模式會(huì)產(chǎn)生好的軟件,優(yōu)秀的開發(fā)模式還能大大提高軟件開發(fā)的效率和質(zhì)量。BugDirectory正是由于運(yùn)用了Struts這種結(jié)構(gòu),比較輕松的實(shí)現(xiàn)來MVC經(jīng)典的模式,給開發(fā)過程帶來了很多的靈活性,不僅降低了開發(fā)的難度,還使BugDirectory的質(zhì)量得到了很好的保證。同時(shí),也使BugDirectory功能的擴(kuò)展成為了可能。我們都知道,軟件開發(fā)的一大部分時(shí)間是化在了前期設(shè)計(jì)和后期的維護(hù)上,前期的設(shè)計(jì)做好,采用了正確合理的系統(tǒng)模式,就能使軟件后期的維護(hù)減少很多阻力。特別是現(xiàn)在,一個(gè)成熟的軟件往往是經(jīng)過原始軟件的多次擴(kuò)展而來的,在項(xiàng)目擴(kuò)展時(shí),優(yōu)良的結(jié)構(gòu)為系統(tǒng)功能的擴(kuò)展提供了方便。對(duì)采用了規(guī)范合理的開發(fā)模式的系統(tǒng)進(jìn)行功能擴(kuò)展時(shí),我們可能不會(huì)再因?yàn)橄到y(tǒng)層次模糊而使我們陷入重新架構(gòu)結(jié)構(gòu)的恐懼當(dāng)中,而是在需要擴(kuò)展功能的時(shí),只是簡(jiǎn)單的把需要的功能模塊添加到系統(tǒng)當(dāng)中,而這個(gè)過程中,我們可能只是很少的改動(dòng)了前期的代碼,甚至不去改動(dòng)。
[參考文獻(xiàn)]
[1] 黃柏素,梅宏.軟件工程實(shí)踐者的研究方法[M].機(jī)械工業(yè)出版社,1999.
[2] 劉基誠(chéng).重構(gòu)與模式楊光[M].人民郵電處出版社,2006.
[3] 孫衛(wèi)琴.精通Struts:基于MVC的Java web設(shè)計(jì)與開發(fā)[M].電子工業(yè)出版社出版,2006.
[4] (美)Roger S.Pressman,Software Engineering A Practitioners Approach,Fourth Edition[M], 機(jī)械工業(yè)出版社,1999.
[5] (美)Joshua Kerievsky.Refactoring to Patterns[M].人民郵電處出版社.2006.
[6] (美) Dave Thomas,David Heinemeier Hansson.Agile Web Development with Rails[M].電子工業(yè)出版社,2001.
[7] 趙杰,李濤,朱慧.SQL Server 數(shù)據(jù)庫(kù)管理,設(shè)計(jì)與實(shí)現(xiàn)教程[M].清華大學(xué)出版社,2001.
[8] 陸燕玲,梁磊.網(wǎng)絡(luò)數(shù)據(jù)庫(kù)[M].電子工業(yè)出版社,2001.
[9] 李昭原.數(shù)據(jù)庫(kù)原理與應(yīng)用[M].科學(xué)出版社,1999.
[基金項(xiàng)目]
河南省教育廳基金項(xiàng)目
(200510466005)
[作者簡(jiǎn)介]
任艷娜(1977-),女,漢族,河南漯河人,河南農(nóng)業(yè)大學(xué)信息與管理科學(xué)學(xué)院,講師,碩士,主要研究方向:從事計(jì)算機(jī)應(yīng)用研究。