亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于TDD的領(lǐng)域?qū)ο髮訉ο筇崛》椒ㄑ芯?/h1>
        2018-05-15 08:31:14姚遠(yuǎn)張樊黃玉蘭
        軟件導(dǎo)刊 2018年4期
        關(guān)鍵詞:測試用例

        姚遠(yuǎn) 張樊 黃玉蘭

        摘 要:目前云系統(tǒng)服務(wù)端存在著各類分層模型架構(gòu),盡管這些分層架構(gòu)通常有所差異,但始終存在著領(lǐng)域?qū)ο髮樱―omain Object Layer)。領(lǐng)域?qū)ο髮又械膶ο髮φ鎸嵤澜缋锏臉I(yè)務(wù)及角色進(jìn)行抽象與映射,封裝了現(xiàn)實世界中的關(guān)鍵業(yè)務(wù)過程與實體狀態(tài)。因此,如何建立云服務(wù)領(lǐng)域?qū)ο髮邮敲嫦驅(qū)ο箝_發(fā)方法中的關(guān)鍵部分。測試驅(qū)動開發(fā)(Test Driven Development ,簡稱TDD)作為一種軟件開發(fā)方法,使用一組單元測試用例作為軟件開發(fā)的基礎(chǔ)與手段,意在使軟件開發(fā)過程始終不偏離軟件的主要功能,以實現(xiàn)敏捷開發(fā)。提出一種基于TDD進(jìn)行領(lǐng)域?qū)ο髮拥膶ο筇崛 ?gòu)建領(lǐng)域?qū)ο髮拥姆椒?,并通過實例對該方法進(jìn)行驗證。驗證結(jié)果顯示,構(gòu)建的領(lǐng)域?qū)ο髮恿6染?xì),識別準(zhǔn)確、完整。

        關(guān)鍵詞:TDD;測試用例;領(lǐng)域?qū)ο髮?;對象識別;軟件建模;云系統(tǒng)

        DOI:10.11907/rjdk.172548

        中圖分類號:TP301

        文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2018)004-0036-03

        Abstract:There are various layered model structures in the present cloud system server. Although in general these structures are different they all have domain object layer (DOL). The objects in DOL are the abstraction and reflection of operation and roles in the real world and they encapsulate the key operational process and entity status. Therefore how to establish DOL is the key part of the whole development. This paper uses test-driven development(TDD) as the software development method in which a group of unit test samples are employed as the basis to ensure basic users' needs to be met and agile development to be accomplished in the whole development process. It is proposed to do object extraction based on TDD and establish DOL. The test confirms that the logic objects in the established DOL are in very tiny particle size with accurate and complete recognition.

        Key Words:TDD; test samples; domain object layer; object recognition; software model design; cloud system

        1 TDD用于發(fā)現(xiàn)領(lǐng)域邏輯對象原理

        軟件開發(fā)過程由面向過程開發(fā)轉(zhuǎn)向面向?qū)ο箝_發(fā)已有將近20年歷史,面向?qū)ο箝_發(fā)方法已經(jīng)走過了簡單對象封裝、分組對象域、按功能職責(zé)分層進(jìn)行對象劃分的歷程[1-2]。軟件組成部分不再是簡單地按功能切分,而是按照業(yè)務(wù)領(lǐng)域的業(yè)務(wù)過程及角色識別出相應(yīng)對象,通過這些對象獨立使用或相互協(xié)作組成相應(yīng)的軟件功能模塊。

        面向?qū)ο蠓治?、設(shè)計與開發(fā)已由最初的粗粒度簡單對象封裝,演化出幾種成熟的分層對象設(shè)計模型。受C/S(客戶/服務(wù)器)、N-Tier(多層架)、B/S架構(gòu)、SOA(面向服務(wù)架構(gòu))等軟件開發(fā)架構(gòu)的影響,以及多種開發(fā)語言進(jìn)化的推動,面向?qū)ο蟮能浖话憧砂?~5個邏輯層次劃分[3-6]。以一般云系統(tǒng)提供的服務(wù)端軟件架構(gòu)為例,軟件層次如圖1所示。

        其中領(lǐng)域?qū)嶓w層是層次架構(gòu)中的核心層,業(yè)務(wù)領(lǐng)域的所有關(guān)鍵業(yè)務(wù)均由相應(yīng)領(lǐng)域?qū)嶓w完成,同時由于領(lǐng)域?qū)嶓w是現(xiàn)實世界中人、物的抽象,只要是屬于該業(yè)務(wù)領(lǐng)域的專家即能對領(lǐng)域?qū)嶓w進(jìn)行問題分析,這就為現(xiàn)實需求理解和軟件功能實現(xiàn)之間搭建了一座很好的橋梁。領(lǐng)域?qū)ο竽P偷慕⒁矠檐浖δ軐崿F(xiàn)帶來了極大好處,由于領(lǐng)域內(nèi)業(yè)務(wù)流程容易發(fā)生變化,但領(lǐng)域?qū)ο髤s相對變化較小,所以通過先識別領(lǐng)域?qū)ο髮?,進(jìn)而構(gòu)建整個軟件層次對象模型,可以大大降低軟件的升級和維護(hù)成本。

        一般有兩種方法實現(xiàn)領(lǐng)域?qū)嶓w層中的領(lǐng)域?qū)ο蠼#孩儆蒛ML統(tǒng)一建模過程提出的傳統(tǒng)方法進(jìn)行識別,這種方法要求在軟件需求獲取階段使用用例圖捕捉用戶需求,并根據(jù)用例圖中的名詞、行為等進(jìn)行領(lǐng)域?qū)嶓w識別;②由數(shù)據(jù)庫的ER模型導(dǎo)出底層數(shù)據(jù)庫結(jié)構(gòu),再由數(shù)據(jù)庫的ER模型直接向上擴(kuò)展為相應(yīng)的領(lǐng)域?qū)嶓w模型。

        在上述兩種領(lǐng)域?qū)ο蠼7椒ㄖ?,前者要求自頂向下進(jìn)行面向?qū)ο笤O(shè)計,要求一開始就有一個宏大而全局的軟件架構(gòu),這對于軟件設(shè)計者把握架構(gòu)與系統(tǒng)分析能力都提出了較高要求,而后者則由傳統(tǒng)的CS架構(gòu)體系轉(zhuǎn)化而來,先做好數(shù)據(jù)庫設(shè)計再由數(shù)據(jù)表映射出領(lǐng)域?qū)嶓w。這種方式實際上是一種由面向過程開發(fā)向面向?qū)ο蟮倪^渡方式,由于數(shù)據(jù)庫先于領(lǐng)域?qū)嶓w設(shè)計出來,所以軟件開發(fā)不得不向已經(jīng)成形的數(shù)據(jù)庫架構(gòu)傾斜,使軟件后續(xù)設(shè)計遭遇掣肘。因此,本文提出TDD構(gòu)建領(lǐng)域?qū)ο蟮姆椒ā?/p>

        TDD全稱為Test Driven Development,意即測試驅(qū)動開發(fā)。它是近幾年根據(jù)軟件開發(fā)體系極限編程(XP Programming)和敏捷開發(fā)(Agile Programming)發(fā)展而來的一種開發(fā)實踐[7]。

        TDD要求使用一組單元測試用例作為軟件開發(fā)的起點。它實際上是一種迭代的軟件開發(fā)過程,在每一次軟件迭代開發(fā)過程中,開發(fā)者首先需要根據(jù)軟件功能撰寫一組測試用例,這組用例需要覆蓋所有要求開發(fā)的功能。根據(jù)這組測試用例,即可確定所需開發(fā)的功能集合,而且必定也是能夠滿足用戶需求的最小功能集合。同時,由于每次迭代開發(fā)均由測試用例先導(dǎo),即使用戶需求有大的變更,也可以根據(jù)需要重新編寫測試用例,并進(jìn)行功能開發(fā)。而這種重新編寫所花費的人力與時間成本相比于上述兩種傳統(tǒng)方法開發(fā),有效性大大提升[8-10]。

        2 通過TDD提取領(lǐng)域?qū)ο髮拥姆椒?/p>

        在實際開發(fā)中,使用TDD結(jié)合面向?qū)ο蠓謱娱_發(fā)設(shè)計技術(shù),取得了良好效果。首先將系統(tǒng)劃分為服務(wù)層、業(yè)務(wù)邏輯層、領(lǐng)域?qū)ο髮?、持久化層、底層?shù)據(jù)庫等層次。在實際開發(fā)過程中,主要進(jìn)行領(lǐng)域?qū)ο蟮膭?chuàng)建,再由它向上擴(kuò)展出業(yè)務(wù)邏輯層和服務(wù)層軟件對象,向下借助O/R Mapping工具得到相應(yīng)的持久化層對象及數(shù)據(jù)庫表。在實際開發(fā)過程中,針對每個用戶需求寫出一個測試用例。使用Java的JUnit框架對生成的測試用例進(jìn)行自動測試。測試用例的寫法與普通Java類似,只是每個作為測試用例的方法加上[test]注記,以使該方法的JUnit框架可以進(jìn)行自動調(diào)用。在測試用例中可以使用Assert類檢查測試結(jié)果,比較實際結(jié)果與期望結(jié)果的差別。當(dāng)每個測試方法的結(jié)果不符合預(yù)期時,該測試用例即被認(rèn)為沒有通過,此時開發(fā)者必須修改代碼,以通過該測試用例。

        2.1 領(lǐng)域?qū)ο蠡窘Y(jié)構(gòu)識別

        通過將需求分解為測試用例中的期望值與期望結(jié)果,可以很直觀地找到相應(yīng)的領(lǐng)域?qū)ο?。通過需求功能編寫測試用例,測試用例將直觀表達(dá)出用戶需求的各種數(shù)據(jù),由這些數(shù)據(jù)發(fā)現(xiàn)領(lǐng)域?qū)ο蟆R话愕念I(lǐng)域?qū)ο蠖紩袆?chuàng)建、修改、檢索、刪除的操作(一般被稱為CRUD操作)。因此,對于一個已定義出的領(lǐng)域?qū)ο螅梢詣?chuàng)建4個測試用例,分別對應(yīng)這4種操作。為了使這幾個測試用例通過單元測試,它們的屬性和方法必須滿足測試用例中的調(diào)用。因此,根據(jù)測試用例獲得的領(lǐng)域?qū)ο笠部梢垣@得所需定義的屬性與方法,因而得到了相應(yīng)領(lǐng)域?qū)ο蟮幕窘Y(jié)構(gòu)。

        2.2 發(fā)現(xiàn)領(lǐng)域?qū)嶓w間的聯(lián)系

        當(dāng)進(jìn)行測試用例編寫時,根據(jù)需求編寫測試用例,會發(fā)現(xiàn)領(lǐng)域?qū)嶓w間有很強的聯(lián)系。繼續(xù)從測試用例中發(fā)現(xiàn)新的實體。

        2.3 發(fā)現(xiàn)用于規(guī)則約束與取值范圍的實體類

        在定義領(lǐng)域?qū)嶓w時,對于規(guī)則約束與取值范圍的考慮是一個重要內(nèi)容,屬于系統(tǒng)基礎(chǔ)架構(gòu)的一部分。通過撰寫某一領(lǐng)域?qū)嶓w的CRUD測試用例,可以將一個類的屬性上升為另一個獨立的類。

        根據(jù)對每個測試用例的相關(guān)操作,可以完整地定義出領(lǐng)域?qū)嶓w層中所有規(guī)則約束與取值范圍的類。

        2.4 領(lǐng)域?qū)嶓w層提取

        通過撰寫覆蓋需求的測試用例代碼,利用IDE的自動化測試工具和代碼生成工具,可以很快構(gòu)建出領(lǐng)域?qū)嶓w層的領(lǐng)域?qū)嶓w、由于在測試用例中已對需要的領(lǐng)域?qū)嶓w的屬性和方法進(jìn)行了定義,因此可以很快地構(gòu)建出對應(yīng)領(lǐng)域?qū)嶓w類的框架代碼,然后直接實現(xiàn)領(lǐng)域?qū)嶓w類的屬性,最后實現(xiàn)領(lǐng)域?qū)ο蟮姆椒w。由于針對每個領(lǐng)域?qū)嶓w,已經(jīng)有對應(yīng)的一組CRUD測試用例。因此,該領(lǐng)域?qū)ο蟮姆椒▽崿F(xiàn)可以被立即驗證其功能的正確性。

        3 通過TDD提取領(lǐng)域?qū)嶓w層的方法驗證

        如用戶的需求為:需要將一份合同保存下來,合同信息需要保存日期、簽訂甲方、簽訂乙方、合同款項、支付方式、標(biāo)的物名稱。則相應(yīng)的測試用例為:

        [test]

        void canCreateContract(){

        Contract newcontract = new Contract ();

        newcontract.signdate = newdate;

        newcontract.PartyA = “湖北晨星公司”;

        newcontract.PartyB = “萬琪公司”;

        newcontract.TradeItem = “房屋裝修”;

        newcontract.Money = 2000000.00;

        newcontract.PayMethod = ”銀行轉(zhuǎn)帳”;

        Repository repos = Repository.getInstance();

        int count = repos.getObjectCount(Contract.class);

        repos.saveObject(newcontract);

        Assert.assertNotEqual(newcontract.ID, null);

        Assert.assertEqual(newcontract.SerialNo, 0);

        Assert.assertEqual(count+1,repos,getObjectCount(Contract.class));

        }

        由該測試用例可得到兩個領(lǐng)域?qū)嶓w類Contract與Repository,進(jìn)一步設(shè)計CRUD測試用例,得到其屬性與方法。可獲得Contract與Repository類所需要定義的屬性與方法,也因此得到相應(yīng)領(lǐng)域?qū)ο蟮幕窘Y(jié)構(gòu)。

        設(shè)計測試用例發(fā)現(xiàn)實體間的聯(lián)系,比如需要滿足需求“每份裝修施工合同必須記錄每個房間的面積、使用材質(zhì)以及所需施工時間”,可發(fā)現(xiàn)新的領(lǐng)域?qū)嶓w類、合同明細(xì)類ContractItem。

        根據(jù)規(guī)則約束與取值范圍繼續(xù)設(shè)計測試用例,則可以保證“銀行轉(zhuǎn)帳”、“現(xiàn)金”等之外不合法的數(shù)據(jù)被測試用例識別。得到新的實體類、交易方式類TradeMethod。

        根據(jù)以上步驟,可以快速得出領(lǐng)域?qū)ο髮拥能浖?,實現(xiàn)系統(tǒng)功能。圖2是根據(jù)上述測試用例設(shè)計實現(xiàn)的領(lǐng)域?qū)ο髮屿o態(tài)結(jié)構(gòu)圖。

        猜你喜歡
        測試用例
        測試用例自動生成技術(shù)綜述
        回歸測試中測試用例優(yōu)化技術(shù)研究與探索
        基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
        淺析基于因果圖法軟件測試用例的設(shè)計
        基于MBD模型自動生成測試用例的軟件測試方法
        基于混合遺傳算法的回歸測試用例集最小化研究
        基于需求模型的航天軟件測試用例生成方法
        基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
        電動汽車整車控制軟件測試用例設(shè)計方法及應(yīng)用
        軟件測試用例執(zhí)行優(yōu)化研究

        隔壁人妻欲求不满中文字幕| 国产v视频| 精品一二区| 日本一级三级在线观看| 亚洲乱码无人区卡1卡2卡3| 在线综合亚洲欧洲综合网站| 国产一区二区精品尤物| 亚洲性码不卡视频在线| 在线观看视频日本一区二区| 国产av麻豆mag剧集| 亚洲男人天堂2017| 性一交一乱一乱一视频亚洲熟妇| 中文字幕乱码在线人妻| 日韩中文字幕免费视频| 国产精品久久国产精品99gif| 久草国产手机视频在线观看| 一本一道久久综合久久| 熟妇激情内射com| 精品四虎免费观看国产高清| 国产青春草在线观看视频| 蜜桃视频在线看一区二区三区| 国产高清一区二区三区视频| 最新国产精品亚洲二区| 亚洲av中文字字幕乱码软件| 日本一区二区三区爆乳| 久久无码av三级| 完整在线视频免费黄片| 精品久久综合日本久久综合网| 亚洲精品久久一区二区三区777| 伊人网视频在线观看| 国产精品毛片av一区二区三区| 日本在线视频www色| 欧美日韩一卡2卡三卡4卡 乱码欧美孕交 | 国产强被迫伦姧在线观看无码| 婷婷亚洲综合五月天小说| 日本av一区二区播放| 极品美女销魂一区二区三| 所有视频在线观看免费| av一区二区三区人妻少妇| 日韩在线视精品在亚洲| 久久综合激情的五月天|