青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術(shù)博客

感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

談目前項(xiàng)目組的代碼提交制度

(轉(zhuǎn)載請(qǐng)注明出自 http://m.shnenglu.com/converse 那誰)

一直以來想找機(jī)會(huì)談?wù)勀壳斑@個(gè)項(xiàng)目組內(nèi)采用的代碼提交制度,今天整理一下.

分如下幾個(gè)流程:
1) 在trac系統(tǒng)上建立ticket,寫好這個(gè)任務(wù)的目的,并且accept這個(gè)ticket.
2) 修改代碼,把相關(guān)的修改過的代碼(一般還應(yīng)包括相關(guān)的測(cè)試用例的代碼,后面會(huì)加以說明)提交到review board上.
3) 在review board上填寫如下幾個(gè)必要的信息:
a)第1)步建立的ticket的號(hào)碼(可以有好幾個(gè),也就是一次修改可以針對(duì)好幾個(gè)任務(wù)),以明確這次提交針對(duì)的是哪個(gè)任務(wù);
b)寫下測(cè)試了哪幾個(gè)測(cè)試用例,對(duì)這次的提交寫一段描述.
c)寫下給哪些人做review.reviewer的角色分為兩種,一種是負(fù)責(zé)人,另一種就是普通的組員.每一次提交,必須保證reviewer中有至少一個(gè)負(fù)責(zé)人,并且需要所有的reviewer都通過了這次修改,才能向代碼庫提交代碼.reviewer會(huì)針對(duì)提交的代碼進(jìn)行批注回復(fù).
4)一般情況下,代碼不會(huì)在第一次提交就能通過review,大多數(shù)情況會(huì)被打回修改,于是2)-4)三個(gè)步驟將循環(huán)進(jìn)行下去直到代碼通過review為止.
5) 提交了代碼之后,1)中建立的ticket會(huì)被自動(dòng)關(guān)閉,并且將在ticket的回復(fù)自動(dòng)寫上本次提交修改的文件以及svn revision號(hào),這樣以后再看起來就知道是哪次提交并且修改了哪些文件針對(duì)的又是哪個(gè)功能了.
6) 有一臺(tái)服務(wù)器專門作為buildbot機(jī)器, 這臺(tái)機(jī)器在每次提交了代碼之后, 將自動(dòng)清空原來的代碼目錄,更新最新的代碼,重新編譯,然后把里面的測(cè)試用例全部跑一遍.我們的項(xiàng)目使用的tcmalloc,會(huì)檢查內(nèi)存泄漏,所以在測(cè)試用例測(cè)試失敗,以及有內(nèi)存泄漏的時(shí)候,buildbot都會(huì)失敗.需要補(bǔ)充一點(diǎn)的是,除了每次提交代碼會(huì)導(dǎo)致buildbot重新編譯新的代碼,在每晚的一個(gè)固定時(shí)間,即使沒有更新代碼,也會(huì)做相同的動(dòng)作.buildbot的存在,就是為了不斷的清空編譯文件重新編譯再跑測(cè)試用例,以大量的測(cè)試消除隨機(jī)性保證正確性.

以上是整個(gè)代碼提交機(jī)制的大體流程說明,下面談里面的細(xì)節(jié).

