• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    元模型層次的UML動(dòng)態(tài)子圖到Coq形式規(guī)范的轉(zhuǎn)換

    2016-09-08 10:30:38楊宗源
    關(guān)鍵詞:序列圖狀態(tài)圖子圖

    竇 亮 尹 敏 李 超 楊宗源

    (華東師范大學(xué)計(jì)算機(jī)科學(xué)技術(shù)系 上海 201100)

    ?

    元模型層次的UML動(dòng)態(tài)子圖到Coq形式規(guī)范的轉(zhuǎn)換

    竇亮尹敏*李超楊宗源

    (華東師范大學(xué)計(jì)算機(jī)科學(xué)技術(shù)系上海 201100)

    UML動(dòng)態(tài)子圖主要包括序列圖和狀態(tài)圖等,它們在描述系統(tǒng)的行為方面應(yīng)用廣泛,但是半形式化的語義使它們不能直接進(jìn)行形式化驗(yàn)證。Coq是目前主流的交互式定理證明器,用形式化的Coq規(guī)范來描述UML動(dòng)態(tài)子圖模型,可以在此基礎(chǔ)上進(jìn)行對模型的屬性進(jìn)行驗(yàn)證等工作?;诂F(xiàn)有工作,提出將UML動(dòng)態(tài)子圖模型轉(zhuǎn)換為Coq形式規(guī)范的框架,在元模型層次給出狀態(tài)圖和序列圖的轉(zhuǎn)換規(guī)則,介紹算法和原型工具實(shí)現(xiàn)。這種元模型層次的轉(zhuǎn)換方法,保證了轉(zhuǎn)換前后的語法正確性,為進(jìn)一步分析驗(yàn)證提供了基礎(chǔ)。

    UML動(dòng)態(tài)子圖模型轉(zhuǎn)換元模型Coq Kermeta

    0 引 言

    UML[1]是面向?qū)ο蠼M織(OMG)提出的建模語言,能在各種抽象層次對系統(tǒng)進(jìn)行描述和建模,被廣泛應(yīng)用在系統(tǒng)的設(shè)計(jì)階段。如果在設(shè)計(jì)階段就對UML模型進(jìn)行驗(yàn)證,能盡早地發(fā)現(xiàn)系統(tǒng)錯(cuò)誤,提高軟件質(zhì)量,減少開銷。然而,目前的UML規(guī)范缺乏精確的形式語義定義,因此難以進(jìn)行進(jìn)一步的分析驗(yàn)證。為了給UML進(jìn)行精確的語義定義,許多研究工作采用了形式化方法。形式化方法是用于系統(tǒng)規(guī)范定義、開發(fā)和驗(yàn)證等方面的基于數(shù)學(xué)的方法,利用適當(dāng)?shù)臄?shù)學(xué)分析方法,以提高系統(tǒng)的可靠性與安全性。用形式語言來描述UML模型可以彌補(bǔ)UML自身的缺陷,消除開發(fā)人員對系統(tǒng)設(shè)計(jì)理解的不一致性。

    Coq[2]是基于歸納構(gòu)造演算的高階定理證明器,在跨計(jì)算機(jī)科學(xué)和數(shù)學(xué)領(lǐng)域的研究中,Coq已經(jīng)成為一個(gè)強(qiáng)有力的工具,它可以作為形式化驗(yàn)證程序的開發(fā)環(huán)境,也已經(jīng)成為研究人員對復(fù)雜語言的定義進(jìn)行描述和推理的標(biāo)準(zhǔn)工具?;诙ɡ碜C明器Coq對各種基礎(chǔ)軟件的語義進(jìn)行形式化描述和驗(yàn)證是當(dāng)前的一個(gè)研究熱點(diǎn)[3-5]。在之前的工作[6,7]中,我們提出將UML序列圖轉(zhuǎn)換為Coq形式規(guī)范描述,在Coq定理證明器中證明了語義的相關(guān)屬性,但是從UML序列圖到Coq形式規(guī)范的轉(zhuǎn)換過程是手動(dòng)完成的,這種方式的轉(zhuǎn)換效率較低,且不能保證轉(zhuǎn)換的正確性。

    本文提出了一種元模型層面的轉(zhuǎn)換框架,設(shè)計(jì)了元模型層面的轉(zhuǎn)換規(guī)則,提出了針對狀態(tài)圖和序列圖這兩種UML動(dòng)態(tài)子圖到Coq形式規(guī)范的轉(zhuǎn)換算法,并在Kermeta[8]中實(shí)現(xiàn)了自動(dòng)轉(zhuǎn)換的原型工具。這種轉(zhuǎn)換不針對某一具體的動(dòng)態(tài)子圖模型,而是在元模型層面上完成UML元模型到Coq形式規(guī)范的映射,使得轉(zhuǎn)換結(jié)果符合目標(biāo)抽象語法,保持了UML動(dòng)態(tài)子圖模型完整的語義成分。

    本文的基本內(nèi)容如下:首先介紹元模型和Kermeta,并給出本文研究的UML狀態(tài)圖和序列圖的元模型定義;接著依次介紹UML狀態(tài)圖和序列圖轉(zhuǎn)換為Coq形式規(guī)范的具體實(shí)現(xiàn),包括轉(zhuǎn)換框架、轉(zhuǎn)換規(guī)則和算法幾個(gè)方面;然后通過實(shí)例展示了轉(zhuǎn)換后生成的Coq形式規(guī)范;最后介紹相關(guān)工作并總結(jié)。

    1 背景介紹

    1.1元模型和Kermeta

    OMG組織提出的元對象機(jī)制(MOF)是一個(gè)四層的元建模框架,在這個(gè)體系結(jié)構(gòu)中依次有元元模型層、元模型層、模型層和對象層。每一層都可以看成是上一層的實(shí)例,繼承了上層模型的元語義;同時(shí)又是下一層的抽象,為下一層模型建立了創(chuàng)建模型的元語言。MOF是自描述的,所以不再需要元元元模型。MOF用于定義面向?qū)ο笤P?,典型的就是UML建模語言,在元模型層面進(jìn)行模型轉(zhuǎn)換能保證轉(zhuǎn)換前后的模型符合元模型[9]。

    Kermeta是一種可執(zhí)行的元建模語言,可描述模型的結(jié)構(gòu)和行為,支持元模型層面的轉(zhuǎn)換。Kermeta工具集成在Eclipse中,與OMG的EMOF標(biāo)準(zhǔn)兼容。Kermeta語言具有多種特性,包括命令式編程、面向?qū)ο缶幊?、面向模型編程、面向方面編程和契約式開發(fā)等特性。

    1.2狀態(tài)圖和序列圖的元模型定義

    在Kermeta中實(shí)現(xiàn)模型轉(zhuǎn)換,需要指定源/目標(biāo)元模型,以一個(gè)符合源元模型的源模型作為輸入。因此,要進(jìn)行模型轉(zhuǎn)換就需要指定源元模型,下面介紹本文研究的UML狀態(tài)圖和序列圖的元模型,分別如圖1和圖2所示。本文給出的UML狀態(tài)圖和序列圖元模型在UML2.0給出的標(biāo)準(zhǔn)元模型上略有刪減,并且使用Kermeta自帶的Ecore進(jìn)行構(gòu)建和繪制。

    圖1 狀態(tài)圖的元模型

    圖1是狀態(tài)圖的Ecore元模型。StateModel是該元模型最頂層的類。本文轉(zhuǎn)換后生成的狀態(tài)圖抽象語法定義,支持衛(wèi)式條件的使用,考慮了狀態(tài)的進(jìn)入/退出動(dòng)作、歷史狀態(tài)記錄機(jī)制,支持層間轉(zhuǎn)移描述,是較為完整全面的狀態(tài)圖語法定義。

    圖2 序列圖的元模型

    圖2是序列圖的Ecore元模型。SeqModel是元模型最頂層的類。本文轉(zhuǎn)換后生成的序列圖抽象語法定義除了考慮消息、生命線、組合片段等元素,還考慮了交互操作符、衛(wèi)式條件等元素,涵蓋了序列圖的主要交互操作符片斷定義。

    2 轉(zhuǎn)換工作

    2.1轉(zhuǎn)換框架

    模型轉(zhuǎn)換需要保證轉(zhuǎn)換前后模型語法和語義的正確性與完整性,UML圖中包含大量的語法和語義信息,直接在模型層面上進(jìn)行轉(zhuǎn)換很可能會(huì)導(dǎo)致轉(zhuǎn)換前后模型信息的丟失。本文在Kermeta中實(shí)現(xiàn)的元模型層次的轉(zhuǎn)換工具框架如圖3所示,其中UML元模型和模型都屬于UML規(guī)范范疇,而Coq中對UML的抽象語法定義和UML刻畫的實(shí)際模型代碼符合Coq規(guī)范,轉(zhuǎn)換規(guī)則是用Kermeta進(jìn)行編寫的。具體地,T1是將UML元模型定義為形式化的Coq抽象語法的過程,通過手工編碼實(shí)現(xiàn);T2和T3是模型轉(zhuǎn)換的過程:首先,引入符合元模型的模型,然后,利用轉(zhuǎn)換規(guī)則將UML模型轉(zhuǎn)換為Coq形式規(guī)范代碼,并最終保存為Coq文件,以便在后續(xù)的定理證明工作中使用;T4利用了Kermeta的面向方面編程特性,直接將轉(zhuǎn)換規(guī)則織入U(xiǎn)ML元模型中;T5表明UML模型符合UML元模型,即模型是元模型的實(shí)例;T6表明轉(zhuǎn)換生成的Coq代碼符合Coq中對UML圖抽象語法的形式規(guī)范定義。

    圖3 轉(zhuǎn)換框架

    該轉(zhuǎn)換框架具有如下的優(yōu)點(diǎn):

    1. 層次清楚,分離關(guān)注,轉(zhuǎn)換規(guī)則如果需要變更,只需要修改轉(zhuǎn)換規(guī)則層即可;

    2. 具備模型無關(guān)性,在元模型層面定義轉(zhuǎn)換規(guī)則,使得任意符合該元模型的模型都可以使用該轉(zhuǎn)換規(guī)則進(jìn)行轉(zhuǎn)換,和特定模型定義的內(nèi)容沒有關(guān)系;

    3. 采用了XMI來表示UML模型,使得可以使用不同的建模工具來對目標(biāo)系統(tǒng)進(jìn)行建模,方便模型的保存和引入。

    2.2狀態(tài)圖的轉(zhuǎn)換規(guī)則和算法

    從圖1中可看出狀態(tài)圖元模型的主要語法單元包括State、Transition、Behavior、Event等。為了將狀態(tài)圖模型轉(zhuǎn)換為Coq形式規(guī)范,首先在Coq中為這些元素定義抽象語法如下。這里使用歸納類型定義狀態(tài)圖,關(guān)于Coq的使用方法,可以參考文獻(xiàn)[10]。

    Definition event:= string.

    Definition sname:= string.

    Definition tname:= string.

    Definition action:= string.

    Definition seqact:= list action.

    Inductive history:Set:=

    |none:history

    |deep:history

    |shallow:history.

    Inductive bexp:Type:=

    |BTrue:bexp

    |BFalse:bexp

    |BEq:aexp-> aexp-> bexp

    |BLe:aexp-> aexp-> bexp

    |BNot:bexp-> bexp

    |BAnd:bexp-> bexp-> bexp

    |BOr:bexp-> bexp-> bexp

    |BImp:bexp-> bexp-> bexp.

    (*衛(wèi)式條件的定義*)

    Definition guard:= bexp.

    Definition trans:= tname * nat * set sname * event * guard * seqact * set sname * nat * history.

    Definition entryexit:= seqact * seqact.

    (*狀態(tài)圖的抽象語法定義*)

    Inductive sc:Type:=

    |basic_sc:sname-> entryexit-> sc

    |or_sc:sname-> list sc-> nat-> set trans-> entryexit-> sc

    |and_sc:sname-> list sc-> entryexit-> sc.

    接著定義元模型層面上的狀態(tài)圖到Coq形式規(guī)范的轉(zhuǎn)換規(guī)則:

    (1) 狀態(tài)名、事件名和轉(zhuǎn)移名在Coq中都用字符串來表示,分別對應(yīng)sname、event和tname;

    (2) 狀態(tài)的入口出口動(dòng)作被映射成包含2個(gè)動(dòng)作(action)列表的二元組;

    (3) 狀態(tài)圖中的每個(gè)狀態(tài)都被映射為Coq抽象語法中定義的或狀態(tài)(or_sc)、基本狀態(tài)(basic_sc)和與狀態(tài)(and_sc)中的一種。例如:or_sc是包括狀態(tài)名、子狀態(tài)列表、活躍狀態(tài)序號(hào)、子轉(zhuǎn)移列表、入口出口動(dòng)作的五元組;

    (4) 每個(gè)衛(wèi)式條件(guard)都被映射為邏輯謂詞bexp規(guī)定類型中的一種;

    (5) 每一個(gè)動(dòng)作序列被映射為動(dòng)作列表;

    (6) 每個(gè)轉(zhuǎn)移都被映射為一個(gè)包含轉(zhuǎn)移名、源狀態(tài)序號(hào)、源狀態(tài)決定因子、觸發(fā)事件、衛(wèi)式條件、行為、目標(biāo)狀態(tài)決定因子、目標(biāo)狀態(tài)序號(hào)和歷史紀(jì)錄機(jī)制的九元組。為了處理轉(zhuǎn)移可能發(fā)生在不同層次的狀態(tài)之間的情況,用源目標(biāo)決定因子和目標(biāo)決定因子兩個(gè)元素進(jìn)行指示。即,如果發(fā)生層間轉(zhuǎn)移,則源、目標(biāo)狀態(tài)序號(hào)用來記錄最高層的源、目標(biāo)狀態(tài)的序號(hào),而決定因子用來記錄子層狀態(tài)的狀態(tài)名。

    根據(jù)轉(zhuǎn)換規(guī)則,設(shè)計(jì)UML狀態(tài)圖到Coq形式規(guī)范的生成算法:首先,引入符合狀態(tài)圖元模型的狀態(tài)圖模型;其次,對模型進(jìn)行分析,獲取模型中的狀態(tài)和轉(zhuǎn)移信息,并存儲(chǔ)在對應(yīng)的集合中;最后,按照轉(zhuǎn)換規(guī)則,將提取出來的狀態(tài)、轉(zhuǎn)移、衛(wèi)式條件等信息轉(zhuǎn)換為Coq形式規(guī)范代碼。算法描述如下:

    算法1

    TransList 狀態(tài)轉(zhuǎn)移信息的集合,初始為空

    StateList 狀態(tài)集合,初始為空。包括簡單狀態(tài)、或狀態(tài)、與狀態(tài),以及歷史紀(jì)錄狀態(tài)信息

    //下述方法織入到元模型最頂層類StateModel上

    operation toCoq():String

    //通過下面2個(gè)方法獲取模型的信息,存儲(chǔ)在相應(yīng)集合

    //最頂層的region調(diào)用getTransList方法

    self.packagedElment.asType(StateMachine).region.one.getTransList();

    //最頂層的Vertex調(diào)用getTransList方法

    self.packagedElment.asType(StateMachine).region.one.subVertex.one.asType(Vertex).getStateList(TransList);

    //將相應(yīng)集合中的狀態(tài)和衛(wèi)式條件進(jìn)行編號(hào)

    setStateID(StateList);

    setGuardID(TransList);

    re1 = Guard2Coq(TransiList.guard);

    re2 = State2Coq();

    re3 = Trans2Coq();

    //返回轉(zhuǎn)換結(jié)果

    return re1 + re2 + re3;

    end

    toCoq ()方法是整個(gè)算法的主線,該算法通過調(diào)用其他方法實(shí)現(xiàn)信息獲取、進(jìn)行調(diào)整和轉(zhuǎn)換。對于模型信息的獲取,是通過getTransList()和getStateList()兩個(gè)方法實(shí)現(xiàn)的。getTransList()方法被織入到Region類上,而并沒有織入到Transition類上,主要是為避免重復(fù)獲取同一個(gè)trans的信息,所以從最頂層的region開始自頂向下地獲取所有trans的信息。getStateList()方法需要用到getTransList()獲得的信息,故放在getTransList()后執(zhí)行。這兩個(gè)方法的偽代碼如下:

    aspect class Region{

    operation getTransList()

    //(1)處理最頂層的region中的每個(gè)transition元素

    foreach trans in transition

    //當(dāng)目標(biāo)狀態(tài)為歷史狀態(tài)時(shí)

    if(self.target.isHistory(self.target)) then

    trans.tState = trans.parent;

    trans.history = trans.target.kind.name;

    //層間轉(zhuǎn)移,則要添加源或目的決定因子sr和tr

    if(not isPeer(trans.sState,trans.tState)) then

    trans:= changeTrans(trans) ;

    TransList = TransList ∪{trans.name × trans.source × trans.sr × trans.event × trans.guard × trans.action × trans.tState × trans.tr × trans.history };

    //(2)遞歸處理其他層的region中的transition元素

    foreach vertex in self.SubVertex

    if(e.isInstanceOf(State)&&e.getType!=”basic_sc”)then

    foreach trans in vertex.region.transition

    trans.getTransList();

    end }

    //getStateList方法被織入到Vertex類上

    aspect class Vertex{

    operation getStateList(TransList)

    // self是當(dāng)前的最頂層狀態(tài)

    if(self.isInstanceOf(State))then

    entryExit = getEntryExit();

    //(1)獲取基本狀態(tài)信息

    if(self.getType()==”basic_sc”)then

    type = “basic _sc”;

    StateList= StateList ∪ {self.name × entryExit × type};

    //(2)獲取或狀態(tài)信息

    else if(s.getType()==”or_sc”)then

    subTrans = getSubTrans(TransList);

    subStates = getSubStates();

    type = “or_sc”;

    StateList= StateList ∪ {self.Name × subStates × 0 × subTrans × entryExit × type};

    //遞歸調(diào)用getStateList將當(dāng)前狀態(tài)的每個(gè)子狀態(tài)加入StateList

    foreach s in self.subStates

    if(not isHistory(s1))then s.getStateList(transList);

    //(3)與狀態(tài)轉(zhuǎn)換與或狀態(tài)的處理類似,省略

    else if(self.getType()==”and_sc”)then ……

    StateList = StateList ∪ {self.Name × subStates × entryExit × type};

    end }

    其中,getType()通過判斷狀態(tài)中region的數(shù)目來確定狀態(tài)的類型;chageTrans(trans)用來改變trans的源/目標(biāo)狀態(tài),以及設(shè)置源/目標(biāo)決定因子;isHistory()用來判斷狀態(tài)是否是歷史類型的偽狀態(tài);getTransList()和getSubStateList()分別用來獲得子狀態(tài)和子轉(zhuǎn)移;Trans2Coq()與State2Coq()的算法相似,限于篇幅未給出算法;Guard2Coq()為bexp中使用的操作符建立了相應(yīng)的解釋器,由解釋器將衛(wèi)式條件轉(zhuǎn)換為相應(yīng)的Coq代碼。

    2.3序列圖轉(zhuǎn)換規(guī)則和算法

    序列圖的抽象語法定義主要處理的語法單元包括LifeLine、 Event、 Message、Fragment等。首先在Coq中為這些元素定義抽象語法,也使用歸納類型來定義序列圖:

    Inductive kind:Set:= | Send:kind | Receive:kind.

    Notation ″!″:= Send

    Notation ″?″:= Receive

    Definition signal:= string.

    Definition lifeline:= string.

    Definition event:= kind * signal * lifeline * lifeline.

    Inductive id:Set:= Id:nat-> id.

    (*衛(wèi)式條件的定義*)

    Inductive cnd:Type:= | Bvar:id-> cnd | Btrue:cnd

    |Bfalse:cnd | Bnot:cnd-> cnd | Band:cnd-> cnd-> cnd

    |Bor:cnd-> cnd-> cnd | Bimp:cnd-> cnd-> cnd.

    (*序列圖的抽象語法定義*)

    Inductive seqDiag:Set:=

    |Dtau:seqDiag

    |De:event-> seqDiag

    |Dpar:seqDiag-> seqDiag-> seqDiag

    |Dalt:cnd-> seqDiag-> seqDiag-> seqDiag

    |Dopt:cnd-> seqDiag-> seqDiag

    |Dstrict:seqDiag-> seqDiag-> seqDiag

    |Dloop:nat-> cnd-> seqDiag-> seqDiag.

    其中Event中的事件類型分為發(fā)送事件和接受事件,分別用‘?’和‘!’表示。序列圖被表示成一個(gè)歸納類型,可以為空(Dtau),可以通過事件(De)構(gòu)成,也可以是通過交互操作符構(gòu)成。這里只考慮五種交互操作符Dalt、Dopt、Dstrict、Dloop和Dpar。

    元模型層面上的序列圖到Coq形式規(guī)范的轉(zhuǎn)換規(guī)則主要包括:

    (1) 消息名和生命線名在Coq中都用字符串來表示,分別對應(yīng)signal和lifeline類型;

    (2) 序列圖中的每個(gè)事件被映射成Coq抽象語法中定義的類型、消息名、接受/發(fā)送生命線組成的四元組;

    (3) 消息的約束條件被映射為cnd中規(guī)定的類型中的一種,并且約束條件中的變量被映射為自然數(shù)類型的id;

    (4) 利用前面3條規(guī)則,將序列圖映射為由抽象語法中事件,約束條件和五種交互操作符遞歸構(gòu)造的Coq規(guī)范。

    序列圖模型到Coq形式規(guī)范轉(zhuǎn)換的算法,與狀態(tài)圖的轉(zhuǎn)換相似,由于要處理的語法單元相對較少,因此去掉了存儲(chǔ)模型中元素的步驟。算法如下:

    算法2

    //下述方法織入到元模型最頂層類SeqModel上

    operation toCoq():String

    result:String;

    //將依賴于消息的發(fā)送和接受事件,轉(zhuǎn)換為coq代碼

    foreach m in message

    result = result + m.message2Coq();

    //將每個(gè)fragment轉(zhuǎn)換為Coq代碼。

    foreach f in fragment

    result = result + f.fragment2Coq();

    return result;

    end

    //下述方法織入到Message類上

    operation message2Coq():String

    mName = self.name;

    //獲得發(fā)送和接受消息的生命線(lifeline)

    sLineName = getSendLineName();

    rLineName = getRecLineName();

    //發(fā)送事件

    sendEvent=write2Coq(“!”,mName,sLineName,rLineName );

    //接受事件

    recEvent = write2Coq(“?”,mName,sLineName,rLineName );

    return sendEvent + recEvent;

    end

    //下述方法織入到InteractionFragment類上

    operation fragment2Coq():String

    //(1)當(dāng)fragment為事件類型時(shí),將發(fā)送接受事件轉(zhuǎn)換

    if(self.isInstanceOf(OcreenceSpecification))then

    if(self.type ==”send”)then

    result = result + event2Coq(self.name,“send”);

    else if(self.type ==”receive”)then

    result = result + event2Coq(self.name,“receive”);

    //(2)當(dāng)fragment為組合片段類型時(shí)

    else if(self.isInstanceOf(CombinedFragment))then

    //當(dāng)交互操作符為單元操作符opt時(shí)

    if(self.operand == “opt”)then

    result = result + CombinetoCoq (operand,self.name);

    //當(dāng)為其他四種二元操作符時(shí)

    else

    leftOp = self;

    //右操作符為下一個(gè)fragment

    rightOp = nextFragment;

    result = result + Combine2Coq(operand,leftOp,rightOp);

    //對組合片段的子片段進(jìn)行轉(zhuǎn)換

    foreach f in self.operand.fragment

    result = result + f.fragment2Coq();

    return result;

    end

    算法中event2Coq()實(shí)現(xiàn)將某個(gè)發(fā)送或接受事件類型的組合片段轉(zhuǎn)換為Coq代碼;Combine2Coq則實(shí)現(xiàn)將包含單元或者二元操作符的組合片段轉(zhuǎn)換為Coq代碼。

    3 實(shí)例研究

    根據(jù)轉(zhuǎn)換框架和算法,我們實(shí)現(xiàn)了UML動(dòng)態(tài)子圖到Coq代碼轉(zhuǎn)換的原型工具,實(shí)現(xiàn)了轉(zhuǎn)換過程的自動(dòng)化。本章以用戶在自動(dòng)取款機(jī)(ATM)取款的情景為例,繪制了圖4和圖5所示的序列圖模型和狀態(tài)圖模型,用來對原型工具進(jìn)行測試。

    圖4 序列圖模型實(shí)例

    圖4是用戶在ATM上取款的簡化的交互場景的序列圖。用戶首先插入銀行卡,然后輸入密碼,由ATM機(jī)根據(jù)輸入的信息進(jìn)行身份驗(yàn)證,發(fā)送驗(yàn)證成功(loginSucc)或驗(yàn)證失敗(loginFail)的消息;如果登錄成功,且?guī)粲囝~大于零,用戶可以選擇進(jìn)行一次取款操作。原型工具執(zhí)行后自動(dòng)轉(zhuǎn)換生成如下的Coq形式規(guī)范代碼:

    Definition C1:cnd:= BEq(AId checkPwd)(ANum 1).

    Definition C2:cnd:= BGt(AId balance)(ANum 0).

    Definition sInsertCard:event:= (!,″InsertCard″,″User″,″ATM″).

    Definition rInsertCard:event:= (?,″InsertCard″,″User″,″ATM″).

    Definition spwd:event:= (!,″pwd″,″User″,″ATM″).

    Definition rpwd:event:= (?,″pwd″,″User″,″ATM″).

    Definition sloginSucc:event:= (!,″loginSucc″,″ATM″,″User″).

    Definition rloginSucc:event:= (?,″loginSucc″,″ATM″,″User″).

    Definition swithdraw:event:= (!,″cmd″,″User″,″ATM″).

    Definition rwithdraw:event:= (?,″cmd″,″User″,″ATM″).

    Definition sloginFail:event:= (!,″loginFail″,″ATM″,″User″).

    Definition rloginFail:event:= (?,″loginFail″,″ATM″,″User″).

    Definition ExampleSeq:SeqDiag:= Dstrict

    (Dstrict (Dstrict (De sInsertCard)(De rInsertCard))

    (Dstrict (De spwd)(De rpwd)))

    (Dalt C1 (Dstrict(Dstrict (De sloginSucc)(De rloginSucc))

    (Dopt C2 (Dstrict (De scmd)(De rcmd))))

    (Dstrict (De sloginFail)(De rloginFail))).

    圖5 狀態(tài)圖模型實(shí)例

    圖5是用戶在ATM上取款時(shí),ATM服務(wù)器狀態(tài)變化情況的狀態(tài)圖。Execute和Log是并行運(yùn)行的或狀態(tài),分別表示系統(tǒng)處于給用戶提供服務(wù)的執(zhí)行狀態(tài),以及系統(tǒng)在進(jìn)行日志記錄操作的狀態(tài)。原型工具執(zhí)行后轉(zhuǎn)換為如下Coq形式規(guī)范代碼:

    Definition g0:guard:= BGt (AId balance) (ANum 0).

    Definition g1:guard:= BEq (AId checkPwd) (ANum 1).

    Definition g2:guard:= BNot (BEq (AId checkPwd) (ANum 1)).

    Definition t4:trans:=

    (″t4″,1,nil,″withdraw″,g0,nil,nil,0,shallow).

    Definition t1:trans:=

    (″t1″,0,nil,″insertCard″,BTrue,nil,nil,1,none).

    Definition t2:trans:= (″t2″,0,(″Indentify″::″InputPwd″::nil),

    ″pwd″,g1,″loginSucc″::nil,nil,1,none).

    Definition t3:trans:=

    (″t3″,1,nil,″pwd″,g2,″loginFail″::nil,nil,1,none).

    Definition t5:trans:=

    (″t5″,0,nil,″insertCard″,BTrue,nil,nil,1,none).

    Definition n0:sc:= basic_sc ″CardIn″ (nil,nil).

    Definition n1:sc:= basic_sc ″InputPwd″ (nil,nil).

    Definition n2:sc:= or_sc ″Indentify″ (n0::n1::nil) 0

    (t1::t3::nil) (nil,″e(cuò)xlogin″::nil).

    Definition n3:sc:= basic_sc ″Accept″ (″command″::nil,nil).

    Definition n4:sc:=

    or_sc ″Execute″ (n2::n3::nil) 0 (t4::t2::nil) (nil,nil).

    Definition n5:sc:= basic_sc ″Wait″ (nil,nil).

    Definition n6:sc:= basic_sc ″Write″ (nil,nil).

    Definition n7:sc:=

    or_sc ″Log″ (n5::n6::nil) 0 (t5::nil) (nil,nil).

    Definition n8:sc:= and_sc ″ATMServer″ (n4::n7::nil) (nil,nil).

    這些自動(dòng)生成的Coq形式規(guī)范代碼,可以在定理證明器Coq中直接打開,進(jìn)行下一步的分析和驗(yàn)證,使之前的研究工作[6,7]更加完善。本文完整源代碼和實(shí)例可在文獻(xiàn)[10]中下載。

    4 相關(guān)工作

    國內(nèi)外將形式化方法應(yīng)用于UML的研究一直是熱點(diǎn)。較多的工作致力于類圖的形式化和驗(yàn)證,如文獻(xiàn)[12]等。對于UML的典型動(dòng)態(tài)子圖——序列圖和狀態(tài)圖,也有許多形式語義研究工作,可參見綜述文獻(xiàn)[13,14]。本節(jié)主要討論將UML動(dòng)態(tài)子圖轉(zhuǎn)換為形式規(guī)范的相關(guān)工作。

    文獻(xiàn)[15,16]都將UML狀態(tài)圖轉(zhuǎn)換為了B語言規(guī)范,但是文獻(xiàn)[15]中沒有將狀態(tài)內(nèi)部的動(dòng)作考慮在內(nèi),且只對簡單的狀態(tài)圖進(jìn)行了分析。在文獻(xiàn)[16]中為了表示狀態(tài)圖中的事件和轉(zhuǎn)移,加入了自己定義的新標(biāo)簽,這就使得轉(zhuǎn)換得到的B語言規(guī)范不符合標(biāo)準(zhǔn)的B語言抽象語法。本文的狀態(tài)圖語法定義全面完整,并且生成的Coq規(guī)范也符合目標(biāo)抽象語法。文獻(xiàn)[17]實(shí)現(xiàn)了UML狀態(tài)圖到Petri網(wǎng)的轉(zhuǎn)換,但是整個(gè)轉(zhuǎn)換都在模型層面進(jìn)行,不能保證轉(zhuǎn)換前后語法的一致性。

    文獻(xiàn)[18]基于B方法對用例圖模型與序列圖模型進(jìn)行形式化轉(zhuǎn)換,提出了轉(zhuǎn)換規(guī)則,但沒有實(shí)現(xiàn)自動(dòng)轉(zhuǎn)換工具。文獻(xiàn)[19] 采用了和本文相似的元模型層面的轉(zhuǎn)換框架,將序列圖和狀態(tài)圖轉(zhuǎn)換為廣義隨機(jī)Petri網(wǎng),但是也只考慮了基本元素的轉(zhuǎn)換,對序列圖沒有考慮組合片段的情況,對狀態(tài)圖沒有考慮歷史偽狀態(tài)的轉(zhuǎn)換。本文則在全面考慮各種元素的轉(zhuǎn)換規(guī)則的基礎(chǔ)上,實(shí)現(xiàn)了自動(dòng)化的轉(zhuǎn)換工具,由于利用了Kermeta的面向方面編程特性,規(guī)則的修改和擴(kuò)展也很容易。

    5 結(jié) 語

    本文提出了一種元模型層次的UML動(dòng)態(tài)子圖到Coq形式規(guī)范的轉(zhuǎn)換框架。首先給出了狀態(tài)圖和序列圖形式化Coq抽象語法,然后提出元模型層面轉(zhuǎn)換規(guī)則,并最終實(shí)現(xiàn)從UML動(dòng)態(tài)子圖到Coq形式規(guī)范轉(zhuǎn)換的原型工具。本文的工作,使得從UML動(dòng)態(tài)子圖到Coq規(guī)范的自動(dòng)轉(zhuǎn)換成為現(xiàn)實(shí),保證了轉(zhuǎn)換前后語法的正確性,得到了符合目標(biāo)抽象語法的Coq形式規(guī)范,為分析驗(yàn)證工作提供了便利。下一步的工作是完善現(xiàn)有工作中UML狀態(tài)圖和序列圖的特性,為實(shí)際應(yīng)用提供更全面的支持。

    [1] Rumbaugh J,Jacobson I,Booch G.Unified Modeling Language Reference Manual[M].The Pearson Higher Education,2004.

    [2] Paulin-Mohring C.Introduction to the Coq proof-assistant for practical software verification[C]//Tools for Practical Software Verification.Springer Berlin Heidelberg,2012:45-95.

    [3] Leroy X.Formal verification of a realistic compiler[J].Communications of the ACM,2009,52(7):107-115.

    [4] Chlipala A.A verified compiler for an impure functional language[C]//Proceedings of the 37th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages,2010,45(1):93-106.

    [6] Zuo Y,Dou L,Xu L,et al.Mechanized semantics of UML sequence diagrams[C]//Proceedings of the IASTED International Conference on Engineering and Applied Science,2012:188-195.

    [7] Dou L,Lu L,Yang Z,et al.Towards mechanized semantics of UML sequence diagrams and refinement relation[C]//Proceedings of the 24th IASTED International Conference on Modelling and Simulation,2013:262-269.

    [8] Kermeta[EB/OL].[2015-3-1].http://www.kermeta.org/.

    [9] Cetinkaya D,Verbraeck A.Metamodeling and model transformations in modeling and simulation[C]//Proceedings of the Winter Simulation Conference.Winter Simulation Conference,2011:3048-3058.

    [10] Bertot Y,Castéran P.交互式定理證明與程序開發(fā):Coq 歸納構(gòu)造演算的藝術(shù)[M].顧明等譯.清華大學(xué)出版社,2010.

    [11] 元模型層次的UML動(dòng)態(tài)子圖到Coq形式規(guī)范的轉(zhuǎn)換工具源代碼及案例[EB/OL].[2015-3-1].https://github.com/lisa-dou/UML2Coq.

    [12] Lano K,Clark D,Androutsopoulos K.UML to B:Formal verification of object-oriented models[C]//Integrated Formal Methods.Springer Berlin Heidelberg,2004:187-206.

    [13] Micskei Z,Waeselynck H.The many meanings of UML2 Sequence Diagrams:a survey[J].Software & Systems Modeling,2011,10(4):489-514.

    [14] Lund M S,Refsdal A,Stφlen K.Semantics of UML Models for Dynamic Behavior[M]//Model-Based Engineering of Embedded Real-Time Systems.Springer Berlin Heidelberg,2010:77-103.

    [15] Ledang H,Souquières J.Contributions for modelling UML state-charts in B[C]//In Integrated Formal Methods,Springer Berlin Heidelberg,2002:109-127.

    [16] Idani A,Ledru Y.Dynamic graphical UML views from formal B specifications[J].Information and Software Technology,2006,48(3):154-169.

    [17] Pais R,Gomes L,Barros J P.From UML state machines to Petri nets:History attribute translation strategies[C]//IECON 2011-37th Annual Conference on IEEE Industrial Electronics Society.IEEE,2011:3776-3781.

    [18] 夏志翔,徐中偉,陳祖希,等.UML模型形式化B方法轉(zhuǎn)換的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(11):15-20.

    [19] Bernardi S,Donatelli S,Merseguer J.From UML sequence diagrams and statecharts to analysable petri net models[C]//Proceedings of the 3rd international workshop on Software and performance.ACM,2002:35-45.

    A METAMODELLING LEVEL TRANSFORMATION FROM UML DYNAMIC SUB-DIAGRAMS TO COQ

    Dou LiangYin Min*Li ChaoYang Zongyuan

    (DepartmentofComputerScienceandTechnology,EastChinaNormalUniversity,Shanghai201100,China)

    UML dynamic sub-diagrams mainly comprise the sequence diagram and the state machine diagram,they are widely applied in describing system behaviours.However,it is hard to perform direct formal verification due to the semi-formal semantics of UML.Coq is a mainstream interactive theorem prover,using formal Coq specification to describe UML dynamic sub-diagrams model can carry out verification on model’s attributes on that basis.According to our previous work,the paper presents a framework to transform UML dynamic sub-diagrams model to Coq formal specifications,and the transformation rules of UML sequence diagram and state machine diagram are offered at meta-modelling level.The algorithm and the implementation of prototype tool are also introduced.This metamodelling level transformation framework ensures the correctness of semantics before and after transformation,and lays the basis for further analysis and verification.

    UMLDynamic diagramsModel transformationMetamodellingCoqKermeta

    2015-04-03。國家自然科學(xué)基金項(xiàng)目(61070226)。竇亮,講師,主研領(lǐng)域:形式化方法,定理證明和軟件工程。尹敏,講師。李超,碩士生。楊宗源,教授。

    TP311

    A

    10.3969/j.issn.1000-386x.2016.08.002

    猜你喜歡
    序列圖狀態(tài)圖子圖
    基于Web 的高校資產(chǎn)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
    基于 ROADS 的面向場景業(yè)務(wù)架構(gòu)建模方法
    航線網(wǎng)絡(luò)優(yōu)化方法研究
    基于SPSS序列法的商務(wù)談判實(shí)務(wù)課程混合教學(xué)模式實(shí)證研究
    物流科技(2021年10期)2021-05-12 08:41:06
    臨界完全圖Ramsey數(shù)
    應(yīng)用ETDFA生成CBTC聯(lián)鎖軟件形式化模型的方法
    思維游戲
    喜劇世界(2016年24期)2017-01-04 05:06:56
    基于頻繁子圖挖掘的數(shù)據(jù)服務(wù)Mashup推薦
    基于UML狀態(tài)圖的軟件系統(tǒng)測試用例生成方法
    不含2K1+K2和C4作為導(dǎo)出子圖的圖的色數(shù)
    无限看片的www在线观看| 亚洲乱码一区二区免费版| 天天添夜夜摸| 亚洲精品一区av在线观看| 在线观看av片永久免费下载| 亚洲成人免费电影在线观看| 在线观看免费视频日本深夜| 一级黄色大片毛片| 91九色精品人成在线观看| 国产熟女xx| 欧美三级亚洲精品| 亚洲精品色激情综合| 欧美性猛交黑人性爽| 桃红色精品国产亚洲av| 九色国产91popny在线| 少妇高潮的动态图| 一区福利在线观看| 综合色av麻豆| 免费在线观看亚洲国产| 91在线观看av| 亚洲国产精品999在线| 国产一区二区亚洲精品在线观看| 欧美日韩一级在线毛片| 麻豆一二三区av精品| 色哟哟哟哟哟哟| 国产精品一及| 男女之事视频高清在线观看| 国产v大片淫在线免费观看| 日韩欧美在线乱码| 午夜福利18| 噜噜噜噜噜久久久久久91| 一进一出抽搐动态| 一级毛片女人18水好多| 亚洲 国产 在线| 变态另类丝袜制服| 在线观看日韩欧美| 午夜日韩欧美国产| 国产真实伦视频高清在线观看 | av福利片在线观看| 国产不卡一卡二| 制服丝袜大香蕉在线| 国产真实乱freesex| 亚洲欧美激情综合另类| 欧美乱码精品一区二区三区| 村上凉子中文字幕在线| 亚洲av成人av| 亚洲性夜色夜夜综合| 制服丝袜大香蕉在线| 天天添夜夜摸| 乱人视频在线观看| 欧美一区二区亚洲| 久久亚洲真实| 毛片女人毛片| 黄片大片在线免费观看| 男插女下体视频免费在线播放| 免费观看的影片在线观看| 美女高潮的动态| 韩国av一区二区三区四区| 国产精品久久久久久亚洲av鲁大| 国产一区二区亚洲精品在线观看| 欧美中文日本在线观看视频| 99久久九九国产精品国产免费| 一a级毛片在线观看| 亚洲av一区综合| 最新在线观看一区二区三区| 国产精品99久久久久久久久| 日本 av在线| 日韩av在线大香蕉| 中文在线观看免费www的网站| 女同久久另类99精品国产91| 亚洲精品美女久久久久99蜜臀| 午夜精品在线福利| 国产伦精品一区二区三区四那| 国产爱豆传媒在线观看| 日本免费a在线| 国产69精品久久久久777片| 国产午夜精品论理片| 免费看a级黄色片| 极品教师在线免费播放| 人妻久久中文字幕网| 岛国在线观看网站| 丰满人妻一区二区三区视频av | 9191精品国产免费久久| 免费看a级黄色片| 免费大片18禁| av女优亚洲男人天堂| 亚洲第一电影网av| 免费看光身美女| 成人国产一区最新在线观看| 高清日韩中文字幕在线| 一夜夜www| 国产精品美女特级片免费视频播放器| 亚洲男人的天堂狠狠| 国产综合懂色| 丁香六月欧美| 成年版毛片免费区| 国产不卡一卡二| 狠狠狠狠99中文字幕| 精品日产1卡2卡| 手机成人av网站| www.色视频.com| 99riav亚洲国产免费| 国产又黄又爽又无遮挡在线| 12—13女人毛片做爰片一| 亚洲国产欧美人成| 亚洲av不卡在线观看| 亚洲va日本ⅴa欧美va伊人久久| 亚洲精品一区av在线观看| 精品免费久久久久久久清纯| 一本精品99久久精品77| 我的老师免费观看完整版| 变态另类丝袜制服| 夜夜夜夜夜久久久久| 成人永久免费在线观看视频| 九九久久精品国产亚洲av麻豆| 亚洲国产欧洲综合997久久,| 国产真实乱freesex| 午夜免费男女啪啪视频观看 | 免费看美女性在线毛片视频| 亚洲精品影视一区二区三区av| 精品欧美国产一区二区三| 97超级碰碰碰精品色视频在线观看| 一卡2卡三卡四卡精品乱码亚洲| 国产aⅴ精品一区二区三区波| 精品久久久久久久久久久久久| 看片在线看免费视频| 国产精品乱码一区二三区的特点| 日韩欧美 国产精品| 美女免费视频网站| 久久精品影院6| 亚洲国产精品成人综合色| 性色avwww在线观看| av片东京热男人的天堂| 最新在线观看一区二区三区| 一本精品99久久精品77| 免费无遮挡裸体视频| 久久久久久久久大av| 国产淫片久久久久久久久 | 啦啦啦韩国在线观看视频| 夜夜躁狠狠躁天天躁| 美女被艹到高潮喷水动态| 白带黄色成豆腐渣| av中文乱码字幕在线| www.色视频.com| 制服丝袜大香蕉在线| 可以在线观看的亚洲视频| 精品久久久久久久久久久久久| 手机成人av网站| 欧美黄色片欧美黄色片| 最新在线观看一区二区三区| 婷婷亚洲欧美| 此物有八面人人有两片| 精品国产美女av久久久久小说| 乱人视频在线观看| 操出白浆在线播放| 亚洲在线自拍视频| 国产精品1区2区在线观看.| 欧美日本亚洲视频在线播放| 噜噜噜噜噜久久久久久91| 人妻久久中文字幕网| 精品国产亚洲在线| 久久久久久大精品| 男人和女人高潮做爰伦理| 性欧美人与动物交配| 国产色婷婷99| 成人高潮视频无遮挡免费网站| 伊人久久大香线蕉亚洲五| 国产一区二区在线观看日韩 | 操出白浆在线播放| 亚洲天堂国产精品一区在线| 国产亚洲精品av在线| 国产精品综合久久久久久久免费| 久久精品国产清高在天天线| 亚洲欧美日韩卡通动漫| 亚洲精品456在线播放app | 色综合婷婷激情| 男人舔女人下体高潮全视频| 久99久视频精品免费| 成人午夜高清在线视频| 国产精品一及| 18禁裸乳无遮挡免费网站照片| 美女 人体艺术 gogo| 香蕉丝袜av| bbb黄色大片| 精品久久久久久久久久久久久| 国产探花极品一区二区| 91久久精品电影网| 日本精品一区二区三区蜜桃| 欧美zozozo另类| 亚洲第一欧美日韩一区二区三区| 精品一区二区三区av网在线观看| 久久精品亚洲精品国产色婷小说| 欧美+亚洲+日韩+国产| www.色视频.com| 国内毛片毛片毛片毛片毛片| 在线观看日韩欧美| 国产精品野战在线观看| 久久久久亚洲av毛片大全| 久久久久久久午夜电影| 色视频www国产| 中文字幕人妻熟人妻熟丝袜美 | 19禁男女啪啪无遮挡网站| 麻豆国产av国片精品| 亚洲在线观看片| 三级国产精品欧美在线观看| 久久这里只有精品中国| 18禁美女被吸乳视频| 国产成人欧美在线观看| 亚洲国产欧美网| 亚洲专区中文字幕在线| 一个人免费在线观看的高清视频| 欧美成狂野欧美在线观看| 亚洲在线自拍视频| 亚洲一区二区三区色噜噜| 国产精品,欧美在线| 一区二区三区免费毛片| 丰满人妻熟妇乱又伦精品不卡| 国语自产精品视频在线第100页| 国产一区在线观看成人免费| 欧美在线一区亚洲| 国产伦在线观看视频一区| 国产欧美日韩一区二区三| 97超级碰碰碰精品色视频在线观看| 成人国产综合亚洲| 欧美bdsm另类| 欧美成狂野欧美在线观看| 国产探花极品一区二区| 精品久久久久久久毛片微露脸| 久久久久性生活片| 久久久久免费精品人妻一区二区| 美女大奶头视频| 国产精品嫩草影院av在线观看 | 国产精华一区二区三区| 国产成人a区在线观看| 久久欧美精品欧美久久欧美| tocl精华| 一个人看的www免费观看视频| 女生性感内裤真人,穿戴方法视频| 久久伊人香网站| 日韩欧美国产一区二区入口| 午夜精品久久久久久毛片777| 老熟妇乱子伦视频在线观看| 香蕉丝袜av| 啦啦啦观看免费观看视频高清| 国产精品影院久久| 毛片女人毛片| 女同久久另类99精品国产91| 国产黄色小视频在线观看| 啦啦啦观看免费观看视频高清| 国产精品香港三级国产av潘金莲| www国产在线视频色| 成人av一区二区三区在线看| 亚洲成av人片免费观看| 国产精品1区2区在线观看.| 日本精品一区二区三区蜜桃| 51国产日韩欧美| 露出奶头的视频| www.www免费av| 制服人妻中文乱码| 一区二区三区激情视频| 18禁国产床啪视频网站| 久久性视频一级片| 美女被艹到高潮喷水动态| 精品人妻1区二区| 99在线人妻在线中文字幕| 一级作爱视频免费观看| 国产伦精品一区二区三区四那| 久久久久国产精品人妻aⅴ院| 一区福利在线观看| 啪啪无遮挡十八禁网站| 法律面前人人平等表现在哪些方面| 老司机深夜福利视频在线观看| 国产精品影院久久| 国产精品日韩av在线免费观看| 亚洲欧美激情综合另类| 熟妇人妻久久中文字幕3abv| 在线观看一区二区三区| 国模一区二区三区四区视频| 亚洲欧美日韩高清在线视频| av天堂在线播放| 天天添夜夜摸| 在线看三级毛片| 国产精品亚洲美女久久久| 日本 av在线| 1024手机看黄色片| 99久久99久久久精品蜜桃| 我的老师免费观看完整版| 国产精品日韩av在线免费观看| 色视频www国产| 少妇熟女aⅴ在线视频| 久久精品国产亚洲av香蕉五月| 免费搜索国产男女视频| 亚洲国产精品久久男人天堂| 女同久久另类99精品国产91| 欧美性猛交╳xxx乱大交人| 99国产精品一区二区蜜桃av| 亚洲精品影视一区二区三区av| 制服人妻中文乱码| 国产高潮美女av| 天天添夜夜摸| 成年女人毛片免费观看观看9| 亚洲国产日韩欧美精品在线观看 | 日本a在线网址| 97超级碰碰碰精品色视频在线观看| 国产精品乱码一区二三区的特点| 一a级毛片在线观看| 久久性视频一级片| 国产亚洲精品综合一区在线观看| 午夜福利18| 啪啪无遮挡十八禁网站| 在线观看舔阴道视频| 少妇的逼好多水| 国产高清videossex| 日韩欧美精品v在线| 精品一区二区三区视频在线 | 51国产日韩欧美| 三级国产精品欧美在线观看| 亚洲欧美日韩高清专用| 精品一区二区三区人妻视频| 日韩高清综合在线| 日韩中文字幕欧美一区二区| 国产精华一区二区三区| 999久久久精品免费观看国产| 中国美女看黄片| 久久久久国产精品人妻aⅴ院| 日韩欧美免费精品| 99国产精品一区二区三区| 欧美性感艳星| 亚洲国产欧美网| 成年女人永久免费观看视频| 午夜视频国产福利| 色吧在线观看| 久久久精品大字幕| 色吧在线观看| 久久久久久久亚洲中文字幕 | 91久久精品国产一区二区成人 | 国产亚洲欧美在线一区二区| 国产精品电影一区二区三区| 国产av不卡久久| 夜夜躁狠狠躁天天躁| 美女黄网站色视频| 淫妇啪啪啪对白视频| 国产精品久久久人人做人人爽| 欧美一级毛片孕妇| 亚洲成人中文字幕在线播放| 欧美另类亚洲清纯唯美| 在线观看一区二区三区| 成人18禁在线播放| 久久久久久久久大av| 丰满人妻熟妇乱又伦精品不卡| 日本 av在线| 精品99又大又爽又粗少妇毛片 | 伊人久久大香线蕉亚洲五| 免费搜索国产男女视频| 中文字幕久久专区| 婷婷精品国产亚洲av在线| 午夜亚洲福利在线播放| 午夜福利成人在线免费观看| 九九在线视频观看精品| 有码 亚洲区| 精品99又大又爽又粗少妇毛片 | 日韩欧美国产在线观看| 亚洲乱码一区二区免费版| 色播亚洲综合网| 国产aⅴ精品一区二区三区波| 国产真实伦视频高清在线观看 | 嫩草影视91久久| 中国美女看黄片| 国产亚洲精品av在线| 高清日韩中文字幕在线| 少妇的丰满在线观看| 亚洲中文字幕一区二区三区有码在线看| 亚洲av一区综合| 一卡2卡三卡四卡精品乱码亚洲| av在线天堂中文字幕| e午夜精品久久久久久久| 手机成人av网站| 国产精品日韩av在线免费观看| 高清在线国产一区| 精品人妻1区二区| 日韩高清综合在线| 欧美日本视频| 国产高清视频在线观看网站| 色视频www国产| 成人av一区二区三区在线看| 啪啪无遮挡十八禁网站| 国产av麻豆久久久久久久| 97人妻精品一区二区三区麻豆| 亚洲欧美日韩高清专用| 少妇高潮的动态图| 亚洲av日韩精品久久久久久密| 亚洲国产精品久久男人天堂| 人人妻,人人澡人人爽秒播| 日韩欧美精品免费久久 | 国产高清三级在线| 午夜免费成人在线视频| 午夜福利视频1000在线观看| 国产成+人综合+亚洲专区| 99精品欧美一区二区三区四区| 特大巨黑吊av在线直播| 精品人妻偷拍中文字幕| а√天堂www在线а√下载| 日韩欧美在线乱码| 亚洲国产欧美人成| xxx96com| 欧美bdsm另类| 亚洲天堂国产精品一区在线| 少妇的逼好多水| 少妇的逼水好多| 综合色av麻豆| 国产精品乱码一区二三区的特点| 一区二区三区免费毛片| 在线天堂最新版资源| 欧美成狂野欧美在线观看| 99久久久亚洲精品蜜臀av| 无人区码免费观看不卡| 老汉色∧v一级毛片| 我要搜黄色片| 真人做人爱边吃奶动态| 日韩成人在线观看一区二区三区| 免费搜索国产男女视频| 国产伦在线观看视频一区| 十八禁网站免费在线| 精品日产1卡2卡| 日韩精品青青久久久久久| 青草久久国产| 激情在线观看视频在线高清| 国产精品自产拍在线观看55亚洲| 午夜精品一区二区三区免费看| 男女做爰动态图高潮gif福利片| av片东京热男人的天堂| 在线观看一区二区三区| 亚洲人成网站高清观看| 久久久久久大精品| 久久久久国产精品人妻aⅴ院| 一区二区三区免费毛片| 一区二区三区激情视频| 99久久无色码亚洲精品果冻| 成人一区二区视频在线观看| 露出奶头的视频| 两性午夜刺激爽爽歪歪视频在线观看| 一个人免费在线观看的高清视频| 亚洲在线观看片| 黄色女人牲交| 人妻久久中文字幕网| 在线a可以看的网站| 久久久久国产精品人妻aⅴ院| 久久精品综合一区二区三区| 99热这里只有是精品50| 男人舔女人下体高潮全视频| 国产日本99.免费观看| 午夜福利在线观看免费完整高清在 | 18禁在线播放成人免费| 亚洲av成人精品一区久久| 观看免费一级毛片| 国产综合懂色| 草草在线视频免费看| 亚洲avbb在线观看| 亚洲 国产 在线| av女优亚洲男人天堂| 波野结衣二区三区在线 | www.www免费av| 青草久久国产| 欧美日韩瑟瑟在线播放| 午夜亚洲福利在线播放| 欧美日本视频| 乱人视频在线观看| 日日摸夜夜添夜夜添小说| 日本精品一区二区三区蜜桃| 一卡2卡三卡四卡精品乱码亚洲| 国产av在哪里看| 精品无人区乱码1区二区| 日韩欧美 国产精品| 两人在一起打扑克的视频| 美女免费视频网站| 国产高清videossex| 国产成人福利小说| 99国产精品一区二区三区| www.www免费av| 中文字幕av成人在线电影| 老司机午夜十八禁免费视频| 久久久久亚洲av毛片大全| 精品无人区乱码1区二区| 亚洲av成人不卡在线观看播放网| 国产精品美女特级片免费视频播放器| 久久久久久人人人人人| 久久久国产成人免费| 欧美三级亚洲精品| 亚洲五月婷婷丁香| 在线a可以看的网站| 天天添夜夜摸| 少妇的逼水好多| 欧美性猛交黑人性爽| 免费观看精品视频网站| 精品人妻1区二区| 最近最新中文字幕大全免费视频| 久久精品国产综合久久久| 嫩草影院精品99| 小蜜桃在线观看免费完整版高清| 九九热线精品视视频播放| 激情在线观看视频在线高清| 亚洲国产色片| 一级a爱片免费观看的视频| 国产成人欧美在线观看| 美女大奶头视频| 18禁在线播放成人免费| 午夜精品久久久久久毛片777| 又紧又爽又黄一区二区| 夜夜爽天天搞| 欧美乱色亚洲激情| 极品教师在线免费播放| 91九色精品人成在线观看| 国产精品自产拍在线观看55亚洲| 国产伦一二天堂av在线观看| 中亚洲国语对白在线视频| 日本免费一区二区三区高清不卡| 亚洲欧美精品综合久久99| 天堂动漫精品| 又黄又粗又硬又大视频| 成年人黄色毛片网站| 亚洲欧美日韩无卡精品| 最新美女视频免费是黄的| 国产精品自产拍在线观看55亚洲| 一个人看视频在线观看www免费 | 青草久久国产| 怎么达到女性高潮| 男女床上黄色一级片免费看| 高潮久久久久久久久久久不卡| 长腿黑丝高跟| 99热精品在线国产| 久久久久久久久久黄片| 午夜精品一区二区三区免费看| 国产av不卡久久| 午夜视频国产福利| 亚洲熟妇熟女久久| 看免费av毛片| 天堂√8在线中文| 一级毛片女人18水好多| 国产黄a三级三级三级人| 亚洲av中文字字幕乱码综合| 久久香蕉国产精品| 99热这里只有是精品50| 国产av不卡久久| 天堂影院成人在线观看| 又黄又爽又免费观看的视频| 欧美日韩乱码在线| 成人一区二区视频在线观看| 哪里可以看免费的av片| 亚洲午夜理论影院| 最近最新中文字幕大全免费视频| 国产精品99久久99久久久不卡| 一区二区三区免费毛片| 亚洲人成网站在线播放欧美日韩| 成年人黄色毛片网站| 国产99白浆流出| 国产美女午夜福利| 日韩欧美国产一区二区入口| 老司机午夜福利在线观看视频| 一a级毛片在线观看| 99久久成人亚洲精品观看| 宅男免费午夜| 精品一区二区三区av网在线观看| 国产私拍福利视频在线观看| 国产 一区 欧美 日韩| 亚洲精品色激情综合| 国产高清三级在线| а√天堂www在线а√下载| 日韩欧美 国产精品| 国产久久久一区二区三区| 国产一区二区三区在线臀色熟女| 久久香蕉精品热| www国产在线视频色| 哪里可以看免费的av片| 国产精品1区2区在线观看.| 在线看三级毛片| 美女高潮喷水抽搐中文字幕| 欧美乱色亚洲激情| av女优亚洲男人天堂| 男女做爰动态图高潮gif福利片| netflix在线观看网站| 青草久久国产| 亚洲成人精品中文字幕电影| 中出人妻视频一区二区| 色噜噜av男人的天堂激情| 国产单亲对白刺激| 香蕉av资源在线| 窝窝影院91人妻| 成人无遮挡网站| 午夜福利18| 黄色丝袜av网址大全| 床上黄色一级片| 欧美绝顶高潮抽搐喷水| 日本 欧美在线| 每晚都被弄得嗷嗷叫到高潮| aaaaa片日本免费| 一二三四社区在线视频社区8| 精品久久久久久久末码| 亚洲午夜理论影院| 国产亚洲欧美在线一区二区| 又黄又粗又硬又大视频| 国产精品久久视频播放| 老熟妇仑乱视频hdxx| 久久久国产成人精品二区| 九九久久精品国产亚洲av麻豆| 淫妇啪啪啪对白视频| 精品久久久久久久毛片微露脸| 搞女人的毛片| 久久久久九九精品影院| 日韩精品青青久久久久久| 色综合欧美亚洲国产小说| 久久精品国产清高在天天线| 麻豆一二三区av精品| 99国产精品一区二区蜜桃av| 国产午夜福利久久久久久| 午夜激情福利司机影院|