精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

干貨分享:六大招教你有效進行代碼 Review

新聞 前端
研發同學都知道代碼 Review 的重要性,在騰訊代碼 Review 也越來越受大家重視,作為騰訊專有云平臺研發的一員,我參與了大量的代碼 Review,明顯地感受到有效的代碼 Review 不但能提高代碼的質量,更能促進團隊溝通協作。

 [[349706]]

研發同學都知道代碼 Review 的重要性,在騰訊代碼 Review 也越來越受大家重視,作為騰訊專有云平臺研發的一員,我參與了大量的代碼 Review,明顯地感受到有效的代碼 Review 不但能提高代碼的質量,更能促進團隊溝通協作,建立更高的工程質量標準,無論對個人還是團隊都有著重要的價值。本文就為什么要做代碼 Review 以及如何有效地做代碼 Review 分享一下個人的看法。

為什么要做代碼 Review

為什么要代碼 Review,相信每個人心中都有比較一致的答案,Google 搜索一下也能找到一大堆的文章。這里簡單總結幾點:

1)提高代碼質量

這是代碼 Review 的初衷,也是代碼 Review 最直接的價值。Reviewers 根據各自的經驗,思考方式,看問題的角度給代碼提出各種可能的改進意見,從而形成更好的代碼以及產品質量。

我們知道產品問題越晚提出解決它的代價就越大,參與進去的人、要走的流程都會越來越多。代碼 Review 可以說是早期解決問題最有效的途徑之一了,在代碼 Review 中解決掉哪怕一個小問題都能避免后續一堆的麻煩事。

2)形成團隊統一的高質量標準

有效的代碼 Review 最終會在團隊范圍內建立起統一的質量標準,并且會隨著團隊成員的互相學習和促進形成更高的標準。參與者會在代碼 Review 的過程中基于具體問題從不同角度提出改進意見,并最終做出當前最佳的選擇并形成共識。隨著代碼 Review 的有效進行,團隊成員會有意識地關注代碼質量,從而形成越來越高的事實上的質量標準。

3)個人快速成長

通過有效的代碼 Review,Author 和 Reviewer 都將獲得成長,在 Review 過程中參與人就具體的問題展開深入的討論,無論是怎么寫出整潔的代碼、怎么更好地更全面地思考問題、怎么最佳地解決問題,參與人都可以互相取長補短,互相提高。通過具體代碼實現進行的討論往往是最深入和有效的,代碼 Review 是開發者提高代碼能力最重要的途徑之一。

有的人認為代碼 Review 就是 Reviewer 幫助查找代碼中的 Bug,其實代碼 Review 不應該是一個單向的過程,而應該是個雙向交流的過程,Reviewer 幫助 Author 提出代碼改進意見的同時,也是向優秀的 Author 學習的過程。我們都知道提高代碼能力一個有效的途徑是閱讀優秀的項目代碼,但是閱讀項目代碼有著不小的難度,這也是大部分人沒有去執行的原因,而 Review 資深同事的代碼,我們在閱讀代碼的同時能夠直接進行有效的溝通,這是一個快速有效的學習途徑,尤其對開發經驗還不算豐富的開發者而言。

如何做好代碼 Review

2.1. 第一招:什么時候發起 Review

在代碼 Review 上,Author 需要意識到:Reviewer 的時間是昂貴的。因此在正式邀請 Reviewer 發起代碼 Review 前,Author 有幾項需要注意的點,這些都能提高代碼 Review 的效率,節省 Reviewer 的時間。

2.1.1. MR (Merge Request)