1)上面的第1)步中,建立trac的ticket時(shí),需要指定一個(gè)milestone,一般我們對(duì)必須做的事情是每周以日期命名建立一個(gè)milestone,這樣,你做的任務(wù)就會(huì)自然的變成每周可以去跟進(jìn)的任務(wù).
2)第2)步中,寫測(cè)試用例針對(duì)的是每個(gè)類或者每個(gè)頭文件對(duì)外暴露的API接口,比如對(duì)外的API c使用內(nèi)部的函數(shù)B,那么是沒有辦法對(duì)函數(shù)B編寫測(cè)試用例的.我們的要求是, 任何的一個(gè)新增的API都需要寫針對(duì)它進(jìn)行測(cè)試的測(cè)試用例,不一定只有一個(gè),因?yàn)樾枰紤]的情況可能很多,總而言之,盡可能的考慮齊全.假如本次修改修改了內(nèi)部函數(shù)B,那么依賴于函數(shù)B的API c它的測(cè)試用例也就需要再測(cè)試了.這些測(cè)試用的代碼也會(huì)一并提交到代碼庫中,因?yàn)檫@樣才能保證buildbot更新之后也按照最新的測(cè)試用例進(jìn)行測(cè)試.
3) 代碼提交到reviewboard之前,還需要過lint這一關(guān),對(duì)基本的代碼風(fēng)格進(jìn)行檢查.我們使用的是google c++ code style.
4) reviewer中的負(fù)責(zé)人角色很重要, 起著看門人的作用,任何的一次修改提交,都必須至少經(jīng)過一個(gè)負(fù)責(zé)人的review, 所以對(duì)他的要求就相對(duì)高些了,除了要完成自己的工作外,還需要認(rèn)真review他人的代碼,而要review他人的代碼并且給出好的意見來,又要求他本人除了編碼能力外,還要在業(yè)務(wù)層面對(duì)別人的工作有大體的了解,不然沒法review了.
5) 從前文可以看出,review實(shí)在是一個(gè)繁雜的工作,很有可能在review階段被打回修改代碼,就我的經(jīng)驗(yàn)而言,提交review的人要將提交的任務(wù)盡量的劃分的細(xì)一些就來的很重要了.在提交review的時(shí)候,我一直堅(jiān)持DOTDIW原則(Do One Thing,Do It Well).相反的例子,我們組有個(gè)同事,做了一個(gè)很大的功能,光是完成這個(gè)大的功能,就花費(fèi)好幾周的時(shí)間,提交review的時(shí)候代碼量大,有個(gè)幾千行的,這樣別人review起來也慢,而且一旦不通過需要修改,又是一個(gè)苦力活兒.這樣一折騰,一個(gè)月時(shí)間過去了.如果當(dāng)時(shí)能對(duì)整體的功能有個(gè)把握,懂得劃分模塊層次,逐個(gè)提交,也許會(huì)好些.當(dāng)然,大規(guī)模的代碼提交有時(shí)并不能完全的避免,比如一個(gè)比較大的重構(gòu),牽一發(fā)而動(dòng)全身的,我只是說如果可能,應(yīng)盡量避免大規(guī)模代碼的提交,并且最重要的是:每次提交最好僅針對(duì)一個(gè)功能點(diǎn).

以上是對(duì)流程從整體到細(xì)節(jié)的描述.現(xiàn)在談?wù)勎业目捶?
先來談優(yōu)點(diǎn):
1) 通過codereview制度,保證了項(xiàng)目組成員之間能夠在代碼層面上直接的進(jìn)行交流.我想這一點(diǎn)是最重要的,沒有之一.
如果你是一個(gè)水平差一些的程序員,那么有比你牛叉的人幫你review,相當(dāng)于是讀書的時(shí)候有老師幫你閱卷修改作業(yè),可以指正你的問題所在.我在被人review的過程中就聽到了別人對(duì)我很多的意見.而如果是一個(gè)水平較高的人,是不是對(duì)水平差的人進(jìn)行codereview就是浪費(fèi)他的時(shí)間了呢?我個(gè)人認(rèn)為,這個(gè)事情分怎么看.從團(tuán)隊(duì)的角度看,按照木桶理論,最短的短板往往決定了能達(dá)到的水平.總不能指望所有的事情都由老鳥完成,所以老人在幫新人review代碼的時(shí)候間接的幫助了新人的成長(zhǎng),同時(shí)作為項(xiàng)目組中資歷比較深的人,也應(yīng)該對(duì)項(xiàng)目多費(fèi)一些時(shí)間進(jìn)行把關(guān).我覺得這一點(diǎn)無可厚非.同時(shí),即使是新人,通過閱讀他人的代碼并且交流,也可以學(xué)習(xí)到別人的思想.
codereview制度從上面的角度上保證了項(xiàng)目成員可以直接通過代碼進(jìn)行交流,簡(jiǎn)單的說,誰寫的代碼質(zhì)量如何,一到了review,一目了然.寫的好的通過的快,寫的不好被打回修改多了自己也會(huì)長(zhǎng)記性,還可以多看別人的代碼進(jìn)行學(xué)習(xí).這樣,在一定層面上可以使項(xiàng)目組成員的能力盡可能的接近.我能力長(zhǎng)了一級(jí),相應(yīng)的也會(huì)拉動(dòng)項(xiàng)目組中的人升級(jí).

