• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于MVC模式的Bug管理系統(tǒng)①

      2009-02-01 03:29任艷娜

      任艷娜 余 華

      [摘 要]本文開發(fā)了Bug管理系統(tǒng),目的就在于提供有效和直觀的Bug管理工具,為開發(fā)人員提供全面的Bug分析圖,從而為軟件開發(fā)過程改進(jìn)提供支持。開發(fā)BugDirectory時采用了現(xiàn)在比較流行的b/s結(jié)構(gòu)和MVC模式分層結(jié)構(gòu),使頁面表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)庫支持層能夠分離開,更易于軟件的開發(fā)、后期擴(kuò)展和維護(hù)。而Struts運(yùn)用就是為了能讓web程序更好的使用MVC這一經(jīng)典模式而推出的,運(yùn)用這種模式大大增強(qiáng)了BugDirectory的可維護(hù)性,而且使開發(fā)的難度大大降低。

      [關(guān)鍵詞]mvc struts Bug管理

      [中圖分類號]TP311[文獻(xiàn)標(biāo)識碼]A[文章編號]1007-9416(2009)12-0047-04

      開發(fā)一款好質(zhì)量的軟件,除了精益求精的需求分析,高水平的編碼技術(shù)外,可靠和完善的軟件測試也是相當(dāng)重要的。它直接決定了軟件編碼完成后是否能夠滿足客戶的需求。同時,軟件測試也是軟件開發(fā)過程中非常重要的一環(huán),但測試文檔的填寫繁瑣,一般都耗時較長,而且質(zhì)量很難得到保證。如何高質(zhì)量和高效率的進(jìn)行軟件測試,并進(jìn)行相應(yīng)的管理是一個關(guān)鍵的問題。傳統(tǒng)的文檔管理雖然已經(jīng)很成熟,但隨著系統(tǒng)規(guī)模化,軟件測試的管理開始變得難于控制,而且很難直觀的了解和分析開發(fā)過程中Bug的高發(fā)區(qū),不利于開發(fā)過程的改進(jìn)。所以開發(fā)BugDirectory這樣一套工具,就是要提高在測試過程中管理Bug的效率,進(jìn)而提高軟件測試的效率和質(zhì)量,同時也能為我們分析軟件的品質(zhì)提供依據(jù)[1]。

      1 MVC和Struts

      1.1 MVC簡介

      MVC模式是“Model-View-Controller”的縮寫,中文翻譯為“模式-視圖-控制器”。視圖(View)代表用戶交互界面,對于Web應(yīng)用來說,可以概括為HTML界面,但有可能為XHTML、XML和Applet。隨著應(yīng)用的復(fù)雜性和規(guī)模性,界面的處理也變得具有挑戰(zhàn)性。一個應(yīng)用可能有很多不同的視圖,MVC設(shè)計模式對于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理,以及用戶的請求。業(yè)務(wù)流程的處理交予模型(Model)處理。比如一個訂單的視圖只接受來自模型的數(shù)據(jù)并顯示給用戶,以及將用戶界面的輸入數(shù)據(jù)和請求傳遞給控制和模型。模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。業(yè)務(wù)流程的處理過程對其它層來說是黑箱操作,模型接受視圖請求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計可以說是MVC最主要的核心[2~3]??刂?Controller)可以理解為從用戶接收請求, 將模型與視圖匹配在一起,共同完成用戶的請求。劃分控制層的作用也很明顯,它清楚地告訴你,它就是一個分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請求。控制層不做任何的數(shù)據(jù)處理。例如,用戶點(diǎn)擊一個連接,控制層接受請求后, 并不處理業(yè)務(wù)信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。因此,一個模型可能對應(yīng)多個視圖,一個視圖可能對應(yīng)多個模型。

      1.2 Struts簡介

      Struts的推出正是為了將MVC模式的經(jīng)典框架更好的應(yīng)用的Web的開發(fā)中。Struts是基于Model 2之上的,而Model 2是經(jīng)典的MVC(模型-視圖-控制器)模型的Web應(yīng)用變體。Struts框架中視圖組件對應(yīng)于一個簡單的JSP文件,這個JSP文件包含了Struts定義的標(biāo)簽,控制器是Struts框架中的中樞,它由org.apache.struts.Action.ActionServlet這個Servlet來貫徹和執(zhí)行的。這個Servlet接收所有客戶端的請求,并把請求委派到指定的Action類,ActionServlet委派請求是基于客戶端傳入的URI。一旦Action類完成處理,ActionServlet根據(jù)Action返回的鍵值來決定在什么視圖中顯示Action的類處理結(jié)果。ActionServlet類似于一個創(chuàng)建Action對象的工廠,由Action對象去執(zhí)行應(yīng)用中實際的業(yè)務(wù)邏輯。控制器是Struts框架中最重要的部分[4]。

      2 BugDirectory系統(tǒng)簡要分析

      軟件測試是每軟件開發(fā)過程中必不可少且很重要的過程,特別是在軟件開發(fā)流程不太嚴(yán)格的情況下,測試過程中會出現(xiàn)很多的Bug,一般在傳統(tǒng)上都是采用普通文檔的Bug管理方式,但給測試人員帶來了很大的工作量。而且也不利于Bug的分析統(tǒng)計以從中發(fā)現(xiàn)問題,及時的在以后的過程中進(jìn)行改進(jìn)。BugDirectory就是問了彌補(bǔ)傳統(tǒng)文檔管理模式的缺陷而產(chǎn)生的。首先,BugDirectory可以提供記錄Bug信息的功能,并將所有的Bug記錄到指定的數(shù)據(jù)庫中,便于Bug信息的管理和維護(hù),也減少了測試人員的工作量,從而提高了軟件開發(fā)的質(zhì)量和效率。其次,BugDirectory提供了軟件開發(fā)人員的管理,可以幫助項目經(jīng)理有效的管理項目實施人員,提高團(tuán)隊開的效率。為了開發(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)生時期餅圖可以幫助開發(fā)人員清楚的了解在軟件開發(fā)過程中那些地方出現(xiàn)Bug頻率較高,為以后的軟件開發(fā)提供參考。Bug人員對應(yīng)圖是對所有Bug發(fā)現(xiàn)、修改和確認(rèn)者工作狀態(tài)的反應(yīng),可以直觀的了解項目組成員的工作狀態(tài),給項目經(jīng)理一些幫助。BugDirectory以上功能都是現(xiàn)在文檔Bug管理模式所不具備的,無論對于開發(fā)人員、項目經(jīng)理還是軟件開發(fā)的本身都是一件利器[5~6]。

      3 BugDirectory系統(tǒng)實現(xiàn)

      3.1 數(shù)據(jù)庫表結(jié)構(gòu)

      BugDirectory的數(shù)據(jù)庫采用了SQLServer2000,主要由四部分表組成:

      用戶表(tr_userinfo),Bug信息表(tr_BugInfo),工程信息表(tr_projectinfo)。在數(shù)據(jù)庫設(shè)計的過程中為每一個項目都建立了一個單獨(dú)的數(shù)據(jù)表,避免了把所有的項目都存儲在一個表里面,如果項目很多的話,不利于數(shù)據(jù)的維護(hù)性。同時在設(shè)計Bug信息表時,添加了一個Bug是否刪除的標(biāo)志位,該標(biāo)志用來標(biāo)示一條Bug信息是否已經(jīng)被刪除,在具體實現(xiàn)的時候我們不是直接的從數(shù)據(jù)庫中刪除要放棄的記錄,而是把它相應(yīng)的標(biāo)示為設(shè)置為刪除狀態(tài),更有利于數(shù)據(jù)的安全性。但是這樣做會給以后的開發(fā)過程中留下一個問題,當(dāng)需要往數(shù)據(jù)庫中插入一條記錄時,BugID號必須是自動生成的,因為用戶從數(shù)據(jù)庫中查詢出來的記錄都是標(biāo)示為沒有被刪除狀態(tài)的記錄,如果用戶自己添加BugID時可能會造成id重復(fù)而無法正常插入記錄[7]。

      3.2 前臺jsp代碼實現(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"%>

      這是頁面需要的一些頭文件,首先需要指定頁面文件的編碼格式。通過page設(shè)置。taglib是引入的struts的標(biāo)簽庫,基于Struts標(biāo)記庫主要有4種標(biāo)記組成。它們分別是 Bean,HTML,Logic和Nested。其中,HTML標(biāo)記用來創(chuàng)建表單中的各種供用戶輸入的控件以及生成各種基于HTML的用戶界面的元素。Bean標(biāo)記庫中包含用于定義新Bean,訪問Bean及其屬性的標(biāo)記。Logic標(biāo)記庫中的標(biāo)記能夠用來處理外觀邏輯而不需要使用Scriptlet腳本。

      前臺不僅要能向后臺傳送數(shù)據(jù),同時我們還要能把后臺數(shù)據(jù)處理的反饋信息顯示到頁面。在Struts中為我們提供了bean標(biāo)簽,可以方便的把后臺的數(shù)據(jù)顯示到前臺頁面。錯誤信息的標(biāo)簽—html:errors,后臺只要把相應(yīng)的錯誤信息返回到頁面就可以。如下所示。

      String str_Errors;//聲明一個錯誤變量

      str_Errors=(String) request.getAttribute("error");

      if (str_Errors!=null){out.println(str_Errors)}

      3.3 Struts中的配置文件

      在Struts中有兩個很重要的配置文件,Struts-config.xml和web.xml,其中Struts-config.xml是最關(guān)鍵的配置文件,我們所用到的bean的定義以及頁面、bean和后臺Action之間的聯(lián)系都是定義在Struts-config.xml中的。下面是bean在它中的定義。

      在Struts-config.xml文件中form-bean name 指明了項目中現(xiàn)有的form Bean的名稱,type指定了其相關(guān)的屬性,項目開發(fā)中所有用到的bean都需要在這里定義。

      input="/login.jsp"

      name="loginForm"

      path="/login"

      type="org.topcomm.struts.Action.LoginAction">

      Action中的input則將頁面和其對應(yīng)的FormBean對應(yīng)起來,當(dāng)頁面提交的時候,會自動的把頁面屬性的值填充到FormBean中相同的屬性中。前臺頁面和后臺的Action是通過Action中path關(guān)聯(lián)起來的,頁面的表單中的Action指定表單提交后訪問資源的路徑,頁面提交后系統(tǒng)會根據(jù)Struts-config.xml配置文件找到對應(yīng)路徑的Action,可見,Struts-config.xml在Struts中起到了中樞的作用。

      從Stunts的配置管理中我們就可以看出,做這樣的配置就是起了一個橋梁的作用,在不同業(yè)務(wù)層分開的同時還要能讓它們相互配合起來。這樣就實現(xiàn)了把業(yè)務(wù)邏輯分離出來,當(dāng)模型發(fā)生變化的時候,只需要該動業(yè)務(wù)邏輯層,也就是Action中的操作,而無須修改頁面,使軟件提高了靈活性和可維護(hù)性。

      3.4 后臺Action的實現(xiàn):相當(dāng)于MVC中的model

      和bean的實現(xiàn)一樣,在Action中用到的類我們也可以把它所在的包導(dǎo)入到其中,更有利于代碼的維護(hù)。在Action中只有一個默認(rèn)的execute方法,頁面提交后,系統(tǒng)找到對應(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中只有一個默認(rèn)的execute方法,如果要在一個Action中處理頁面的不同請求,單純的實現(xiàn)Action的execute方法是難以滿足的。如在BugDirectory的Bug添加和修改功能,就是一個頁面提交訪問同一個Action,但是要完成不同的任務(wù),這時就需要去繼承LookupDispatchMap這個類,在繼承這個類時還要實現(xiàn)getKeyMethodMap()方法。如下。

      protected Map getKeyMethodMap(){Map map=new HashMap(); map.put("main.button.return", "back");…..return map;}

      這個方法用來指定和后臺Action中具體方法的聯(lián)系。同時要修改Struts-config.xml文件在Action中添加屬性parameter的值。這樣如果頁面提交相同的表單Struts的系統(tǒng)會根據(jù)頁面?zhèn)鬟f的parameter的值用getKeyMethodMap()找到對應(yīng)的方法。在開發(fā)系統(tǒng)時,把類似的操作放到一起,提高了代碼的清晰度和維護(hù)性。

      3.5 成Bug狀態(tài)的圖形

      繪制圖形時主要是運(yùn)用了一款開源類包JFreeChart。JFreeChart是JAVA平臺上的一個開放的圖表繪制類庫。它完全使用JAVA語言編寫,是為applications, applets, servlets 以及JSP等使用所設(shè)計。JFreeChart可生成餅圖(pie charts)、柱狀圖(bar charts)、散點(diǎn)圖(scatter plots)、時序圖(time series)、甘特圖(Gantt charts)等等多種圖表,并且可以產(chǎn)生PNG和JPEG格式的輸出,還可以與PDF和EXCEL關(guān)聯(lián)。在使用需要將JFreeChart的lib包下的文件到如到相應(yīng)的項目文件的lib中。

      BugDirectory共從四個方面對系統(tǒng)中的Bug進(jìn)行了分析。

      Bug產(chǎn)生時期餅狀圖主要描述了項目中所有Bug在不同產(chǎn)生時期的比例關(guān)系圖,有了這張圖我們可以清晰、直觀的了解當(dāng)前Bug是在軟件開發(fā)的那個階段產(chǎn)生的,從而認(rèn)識到在軟件開發(fā)過程中哪些是開發(fā)的薄弱環(huán)節(jié),為以后的過程改進(jìn)提供充分的數(shù)據(jù),如圖1。

      新增Bug折線圖主要描述了在項目開發(fā)的時期內(nèi),每天出現(xiàn)的Bug數(shù)量,給項目管理者一個直觀的數(shù)據(jù),以及時的了解到當(dāng)天項目組成員的工作情況,也從側(cè)面反映了項目開發(fā)中最容易出現(xiàn)的問題點(diǎn)以及軟件開發(fā)的質(zhì)量,如圖2。

      Bug人員對應(yīng)圖主要描述了項目組各個成員在測試過程中發(fā)現(xiàn)、修改、對處和確認(rèn)的Bug數(shù)量圖,是各個項目成員工作狀態(tài)的反映,項目管理人員可以很方便的得到這些信息,從中發(fā)現(xiàn)問題,及時地做出相應(yīng)的調(diào)整,提高軟件項目開發(fā)的效率,如圖3。

      Bug狀態(tài)柱狀圖主要描述了項目中所有不同狀態(tài)Bug的情況,反應(yīng)了項目問題解決的進(jìn)度,從中可以知道當(dāng)前項目是否已經(jīng)可以正常的運(yùn)行。以上圖形都是適時地根據(jù)數(shù)據(jù)庫中的數(shù)據(jù)動態(tài)生成的,通過以上的圖表,可以及時直觀的反應(yīng)項目不同時期的不同狀態(tài),不僅利于項目測試期間的管理[8~9],而且在項目開發(fā)的整個過程中都能發(fā)揮巨大的推動作用。

      4 結(jié)語

      通常而言,實現(xiàn)模式應(yīng)該有助于除去重復(fù)代碼、簡化邏輯、說明意圖和提高靈活性。好的開發(fā)模式會產(chǎn)生好的軟件,優(yōu)秀的開發(fā)模式還能大大提高軟件開發(fā)的效率和質(zhì)量。BugDirectory正是由于運(yùn)用了Struts這種結(jié)構(gòu),比較輕松的實現(xiàn)來MVC經(jīng)典的模式,給開發(fā)過程帶來了很多的靈活性,不僅降低了開發(fā)的難度,還使BugDirectory的質(zhì)量得到了很好的保證。同時,也使BugDirectory功能的擴(kuò)展成為了可能。我們都知道,軟件開發(fā)的一大部分時間是化在了前期設(shè)計和后期的維護(hù)上,前期的設(shè)計做好,采用了正確合理的系統(tǒng)模式,就能使軟件后期的維護(hù)減少很多阻力。特別是現(xiàn)在,一個成熟的軟件往往是經(jīng)過原始軟件的多次擴(kuò)展而來的,在項目擴(kuò)展時,優(yōu)良的結(jié)構(gòu)為系統(tǒng)功能的擴(kuò)展提供了方便。對采用了規(guī)范合理的開發(fā)模式的系統(tǒng)進(jìn)行功能擴(kuò)展時,我們可能不會再因為系統(tǒng)層次模糊而使我們陷入重新架構(gòu)結(jié)構(gòu)的恐懼當(dāng)中,而是在需要擴(kuò)展功能的時,只是簡單的把需要的功能模塊添加到系統(tǒng)當(dāng)中,而這個過程中,我們可能只是很少的改動了前期的代碼,甚至不去改動。

      [參考文獻(xiàn)]

      [1] 黃柏素,梅宏.軟件工程實踐者的研究方法[M].機(jī)械工業(yè)出版社,1999.

      [2] 劉基誠.重構(gòu)與模式楊光[M].人民郵電處出版社,2006.

      [3] 孫衛(wèi)琴.精通Struts:基于MVC的Java web設(shè)計與開發(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ù)庫管理,設(shè)計與實現(xiàn)教程[M].清華大學(xué)出版社,2001.

      [8] 陸燕玲,梁磊.網(wǎng)絡(luò)數(shù)據(jù)庫[M].電子工業(yè)出版社,2001.

      [9] 李昭原.數(shù)據(jù)庫原理與應(yīng)用[M].科學(xué)出版社,1999.

      [基金項目]

      河南省教育廳基金項目

      (200510466005)

      [作者簡介]

      任艷娜(1977-),女,漢族,河南漯河人,河南農(nóng)業(yè)大學(xué)信息與管理科學(xué)學(xué)院,講師,碩士,主要研究方向:從事計算機(jī)應(yīng)用研究。

      永康市| 建水县| 荣成市| 枝江市| 海丰县| 延安市| 兰溪市| 宜宾市| 年辖:市辖区| 布拖县| 都江堰市| 乌海市| 双牌县| 汤原县| 温泉县| 井冈山市| 营口市| 长宁县| 洛宁县| 浦县| 东宁县| 巩义市| 嘉善县| 旺苍县| 宁河县| 阳谷县| 乌拉特中旗| 莎车县| 浏阳市| 吴堡县| 静乐县| 仁布县| 泾源县| 盐山县| 海兴县| 山东| 斗六市| 女性| 美姑县| 南皮县| 楚雄市|