也稱為 PR(Pull Request), MR 是我們進行代碼 Review 的地方,它記錄著代碼的具體改動,參與者具體的討論過程。好的 MR 應該做到以下幾點:

  • 單一:一個 MR 應該只解決一個單一的問題,無論是修復一個 bug,還是實現一個新 feature。Author 應該避免一個 MR 包含不同意圖的代碼改動。單一的 MR 能幫助 Reviewer 快速地了解代碼改動的動機,能有針對性地進行 Review。
  • 短小:MR 應該盡量地小,比如一個 feature 引入了較多的改動,需要考慮是否可以拆成獨立的幾塊實現,分開提 MR,比如接口定義、接口實現、邏輯對接等拆分開。
  • 詳細: 這里說的詳細是指 MR 應該盡可能地詳細描述它的背景和動機,可以是在 MR 的描述中詳細體現,也可以是連接到具體 issue 或 tapd 單中。需要達到的目的是,其他人翻開一個 MR 能知道當時做這個改動的背景以及動機。

2.1.2. Commit Message

之前翻看了不少現存的項目代碼,看到不少的 Commit Message 寫得比較簡單,例如一連串的 "update", "fix",從這些 Commit Message 中完全看不出做了什么改動,想想如果之后想要定位之前的某個改動,該從哪里下手。

目前 Commit Message 規范比較常見的有 Angular 團隊的規范,并由此衍生出了 Conventional Commits Specification,可以參照此 Specification 約定 Commit Message 格式規范。

  1. <type>(<scope>): <subject><BLANK LINE><body><BLANK LINE><footer> 

大體分三行:

  • 【標題行】 必填, 描述主要修改類型和內容。
  • 【主題內容】 描述為什么修改, 做了什么樣的修改, 以及這么做的思路等等。
  • 【頁腳注釋】 放 Breaking Changes 或 Closed Issues

其中 type 是 Commit 的類型,可以有以下取值:

  • feat:新特性
  • fix:修改 bug
  • refactor:代碼重構
  • docs:文檔更新
  • style:代碼格式修改
  • test:測試用例修改
  • chore:其他修改, 比如構建流程, 依賴管理

其中 scope 表示的是 Commit 影響的范圍,比如 ui,utils,build 等,是一個可選內容。

其中 subject 是 Commit 的概述,body 是 Commit 的具體內容。

例如:

  1. fix: correct minor typos in codesee the issue for details on typos fixed.Refs #133 

Commit Message 可以在 git 中配置模板,這樣可以在 vim 中展示出模板,另外可有工具幫助我們生成和約束 Commit Message,例如 commitizen/cz-cli,這里不再具體說明。

2.1.3. CI 通過

CI(Continuous Integration),持續集成可以幫助我們自動發現很多代碼中的基本問題,在合適的靜態代碼檢查(lint)配置和良好的單元測試覆蓋下,CI 可以有效地提高代碼的質量。很多人都低估了靜態代碼檢查的能力,實際上現在常見語言的靜態代碼檢查已經能幫助發現不少的 bug 和隱患。對于 Go 語言,可以配置 golangci-lint 來做代碼檢查,單元測試根據實際情況可以制定相應的標準,比如覆蓋率 60%,其中關鍵的代碼邏輯盡量全面覆蓋。

提交代碼 Review 前需要確保 CI 執行通過,這也是為了節省 Reviewer 的時間,能夠通過自動化解決的事情,盡量不要讓 Reviewer 來做,而 Reviewer 發現 CI 未過的 MR 也可以要求 Author 先解決 CI 問題。

2.1.4. Self-Review

我們一般代碼 Review 都是找他人來進行 Review,其實負責任的 Author 在邀請他人來代碼 Review 前也需要自己簡單 Review 一遍,即 Self-Review。

Self-Review 的目的包括:

  • 發現那些明顯的疏忽,如代碼 debug 過程中留下的不必要的痕跡,比如 fmt.Println(...),不小心注釋掉的代碼。
  • 之前被 Reviewer 多次提出過的問題。
  • Commits 是否正常,在多人協作的情況下 MR 中否帶入了不相關的 Commit。
  • Commit Message 是否合適。

Self-Review 是一個非常快速的過程,從我個人的經驗,一般 1-2 分鐘即可完成,所以推薦大家養成 Self-Review 的習慣。

2.2. 第二招:該找誰來 Review