2) 測(cè)試用例.我之前提到的測(cè)試驅(qū)動(dòng)開發(fā),想法就來自于項(xiàng)目組中編寫測(cè)試用例+buildbot執(zhí)行測(cè)試用例的做法.如何證明一個(gè)API是確定無誤的?我覺得這個(gè)問題似乎非常難.除了一些可以通過數(shù)學(xué)上邏輯上證明的情況外,還需要考慮很多其他的隨機(jī)情況.比如線程的切換是隨機(jī)的,某個(gè)文件夾恰好存在是隨機(jī)的,等等.這些隨機(jī)出現(xiàn)的問題,很多時(shí)候不能在某一次測(cè)試中顯現(xiàn)出來.但是如果有了buildbot,不停的更新,編譯,執(zhí)行,總會(huì)有暴露問題的一天.另外,之前我也提到過,腦中如果有了測(cè)試用例的概念存在,每寫一個(gè)API時(shí)都會(huì)考慮到針對(duì)它的用例應(yīng)該是怎樣的,從另一個(gè)角度,也幫助你的設(shè)計(jì)--你需要考慮這個(gè)API的輸入,輸出,異常情況都有哪些,如何測(cè)試到.測(cè)試用例的存在,保證項(xiàng)目盡量的做到了"可控制".

缺點(diǎn):
1) 從上面的流程可以看出,走完一個(gè)代碼提交的流程需要花費(fèi)大量的精力/時(shí)間(有一些還是他人的精力/時(shí)間),所以,也許這個(gè)制度并不適合于那種時(shí)間壓力比較大的項(xiàng)目.

2) 有幾個(gè)地方很難堅(jiān)持,比如codereview時(shí),有些reviewer會(huì)走過場(chǎng),也沒怎么看代碼就直接通過了,這樣就會(huì)流于形式了.還有編寫測(cè)試用例,也是一件很耗時(shí)間的事情.

3) 由于codereview制度的存在,給review中的負(fù)責(zé)人帶去的壓力很大,因?yàn)楸旧硭凶约旱墓ぷ?又要盡量對(duì)他人的業(yè)務(wù)/代碼進(jìn)行了解,就像那種負(fù)載很大的服務(wù)器一樣,有時(shí)候會(huì)不堪重負(fù).這一點(diǎn)上,我的想法是,項(xiàng)目組內(nèi)的其他成員,如果能積極主動(dòng)一些,多花時(shí)間了解別人的代碼,盡量分擔(dān)review的任務(wù),或者試著成長(zhǎng)為負(fù)責(zé)人級(jí)別(降低單點(diǎn)故障率:),也許是一個(gè)好辦法.不過,這還得看人了.

整個(gè)代碼提交流程上的軟件,目前我所知的都是使用的開源軟件:SVN, google c++ code style lint,review board,buildbot,trac,測(cè)試用例的編寫上使用的是google的測(cè)試用例框架gtest.不過,整合起這些軟件搭建好這個(gè)流程就不是那么容易了,用了一人/半年左右的時(shí)間,才讓這個(gè)流程基本穩(wěn)定下來.

總之,這套機(jī)制中,既有人為的干涉,也有機(jī)器層面上的干涉,也許并不是最完美的,但是盡了最大的力量去保證項(xiàng)目的正確性和可控性.

以正確的方式正確的制度做事,是將事情做好的一個(gè)關(guān)鍵.

posted on 2010-07-08 01:53 那誰 閱讀(18025) 評(píng)論(20)  編輯 收藏 引用 所屬分類: 其他經(jīng)驗(yàn)教訓(xùn)

評(píng)論

# re: 談目前項(xiàng)目組的代碼提交制度[未登錄]  回復(fù)  更多評(píng)論   

