国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種自動(dòng)化構(gòu)建軟件版本的方法與裝置與流程

      文檔序號(hào):11215974閱讀:1485來源:國(guó)知局
      一種自動(dòng)化構(gòu)建軟件版本的方法與裝置與流程

      本發(fā)明涉及軟件版本技術(shù)領(lǐng)域,特別是涉及一種自動(dòng)化構(gòu)建軟件版本的方法與裝置。



      背景技術(shù):

      在軟件開發(fā)中,對(duì)軟件進(jìn)行完整的版本構(gòu)建很重要,而且這一過程也成為軟件開發(fā)過程中每天都必不可少的一個(gè)環(huán)節(jié)。面對(duì)每天不斷新增的軟件代碼,要保證每天新合入的代碼不會(huì)出錯(cuò),且運(yùn)行效率高效,就必須對(duì)軟件版本進(jìn)行每日構(gòu)建,來保證軟件代碼在快速更新后的可靠性,提高研發(fā)效率。

      目前較為普遍的軟件開發(fā)過程是,開發(fā)人員在提交代碼前必須要進(jìn)行詳細(xì)的動(dòng)態(tài)測(cè)試和靜態(tài)測(cè)試后才能提交代碼到版本機(jī)上,然后再進(jìn)行每日構(gòu)建版本。這里的動(dòng)態(tài)測(cè)試是指開發(fā)人員編寫測(cè)試用例,對(duì)代碼的基本單元的功能、性能及業(yè)務(wù)邏輯進(jìn)行測(cè)試;靜態(tài)測(cè)試是指開發(fā)人員根據(jù)一定的編碼規(guī)則,對(duì)代碼的語(yǔ)法、結(jié)構(gòu)、過程、接口進(jìn)行測(cè)試。在這種方式中,每日構(gòu)建工作做的只是獲取源代碼、編譯源代碼,并生成可用的軟件版本,同時(shí),必須通過人工來完成動(dòng)態(tài)測(cè)試和靜態(tài)測(cè)試,從而降低了開發(fā)的效率且增加了測(cè)試出錯(cuò)或者遺漏或部分遺漏測(cè)試的概率。

      現(xiàn)有技術(shù)中,通過在構(gòu)建流程中加入單元測(cè)試及代碼規(guī)則檢測(cè)相關(guān)測(cè)試,以提升開發(fā)效率。但是如果整個(gè)軟件版本構(gòu)建由于新增代碼錯(cuò)誤導(dǎo)致的構(gòu)建中斷,是沒有解決措施的,如果由于新增代碼錯(cuò)誤導(dǎo)致構(gòu)建中斷,最終生成一個(gè)不可用軟件版本,而軟件構(gòu)建目的就是最終構(gòu)建出一個(gè)可用軟件版本。

      可見,如何保證構(gòu)建軟件版本的正確性,是本領(lǐng)域技術(shù)人員亟待解決的問題。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明實(shí)施例的目的是提供一種自動(dòng)化構(gòu)建軟件版本的方法與裝置,可以保證構(gòu)建軟件版本的正確性。

      為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供一種自動(dòng)化構(gòu)建軟件版本的方法,包括:

      s10:獲取源代碼;

      s11:利用預(yù)先存儲(chǔ)的單元測(cè)試用例集合對(duì)所述源代碼進(jìn)行單元測(cè)試;

      s12:判斷所述單元測(cè)試是否成功;若否,則執(zhí)行s13;若是,則執(zhí)行s14;

      s13:將所述源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,返回所述s11;

      s14:編譯所述源代碼生成程序包;

      s15:利用預(yù)先存儲(chǔ)的模塊測(cè)試用例集合對(duì)所述程序包進(jìn)行模塊測(cè)試;

      s16:判斷所述模塊測(cè)試是否成功;若否,則返回所述s13;若是,則執(zhí)行s17;

      s17:依據(jù)所述程序包,構(gòu)建軟件版本。

      可選的,在所述s12之后還包括:

      當(dāng)判斷出所述單元測(cè)試失敗時(shí),則向預(yù)先存儲(chǔ)的郵箱地址發(fā)送單元測(cè)試失敗的通知信息。

      可選的,在所述s12之后還包括:

      當(dāng)判斷出所述單元測(cè)試成功時(shí),則向預(yù)先存儲(chǔ)的郵箱地址發(fā)送單元測(cè)試通過的通知信息。

      可選的,在所述s16之后還包括:

      當(dāng)判斷出所述模塊測(cè)試失敗時(shí),則向預(yù)先存儲(chǔ)的郵箱地址發(fā)送模塊測(cè)試失敗的通知信息。

      可選的,在所述s16之后還包括:

      當(dāng)判斷出所述模塊測(cè)試失敗時(shí),則清除所述s14中編譯所述源代碼過程中生成的系統(tǒng)文件。

      本發(fā)明實(shí)施例還提供了一種自動(dòng)化構(gòu)建軟件版本的裝置,包括獲取單元、測(cè)試單元、判斷單元、回滾單元、編譯單元和構(gòu)建單元,

      所述獲取單元,用于獲取源代碼;

      所述測(cè)試單元,用于利用預(yù)先存儲(chǔ)的單元測(cè)試用例集合對(duì)所述源代碼進(jìn)行單元測(cè)試;

      所述判斷單元,用于判斷所述單元測(cè)試是否成功;

      若否,則觸發(fā)所述回滾單元,所述回滾單元,用于將所述源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,觸發(fā)所述測(cè)試單元;

      若是,則觸發(fā)所述編譯單元,所述編譯單元,用于編譯所述源代碼生成程序包;

      所述測(cè)試單元還用于利用預(yù)先存儲(chǔ)的模塊測(cè)試用例集合對(duì)所述程序包進(jìn)行模塊測(cè)試;

      所述判斷單元還用于判斷所述模塊測(cè)試是否成功;

      若否,則觸發(fā)所述回滾單元;

      若是,則觸發(fā)所述構(gòu)建單元,所述構(gòu)建單元,用于依據(jù)所述程序包,構(gòu)建軟件版本。

      可選的,還包括發(fā)送單元,

      所述發(fā)送單元,用于在所述判斷單元判斷出所述單元測(cè)試失敗之后,向預(yù)先存儲(chǔ)的郵箱地址發(fā)送單元測(cè)試失敗的通知信息。

      可選的,所述發(fā)送單元還用于在所述判斷單元判斷出所述單元測(cè)試成功之后,向預(yù)先存儲(chǔ)的郵箱地址發(fā)送單元測(cè)試通過的通知信息。

      可選的,所述發(fā)送單元還用于在所述判斷單元判斷出所述模塊測(cè)試失敗之后,向預(yù)先存儲(chǔ)的郵箱地址發(fā)送模塊測(cè)試失敗的通知信息。

      可選的,還包括清除單元,

      所述清除單元,用于在所述判斷單元判斷出所述模塊測(cè)試失敗之后,清除所述編譯單元在編譯所述源代碼過程中生成的系統(tǒng)文件。

      由上述技術(shù)方案可以看出,軟件版本構(gòu)建系統(tǒng)會(huì)自動(dòng)獲取最新提交的源代碼;利用預(yù)先存儲(chǔ)的單元測(cè)試用例集合對(duì)所述源代碼進(jìn)行單元測(cè)試;當(dāng)單元測(cè)試失敗時(shí),則說明源代碼存在問題,此時(shí)可以將源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,對(duì)其進(jìn)行單元測(cè)試,從而可以有效的保證源代碼的正確性。將通過單元測(cè)試的源代碼進(jìn)行編譯處理生成程序包;利用預(yù)先存儲(chǔ)的模塊測(cè)試用例集合對(duì)所述程序包進(jìn)行模塊測(cè)試。當(dāng)模塊測(cè)試失敗時(shí),則說明源代碼存在問題,此時(shí)可以將源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,返回單元測(cè)試的步驟。當(dāng)模塊測(cè)試成功后,則說明該程序包可以實(shí)現(xiàn)相應(yīng)的測(cè)試功能,則可以依據(jù)所述程序包,構(gòu)建軟件版本。系統(tǒng)自動(dòng)化進(jìn)行單元測(cè)試和模塊測(cè)試,可以大大節(jié)省開發(fā)人員的開發(fā)時(shí)間,縮短軟件版本的開發(fā)周期,提高了研發(fā)效率,并且利用代碼自動(dòng)回滾功能,可以有效保證每一次構(gòu)建出來的軟件版本都是可用的版本。

      附圖說明

      為了更清楚地說明本發(fā)明實(shí)施例,下面將對(duì)實(shí)施例中所需要使用的附圖做簡(jiǎn)單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

      圖1為本發(fā)明實(shí)施例提供的一種自動(dòng)化構(gòu)建軟件版本的方法的流程圖;

      圖2為本發(fā)明實(shí)施例提供的一種自動(dòng)化構(gòu)建軟件版本的裝置的結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下,所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)范圍。

      為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。

      接下來,詳細(xì)介紹本發(fā)明實(shí)施例所提供的一種自動(dòng)化構(gòu)建軟件版本的方法。圖1為本發(fā)明實(shí)施例提供的一種自動(dòng)化構(gòu)建軟件版本的方法的流程圖,該方法包括:

      s10:獲取源代碼。

      軟件版本構(gòu)建系統(tǒng)可以自動(dòng)化的獲取到最新提交的源代碼。

      s11:利用預(yù)先存儲(chǔ)的單元測(cè)試用例集合對(duì)所述源代碼進(jìn)行單元測(cè)試。

      單元測(cè)試可以是對(duì)源代碼的語(yǔ)法、結(jié)構(gòu)、過程、接口等進(jìn)行測(cè)試。單元測(cè)試用例是開發(fā)者編寫的一段代碼程序,為了使得軟件版本構(gòu)建系統(tǒng)可以自動(dòng)化的對(duì)源代碼進(jìn)行單元測(cè)試,可以在系統(tǒng)中預(yù)先存儲(chǔ)單元測(cè)試用例集合。該單元測(cè)試用例集合中包含有可以實(shí)現(xiàn)相應(yīng)單元測(cè)試的單元測(cè)試用例。

      s12:判斷所述單元測(cè)試是否成功。

      對(duì)源代碼進(jìn)行單元測(cè)試,如果單元測(cè)試失敗,則說明源代碼的語(yǔ)法、結(jié)構(gòu)、過程或者接口等可能存在問題,則執(zhí)行s13;如果單元測(cè)試成功,則可以說明源代碼編寫正確,則執(zhí)行s14。

      s13:將所述源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,返回所述s11。

      在本發(fā)明實(shí)施例中,當(dāng)單元測(cè)試失敗,可以采用代碼回滾的方式,將代碼版本自動(dòng)回滾到上一次提交狀態(tài),即將上一次提交的代碼作為源代碼,然后重新進(jìn)行單元測(cè)試。

      s14:編譯所述源代碼生成程序包。

      當(dāng)源代碼通過單元測(cè)試后,可以對(duì)源代碼進(jìn)行編譯處理生成程序包,即將源代碼翻譯成計(jì)算機(jī)可以識(shí)別的語(yǔ)言。

      s15:利用預(yù)先存儲(chǔ)的模塊測(cè)試用例集合對(duì)所述程序包進(jìn)行模塊測(cè)試。

      模塊測(cè)試可以是對(duì)程序包的功能、性能及業(yè)務(wù)邏輯等進(jìn)行測(cè)試。為了使得軟件版本構(gòu)建系統(tǒng)可以自動(dòng)化的對(duì)程序包進(jìn)行模塊測(cè)試,可以在系統(tǒng)中預(yù)先存儲(chǔ)模塊測(cè)試用例集合。該模塊測(cè)試用例集合中包含有可以實(shí)現(xiàn)相應(yīng)模塊測(cè)試的模塊測(cè)試用例。

      s16:判斷所述模塊測(cè)試是否成功。

      對(duì)程序包進(jìn)行模塊測(cè)試,如果模塊測(cè)試失敗,則可以說明程序包的功能、性能或者是業(yè)務(wù)邏輯等可能存在問題,則返回s13;如果模塊測(cè)試成功,則可以說明程序包可以實(shí)現(xiàn)相應(yīng)的功能測(cè)試,則執(zhí)行s17。

      s17:依據(jù)所述程序包,構(gòu)建軟件版本。

      由上述技術(shù)方案可以看出,軟件版本構(gòu)建系統(tǒng)會(huì)自動(dòng)獲取最新提交的源代碼;利用預(yù)先存儲(chǔ)的單元測(cè)試用例集合對(duì)所述源代碼進(jìn)行單元測(cè)試;當(dāng)單元測(cè)試失敗時(shí),則說明源代碼存在問題,此時(shí)可以將源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,對(duì)其進(jìn)行單元測(cè)試,從而可以有效的保證源代碼的正確性。將通過單元測(cè)試的源代碼進(jìn)行編譯處理生成程序包;利用預(yù)先存儲(chǔ)的模塊測(cè)試用例集合對(duì)所述程序包進(jìn)行模塊測(cè)試;當(dāng)模塊測(cè)試失敗時(shí),則說明源代碼存在問題,此時(shí)可以將源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,返回單元測(cè)試的步驟。當(dāng)模塊測(cè)試成功后,則說明該程序包可以實(shí)現(xiàn)相應(yīng)的測(cè)試功能,則可以依據(jù)所述程序包,構(gòu)建軟件版本。系統(tǒng)自動(dòng)化進(jìn)行單元測(cè)試和模塊測(cè)試,可以大大節(jié)省開發(fā)人員的開發(fā)時(shí)間,縮短軟件版本的開發(fā)周期,提高了研發(fā)效率,并且利用代碼自動(dòng)回滾功能,可以有效保證每一次構(gòu)建出來的軟件版本都是可用的版本。

      在上述過程中,當(dāng)單元測(cè)試失敗后,則說明最新提交的源代碼存在問題,為了便于軟件構(gòu)建管理員及時(shí)發(fā)現(xiàn)并處理問題,可以在系統(tǒng)中預(yù)先存儲(chǔ)軟件構(gòu)建管理員的郵箱地址,當(dāng)判斷出所述單元測(cè)試失敗時(shí),則向預(yù)先存儲(chǔ)的郵箱地址發(fā)送單元測(cè)試失敗的通知信息。

      同理,當(dāng)單元測(cè)試成功后,則說明最新提交的源代碼不存在問題,為了便于軟件構(gòu)建管理員及時(shí)了解當(dāng)前源代碼的運(yùn)行情況,可以在系統(tǒng)中預(yù)先存儲(chǔ)軟件構(gòu)建管理員的郵箱地址,當(dāng)判斷出所述單元測(cè)試成功時(shí),則向預(yù)先存儲(chǔ)的郵箱地址發(fā)送單元測(cè)試通過的通知信息。

      當(dāng)模塊測(cè)試失敗后,則說明最新提交的源代碼存在問題,為了便于軟件構(gòu)建管理員及時(shí)發(fā)現(xiàn)并處理問題,可以在系統(tǒng)中預(yù)先存儲(chǔ)軟件構(gòu)建管理員的郵箱地址,當(dāng)判斷出所述模塊測(cè)試失敗時(shí),則向預(yù)先存儲(chǔ)的郵箱地址發(fā)送模塊測(cè)試失敗的通知信息。

      在上述過程中將源代碼編譯成程序包的過程中會(huì)產(chǎn)生一些系統(tǒng)文件,該系統(tǒng)文件中包括所生成的程序包,這些系統(tǒng)文件會(huì)占用一定的內(nèi)存空間。當(dāng)對(duì)程序包進(jìn)行模塊測(cè)試失敗時(shí),則在編譯過程生成的系統(tǒng)文件已經(jīng)不具有使用價(jià)值,為了節(jié)省內(nèi)存空間,可以當(dāng)判斷出所述模塊測(cè)試失敗時(shí),清除編譯所述源代碼過程中生成的系統(tǒng)文件。

      通過清除編譯過程產(chǎn)生的系統(tǒng)文件,可以有效避免無用信息占用內(nèi)存空間,提升系統(tǒng)內(nèi)存空間的利用率。

      圖2為本發(fā)明實(shí)施例提供的一種自動(dòng)化構(gòu)建軟件版本的裝置的結(jié)構(gòu)示意圖,包括獲取單元21、測(cè)試單元22、判斷單元23、回滾單元24、編譯單元25和構(gòu)建單元26,

      所述獲取單元21,用于獲取源代碼;

      所述測(cè)試單元22,用于利用預(yù)先存儲(chǔ)的單元測(cè)試用例集合對(duì)所述源代碼進(jìn)行單元測(cè)試;

      所述判斷單元23,用于判斷所述單元測(cè)試是否成功;

      若否,則觸發(fā)所述回滾單元24,所述回滾單元24,用于將所述源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,觸發(fā)所述測(cè)試單元;

      若是,則觸發(fā)所述編譯單元25,所述編譯單元25,用于編譯所述源代碼生成程序包;

      所述測(cè)試單元22還用于利用預(yù)先存儲(chǔ)的模塊測(cè)試用例集合對(duì)所述程序包進(jìn)行模塊測(cè)試;

      所述判斷單元23還用于判斷所述模塊測(cè)試是否成功;

      若否,則觸發(fā)所述回滾單元24;

      若是,則觸發(fā)所述構(gòu)建單元26,所述構(gòu)建單元26,用于依據(jù)所述程序包,構(gòu)建軟件版本。

      可選的,還包括發(fā)送單元,

      所述發(fā)送單元,用于在所述判斷單元判斷出所述單元測(cè)試失敗之后,向預(yù)先存儲(chǔ)的郵箱地址發(fā)送單元測(cè)試失敗的通知信息。

      可選的,所述發(fā)送單元還用于在所述判斷單元判斷出所述單元測(cè)試成功之后,向預(yù)先存儲(chǔ)的郵箱地址發(fā)送單元測(cè)試通過的通知信息。

      可選的,所述發(fā)送單元還用于在所述判斷單元判斷出所述模塊測(cè)試失敗之后,向預(yù)先存儲(chǔ)的郵箱地址發(fā)送模塊測(cè)試失敗的通知信息。

      可選的,還包括清除單元,

      所述清除單元,用于在所述判斷單元判斷出所述模塊測(cè)試失敗之后,清除所述編譯單元在編譯所述源代碼過程中生成的系統(tǒng)文件。

      圖2所對(duì)應(yīng)實(shí)施例中特征的說明可以參見圖1所對(duì)應(yīng)實(shí)施例的相關(guān)說明,這里不再一一贅述。

      由上述技術(shù)方案可以看出,軟件版本構(gòu)建系統(tǒng)會(huì)自動(dòng)獲取最新提交的源代碼;利用預(yù)先存儲(chǔ)的單元測(cè)試用例集合對(duì)所述源代碼進(jìn)行單元測(cè)試;當(dāng)單元測(cè)試失敗時(shí),則說明源代碼存在問題,此時(shí)可以將源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,對(duì)其進(jìn)行單元測(cè)試,從而可以有效的保證源代碼的正確性。將通過單元測(cè)試的源代碼進(jìn)行編譯處理生成程序包;利用預(yù)先存儲(chǔ)的模塊測(cè)試用例集合對(duì)所述程序包進(jìn)行模塊測(cè)試;當(dāng)模塊測(cè)試失敗時(shí),則說明源代碼存在問題,此時(shí)可以將源代碼回滾至上一次代碼版本,并將所述代碼版本作為源代碼,返回單元測(cè)試的步驟。當(dāng)模塊測(cè)試成功后,則說明該程序包可以實(shí)現(xiàn)相應(yīng)的測(cè)試功能,則可以依據(jù)所述程序包,構(gòu)建軟件版本。系統(tǒng)自動(dòng)化進(jìn)行單元測(cè)試和模塊測(cè)試,可以大大節(jié)省開發(fā)人員的開發(fā)時(shí)間,縮短軟件版本的開發(fā)周期,提高了研發(fā)效率,并且利用代碼自動(dòng)回滾功能,可以有效保證每一次構(gòu)建出來的軟件版本都是可用的版本。

      以上對(duì)本發(fā)明實(shí)施例所提供的一種自動(dòng)化構(gòu)建軟件版本的方法與裝置進(jìn)行了詳細(xì)介紹。說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說明即可。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。

      專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。

      結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(ram)、內(nèi)存、只讀存儲(chǔ)器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤、可移動(dòng)磁盤、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1