從目的出發,可以從以下幾方面考慮 Reviewer:

  • 提高代碼質量。所以首先應該找和代碼改動緊密相關的研發人員參與 Review,比如一起開發某個功能,某個項目,或者一起參與了方案設計討論并給出了有價值意見的研發。
  • 獲取意見。找有相關經驗的資深研發幫忙 Review,比如 Java 語言資深的研發、寫過相同或類似系統/功能的研發。
  • 形成共識。如果涉及到不同團隊或模塊間的接口改動,或其他會影響其他人的改動,可以邀請相關團隊或模塊的接口人參與 Review,以對改動形成共識。
  • 質量把關。對于重要的代碼庫,可能會執行比較嚴格的質量把控,如果設置了必須的 Reviewer,這些 Reviewer 也會參與進來。
  • 變動告知。很多情況下一個代碼庫可能只有一個人維護,如果做了些比較特殊的變動,其他人很難發現。因此在做一些重要的但是理解起來不那么直接的地方的時候,最好告知一下相關的研發,以便他們能大概知道發生了什么。

2.3. 第三招:都 Review 些什么

經常會有 Reviewer 拿到 MR 不知道該 Review 些什么,其實無論你參與對應項目的深入如何,都可以對代碼進行 Review,也鼓勵不同人從不同的深度、角度去幫助 Review。代碼 Review 沒有固定的形式,它更像是一門藝術,唯一的提高辦法就是實際參與進去。

Review 的時候可以從以下幾個方面入手:

1)簡單的 Review

在 CI 通過的情況下,最簡單的 Review 方式可能只需要這樣:

Reviewer:在實際環境中都驗證過了嗎?
Author:當然驗證過了
Reviewer:LGTM

這是一種提醒式的 Review。確認一句:是否在環境中驗證過了,或者進一步把能想到的重要的驗收點提出來確認一遍。即使是這種最簡單的 Review 實際上也是有價值的,我們很難保證所有研發都會在提 MR 前實際在環境中驗證自己所做的修改,也很難保證單元測試、e2e 測試能 Cover 住所有的情況,Reviewer 基本上也不可能都自己去環境上跑一遍。讓 Author 去確認實際上就是提醒 Author 去確保改動至少是真實有效的,尤其是對一些已發布版本的 Bugfix,一定要提醒實際自測通過。

類似的提醒還包括:相關的文檔(外部的)是否相應更新了、這個改動是否會有兼容性的問題、性能是否有影響。他們的本質就是提醒 Author 自己去思考他們可能遺漏的問題。

2)常規的 Review

代碼 Review 一般都會從代碼風格、變量命名、語法統一處入手,當然這些應該更多的借助于 CI 等自動化手段來保證,但是在相關流程還不是很完善的前提下還是有必要進行關注。

此外代碼可讀性、代碼健壯性、代碼可擴展性都是 Review 時關注的點。每一個關注的點都依賴于 Reviewer 的實際經驗,這里只簡單舉幾個例子:

{ 代碼可讀性 }

代碼是寫給人看的,因為沒有不需要維護的代碼,無論是 Author 自己后續維護代碼,還是他人接手代碼,能快速地理解代碼邏輯是非常必要的。

代碼 Review 的時候可以關注以下幾點:

  • 變量、方法的命名是否合適,是否真實反映了他們的目的,這方面網上可以找到不少的資料說明。
  • 實現的邏輯是否已有現成的庫可以替代。如果有成熟的庫可以使用,盡量不要自己去實現,因為可能會引入不必要的 bug。從我個人的角度,簡潔(大白話就是代碼少)是可讀性一個很重要的指標。
  • 關于注釋。代碼注釋不求多,而在于有效,以前也經歷過代碼注釋要求至少達到 30% 以上的年代,現在看來過多依賴注釋其實是對代碼質量的不自信,好的代碼應該盡量做到自解釋。在實際過程中偶爾能看到代碼邏輯實際已經清晰明了,但是用語句不怎么通的英文注釋了一通,最后反而是看懂了代碼才能理解注釋到底說了啥。因此 Review 的時候,不必要的注釋可以建議去掉。
  • 不好理解的地方要有恰當的注釋。代碼中如果有特殊處理、特殊的常量、或者不符合一般用法的邏輯需要特別注釋說明一下。
  • 代碼的組織。良好的代碼應該有較好的封裝以及層級,使得代碼看起來清晰明了,比如 DAO 層、Service 層。