很強(qiáng)悍,每次遞交都會(huì)rebuild,像我這樣習(xí)慣修改幾行就check in的可能會(huì)受不了啊
2010-07-08 09:31 | rr

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

搞個(gè)nightly build 要 一人/半年左右的時(shí)間 !!!!


2010-07-08 10:16 | cui

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@cui
沒懂你的意思?我是說把這些軟件整合在一起搭建整個(gè)流程花了這么多時(shí)間.

2010-07-08 10:18 | 那誰

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

Visual Studio 2010 Ultimate + Team Foundation Server幾個(gè)小時(shí)就搞定了。
2010-07-08 11:41 | 陳梓瀚(vczh)

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@陳梓瀚(vczh)
呵呵,請(qǐng)問你微軟做好那個(gè)軟件花了多少人力/時(shí)間呢?是不是說,你寫一個(gè)軟件完成要求的功能只花費(fèi)了幾秒,工作量就可以定為只有幾秒呢?

2010-07-08 11:46 | 那誰

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@陳梓瀚(vczh)
另外,我們寫的是服務(wù)器端的程序,必然不是跑在windows平臺(tái)的,微軟那套東西用不上.
2010-07-08 11:55 | 那誰

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@那誰
但那已經(jīng)做好了啊,所以你只需要安裝就行了,不需要你做。當(dāng)然是這么衡量的。你不能說使用linux,把開發(fā)linux本身的cost也算進(jìn)去吧。
2010-07-08 12:46 | 陳梓瀚(vczh)

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@那誰
嗯,用linux對(duì)于程序員來說的確是一件很可惜的事情。對(duì)于我個(gè)人來說,雖然平時(shí)寫的是編譯器,這些東西跟操作系統(tǒng)基本毫無關(guān)系,其實(shí)換到linux也就是改那么一點(diǎn)點(diǎn)代碼(ascii互轉(zhuǎn)utf16的兩個(gè)函數(shù))而已。不過windows上面的工具的確是強(qiáng)大,可以讓我專心寫編譯器,而不需要在寫編譯器的同時(shí)還要專心呵護(hù)我用來編譯編譯器的那個(gè)編譯器,和呵護(hù)我用來寫編譯器的那個(gè)編輯器。效率就提高了好多。工具呵護(hù)我,才是正確的。

當(dāng)然在被“呵護(hù)”的同時(shí)是不能被慣壞的,不過就算變成了這樣,也是程序員的錯(cuò),不能怪工具做得太好。
2010-07-08 12:49 | 陳梓瀚(vczh)

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@陳梓瀚(vczh)
我是這么看的,因?yàn)閘inux下面并沒有完整的這樣一套系統(tǒng),所以我們自己整合這些軟件搭建這個(gè)系統(tǒng)的工作,類比于微軟開發(fā)那套軟件的工作.

而不是搭建這個(gè)系統(tǒng)的工作,類比于使用微軟這套軟件搭建系統(tǒng)的工作.

哦 我自己說的都拗口,但愿表達(dá)清楚意思了.

2010-07-08 12:54 | 那誰

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

每次提交都一次review,人工開銷是不是太大了?
過多的review可能會(huì)導(dǎo)致這個(gè)流程變成形式,而起不到實(shí)質(zhì)的效果。

如果團(tuán)隊(duì)距離很近,都在一個(gè)辦公室,沒必要用review board這種工具。
要提交代碼時(shí),直接叫reviewer過來檢查就行了,開發(fā)人員一邊說自己的思路,reviewer一邊聽一邊檢查。我覺得比review board這種頁面的效果好多了。
2010-07-08 13:44 | sdww

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@sdww
提交到reviewboard,另一方面是為了讓你做的改動(dòng)是有白紙黑字可查的,如果只是口頭上的說明,起不到這個(gè)效果,類似于工作中重要的事情需要發(fā)郵件確認(rèn).當(dāng)然,這里也并沒有排斥口頭上的交流啊.

2010-07-08 13:49 | 那誰

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@sdww
如果這樣,那證明招人的時(shí)候門檻太低
2010-07-08 13:59 | 陳梓瀚(vczh)

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

