自動(dòng)標(biāo)記源代碼的系統(tǒng)和方法
【專利摘要】本發(fā)明提供了一種自動(dòng)標(biāo)記源代碼的系統(tǒng),包括:代碼讀取單元,用于將任一源文件中的源代碼讀入字符串變量,并分解為字符串?dāng)?shù)組;層次確定單元,用于預(yù)讀多行語句的縮進(jìn)格式符,確定語句層次;類型判斷單元,用于根據(jù)起始關(guān)鍵字確定是否為分支/循環(huán)語句;語句處理單元,用于在所述分支/循環(huán)語句的語句體部分的每個(gè)分支中添加唯一標(biāo)識(shí)和注釋語句;變量保存單元,用于對(duì)所述字符串?dāng)?shù)組中的所有語句進(jìn)行處理后,將所述結(jié)果變量保存至所述任一源文件中。本發(fā)明還提出了相應(yīng)的自動(dòng)標(biāo)記源代碼的方法。通過本發(fā)明的技術(shù)方案,可以對(duì)源代碼中的分支/循環(huán)語句進(jìn)行自動(dòng)識(shí)別,以自動(dòng)添加唯一標(biāo)識(shí)和注釋語句,以減少人工干預(yù),降低處理復(fù)雜度。
【專利說明】自動(dòng)標(biāo)記源代碼的系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理【技術(shù)領(lǐng)域】,具體而言,涉及一種自動(dòng)標(biāo)記源代碼的系統(tǒng)和一種自動(dòng)標(biāo)記源代碼的方法。
【背景技術(shù)】
[0002]黑盒測(cè)試是基于軟件產(chǎn)品需求和設(shè)計(jì)規(guī)格說明的測(cè)試方法,著重于確認(rèn)和驗(yàn)證軟件產(chǎn)品是否滿足規(guī)格說明。白盒測(cè)試是基于源代碼邏輯的測(cè)試,著眼于確認(rèn)和驗(yàn)證軟件源代碼是否符合開發(fā)規(guī)范、業(yè)務(wù)邏輯是否滿足設(shè)計(jì)要求,關(guān)注源代碼業(yè)務(wù)邏輯中的語句覆蓋率和路徑覆蓋率等。
[0003]以上兩種測(cè)試方法關(guān)注的測(cè)試對(duì)象不同,評(píng)價(jià)指標(biāo)不同。長久以來在業(yè)界已經(jīng)分別形成完善的黑盒測(cè)試?yán)碚摲椒üぞ唧w系和白盒測(cè)試?yán)碚摲椒üぞ唧w系。兩種測(cè)試體系相互獨(dú)立運(yùn)行互不交流,少有交集。
[0004]黑盒測(cè)試方法的過程是圍繞需求文檔設(shè)計(jì)測(cè)試用例,使用方法包括等價(jià)類、因果圖、錯(cuò)誤推測(cè)等。評(píng)價(jià)測(cè)試用例設(shè)計(jì)的方法完全來自對(duì)需求文檔,業(yè)務(wù)知識(shí)和軟件設(shè)計(jì)說明書的理解程度和使用上述黑盒測(cè)試方法設(shè)計(jì)測(cè)試用例的能力。
[0005]如果通過在被測(cè)試的源代碼的每個(gè)分支和循環(huán)語句中添加輸出唯一的分支ID數(shù)據(jù)到日志的方式,將黑盒測(cè)試用例的路徑覆蓋軌跡記錄下來,并用于評(píng)估和完善黑盒測(cè)試用例設(shè)計(jì)過程,顯然能夠使得黑盒測(cè)試更加完善和高效。
[0006]然而在相關(guān)技術(shù)中,均是通過程序員在源代碼中手工維護(hù)分支ID和注釋語句等,一方面對(duì)于程序員而言,極為耗時(shí)費(fèi)力;另一方面,由于源代碼中的分支數(shù)量巨大,很容易發(fā)生分支ID不唯一、遺漏等情況。
[0007]因此,如何高效、準(zhǔn)確地為源代碼中的每個(gè)分支添加相應(yīng)的唯一 ID等信息,從而得到用于完善黑盒測(cè)試,使之更為高效,成為目前亟待解決的技術(shù)問題。
【發(fā)明內(nèi)容】
[0008]本發(fā)明正是基于上述問題,提出了一種自動(dòng)標(biāo)記源代碼的技術(shù),可以對(duì)源代碼中的分支/循環(huán)語句進(jìn)行自動(dòng)識(shí)別,以自動(dòng)添加唯一標(biāo)識(shí)和注釋語句,以減少人工干預(yù),降低處理復(fù)雜度。
[0009]有鑒于此,本發(fā)明提出了一種自動(dòng)標(biāo)記源代碼的系統(tǒng),包括:代碼讀取單元,用于將任一源文件中的源代碼讀入字符串變量中,并將字符串變量按行分解為字符串?dāng)?shù)組;層次確定單元,用于預(yù)讀所述字符串?dāng)?shù)組中待分析的當(dāng)前行語句和所述當(dāng)前行語句的后三行語句的縮進(jìn)格式符,通過將所述縮進(jìn)格式符與標(biāo)準(zhǔn)的縮進(jìn)格式符進(jìn)行比較,以確定包含所述當(dāng)前行語句在內(nèi)的一條完整語句所處的語句層次;類型判斷單元,用于對(duì)于同一語句層次的任一完整語句,查看所述任一完整語句的起始關(guān)鍵字是否為標(biāo)準(zhǔn)的分支/循環(huán)語句關(guān)鍵字,若是,則確定所述任一完整語句為分支/循環(huán)語句,否則判定為順序執(zhí)行語句;語句處理單元,用于在所述分支/循環(huán)語句的語句體部分的每個(gè)分支中添加唯一標(biāo)識(shí)和注釋語句,并將編輯后的所述分支/循環(huán)語句保存至結(jié)果變量,或?qū)⑺鲰樞驁?zhí)行語句直接保存至所述結(jié)果變量;變量保存單元,用于對(duì)所述字符串?dāng)?shù)組中的所有語句進(jìn)行處理后,將所述結(jié)果變量保存至所述任一源文件中。
[0010]在該技術(shù)方案中,通過對(duì)選取當(dāng)前行語句及其后三行語句,使得盡可能地包含一條完整的語句,并且能夠通過縮進(jìn)格式符的比較,確定當(dāng)前語句在整個(gè)源代碼結(jié)構(gòu)中的層次,比如處于一層嵌套或兩層嵌套等,以便準(zhǔn)確地執(zhí)行語句類型的識(shí)別。當(dāng)然,預(yù)讀的語句數(shù)量也可以由用戶根據(jù)需要進(jìn)行修改,以避免在極端情況下,四行語句都無法包含一條完整的語句。
[0011]具體地,當(dāng)一行語句是以分號(hào)結(jié)尾時(shí),該行語句構(gòu)成一條完整的語句;當(dāng)一行語句不是以分號(hào)結(jié)尾時(shí),依次向下尋找以分號(hào)結(jié)尾的語句,并將該分號(hào)與前一個(gè)分號(hào)之間的所有語句作為一條完整的語句。
[0012]通過對(duì)完整語句的起始關(guān)鍵字進(jìn)行識(shí)別,比如當(dāng)起始關(guān)鍵字為“if\else if\for\foreach\case\do\while”時(shí),即可確定該條語句為分支/循環(huán)語句。當(dāng)確定一條分支/循環(huán)語句后,將其分解為條件部分和語句體部分,且語句體部分包含多個(gè)分支時(shí),就將其中的每個(gè)分支作為一個(gè)分支語句,并添加對(duì)應(yīng)的唯一標(biāo)識(shí)和注釋語句。
[0013]在上述技術(shù)方案中,優(yōu)選地,所述語句處理單元還用于:過濾所述字符串?dāng)?shù)組中的空行、聲明和已添加唯一標(biāo)識(shí)和注釋語句的分支;其中,所述聲明包括類聲明、結(jié)構(gòu)聲明、接口聲明、事件聲明、引用聲明和屬性或函數(shù)聲明。
[0014]在上述任一技術(shù)方案中,優(yōu)選地,所述語句處理單元還用于:若所述分支/循環(huán)語句的語句體部分為單行,則將所述語句體部分用“ H ”包括起來,并添加所述唯一標(biāo)識(shí)和注釋語句。
[0015]在該技術(shù)方案中,由于在添加唯一標(biāo)識(shí)和注釋語句后,原來的單行語句有可能變?yōu)槎嘈校蚨ㄟ^使用“ {} ”將語句包括起來,避免影響代碼的語句層次和結(jié)構(gòu),使得添加了唯一標(biāo)識(shí)和注釋語句的代碼,仍然能夠有序地執(zhí)行,不會(huì)導(dǎo)致邏輯錯(cuò)誤的發(fā)生。
[0016]在上述任一技術(shù)方案中,優(yōu)選地,所述語句處理單元還用于:根據(jù)實(shí)時(shí)時(shí)間,為每個(gè)分支生成對(duì)應(yīng)的唯一標(biāo)識(shí)。
[0017]在該技術(shù)方案中,通過將實(shí)時(shí)時(shí)間用于生成唯一標(biāo)識(shí),而每個(gè)分支的唯一標(biāo)識(shí)是依次生成和添加的,因而確保了不同分支對(duì)應(yīng)的唯一標(biāo)識(shí)不會(huì)發(fā)生重復(fù)。
[0018]在上述任一技術(shù)方案中,優(yōu)選地,還包括:信息記錄單元,用于將添加至每個(gè)分支中的唯一標(biāo)識(shí)、注釋語句和所述源文件的信息記錄至分支清單,其中,所述源文件的信息包括以下至少之一或其組合:文件路徑、文件名稱、類名、方法名。
[0019]在該技術(shù)方案中,通過將唯一標(biāo)識(shí)和注釋語句的信息和源代碼文件的信息記錄至分支清單,便于之后執(zhí)行黑盒測(cè)試前,對(duì)比新舊兩版源代碼,并從中提取使用自然語言描述的注釋信息,從而使不了解源代碼邏輯的人通過變更點(diǎn)所在的分支的注釋信息得到源代碼業(yè)務(wù)邏輯變更的信息。
[0020]本發(fā)明還提出了一種自動(dòng)標(biāo)記源代碼的方法,包括:步驟202,將任一源文件中的源代碼讀入字符串變量中,并將字符串變量按行分解為字符串?dāng)?shù)組;步驟204,預(yù)讀所述字符串?dāng)?shù)組中待分析的當(dāng)前行語句和所述當(dāng)前行語句的后三行語句的縮進(jìn)格式符,通過將所述縮進(jìn)格式符與標(biāo)準(zhǔn)的縮進(jìn)格式符進(jìn)行比較,以確定包含所述當(dāng)前行語句在內(nèi)的一條完整語句所處的語句層次;步驟206,對(duì)于同一語句層次的任一完整語句,查看所述任一完整語句的起始關(guān)鍵字是否為標(biāo)準(zhǔn)的分支/循環(huán)語句關(guān)鍵字,若是,則確定所述任一完整語句為分支/循環(huán)語句,在該分支/循環(huán)語句的語句體部分的每個(gè)分支中添加唯一標(biāo)識(shí)和注釋語句,并將編輯后的所述分支/循環(huán)語句保存至結(jié)果變量,若不是,則直接將所述完整語句保存至所述結(jié)果變量;步驟208,對(duì)所述字符串?dāng)?shù)組中的所有語句進(jìn)行處理后,將所述結(jié)果變量保存至所述任一源文件中。
[0021]在該技術(shù)方案中,通過對(duì)選取當(dāng)前行語句及其后三行語句,使得盡可能地包含一條完整的語句,并且能夠通過縮進(jìn)格式符的比較,確定當(dāng)前語句在整個(gè)源代碼結(jié)構(gòu)中的層次,比如處于一層嵌套或兩層嵌套等,以便準(zhǔn)確地執(zhí)行語句類型的識(shí)別。當(dāng)然,預(yù)讀的語句數(shù)量也可以由用戶根據(jù)需要進(jìn)行修改,以避免在極端情況下,四行語句都無法包含一條完整的語句。
[0022]具體地,當(dāng)一行語句是以分號(hào)結(jié)尾時(shí),該行語句構(gòu)成一條完整的語句;當(dāng)一行語句不是以分號(hào)結(jié)尾時(shí),依次向下尋找以分號(hào)結(jié)尾的語句,并將該分號(hào)與前一個(gè)分號(hào)之間的所有語句作為一條完整的語句。
[0023]通過對(duì)完整語句的起始關(guān)鍵字進(jìn)行識(shí)別,比如當(dāng)起始關(guān)鍵字為“if\else if\for\foreach\case\do\while”時(shí),即可確定該條語句為分支/循環(huán)語句。當(dāng)確定一條分支/循環(huán)語句后,將其分解為條件部分和語句體部分,且語句體部分包含多個(gè)分支時(shí),就將其中的每個(gè)分支作為一個(gè)分支語句,并添加對(duì)應(yīng)的唯一標(biāo)識(shí)和注釋語句。
[0024]在上述技術(shù)方案中,優(yōu)選地,所述步驟204之前,還包括:過濾所述字符串?dāng)?shù)組中的空行、聲明和已添加唯一標(biāo)識(shí)和注釋語句的分支;其中,所述聲明包括類聲明、結(jié)構(gòu)聲明、接口聲明、事件聲明、引用聲明和屬性或函數(shù)聲明。
[0025]在上述任一技術(shù)方案中,優(yōu)選地,所述步驟206還包括:若所述分支/循環(huán)語句的語句體部分為單行,則將所述語句體部分用“ H ”包括起來,并添加所述唯一標(biāo)識(shí)和注釋語句。
[0026]在該技術(shù)方案中,由于在添加唯一標(biāo)識(shí)和注釋語句后,原來的單行語句有可能變?yōu)槎嘈?,因而通過使用“ {} ”將語句包括起來,避免影響代碼的語句層次和結(jié)構(gòu),使得添加了唯一標(biāo)識(shí)和注釋語句的代碼,仍然能夠有序地執(zhí)行,不會(huì)導(dǎo)致邏輯錯(cuò)誤的發(fā)生。
[0027]在上述任一技術(shù)方案中,優(yōu)選地,所述步驟206包括:根據(jù)實(shí)時(shí)時(shí)間,為每個(gè)分支生成對(duì)應(yīng)的唯一標(biāo)識(shí)。
[0028]在該技術(shù)方案中,通過將實(shí)時(shí)時(shí)間用于生成唯一標(biāo)識(shí),而每個(gè)分支的唯一標(biāo)識(shí)是依次生成和添加的,因而確保了不同分支對(duì)應(yīng)的唯一標(biāo)識(shí)不會(huì)發(fā)生重復(fù)。
[0029]在上述任一技術(shù)方案中,優(yōu)選地,所述步驟206還包括:將添加至每個(gè)分支中的唯一標(biāo)識(shí)、注釋語句和所述源文件的信息記錄至分支清單,其中,所述源文件的信息包括以下至少之一或其組合:文件路徑、文件名稱、類名、方法名。
[0030]在該技術(shù)方案中,通過將唯一標(biāo)識(shí)和注釋語句的信息和源代碼文件的信息記錄至分支清單,便于之后執(zhí)行黑盒測(cè)試前,對(duì)比新舊兩版源代碼,并從中提取使用自然語言描述的注釋信息,從而使不了解源代碼邏輯的人通過變更點(diǎn)所在的分支的注釋信息得到源代碼業(yè)務(wù)邏輯變更的信息。
[0031]通過以上技術(shù)方案,可以對(duì)源代碼中的分支/循環(huán)語句進(jìn)行自動(dòng)識(shí)別,以自動(dòng)添加唯一標(biāo)識(shí)和注釋語句,以減少人工干預(yù),降低處理復(fù)雜度。
【專利附圖】
【附圖說明】
[0032]圖1示出了根據(jù)本發(fā)明的實(shí)施例的自動(dòng)標(biāo)記源代碼的系統(tǒng)的示意框圖;
[0033]圖2示出了根據(jù)本發(fā)明的實(shí)施例的自動(dòng)標(biāo)記源代碼的方法的流程示意圖;
[0034]圖3示出了根據(jù)本發(fā)明的實(shí)施例的自動(dòng)對(duì)源代碼中的分支/循環(huán)語句進(jìn)行標(biāo)記的具體流程示意圖。
【具體實(shí)施方式】
[0035]為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說明的是,在不沖突的情況下,本申請(qǐng)的實(shí)施例及實(shí)施例中的特征可以相互組合。
[0036]在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來實(shí)施,因此,本發(fā)明的保護(hù)范圍并不受下面公開的具體實(shí)施例的限制。
[0037]圖1示出了根據(jù)本發(fā)明的實(shí)施例的自動(dòng)標(biāo)記源代碼的系統(tǒng)的示意框圖。
[0038]如圖1所示,根據(jù)本發(fā)明的實(shí)施例的自動(dòng)標(biāo)記源代碼的系統(tǒng)100,包括:代碼讀取單元102,用于將任一源文件中的源代碼讀入字符串變量中,并將字符串變量按行分解為字符串?dāng)?shù)組;層次確定單元104,用于預(yù)讀所述字符串?dāng)?shù)組中待分析的當(dāng)前行語句和所述當(dāng)前行語句的后三行語句的縮進(jìn)格式符,通過將所述縮進(jìn)格式符與標(biāo)準(zhǔn)的縮進(jìn)格式符進(jìn)行比較,以確定包含所述當(dāng)前行語句在內(nèi)的一條完整語句所處的語句層次;類型判斷單元106,用于對(duì)于同一語句層次的任一完整語句,查看所述任一完整語句的起始關(guān)鍵字是否為標(biāo)準(zhǔn)的分支/循環(huán)語句關(guān)鍵字,若是,則確定所述任一完整語句為分支/循環(huán)語句,否則判定為順序執(zhí)行語句;語句處理單元108,用于在所述分支/循環(huán)語句的語句體部分的每個(gè)分支中添加唯一標(biāo)識(shí)和注釋語句,并將編輯后的所述分支/循環(huán)語句保存至結(jié)果變量,或?qū)⑺鲰樞驁?zhí)行語句直接保存至所述結(jié)果變量;變量保存單元110,用于對(duì)所述字符串?dāng)?shù)組中的所有語句進(jìn)行處理后,將所述結(jié)果變量保存至所述任一源文件中。
[0039]在該技術(shù)方案中,通過對(duì)選取當(dāng)前行語句及其后三行語句,使得盡可能地包含一條完整的語句,并且能夠通過縮進(jìn)格式符的比較,確定當(dāng)前語句在整個(gè)源代碼結(jié)構(gòu)中的層次,比如處于一層嵌套或兩層嵌套等,以便準(zhǔn)確地執(zhí)行語句類型的識(shí)別。當(dāng)然,預(yù)讀的語句數(shù)量也可以由用戶根據(jù)需要進(jìn)行修改,以避免在極端情況下,四行語句都無法包含一條完整的語句。
[0040]具體地,當(dāng)一行語句是以分號(hào)結(jié)尾時(shí),該行語句構(gòu)成一條完整的語句;當(dāng)一行語句不是以分號(hào)結(jié)尾時(shí),依次向下尋找以分號(hào)結(jié)尾的語句,并將該分號(hào)與前一個(gè)分號(hào)之間的所有語句作為一條完整的語句。
[0041]通過對(duì)完整語句的起始關(guān)鍵字進(jìn)行識(shí)別,比如當(dāng)起始關(guān)鍵字為“if\else if\for\foreach\case\do\while”時(shí),即可確定該條語句為分支/循環(huán)語句。當(dāng)確定一條分支/循環(huán)語句后,將其分解為條件部分和語句體部分,且語句體部分包含多個(gè)分支時(shí),就將其中的每個(gè)分支作為一個(gè)分支語句,并添加對(duì)應(yīng)的唯一標(biāo)識(shí)和注釋語句。[0042]在上述技術(shù)方案中,優(yōu)選地,所述語句處理單元108還用于:過濾所述字符串?dāng)?shù)組中的空行、聲明和已添加唯一標(biāo)識(shí)和注釋語句的分支;其中,所述聲明包括類聲明、結(jié)構(gòu)聲明、接口聲明、事件聲明、引用聲明和屬性或函數(shù)聲明。
[0043]在上述任一技術(shù)方案中,優(yōu)選地,所述語句處理單元108還用于:若所述分支/循環(huán)語句的語句體部分為單行,則將所述語句體部分用“ H ”包括起來,并添加所述唯一標(biāo)識(shí)和注釋語句。
[0044]在該技術(shù)方案中,由于在添加唯一標(biāo)識(shí)和注釋語句后,原來的單行語句有可能變?yōu)槎嘈?,因而通過使用“ {} ”將語句包括起來,避免影響代碼的語句層次和結(jié)構(gòu),使得添加了唯一標(biāo)識(shí)和注釋語句的代碼,仍然能夠有序地執(zhí)行,不會(huì)導(dǎo)致邏輯錯(cuò)誤的發(fā)生。
[0045]在上述任一技術(shù)方案中,優(yōu)選地,所述語句處理單元108還用于:根據(jù)實(shí)時(shí)時(shí)間,為每個(gè)分支生成對(duì)應(yīng)的唯一標(biāo)識(shí)。
[0046]在該技術(shù)方案中,通過將實(shí)時(shí)時(shí)間用于生成唯一標(biāo)識(shí),而每個(gè)分支的唯一標(biāo)識(shí)是依次生成和添加的,因而確保了不同分支對(duì)應(yīng)的唯一標(biāo)識(shí)不會(huì)發(fā)生重復(fù)。
[0047]在上述任一技術(shù)方案中,優(yōu)選地,還包括:信息記錄單元112,用于將添加至每個(gè)分支中的唯一標(biāo)識(shí)、注釋語句和所述源文件的信息記錄至分支清單,其中,所述源文件的信息包括以下至少之一或其組合:文件路徑、文件名稱、類名、方法名。
[0048]在該技術(shù)方案中,通過將唯一標(biāo)識(shí)和注釋語句的信息和源代碼文件的信息記錄至分支清單,便于之后執(zhí)行黑盒測(cè)試前,對(duì)比新舊兩版源代碼,并從中提取使用自然語言描述的注釋信息,從而使不了解源代碼邏輯的人通過變更點(diǎn)所在的分支的注釋信息得到源代碼業(yè)務(wù)邏輯變更的信息。
[0049]圖2示出了根據(jù)本發(fā)明的實(shí)施例的自動(dòng)標(biāo)記源代碼的方法的流程示意圖。
[0050]如圖2所示,根據(jù)本發(fā)明的實(shí)施例的自動(dòng)標(biāo)記源代碼的方法,包括:步驟202,將任一源文件中的源代碼讀入字符串變量中,并將字符串變量按行分解為字符串?dāng)?shù)組;步驟204,預(yù)讀所述字符串?dāng)?shù)組中待分析的當(dāng)前行語句和所述當(dāng)前行語句的后三行語句的縮進(jìn)格式符,通過將所述縮進(jìn)格式符與標(biāo)準(zhǔn)的縮進(jìn)格式符進(jìn)行比較,以確定包含所述當(dāng)前行語句在內(nèi)的一條完整語句所處的語句層次;步驟206,對(duì)于同一語句層次的任一完整語句,查看所述任一完整語句的起始關(guān)鍵字是否為標(biāo)準(zhǔn)的分支/循環(huán)語句關(guān)鍵字,若是,則確定所述任一完整語句為分支/循環(huán)語句,在該分支/循環(huán)語句的語句體部分的每個(gè)分支中添加唯一標(biāo)識(shí)和注釋語句,并將編輯后的所述分支/循環(huán)語句保存至結(jié)果變量,若不是,則直接將所述完整語句保存至所述結(jié)果變量;步驟208,對(duì)所述字符串?dāng)?shù)組中的所有語句進(jìn)行處理后,將所述結(jié)果變量保存至所述任一源文件中。
[0051]在該技術(shù)方案中,通過對(duì)選取當(dāng)前行語句及其后三行語句,使得盡可能地包含一條完整的語句,并且能夠通過縮進(jìn)格式符的比較,確定當(dāng)前語句在整個(gè)源代碼結(jié)構(gòu)中的層次,比如處于一層嵌套或兩層嵌套等,以便準(zhǔn)確地執(zhí)行語句類型的識(shí)別。當(dāng)然,預(yù)讀的語句數(shù)量也可以由用戶根據(jù)需要進(jìn)行修改,以避免在極端情況下,四行語句都無法包含一條完整的語句。
[0052]具體地,當(dāng)一行語句是以分號(hào)結(jié)尾時(shí),該行語句構(gòu)成一條完整的語句;當(dāng)一行語句不是以分號(hào)結(jié)尾時(shí),依次向下尋找以分號(hào)結(jié)尾的語句,并將該分號(hào)與前一個(gè)分號(hào)之間的所有語句作為一條完整的語句。[0053]通過對(duì)完整語句的起始關(guān)鍵字進(jìn)行識(shí)別,比如當(dāng)起始關(guān)鍵字為“if\else if\for\foreach\case\do\while”時(shí),即可確定該條語句為分支/循環(huán)語句。當(dāng)確定一條分支/循環(huán)語句后,將其分解為條件部分和語句體部分,且語句體部分包含多個(gè)分支時(shí),就將其中的每個(gè)分支作為一個(gè)分支語句,并添加對(duì)應(yīng)的唯一標(biāo)識(shí)和注釋語句。
[0054]在上述技術(shù)方案中,優(yōu)選地,所述步驟204之前,還包括:過濾所述字符串?dāng)?shù)組中的空行、聲明和已添加唯一標(biāo)識(shí)和注釋語句的分支;其中,所述聲明包括類聲明、結(jié)構(gòu)聲明、接口聲明、事件聲明、引用聲明和屬性或函數(shù)聲明。
[0055]在上述任一技術(shù)方案中,優(yōu)選地,所述步驟206還包括:若所述分支/循環(huán)語句的語句體部分為單行,則將所述語句體部分用“ H ”包括起來,并添加所述唯一標(biāo)識(shí)和注釋語句。
[0056]在該技術(shù)方案中,由于在添加唯一標(biāo)識(shí)和注釋語句后,原來的單行語句有可能變?yōu)槎嘈?,因而通過使用“ {} ”將語句包括起來,避免影響代碼的語句層次和結(jié)構(gòu),使得添加了唯一標(biāo)識(shí)和注釋語句的代碼,仍然能夠有序地執(zhí)行,不會(huì)導(dǎo)致邏輯錯(cuò)誤的發(fā)生。
[0057]在上述任一技術(shù)方案中,優(yōu)選地,所述步驟206包括:根據(jù)實(shí)時(shí)時(shí)間,為每個(gè)分支生成對(duì)應(yīng)的唯一標(biāo)識(shí)。
[0058]在該技術(shù)方案中,通過將實(shí)時(shí)時(shí)間用于生成唯一標(biāo)識(shí),而每個(gè)分支的唯一標(biāo)識(shí)是依次生成和添加的,因而確保了不同分支對(duì)應(yīng)的唯一標(biāo)識(shí)不會(huì)發(fā)生重復(fù)。
[0059]在上述任一技術(shù)方案中,優(yōu)選地,所述步驟206還包括:將添加至每個(gè)分支中的唯一標(biāo)識(shí)、注釋語句和所述源文件的信息記錄至分支清單,其中,所述源文件的信息包括以下至少之一或其組合:文件路徑、文件名稱、類名、方法名。
[0060]在該技術(shù)方案中,通過將唯一標(biāo)識(shí)和注釋語句的信息和源代碼文件的信息記錄至分支清單,便于之后執(zhí)行黑盒測(cè)試前,對(duì)比新舊兩版源代碼,并從中提取使用自然語言描述的注釋信息,從而使不了解源代碼邏輯的人通過變更點(diǎn)所在的分支的注釋信息得到源代碼業(yè)務(wù)邏輯變更的信息。
[0061 ] 圖3示出了根據(jù)本發(fā)明的實(shí)施例的自動(dòng)對(duì)源代碼中的分支/循環(huán)語句進(jìn)行標(biāo)記的具體流程示意圖。
[0062]如圖3所示,根據(jù)本發(fā)明的實(shí)施例的自動(dòng)對(duì)源代碼中的分支/循環(huán)語句進(jìn)行標(biāo)記的具體流程包括:
[0063]步驟302,讀取源代碼,具體是指包含有源代碼的源文件。
[0064]步驟304,源文件的數(shù)量可能為一個(gè)或多個(gè),則需要判斷當(dāng)前是否仍存在尚未進(jìn)行處理的源文件。
[0065]步驟306,若存在,則將源文件中的內(nèi)容保存在字符串變量中,然后按行分解為字符串?dāng)?shù)組。
[0066]步驟308,對(duì)得到的字符串?dāng)?shù)組依次進(jìn)行處理,若數(shù)組結(jié)束,則進(jìn)入步驟328,否則進(jìn)入步驟310。
[0067]步驟310,對(duì)需要進(jìn)行處理的數(shù)組對(duì)應(yīng)的源代碼進(jìn)行預(yù)處理。具體地,包括:1)過濾掉數(shù)組中多余的空行;2)忽略源代碼中類聲明、結(jié)構(gòu)聲明、接口聲明、事件聲明、引用聲明和屬性或函數(shù)聲明;3)如果發(fā)現(xiàn)當(dāng)前行中已經(jīng)有了插入的ID和標(biāo)準(zhǔn)注釋語句,那么直接忽略該行。[0068]步驟312,分析語句層級(jí)情況。具體地,比如可以通過對(duì)當(dāng)前行的語句,以及該行之后的3行語句(即共4行語句,當(dāng)然也可以根據(jù)實(shí)際情況修改為更小或更多行,以避免無法包含一條完整的語句)進(jìn)行預(yù)讀,分析這4行代碼行前的縮進(jìn)。由于規(guī)范的源代碼在不同類型的語句前都會(huì)有標(biāo)準(zhǔn)的縮進(jìn)格式符,比如[Tab]或幾個(gè)空格;因而通過比較每行語句前的縮進(jìn),就可以分析具體的語句層級(jí),比如處于一層嵌套中,或兩層嵌套中等,從而避免將不同層級(jí)的語句進(jìn)行同時(shí)處理,降低錯(cuò)誤發(fā)生的可能性。
[0069]步驟314,判斷語句的類型,比如為分支/循環(huán)語句,或是順序執(zhí)行語句。
[0070]這里的“語句”并不一定為某一行的語句,而是指包含若干行的一條完整的語句。對(duì)于某行語句是否完整,可以通過查看其是否以分號(hào)結(jié)尾來進(jìn)行判斷,若以分號(hào)結(jié)尾,則該語句完整,否則繼續(xù)查看下一行,直至找到結(jié)尾的分號(hào),則該分號(hào)與前一次出現(xiàn)的分號(hào)之間的多行語句共同構(gòu)成了一條完整的語句。
[0071]而對(duì)于一條語句的類型,可以通過對(duì)語句的起始關(guān)鍵字進(jìn)行獲取和判斷即可。具體地,如果是以“if\else if\for\foreach\case\do\while”起始,則確定為分支/循環(huán)語句,否則為順序執(zhí)行語句。對(duì)于順序執(zhí)行語句,直接進(jìn)入步驟316進(jìn)行處理,否則進(jìn)入步驟318。
[0072]步驟316,將當(dāng)前語句保存至result變量。
[0073]步驟318,將分支或循環(huán)語句分解為條件部分和語句體部分,并識(shí)別語句體部分包含的分支數(shù)量。
[0074]步驟320,若包含有多個(gè)分支,則將每個(gè)分支作為一個(gè)分支語句體,并為每個(gè)分支語句體生成唯一標(biāo)識(shí)和注釋語句,并將該唯一標(biāo)識(shí)和注釋語句合并至對(duì)應(yīng)的分支語句體。
[0075]當(dāng)然,如果僅包含一個(gè)分支,則直接在該分支中添加唯一標(biāo)識(shí)和注釋語句,并用“ H ”將整條語句包括起來。在該技術(shù)方案中,由于在添加唯一標(biāo)識(shí)和注釋語句后,原來的單行語句有可能變?yōu)槎嘈?,因而通過使用“ {} ”將語句包括起來,避免影響代碼的語句層次和結(jié)構(gòu),使得添加了唯一標(biāo)識(shí)和注釋語句的代碼,仍然能夠有序地執(zhí)行,不會(huì)導(dǎo)致邏輯錯(cuò)誤的發(fā)生。
[0076]步驟322,將條件部分和每個(gè)分支語句體重新合并為完整語句。
[0077]步驟324,將合并得到的完整語句保存至result變量。
[0078]步驟326,將唯一標(biāo)識(shí)和注釋語句的信息記錄到分支清單中,以便測(cè)試時(shí),用于與源代碼進(jìn)行對(duì)照比較,有助于提升效率。
[0079]步驟328,當(dāng)確定所有的數(shù)值都已經(jīng)處理結(jié)束后,將result變量存儲(chǔ)至源文件中。然后返回步驟304,繼續(xù)處理剩余的源文件,直至所有源文件都已經(jīng)被處理。
[0080]以上結(jié)合附圖詳細(xì)說明了本發(fā)明的技術(shù)方案,本發(fā)明將具有全局唯一性的分支ID自動(dòng)插入到源代碼文件的分支語句和循環(huán)語句中,并且保證被修改的源代碼文件的業(yè)務(wù)邏輯不變。避免了程序員手工維護(hù)分支ID的人為失誤和工作量,大大提高工作效率,為了實(shí)現(xiàn)將白盒測(cè)試中路徑覆蓋指標(biāo)拿來評(píng)價(jià)和完善黑盒測(cè)試用例設(shè)計(jì)工作的策略掃清了一個(gè)障礙。
[0081]以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種自動(dòng)標(biāo)記源代碼的系統(tǒng),其特征在于,包括: 代碼讀取單元,用于將任一源文件中的源代碼讀入字符串變量中,并將字符串變量按行分解為字符串?dāng)?shù)組; 層次確定單元,用于預(yù)讀所述字符串?dāng)?shù)組中待分析的當(dāng)前行語句和所述當(dāng)前行語句的后三行語句的縮進(jìn)格式符,通過將所述縮進(jìn)格式符與標(biāo)準(zhǔn)的縮進(jìn)格式符進(jìn)行比較,以確定包含所述當(dāng)前行語句在內(nèi)的一條完整語句所處的語句層次; 類型判斷單元,用于對(duì)于同一語句層次的任一完整語句,查看所述任一完整語句的起始關(guān)鍵字是否為標(biāo)準(zhǔn)的分支/循環(huán)語句關(guān)鍵字,若是,則確定所述任一完整語句為分支/循環(huán)語句,否則判定為順序執(zhí)行語句; 語句處理單元,用于在所述分支/循環(huán)語句的語句體部分的每個(gè)分支中添加唯一標(biāo)識(shí)和注釋語句,并將編輯后的所述分支/循環(huán)語句保存至結(jié)果變量,或?qū)⑺鲰樞驁?zhí)行語句直接保存至所述結(jié)果變量; 變量保存單元,用于對(duì)所述字符串?dāng)?shù)組中的所有語句進(jìn)行處理后,將所述結(jié)果變量保存至所述任一源文件中。
2.根據(jù)權(quán)利要求1所述的自動(dòng)標(biāo)記源代碼的系統(tǒng),其特征在于,所述語句處理單元還用于: 過濾所述字符串?dāng)?shù)組中的空行、聲明和已添加唯一標(biāo)識(shí)和注釋語句的分支; 其中,所述聲明包括類聲明、結(jié)構(gòu)聲明、接口聲明、事件聲明、引用聲明和屬性或函數(shù)聲明。
3.根據(jù)權(quán)利要求1所述的自 動(dòng)標(biāo)記源代碼的系統(tǒng),其特征在于,所述語句處理單元還用于: 若所述分支/循環(huán)語句的語句體部分為單行,則將所述語句體部分用“ H ”包括起來,并添加所述唯一標(biāo)識(shí)和注釋語句。
4.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的自動(dòng)標(biāo)記源代碼的系統(tǒng),其特征在于,所述語句處理單元還用于: 根據(jù)實(shí)時(shí)時(shí)間,為每個(gè)分支生成對(duì)應(yīng)的唯一標(biāo)識(shí)。
5.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的自動(dòng)標(biāo)記源代碼的系統(tǒng),其特征在于,還包括: 信息記錄單元,用于將添加至每個(gè)分支中的唯一標(biāo)識(shí)、注釋語句和所述源文件的信息記錄至分支清單,其中,所述源文件的信息包括以下至少之一或其組合:文件路徑、文件名稱、類名、方法名。
6.一種自動(dòng)標(biāo)記源代碼的方法,其特征在于,包括: 步驟202,將任一源文件中的源代碼讀入字符串變量中,并將字符串變量按行分解為字符串?dāng)?shù)組; 步驟204,預(yù)讀所述字符串?dāng)?shù)組中待分析的當(dāng)前行語句和所述當(dāng)前行語句的后三行語句的縮進(jìn)格式符,通過將所述縮進(jìn)格式符與標(biāo)準(zhǔn)的縮進(jìn)格式符進(jìn)行比較,以確定包含所述當(dāng)前行語句在內(nèi)的一條完整語句所處的語句層次; 步驟206,對(duì)于同一語句層次的任一完整語句,查看所述任一完整語句的起始關(guān)鍵字是否為標(biāo)準(zhǔn)的分支/循環(huán)語句關(guān)鍵字,若是,則確定所述任一完整語句為分支/循環(huán)語句,在該分支/循環(huán)語句的語句體部分的每個(gè)分支中添加唯一標(biāo)識(shí)和注釋語句,并將編輯后的所述分支/循環(huán)語句保存至結(jié)果變量,若不是,則直接將所述完整語句保存至所述結(jié)果變量;步驟208,對(duì)所述字符串?dāng)?shù)組中的所有語句進(jìn)行處理后,將所述結(jié)果變量保存至所述任一源文件中。
7.根據(jù)權(quán)利要求6所述的自動(dòng)標(biāo)記源代碼的方法,其特征在于,所述步驟204之前,還包括: 過濾所述字符串?dāng)?shù)組中的空行、聲明和已添加唯一標(biāo)識(shí)和注釋語句的分支; 其中,所述聲明包括類聲明、結(jié)構(gòu)聲明、接口聲明、事件聲明、引用聲明和屬性或函數(shù)聲明。
8.根據(jù)權(quán)利要求6所述的自動(dòng)標(biāo)記源代碼的方法,其特征在于,所述步驟206還包括: 若所述分支/循環(huán)語句的語句體部分為單行,則將所述語句體部分用“ H ”包括起來,并添加所述唯一標(biāo)識(shí)和注釋語句。
9.根據(jù)權(quán)利要求6至8中任一項(xiàng)所述的自動(dòng)標(biāo)記源代碼的方法,其特征在于,所述步驟206包括: 根據(jù)實(shí)時(shí)時(shí)間,為每個(gè)分支生成對(duì)應(yīng)的唯一標(biāo)識(shí)。
10.根據(jù)權(quán)利要求6至8中任一項(xiàng)所述的自動(dòng)標(biāo)記源代碼的方法,其特征在于,所述步驟206還包括: 將添加至每個(gè)分支中的唯一標(biāo)識(shí)、注釋語句和所述源文件的信息記錄至分支清單,其中,所述源文件的信息包括以下 至少之一或其組合:文件路徑、文件名稱、類名、方法名。
【文檔編號(hào)】G06F9/30GK103488460SQ201310397210
【公開日】2014年1月1日 申請(qǐng)日期:2013年9月4日 優(yōu)先權(quán)日:2013年9月4日
【發(fā)明者】曹峰 申請(qǐng)人:用友軟件股份有限公司