{ 代碼健壯性 }

  • 代碼的改動是否會影響其他功能。
  • 用戶參數是否做好細致的校驗。
  • 有沒有 Panic 的可能(針對 Go 的說法)。
  • 是否會破壞 API 的兼容性。

{ 可擴展性 }

當前的實現方式是否能兼容以后類似的擴展需求。比如在新增接口、API 或者調整參數以解決某一問題上,可以考慮是否后續會有其他類似情況發生。舉幾個例子:

  • 假設我們需要定義一個 API 接口去獲取一個用戶的某些信息,例如聯系方式等,我們定義的 API 就不能只返回這些信息,而是應該把用戶相關的信息都返回。
  • 假設我要定義一個參數,雖然當前定義成單個元素即可滿足,例如 string, int,但是以后是否會涉及到多個元素的場景,是否定義成 []stirng, []int 是更優的。

這里只是舉了有限的一些例子,在實際 Review 過程中,Reviewer 可以根據自身的經驗從各個角度提出優化的意見。一般需要重點看看:

  • 你看不懂或疑惑的地方。
  • 打破你常規的地方。
  • 復雜的地方。

2.4. 第四招:如何進行

Review 過程中鼓勵 Reviewer 大膽 Comment,有不理解的地方,或者覺得不合適的地方都直接表達出來,Author 對 MR 的 每個 Comment 也要做出反饋,無論是展開討論還是簡單的給個 OK 都是有效的反饋。

Review 的過程可以是:

  • Author 在各項確認工作完成后,發起 Review,如果比較急,可以給重要的 Reviewer 發消息請求幫忙 Review。
  • Reviewer 看到 MR 后應該先確認 MR 的背景和目的,如果不清楚也無法從 MR 中獲取該信息,最好直接和 Author 溝通。
  • Reviewer 直接在 MR 上提出自己的建議或者問題。
  • Author 對每個 Comment 進行反饋,并展開必要的討論。
  • 復雜的話題可以采用線下討論以提高溝通效率。
  • Author 處理完了所有的 Comment,也修改了代碼后,需要在 MR 里 @ 一下相關 Reviewer 告知所有優化已經提交,如果時間比較急也可以直接和 Reviewer 溝通。
  • Reviewer 確認沒問題,給 MR 進行 Approve,一般簡單的回復是 LGTM(Lood Good To Me),也可以對 Author 的工作進行贊賞,比如 “God Job” 等。
  • Approve 后 MR 由誰來合并這個看自己選擇。
  • 如果 Reviewer 提供了很多有用的建議幫助優化代碼,Author 也可以禮貌性地感謝一下 Reviewer。

2.5. 第五招:關于 Comment

代碼 Review 很大程度上就是給代碼挑毛病,而且一般預期挑的越多越好,但代碼是 Author 寫的,很多情況下或多或少會對 Author 造成不適。所以在 Comment 的時候需要盡量注意措辭,尤其是一些主觀的東西,一般以建議的方式給出。當然對于原則性的問題,是要堅守質量標準的,甚至可以直接 Deny 掉 MR。

另外,參與者也不要吝嗇你的溢美之詞,無論是 Author 還是 Reviewer,在 Review 中發現了好的地方或好的建議,請給予對方以肯定和贊美,這樣有助于 Review 有效的進行。

2.6. 第六招:參與者該抱著怎樣的心態

2.6.1. Author

首先需要明確一點,是 Author 自己對代碼的質量負責,因此應當懷著感恩的心去看待堅持認真幫你 Review 代碼的 Reviewer,因為并不是所有你加的 Reviewer 都有時間和精力來幫你提高代碼質量。