可以考慮用下商業(yè)的,比如http://www.fogcreek.com/fogbugz/
我們公司就用這個(gè),版本控制用 mercurial,code review,代碼庫等都提交到fogbugz上。費(fèi)用大概是20USD/人。
2010-07-08 14:07 | Cykit

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@Cykit
codeplex免費(fèi),可以支持TFS+SVN。google code免費(fèi),僅支持SVN。
2010-07-08 16:09 | 陳梓瀚(vczh)

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

每次提交都要review會(huì)不會(huì)太細(xì)了?還是說你們必須做完一個(gè)完整的功能才能提交?至于那個(gè)好幾周,幾千行代碼才提交的我只能無語了。
2010-07-09 16:00 | Sparkle

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@Sparkle
當(dāng)然是每次checkin都review,因此功能應(yīng)該劃分的足夠細(xì),使得每一次checkin的改動(dòng)都不會(huì)過大。
2010-07-09 16:59 | 陳梓瀚(vczh)

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@Sparkle
是的,這樣做才能嚴(yán)格控制checkin代碼的質(zhì)量,不可能隨便改幾行代碼,也不說明改了什么,就讓你提交到代碼庫中的.
2010-07-09 18:54 | 那誰

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

@陳梓瀚(vczh)
話說我已經(jīng)開始覺得搭建這個(gè)一個(gè)系統(tǒng)也是一個(gè)有利于他人的事情了....
2010-07-09 21:43 | 那誰

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

表示公司現(xiàn)在的review已經(jīng)流于形式了
2013-07-03 14:16 | hailong

# re: 談目前項(xiàng)目組的代碼提交制度  回復(fù)  更多評(píng)論   

