欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種流程圖的路徑獲取方法及裝置與流程

文檔序號(hào):11829436閱讀:493來(lái)源:國(guó)知局
一種流程圖的路徑獲取方法及裝置與流程

本發(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)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
清流县| 兰溪市| 丰原市| 平武县| 定襄县| 富锦市| 玉田县| 虞城县| 姚安县| 芮城县| 宁陕县| 石嘴山市| 京山县| 大连市| 同仁县| 荆门市| 昌都县| 西安市| 东乡族自治县| 扎鲁特旗| 桃园县| 英德市| 黎城县| 林周县| 福州市| 梅州市| 奇台县| 清流县| 梁山县| 秭归县| 东兴市| 深圳市| 广州市| 怀仁县| 丹巴县| 东台市| 开封市| 辽阳县| 伊春市| 洛川县| 阿拉尔市|