也正是因為 Author 是自己代碼的 owner,所以不要依賴于 Reviewer 去幫你守代碼質量的大門,像 “代碼 Review 的時候你怎么就沒看出來”,“這不是你建議我這么做的嗎” 這樣的話千萬別說。Reviewer 只是幫你提高代碼質量,因此我們該做的工作都要去做,比如細致的 Reviewer 可能某些情況下直接提出了代碼優化的建議,Comment 時貼上了優化的代碼片段,Author 不能直接假設它一定是能正常工作的,而應該對它進行完整的驗證。

對 Reviewer 給出的 Comment,不要有抵觸的情緒,對你覺得不合理的建議,可以委婉地進行拒絕,或者詳細說明自己的看法以及這么做的原因。有時候一個你覺得不合理的建議可能代表一個新的思考角度,也可能代表 Reviewer 自身代碼能力上的不足,無論是哪個,無論最終是 Author 還是 Reviewer 得到了提高,都應該是好事。

2.6.2. Reviewer

Review 代碼既是幫助提高代碼質量的過程,也是 Reviewer 提高自己代碼能力和溝通能力的過程。因此應該在 Review 的同時保持一個學習者的心態,既要發現對方代碼中的缺陷,也要努力去發現代碼中的亮點。切忌單純以挑毛病的心態去 Review 代碼。

有不少 Reviewer 在寫 Comment 的時候會猶豫,擔心自己提出的問題或建議比較“蠢”,因此猶猶豫豫下看完了代碼抱著一堆疑慮最終啥也沒留下。其實在代碼 Review 的時候大可不必有什么心里負擔,有什么疑惑的、不清楚的地方或者有什么自己的想法,可以直接提出來,有時候一個簡單的 Comment 就可能會激起 Author 和你的 Comment 毫不相干的新思路。再者你即使沒幫 Author 提高代碼,讓 Author 幫你提高思考不也是件不錯的事情嗎。

Reviewer 也不需要去關注自己的“產出”,并不是一定要提出一堆問題才是好的代碼 Review,Author 代碼寫得很棒也是很正常的,如果從你的角度覺得代碼沒問題,大膽給個 LGTM 甚至是 Approve。

責任編輯:張燕妮 來源: 騰訊技術工程
相關推薦

2018-02-06 09:25:35

數據分析分析方法分析工具

2010-03-30 11:29:08

BMCCMDBIT運維

2023-08-31 22:12:51

低代碼隱患技術

2014-03-19 09:13:54

2010-12-08 11:46:34

職場

2023-09-06 08:30:00

低代碼自動化開發

2010-10-19 14:57:25

谷歌云計算

2022-05-17 07:33:56

云環境策略云服務

2009-08-25 09:29:18

維護代碼

2023-10-18 10:48:44

Python解釋器

2010-07-30 13:15:17

Flex優勢

2010-12-02 11:12:41

職場

2012-03-02 09:18:30

ISACA云計算

2010-09-25 15:22:19

DHCP故障處理

2024-10-22 14:42:14

2010-08-16 10:14:23

云計算誤區

2022-03-07 14:10:13

云數據倉庫云遷移云原生

2015-08-18 09:02:37

2009-02-13 09:51:43

程序員職業素養團隊

2021-08-12 14:31:52

邊緣計算云計算數據
點贊
收藏

51CTO技術棧公眾號