都是太過主觀的人,選用什么形式卻絕你公司的規(guī)模
2013-07-19 11:36 | caisos
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品影院| 欧美色一级片| 99天天综合性| 99精品国产在热久久婷婷| 最新中文字幕亚洲| 欧美88av| 亚洲欧洲中文日韩久久av乱码| 亚洲二区在线观看| 99这里只有精品| 性一交一乱一区二区洋洋av| 欧美一区二区精品久久911| 久久精品国产免费| 欧美精品亚洲| 国产九区一区在线| 亚洲国产精品一区制服丝袜| 亚洲精品少妇30p| 午夜精品视频网站| 每日更新成人在线视频| 亚洲国产另类久久精品| 亚洲人成高清| 午夜免费在线观看精品视频| 久久综合九色综合欧美就去吻| 欧美高清视频在线播放| 中文在线资源观看视频网站免费不卡| 午夜国产不卡在线观看视频| 美女国产一区| 国产日韩欧美精品在线| 亚洲免费电影在线| 久久天天躁狠狠躁夜夜爽蜜月| 91久久精品国产91久久| 欧美一级视频精品观看| 欧美日韩精品免费观看视一区二区| 国产精品一区二区女厕厕| 亚洲毛片播放| 免费看黄裸体一级大秀欧美| 亚洲一区二区三区在线播放| 欧美成人福利视频| 精品不卡一区| 久久精品免费播放| 亚洲乱码日产精品bd| 久久久久一本一区二区青青蜜月| 欧美天天在线| 99re热这里只有精品视频 | 韩国一区二区三区美女美女秀| 99re在线精品| 欧美激情第4页| 久久精品道一区二区三区| 国产精品盗摄久久久| 99re热这里只有精品免费视频| 欧美91精品| 久久一二三四| 在线观看91精品国产麻豆| 欧美一区二区三区视频| 亚洲一二三区在线观看| 欧美视频成人| 一区二区精品在线| 亚洲精品国产精品国自产观看| 久久久夜夜夜| 伊人蜜桃色噜噜激情综合| 久久久久国产免费免费| 先锋资源久久| 国模精品一区二区三区色天香| 欧美一级精品大片| 亚洲欧美日韩中文视频| 欧美激情综合五月色丁香| 亚洲在线中文字幕| 一区二区三区四区五区在线| 一个色综合av| 99re6这里只有精品视频在线观看| 久久在线观看视频| 久久久久这里只有精品| 尤物网精品视频| 欧美顶级艳妇交换群宴| 久久久久一本一区二区青青蜜月| 亚洲女性裸体视频| 国产伦精品一区| 久久久www免费人成黑人精品| 欧美亚洲在线| 在线观看三级视频欧美| 亚洲国产va精品久久久不卡综合| 欧美国产亚洲精品久久久8v| 亚洲视频在线观看视频| 欧美一区二区免费| 母乳一区在线观看| 欧美亚洲网站| 欧美一级欧美一级在线播放| 国产午夜精品美女毛片视频| 久久久xxx| 欧美成人久久| 亚洲欧美日韩国产一区二区三区 | 欧美国产日本| 欧美肉体xxxx裸体137大胆| 午夜久久电影网| 快播亚洲色图| 亚洲欧美国产日韩中文字幕| 欧美在线一二三区| 一本大道久久a久久精二百| 亚洲一区二区在线视频| 亚洲成人在线网站| 一区二区三区四区国产| 精品69视频一区二区三区| 91久久精品日日躁夜夜躁欧美 | 欧美黄色一区二区| 亚洲精品系列| 国产区在线观看成人精品| 女人色偷偷aa久久天堂| 国产精品a久久久久久| 娇妻被交换粗又大又硬视频欧美| 欧美激情视频给我| 国产一区二区成人久久免费影院| 亚洲人成网在线播放| 国产一级久久| 在线亚洲精品| 亚洲伦理久久| 久久琪琪电影院| 久久精品欧美日韩| 国产精品成人一区二区三区吃奶| 蜜臀99久久精品久久久久久软件| 国产精品福利久久久| 亚洲素人一区二区| 香蕉尹人综合在线观看| 欧美电影免费观看大全| 久久久久网站| 国产精品综合不卡av| 亚洲毛片在线观看| 亚洲精品美女| 欧美成人精品h版在线观看| 久久久99爱| 国产主播一区二区三区四区| 亚洲天堂av图片| 亚洲小说欧美另类社区| 欧美另类在线播放| 亚洲精品久久久久久下一站| 亚洲第一黄色| 亚洲第一级黄色片| 黄网动漫久久久| 久久精品国产99精品国产亚洲性色| 亚洲综合清纯丝袜自拍| 国产精品国产三级国产普通话三级| 亚洲伦理久久| 国产精品99久久99久久久二8| 欧美成人精品| 亚洲精品美女久久久久| 一本色道久久88综合亚洲精品ⅰ| 欧美精品福利| 一区二区精品在线| 香蕉久久夜色精品国产| 国产精品亚洲精品| 欧美一区二区三区在线观看视频| 久久久精品日韩欧美| 狠狠入ady亚洲精品| 久久精品国产综合精品| 久热精品视频| 亚洲人在线视频| 欧美日韩国产一区| 亚洲一级二级| 久久久免费精品视频| 亚洲二区视频在线| 欧美极品影院| 亚洲一区二区在线看| 久久国产精品免费一区| 一区在线播放| 欧美美女bb生活片| 亚洲一区在线看| 免费成人激情视频| 夜夜嗨av一区二区三区四季av| 久久久精品一区| 亚洲日本电影| 久久精品在线免费观看| 亚洲国产一区二区三区在线播| 欧美久久久久久久| 欧美一区二区在线播放| 久久久夜色精品亚洲| 99精品视频免费全部在线| 国产伦精品一区二区三区高清| 欧美在线免费播放| 亚洲精品久久久久久下一站| 久久国产精品网站| 亚洲最新在线视频| 黄色日韩网站| 国产精品乱码久久久久久| 另类激情亚洲| 西西人体一区二区| 一区二区国产在线观看| 欧美好吊妞视频| 久久九九99视频| 亚洲午夜精品一区二区| 亚洲国产精品va在线看黑人| 国产精品试看| 亚洲一区精品电影| 国产精品h在线观看| 久久久久久91香蕉国产| 一本色道久久综合亚洲精品高清 | 女女同性女同一区二区三区91| 在线亚洲国产精品网站| 亚洲高清av| 欧美高清视频| 久久综合一区| 久久精品一区二区三区不卡| 亚洲婷婷综合色高清在线|