本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種流程圖的路徑獲取方法及裝置。
背景技術(shù):
流程圖指的是以特定的圖形符號(hào)加上說(shuō)明,表示算法的圖,通常一件事或者一個(gè)知識(shí)點(diǎn)用流程圖可以幫助我們從總體上掌控概要提綱以及層次關(guān)系。但是若是想驗(yàn)證這個(gè)流程圖有沒(méi)有問(wèn)題,我們就需要去驗(yàn)證各種情況,例如:流程圖的各條路徑是否符合設(shè)計(jì)的要求。
在軟件測(cè)試領(lǐng)域中,白盒測(cè)試人員在設(shè)計(jì)測(cè)試用例時(shí)要根據(jù)代碼邏輯來(lái)設(shè)計(jì),也就是需要搜索流程圖的路徑,但是日常工作中,我們遇到的流程圖往往有著復(fù)雜的邏輯,比如有在十幾個(gè)分支的路徑情況就有二的十幾次冪,也就是至少好幾千種情況,手動(dòng)從中找出全部路徑簡(jiǎn)直不可能。
也就是說(shuō),現(xiàn)有技術(shù)中存在著無(wú)法自動(dòng)搜索并獲取流程圖的路徑的技術(shù)問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種流程圖的路徑獲取方法及裝置,以解決現(xiàn)有技術(shù)中無(wú)法自動(dòng)搜索并獲取流程圖的路徑的技術(shù)問(wèn)題。
第一方面,本發(fā)明實(shí)施例提供一種流程圖的路徑獲取方法,包括:
獲取流程圖包含的所有節(jié)點(diǎn)的數(shù)量N,其中N為正整數(shù);
從所述流程圖的起始節(jié)點(diǎn)開(kāi)始搜索所述流程圖的路徑;
在搜索到節(jié)點(diǎn)i時(shí),通過(guò)所述節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定所述節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn),i為0,1,2…N;
在一條路徑搜索結(jié)束之后,通過(guò)回溯方式搜索新的路徑,直至回溯至所述起始節(jié)點(diǎn)。
可選的,在所述通過(guò)所述節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定所述節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn)之前,所述方法還包括:
針對(duì)所述流程圖的每個(gè)節(jié)點(diǎn)分別設(shè)置對(duì)應(yīng)的V值和H值,其中,V值表征對(duì)應(yīng)節(jié)點(diǎn)在任意一條路徑中最多出現(xiàn)的次數(shù),H值表示對(duì)應(yīng)節(jié)點(diǎn)在當(dāng)前搜索的路徑中出現(xiàn)的次數(shù);
針對(duì)每個(gè)節(jié)點(diǎn)設(shè)置啟發(fā)式函數(shù)F=V-H,其中F即為所述權(quán)值。
可選的,所述針對(duì)所述流程圖的每個(gè)節(jié)點(diǎn)分別設(shè)置對(duì)應(yīng)的V值,具體包括:
確定每個(gè)節(jié)點(diǎn)的輸入線條數(shù)和輸出線條數(shù);
確定所述輸入線條數(shù)和輸出線條數(shù)中的最大值作為對(duì)應(yīng)節(jié)點(diǎn)的所述V值。
可選的,所述通過(guò)所述節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定所述節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn),具體包括:
確定所述節(jié)點(diǎn)i所指向的至少一個(gè)節(jié)點(diǎn);
從所述至少一個(gè)節(jié)點(diǎn)中選擇F值最大且大于零的一個(gè)節(jié)點(diǎn)作為下一步經(jīng)過(guò)的節(jié)點(diǎn)。
可選的,在一條路徑搜索結(jié)束之后所述方法還包括:
將所有節(jié)點(diǎn)的V值和H值歸為初始值。
可選的,所述通過(guò)回溯方式搜索新的路徑,具體包括:
在回溯至當(dāng)前節(jié)點(diǎn)i時(shí),判斷對(duì)應(yīng)所述節(jié)點(diǎn)i是否存在沒(méi)有搜索過(guò)的路徑;
在對(duì)應(yīng)所述節(jié)點(diǎn)i存在沒(méi)有搜索過(guò)的路徑時(shí),從沒(méi)有搜索過(guò)的路徑中選擇一條路徑進(jìn)行搜索;
在對(duì)應(yīng)所述節(jié)點(diǎn)i不存在沒(méi)有搜索過(guò)的路徑時(shí),選擇所述節(jié)點(diǎn)i的前一個(gè)節(jié)點(diǎn)i-1作為新的當(dāng)前節(jié)點(diǎn)。
第二方面,本發(fā)明實(shí)施例提供一種流程圖的路徑獲取裝置,包括:
獲取模塊,用于獲取流程圖包含的所有節(jié)點(diǎn)的數(shù)量N,其中N為正整數(shù);
搜索模塊,用于從所述流程圖的起始節(jié)點(diǎn)開(kāi)始搜索所述流程圖的路徑;
確定模塊,用于在搜索到節(jié)點(diǎn)i時(shí),通過(guò)所述節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定所述節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn),i為0,1,2…N;
回溯模塊,用于在一條路徑搜索結(jié)束之后,通過(guò)回溯方式搜索新的路徑,直至回溯至所述起始節(jié)點(diǎn)。
可選的,所述裝置還包括:
第一設(shè)置模塊,用于在通過(guò)所述節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定所述節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn)之前,針對(duì)所述流程圖的每個(gè)節(jié)點(diǎn)分別設(shè)置對(duì)應(yīng)的V值和H值,其中,V值表征對(duì)應(yīng)節(jié)點(diǎn)在任意一條路徑中最多出現(xiàn)的次數(shù),H值表示對(duì)應(yīng)節(jié)點(diǎn)在當(dāng)前搜索的路徑中出現(xiàn)的次數(shù);
第二設(shè)置模塊,用于針對(duì)每個(gè)節(jié)點(diǎn)設(shè)置啟發(fā)式函數(shù)F=V-H,其中F即為所述權(quán)值。
可選的,所述第一設(shè)置模塊,具體包括:
第一確定單元,用于確定每個(gè)節(jié)點(diǎn)的輸入線條數(shù)和輸出線條數(shù);
第二確定單元,用于確定所述輸入線條數(shù)和輸出線條數(shù)中的最大值作為對(duì)應(yīng)節(jié)點(diǎn)的所述V值。
可選的,所述確定模塊,具體包括:
第三確定單元,用于確定所述節(jié)點(diǎn)i所指向的至少一個(gè)節(jié)點(diǎn);
第一選擇單元,用于從所述至少一個(gè)節(jié)點(diǎn)中選擇F值最大且大于零的一個(gè)節(jié)點(diǎn)作為下一步經(jīng)過(guò)的節(jié)點(diǎn)。
可選的,所述裝置還包括:
初始化模塊,用于在一條路徑搜索結(jié)束之后,將所有節(jié)點(diǎn)的V值和H值歸為初始值。
可選的,所述回溯模塊,具體包括:
判斷單元,用于在回溯至當(dāng)前節(jié)點(diǎn)i時(shí),判斷對(duì)應(yīng)所述節(jié)點(diǎn)i是否存在沒(méi)有搜索過(guò)的路徑;
第二選擇單元,用于在對(duì)應(yīng)所述節(jié)點(diǎn)i存在沒(méi)有搜索過(guò)的路徑時(shí),從沒(méi)有搜索過(guò)的路徑中選擇一條路徑進(jìn)行搜索;
第三選擇單元,用于在對(duì)應(yīng)所述節(jié)點(diǎn)i不存在沒(méi)有搜索過(guò)的路徑時(shí),選擇所述節(jié)點(diǎn)i的前一個(gè)節(jié)點(diǎn)i-1作為新的當(dāng)前節(jié)點(diǎn)。
本發(fā)明有益效果如下:
由于在本發(fā)明實(shí)施例中,首先獲取流程圖包含的所有節(jié)點(diǎn)的數(shù)量N,其中N為正整數(shù);然后從流程圖的起始節(jié)點(diǎn)開(kāi)始搜索流程圖的路徑;在搜索到節(jié)點(diǎn)i時(shí),通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn),i為0,1,2…N;在一條路徑搜索結(jié)束之后,通過(guò)回溯方式搜索新的路徑,直至回溯至起始節(jié)點(diǎn),即獲得流程圖的所有有效路徑。由于在搜索到節(jié)點(diǎn)i之后,通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步所輸出的節(jié)點(diǎn),故而能夠防止在遇到流程圖的環(huán)時(shí),因?yàn)闊o(wú)法確定選擇哪個(gè)節(jié)點(diǎn)所造成的死循環(huán),而通過(guò)回溯算法則能夠遍歷流程圖的所有有效路徑,從而達(dá)到了能夠?qū)α鞒虉D進(jìn)行處理,并搜索獲得流程圖的全部有效路徑的技術(shù)效果。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例中流程圖的路徑獲取方法的流程圖;
圖2為本發(fā)明實(shí)施例中流程圖的路徑獲取方法中所列舉的流程圖的示意圖;
圖3為本發(fā)明實(shí)施例中流程圖的路徑獲取方法中建立啟發(fā)式函數(shù)F的流程圖;
圖4為本發(fā)明實(shí)施例中流程圖的路徑獲取方法中通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步所輸出的節(jié)點(diǎn)的流程圖;
圖5為本發(fā)明實(shí)施例中流程圖的路徑獲取方法的邏輯框圖;
圖6為本發(fā)明實(shí)施例中流程圖的路徑獲取裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
本發(fā)明提供一種流程圖的路徑獲取方法及裝置,以解決現(xiàn)有技術(shù)中無(wú)法自動(dòng)搜索并獲取流程圖路徑的技術(shù)問(wèn)題。
本申請(qǐng)實(shí)施例中的技術(shù)方案為解決上述的技術(shù)問(wèn)題,總體思路如下:
首先獲取流程圖包含的所有節(jié)點(diǎn)的數(shù)量N,其中N為正整數(shù);然后從流程圖的起始節(jié)點(diǎn)開(kāi)始搜索流程圖的路徑;在搜索到節(jié)點(diǎn)i時(shí),通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn),i為0,1,2…N;在一條路徑搜索結(jié)束之后,通過(guò)回溯方式搜索新的路徑,直至回溯至起始節(jié)點(diǎn),即獲得流程圖的所有有效路徑。由于在搜索到節(jié)點(diǎn)i之后,通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步所輸出的節(jié)點(diǎn),故而能夠防止在遇到流程圖的環(huán)時(shí),因?yàn)闊o(wú)法確定選擇哪個(gè)節(jié)點(diǎn)所造成的死循環(huán),而通過(guò)回溯算法則能夠遍歷流程圖的所有有效路徑,從而達(dá)到了能夠?qū)α鞒虉D進(jìn)行處理,并搜索獲得流程圖的全部有效路徑的技術(shù)效果。
為了更好的理解上述技術(shù)方案,下面通過(guò)附圖以及具體實(shí)施例對(duì)本發(fā)明技術(shù)方案做詳細(xì)的說(shuō)明,應(yīng)當(dāng)理解本發(fā)明實(shí)施例以及實(shí)施例中的具體特征是對(duì)本發(fā)明技術(shù)方案的詳細(xì)的說(shuō)明,而不是對(duì)本發(fā)明技術(shù)方案的限定,在不沖突的情況下,本發(fā)明實(shí)施例以及實(shí)施例中的技術(shù)特征可以相互組合。
第一方面,本發(fā)明實(shí)施例提供一種流程圖的路徑獲取方法,請(qǐng)參考圖1,包括:
步驟S101:獲取流程圖包含的所有節(jié)點(diǎn)的數(shù)量N,其中N為正整數(shù);
步驟S102:從流程圖的起始節(jié)點(diǎn)開(kāi)始搜索流程圖的路徑;
步驟S103:在搜索到節(jié)點(diǎn)i時(shí),通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn),i為0,1,2…N;
步驟S104:在一條路徑搜索結(jié)束之后,通過(guò)回溯方式搜索新的路徑,直至回溯至起始節(jié)點(diǎn)。
步驟S101中,可以首先通過(guò)程序讀取待處理的流程圖,而流程圖中的每個(gè)框則表示一個(gè)節(jié)點(diǎn),以圖2所示的流程圖為例,則該流程圖中包含5個(gè)節(jié)點(diǎn), 為了方便表示,可以將這5個(gè)節(jié)點(diǎn)分別用1-5的數(shù)字表示。
步驟S102中,以圖2所示的流程圖為例,則該流程圖的起始節(jié)點(diǎn)為“開(kāi)始”所對(duì)應(yīng)的節(jié)點(diǎn),在搜索開(kāi)始階段,從該起始節(jié)點(diǎn)搜索下一節(jié)點(diǎn)。
其中,作為進(jìn)一步的優(yōu)選實(shí)施例,在基于步驟S103通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步所經(jīng)過(guò)的節(jié)點(diǎn)之前,請(qǐng)參考圖3,方法還包括:
步驟S301:針對(duì)流程圖的每個(gè)節(jié)點(diǎn)分別設(shè)置對(duì)應(yīng)的V值和H值,其中,V值表征對(duì)應(yīng)節(jié)點(diǎn)在任意一條路徑中最多出現(xiàn)的次數(shù),H值表示對(duì)應(yīng)節(jié)點(diǎn)在當(dāng)前搜索的路徑中出現(xiàn)的次數(shù);
步驟S302:針對(duì)每個(gè)節(jié)點(diǎn)設(shè)置啟發(fā)式函數(shù)F=V-H,其中F即為權(quán)值。
步驟S301中,V值通常由對(duì)應(yīng)節(jié)點(diǎn)所連接的線條數(shù)量決定,V值可以通過(guò)以下方式獲得:確定每個(gè)節(jié)點(diǎn)的輸入線條數(shù)和輸出線條數(shù);確定輸入線條數(shù)和輸出線條數(shù)的最大值作為對(duì)應(yīng)節(jié)點(diǎn)的V值。
以圖2所示的流程圖舉例,起始節(jié)點(diǎn)1的輸入線條數(shù)為0,輸出線條數(shù)為1,則V(1)=1;
節(jié)點(diǎn)2的輸入線條數(shù)為2,輸出線條數(shù)為1,則V(2)=2;
節(jié)點(diǎn)3的輸入線條數(shù)為1,輸出線條數(shù)為2,則V(3)=2;
節(jié)點(diǎn)4的輸入線條數(shù)為1,輸出線條數(shù)為1,則V(4)=1;
節(jié)點(diǎn)5的輸入線條數(shù)為1,輸出線條數(shù)為0,則V(5)=1。
對(duì)于其它流程圖其每個(gè)節(jié)點(diǎn)的V值的計(jì)算方式與之類似,故而在此不再贅述。
而在初始化階段時(shí),所有節(jié)點(diǎn)的H值都為0,在一條路徑搜索結(jié)束之后將所有節(jié)點(diǎn)的V值和H值歸為初始值以圖2所示的流程圖為例,則:
H(1)=H(2)=H(3)=H(4)=H(5)=0
步驟S302中,在初始化階段,每個(gè)節(jié)點(diǎn)的啟發(fā)式函數(shù)F(也即:權(quán)值)與V值相同。
步驟S103中,通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步所輸出的節(jié)點(diǎn),請(qǐng)參考圖4,具體包括:
步驟S401:確定節(jié)點(diǎn)i所指向的至少一個(gè)節(jié)點(diǎn);
步驟S402:從至少一個(gè)節(jié)點(diǎn)中選擇F值最大且大于零的一個(gè)節(jié)點(diǎn)作為下一步所經(jīng)過(guò)的節(jié)點(diǎn);
步驟S403:在對(duì)應(yīng)節(jié)點(diǎn)的F值小于等于零時(shí),節(jié)點(diǎn)i不再經(jīng)過(guò)對(duì)應(yīng)的節(jié)點(diǎn)。
步驟S401中,以圖2所示的流程圖為例,節(jié)點(diǎn)1指向的節(jié)點(diǎn)為節(jié)點(diǎn)2,節(jié)點(diǎn)2指向的節(jié)點(diǎn)為節(jié)點(diǎn)3,節(jié)點(diǎn)3指向的節(jié)點(diǎn)為節(jié)點(diǎn)2、節(jié)點(diǎn)4,節(jié)點(diǎn)4指向的節(jié)點(diǎn)為節(jié)點(diǎn)5,節(jié)點(diǎn)5沒(méi)有指向的節(jié)點(diǎn),所以在搜索到節(jié)點(diǎn)5之后,由于H(5)等于零,則一條路徑的搜索完成。
步驟S402中,對(duì)于節(jié)點(diǎn)1、2、4、5由于其指向的節(jié)點(diǎn)都只有一個(gè),故而下一步直接經(jīng)過(guò)其指向的節(jié)點(diǎn)即可,對(duì)于節(jié)點(diǎn)3,由于其指向的節(jié)點(diǎn)有兩個(gè),則需要通過(guò)權(quán)值,也即啟發(fā)式函數(shù)F確定出節(jié)點(diǎn)3下一步經(jīng)過(guò)的節(jié)點(diǎn)。
其中,在搜索至節(jié)點(diǎn)3時(shí),節(jié)點(diǎn)2和節(jié)點(diǎn)4的啟發(fā)式函數(shù)分別如下:
F(2)=V(2)–H(2)=2–1=1;(節(jié)點(diǎn)2已經(jīng)過(guò)一次)
F(4)=V(4)–H(4)=1–0=1;
而在同時(shí)存在多個(gè)最大的F值的情況下,則會(huì)隨機(jī)選擇一個(gè)最大的F值所對(duì)應(yīng)的節(jié)點(diǎn)作為下一步所經(jīng)過(guò)的節(jié)點(diǎn),故而,節(jié)點(diǎn)3可以隨機(jī)從節(jié)點(diǎn)2和節(jié)點(diǎn)4中選擇出一個(gè)節(jié)點(diǎn)進(jìn)行輸出,并對(duì)被選擇出的節(jié)點(diǎn)進(jìn)行標(biāo)記,假設(shè)節(jié)點(diǎn)3選擇的節(jié)點(diǎn)4,因?yàn)楣?jié)點(diǎn)4只指向節(jié)點(diǎn)5,故而最終確定出的路徑為1→2→3→4→5。
步驟S402中,由于對(duì)于F值小于等于零的路徑則不再走,從而保證不會(huì)導(dǎo)致死循環(huán)。
通過(guò)上述啟發(fā)式函數(shù)F,采取一條路徑中每個(gè)環(huán)只經(jīng)過(guò)一次的控制手段,能夠解決有環(huán)的流程圖中路徑不可數(shù)的問(wèn)題。
步驟S104中,在一條路徑搜索結(jié)束之后,為了搜索出其他節(jié)點(diǎn),則需要開(kāi)始回溯,作為進(jìn)一步的優(yōu)選實(shí)施例,通過(guò)回溯方式獲取新的路徑,具體包括:
在回溯至當(dāng)前節(jié)點(diǎn)i時(shí),判斷對(duì)應(yīng)節(jié)點(diǎn)i是否存在沒(méi)有搜索過(guò)的路徑;
在對(duì)應(yīng)節(jié)點(diǎn)i存在沒(méi)有搜索過(guò)的路徑時(shí),從沒(méi)有搜索過(guò)的路徑中選擇一條路徑進(jìn)行搜索;
在對(duì)應(yīng)節(jié)點(diǎn)i不存在沒(méi)有搜索過(guò)的路徑時(shí),選擇節(jié)點(diǎn)i的前一個(gè)節(jié)點(diǎn)i-1作為新的當(dāng)前節(jié)點(diǎn)。
舉例來(lái)說(shuō),還是以圖2所示的流程圖為例,假設(shè)第一節(jié)點(diǎn)為節(jié)點(diǎn)4,由于節(jié)點(diǎn)4所指向的節(jié)點(diǎn)只有節(jié)點(diǎn)5,而節(jié)點(diǎn)4至節(jié)點(diǎn)5的路徑已經(jīng)走過(guò),故而節(jié)點(diǎn)4并不包含沒(méi)有走過(guò)的路徑,在種情況下,則選擇節(jié)點(diǎn)4的前一個(gè)節(jié)點(diǎn)(也即節(jié)點(diǎn)3)繼續(xù)上述判斷過(guò)程;
節(jié)點(diǎn)3所指向的節(jié)點(diǎn)包含節(jié)點(diǎn)2和節(jié)點(diǎn)4,其中節(jié)點(diǎn)3至節(jié)點(diǎn)4的路徑之前已經(jīng)走過(guò),故而忽略已經(jīng)標(biāo)記過(guò)的節(jié)點(diǎn)4,直接選擇節(jié)點(diǎn)3至節(jié)點(diǎn)2的路徑繼續(xù)搜索,在這種情況下,F(xiàn)(2)=V(2)–H(2)=2-1=1;
在回到節(jié)點(diǎn)2之后,節(jié)點(diǎn)2所指向的節(jié)點(diǎn)為節(jié)點(diǎn)3,而:
F(3)=V(3)–H(3)=2-1=1
也就是F(3)大于0,故而可以從節(jié)點(diǎn)2輸出至節(jié)點(diǎn)3,而在由節(jié)點(diǎn)2輸出至節(jié)點(diǎn)3之后,H(2)和H(3)都變?yōu)?,從而F(2)和F(3)都變?yōu)?,而由于上一條路徑已經(jīng)搜索完畢,故而節(jié)點(diǎn)4和節(jié)點(diǎn)5恢復(fù)至初始狀態(tài),也即H(4)與H(5)都等于0,故而:
F(4)=V(4)-H(4)=1-0=1 F(5)=V(5)-H(5)=1-0=1
在這種情況下,故而節(jié)點(diǎn)3只能先經(jīng)過(guò)節(jié)點(diǎn)4,然后經(jīng)過(guò)至節(jié)點(diǎn)5,獲得第二條路徑:1→2→3→2→3→4→5;
然后繼續(xù)回溯,由于對(duì)應(yīng)節(jié)點(diǎn)3的兩條路徑都搜索過(guò)了,而節(jié)點(diǎn)1和節(jié)點(diǎn)2的輸出節(jié)點(diǎn)都只有一個(gè),故而再次回溯就回溯到起始節(jié)點(diǎn),也就是搜索節(jié)點(diǎn)的過(guò)程結(jié)束。
最后可以得到以下兩條路徑:
①開(kāi)始→申請(qǐng)人書(shū)寫交底書(shū)→審核通過(guò)(是)→申請(qǐng)專利→結(jié)束;
②開(kāi)始→申請(qǐng)人書(shū)寫交底書(shū)→審核通過(guò)(否)→申請(qǐng)人書(shū)寫交底書(shū)→審核通過(guò)(是)→申請(qǐng)專利→結(jié)束。
作為進(jìn)一步的優(yōu)選實(shí)施例,在基于步驟S104獲得流程圖的所有路徑之后,方法還包括:針對(duì)所有路徑設(shè)計(jì)測(cè)試用例,進(jìn)而可以通過(guò)測(cè)試用例對(duì)所有的路徑進(jìn)行測(cè)試,進(jìn)而能夠提高測(cè)試用例對(duì)代碼邏輯的覆蓋度,例如:一些復(fù)雜邏輯的代碼,如果通過(guò)人工去搜索路徑,不僅耗費(fèi)時(shí)間,而且極易漏掉一些路徑,而使用程序來(lái)搜索路徑就沒(méi)有這個(gè)問(wèn)題。
并且,還能夠提高測(cè)試人員的工作效率,例如:一些比較復(fù)雜的流程圖人工看起來(lái)特別費(fèi)時(shí)間,而用程序分析很快就可以完成。
通常情況下,流程圖中的路徑包括有效路徑和無(wú)效路徑兩部分,其中:
流程圖中的無(wú)效路徑指的是:若當(dāng)前路徑是對(duì)某個(gè)環(huán)路的多次重復(fù),且前面已經(jīng)有路徑涵蓋到這個(gè)環(huán)路了,就認(rèn)為這條路徑是無(wú)效路徑。
流程圖中有效路徑指的是:全路徑除去無(wú)效路徑就是有效路徑。
在上述方案中,通過(guò)設(shè)定啟發(fā)式函數(shù)F能夠防止對(duì)某個(gè)環(huán)路重復(fù)多次,進(jìn)而能夠搜索出流程圖中所有有效路徑。
為了使本領(lǐng)域所屬技術(shù)人員能夠進(jìn)一步的了解本發(fā)明實(shí)施例所介紹的流程圖的路徑獲取方法的應(yīng)用環(huán)境,下面將介紹該方法所采用的軟件架構(gòu)或者模塊化的功能框圖,請(qǐng)參考圖5,該功能框圖包括以下兩部分:
用戶層50,在用戶層50,測(cè)試人員首先導(dǎo)入需要獲取路徑的流程圖,然后產(chǎn)生搜索所有路徑的控制指令;
業(yè)務(wù)邏輯層51,業(yè)務(wù)邏輯層51接收用戶層50發(fā)送的控制指令;然后執(zhí)行該控制指令,進(jìn)而讀入流程圖并對(duì)流程圖進(jìn)行分析;然后依據(jù)啟發(fā)式函數(shù)F對(duì)流程圖進(jìn)行搜索;進(jìn)而最終搜索出流程圖的所有路徑;然后將所有路徑提供給用戶層50所對(duì)應(yīng)的測(cè)試人員,由測(cè)試人員根據(jù)所有路徑設(shè)計(jì)測(cè)試用例。
當(dāng)然,在具體實(shí)施過(guò)程中,本發(fā)明實(shí)施例所介紹的流程圖的路徑獲取方法本技術(shù)除了在軟件測(cè)試領(lǐng)域可以廣泛使用外,還可以應(yīng)用在其他任意包含流程 圖的領(lǐng)域,例如:公司要對(duì)專利申請(qǐng)流程進(jìn)程改革,而專利申請(qǐng)流程圖為一個(gè)很復(fù)雜的流程圖,在需要核對(duì)該專利申請(qǐng)流程圖的情況下,如果采用人工方式的話,則只能大概了解一下整體的層次關(guān)系,但是如果需要判斷該專利申請(qǐng)流程圖有沒(méi)有什么漏洞的話,則需要逐條路徑去看,而通過(guò)本發(fā)明實(shí)施例所介紹的方案,則可以直接展示該專利申請(qǐng)流程圖的所有有效路徑,進(jìn)而使專利申請(qǐng)流程圖的審核更加方便。
第二方面,基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供一種流程圖的路徑獲取裝置,請(qǐng)參考圖6,包括:
獲取模塊60,用于獲取流程圖包含的所有節(jié)點(diǎn)的數(shù)量N,其中N為正整數(shù);
搜索模塊61,用于從流程圖的起始節(jié)點(diǎn)開(kāi)始搜索流程圖的路徑;
確定模塊62,用于在搜索到節(jié)點(diǎn)i時(shí),通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn),i為0,1,2…N;
回溯模塊63,用于在一條路徑搜索結(jié)束之后,通過(guò)回溯方式搜索新的路徑,直至回溯至起始節(jié)點(diǎn)。
可選的,裝置還包括:
第一設(shè)置模塊,用于在通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn)之前,針對(duì)流程圖的每個(gè)節(jié)點(diǎn)分別設(shè)置對(duì)應(yīng)的V值和H值,其中,V值表征對(duì)應(yīng)節(jié)點(diǎn)在任意一條路徑中最多出現(xiàn)的次數(shù),H值表示對(duì)應(yīng)節(jié)點(diǎn)在當(dāng)前搜索的路徑中出現(xiàn)的次數(shù);
第二設(shè)置模塊,用于針對(duì)每個(gè)節(jié)點(diǎn)設(shè)置啟發(fā)式函數(shù)F=V-H,其中F即為權(quán)值。
可選的,第一設(shè)置模塊,具體包括:
第一確定單元,用于確定每個(gè)節(jié)點(diǎn)的輸入線條數(shù)和輸出線條數(shù);
第二確定單元,用于確定輸入線條數(shù)和輸出線條數(shù)中的最大值作為對(duì)應(yīng)節(jié)點(diǎn)的V值。
可選的,確定模塊62,具體包括:
第三確定單元,用于確定節(jié)點(diǎn)i所指向的至少一個(gè)節(jié)點(diǎn);
第一選擇單元,用于從至少一個(gè)節(jié)點(diǎn)中選擇F值最大且大于零的一個(gè)節(jié)點(diǎn)作為下一步經(jīng)過(guò)的節(jié)點(diǎn)。
可選的,裝置還包括:
初始化模塊,用于在一條路徑搜索結(jié)束之后,將所有節(jié)點(diǎn)的V值和H值歸為初始值。
可選的,回溯模塊63,具體包括:
判斷單元,用于在回溯至當(dāng)前節(jié)點(diǎn)i時(shí),判斷對(duì)應(yīng)節(jié)點(diǎn)i是否存在沒(méi)有搜索過(guò)的路徑;
第二選擇單元,用于在對(duì)應(yīng)節(jié)點(diǎn)i存在沒(méi)有搜索過(guò)的路徑時(shí),從沒(méi)有搜索過(guò)的路徑中選擇一條路徑進(jìn)行搜索;
第三選擇單元,用于在對(duì)應(yīng)節(jié)點(diǎn)i不存在沒(méi)有搜索過(guò)的路徑時(shí),選擇節(jié)點(diǎn)i的前一個(gè)節(jié)點(diǎn)i-1作為新的當(dāng)前節(jié)點(diǎn)。
本發(fā)明一個(gè)或多個(gè)實(shí)施例至少具有以下有益效果:
由于在本發(fā)明實(shí)施例中,首先獲取流程圖包含的所有節(jié)點(diǎn)的數(shù)量N,其中N為正整數(shù);然后從流程圖的起始節(jié)點(diǎn)開(kāi)始搜索流程圖的路徑;在搜索到節(jié)點(diǎn)i時(shí),通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步經(jīng)過(guò)的節(jié)點(diǎn),i為0,1,2…N;在一條路徑搜索結(jié)束之后,通過(guò)回溯方式搜索新的路徑,直至回溯至起始節(jié)點(diǎn),即獲得流程圖的所有有效路徑。由于在搜索到節(jié)點(diǎn)i之后,通過(guò)節(jié)點(diǎn)i所指向的每個(gè)節(jié)點(diǎn)的權(quán)值確定節(jié)點(diǎn)i下一步所輸出的節(jié)點(diǎn),故而能夠防止在遇到流程圖的環(huán)時(shí),因?yàn)闊o(wú)法確定選擇哪個(gè)節(jié)點(diǎn)所造成的死循環(huán),而通過(guò)回溯算法則能夠遍歷流程圖的所有有效路徑,從而達(dá)到了能夠?qū)α鞒虉D進(jìn)行處理,并搜索獲得流程圖的全部有效路徑的技術(shù)效果。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的 形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明實(shí)施例進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明實(shí)施例的精神和范圍。這樣,倘若本發(fā)明實(shí)施例的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。