av日韩一区| 国产黄色在线| 性8sex亚洲区入口| 综合136福利视频在线| 无码人妻少妇色欲av一区二区| 91av久久| 综合久久久久久久| 久久国产精品久久精品国产| 一级黄色大片免费| 亚洲精一区二区三区| 中文字幕亚洲综合久久| 欧美一区二区免费在线观看| 日韩成人综合网站| 欧美日韩免费在线观看| 中文字幕中文字幕99| 欧美拍拍视频| 成人av电影免费在线播放| 国产精品激情av在线播放 | 亚洲码欧美码一区二区三区| 一本色道综合亚洲| 和岳每晚弄的高潮嗷嗷叫视频| av在线之家电影网站| 不卡的av网站| 97久久人人超碰caoprom欧美| aaaaaa毛片| 亚洲人成在线影院| 色综合天天狠天天透天天伊人| 18啪啪污污免费网站| 午夜先锋成人动漫在线| 日韩精品一区二区三区视频播放| www.夜夜爽| 二吊插入一穴一区二区| 午夜精品久久久久| wwwwww欧美| 中中文字幕av在线| 亚洲欧洲成人精品av97| 五月婷婷综合色| 国产在线自天天| 久久久久久久久岛国免费| 激情小说综合区| 日本精品久久久久| 豆国产96在线|亚洲| 亚洲综合色激情五月| 97人妻一区二区精品免费视频 | 无码人妻少妇色欲av一区二区| 福利一区在线| 欧美日韩国产影片| 少妇一级淫免费播放| 日本在线中文字幕一区二区三区| 色爱区综合激月婷婷| 已婚少妇美妙人妻系列| 欧美18av| 欧美最猛性xxxxx直播| 成人性做爰aaa片免费看不忠| 先锋欧美三级| 欧美日韩国产成人在线免费| 日韩中文字幕a| aa亚洲一区一区三区| 欧美一区二区久久久| 中文字幕无码毛片免费看| 视频欧美一区| 精品在线观看国产| 欧美人妻一区二区三区| 久久要要av| 成人97在线观看视频| 青娱乐av在线| av成人激情| 国产精品大片wwwwww| 亚洲手机在线观看| 国产福利一区二区三区视频在线 | 蜜桃视频在线观看视频| 欧美国产激情一区二区三区蜜月| 亚洲一区不卡在线| 丝袜美腿av在线| 欧美天堂在线观看| www欧美激情| 亚洲精品在线国产| 国产亚洲成av人片在线观看桃| 国产精品综合激情| 国产精品av久久久久久麻豆网| 午夜精品久久久久久久久久久久久 | 日韩一区二区免费看| 日韩免费观看视频| 国产美女精品视频国产| 99久久婷婷国产综合精品电影 | 欧美视频在线播放| 91成人在线观看喷潮蘑菇| 欧美顶级毛片在线播放| 日韩最新中文字幕电影免费看| 欧美高清视频一区二区三区| 西西裸体人体做爰大胆久久久| 国产日韩欧美成人| 日韩在线观看视频网站| 中文字幕在线不卡一区| 无码人妻丰满熟妇区96| 成人亚洲精品| 亚洲欧美精品一区| 久久免费视频99| 日本中文字幕一区| www 成人av com| 91在线直播| 午夜精品一区二区三区电影天堂| 日韩不卡一二三| 欧美色资源站| 欧美人在线观看| 国产真人无遮挡作爱免费视频| 国产精品资源网| 视频一区二区三| 麻豆视频在线看| 日韩欧美色综合网站| 我不卡一区二区| 亚洲人成免费| 91日韩久久| 欧美成人二区| 在线观看日韩av先锋影音电影院| 182在线视频| 欧美激情亚洲| 91免费视频网站| 在线观看h片| 日韩欧中文字幕| av网页在线观看| 欧美特黄一级| 亚洲自拍欧美色图| 麻豆视频网站在线观看| 欧美视频中文字幕| 国产熟女一区二区| 久热国产精品| 免费在线观看91| 少妇在线看www| 亚洲精品成人久久久| 久久久.www| 国产精品18久久久久久vr| 亚洲第一综合网站| 欧美一区二区三区婷婷| 在线看福利67194| 中文字幕日本视频| 欧美国产精品v| 国产喷水theporn| 日韩一区三区| 国产日韩欧美在线观看| 95在线视频| 91.成人天堂一区| 中文字幕五月天| 国产精品一区在线观看你懂的| 椎名由奈jux491在线播放| 亚洲资源在线| 久久视频这里只有精品| 国产浮力第一页| 一区二区三区日韩欧美精品 | 国产亚洲欧美在线| 日本成人中文字幕在线| 日韩精品四区| 成人精品久久久| a级在线观看| 精品国产电影一区二区| 成人午夜视频精品一区| 久久久天堂av| 依人在线免费视频| 欧美一区影院| 国产乱码精品一区二区三区不卡| 国产高潮在线| 一区二区三区高清国产| 国产精品伦一区二区三区| 一区二区在线观看av| 国产又粗又猛又色| 日本欧美加勒比视频| av动漫免费观看| xvideos.蜜桃一区二区| 欧亚精品在线观看| 婷婷五月在线视频| 精品国一区二区三区| 手机看片久久久| 亚洲欧洲日韩女同| a级一a一级在线观看| 免费高清在线一区| 国产高清不卡无码视频| 亚洲免费福利一区| 成人信息集中地欧美| 国产网红女主播精品视频| 精品一区二区三区四区| 国产乱色精品成人免费视频| 亚洲一区在线播放| 免费视频91蜜桃| 国产馆精品极品| 好男人www社区| 欧美.www| 色播亚洲视频在线观看| 91精品国产自产精品男人的天堂| 91高清免费在线观看| 波多野结衣在线网站| 欧美成人精品1314www| 男人的天堂av网站| 一区二区三区四区在线免费观看| 精品成人av一区二区三区| 国产一区二区女| 国产成人精品视频ⅴa片软件竹菊| 66视频精品| 色一情一区二区三区四区| 97视频一区| 成人激情视频在线| 日韩av大片站长工具| 欧美激情一区二区三区在线视频观看 | 日本一本草久p| 国产麻豆精品久久| 精品蜜桃一区二区三区| 高清久久精品| 日韩av高清不卡| 成人在线免费观看黄色| 日韩视频免费大全中文字幕| 亚洲 欧美 自拍偷拍| 日韩欧美一区中文| 亚洲永久精品视频| 色呦呦日韩精品| 国产香蕉视频在线| 亚洲一区二区视频在线| 欧美 日韩 国产 一区二区三区| 国产色综合一区| 黄色a一级视频| 成人自拍视频在线观看| 在线成人精品视频| 九色|91porny| 午夜免费看毛片| 日韩精品一卡二卡三卡四卡无卡| 欧美牲交a欧美牲交| 伊人久久亚洲影院| 六月婷婷激情综合| 久久国产精品亚洲人一区二区三区 | 久久综合导航| 色诱视频在线观看| 国内久久视频| 六月婷婷激情综合| 欧美日韩午夜| 日本aa在线观看| 欧美极品一区二区三区| 欧美日韩激情四射| 国产精品s色| 日本黄色片一级片| 禁久久精品乱码| 精品久久久久久无码中文野结衣| 亚洲国产古装精品网站| 波多野结衣a v在线| 99精品视频在线播放观看| 久久国产免费视频| 国产精品影视网| 被黑人猛躁10次高潮视频| 在线观看日本网站| 亚洲啪啪91| 国产夫妻自拍一区| 激情欧美一区二区三区| 久久发布国产伦子伦精品| 丁香五月缴情综合网| 91蜜桃网站免费观看| 亚洲电影一区| 懂色中文一区二区三区在线视频| 午夜日韩影院| 日韩精品久久一区| 色综合综合色| 日韩性感在线| 日韩大片在线| 国产精品av免费| 伊人久久大香线蕉精品组织观看| 最近免费观看高清韩国日本大全| 一本精品一区二区三区| 人人妻人人澡人人爽欧美一区双| 亚洲国内自拍| 久久久国产成人精品| 色大18成网站www在线观看| 久久久999精品| 黑人玩欧美人三根一起进| 97成人精品区在线播放| 亚洲四虎影院| 成人精品久久久| 欧洲精品一区| 亚洲精品8mav| 亚洲视频观看| 日韩精品一区二区三区色欲av| 久久av资源站| 欧美日韩人妻精品一区在线| 国产日韩精品一区二区三区在线| 少妇视频一区二区| 黄色一区二区在线观看| 伊人成人在线观看| 精品国产乱码久久久久久老虎| 精品亚洲成a人片在线观看| 久久精视频免费在线久久完整在线看| 男女在线视频| 国产精品视频xxx| 国产劲爆久久| 亚洲一区二区三区精品视频| 黄色日韩精品| 色播五月综合网| 91色综合久久久久婷婷| 蜜桃av.com| 日韩欧美在线视频| 亚洲高清视频在线播放| 一区二区三区视频观看| 2020日本在线视频中文字幕| 国产日韩在线看片| 妖精一区二区三区精品视频| 99久久99久久精品| 麻豆一区二区三| 无码人妻精品一区二区三应用大全| 自拍偷拍亚洲欧美日韩| 免费看日批视频| 欧美精品一区二区三区在线播放| 自拍视频在线播放| 欧美在线视频网| www.豆豆成人网.com| 在线视频一区观看| 视频一区二区三区在线| 成人性生活免费看| 一区二区三区毛片| 夜夜躁很很躁日日躁麻豆| 日韩电影中文字幕av| 欧美xxx黑人xxx水蜜桃| 成人免费黄色网| 欧洲杯足球赛直播| 成人在线免费播放视频| 91日韩精品一区| 国产午夜视频在线| 日韩欧美资源站| 成人福利在线观看视频| 国产美女精品视频| 国产探花在线精品一区二区| 成人免费在线小视频| 北条麻妃一区二区三区| 五月天丁香激情| 日韩一区二区电影在线| 欧美18hd| 91青草视频久久| 天天久久综合| 日韩av片免费观看| 中文字幕一区二区视频| 一级做a爱片久久毛片| 一区二区三区天堂av| 欧美日韩不卡| 亚洲国产精品毛片| 蜜臀久久99精品久久久久宅男| 人妻一区二区视频| 欧美性受xxxx黑人xyx性爽| 国产免费a∨片在线观看不卡| 日本一区二区三区在线播放| 精品一区在线| 国产自偷自偷免费一区| 中文字幕 久热精品 视频在线| 中文字幕一区二区久久人妻| 中文字幕日韩精品在线观看| 国产精品黄色片| 黄色一级片网址| 丁香激情综合五月| 日本最新中文字幕| 亚洲人成毛片在线播放| 亚洲天堂1区| 一区二区在线高清视频| 国产一区免费电影| 久久久久久国产精品免费播放| 精品国产乱码久久久久久影片| 电影在线观看一区| 欧洲一区二区日韩在线视频观看免费 | 国产精品午夜春色av| 97人妻精品一区二区三区视频 | 91大神在线观看线路一区| 亚洲一区二区三区精品在线观看 | 丁香婷婷久久久综合精品国产 | 国产97免费视| 999视频精品| 逼特逼视频在线观看| 欧美日韩免费网站| 蜜桃视频在线观看www社区| 99re在线视频观看| 在线亚洲自拍| 国产又黄又粗又猛又爽的 | 国产视频网站在线| 成人黄色短视频在线观看 | 亚洲一级免费观看| 一区二区视频在线看| 能在线看的av| 成人久久18免费网站图片| 影音先锋中文字幕一区| 魔女鞋交玉足榨精调教| 欧美精品777| 都市激情国产精品| 制服丝袜综合日韩欧美| 大尺度一区二区| 亚洲男人天堂网址| 欧美精品一区在线播放| 一本久久青青| 成年人性生活视频| 色欧美乱欧美15图片| 91极品在线| 神马影院一区二区| 成人av午夜影院| 国产又粗又猛视频| 欧美一区二区三区免费视| 一区二区国产在线| av男人的天堂av| 亚洲大胆美女视频| 亚洲天堂网站| 久久黄色免费看| 黑人巨大精品欧美一区二区三区|