• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      異常結(jié)構(gòu)對Java程序分析的影響

      2015-07-06 16:41:56謝壽吾
      數(shù)字技術(shù)與應(yīng)用 2015年5期
      關(guān)鍵詞:Java語言

      謝壽吾

      摘要:控制流、數(shù)據(jù)流、控制依賴等是軟件任務(wù)執(zhí)行中比較常用的進行程序分析、技術(shù)分析和理解程序的程序模式??商峁┹^完善的異常處理機制,是現(xiàn)階段市場上流行的程序設(shè)計語言都基本具備的功能。本文著重分析了Java語言程序中的異常結(jié)構(gòu),并對該程序結(jié)構(gòu)在分析技術(shù)方面產(chǎn)生的不同影響進行了簡單闡述,希望在后期軟件技術(shù)發(fā)展中有所借鑒。

      關(guān)鍵詞:異常結(jié)構(gòu) 控制流分析 數(shù)據(jù)流分析 控制依賴分析 Java語言

      中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1007-9416(2015)05-0000-00

      修改源程序,是軟件維護的重要組成部分,必須按照分析和理解程序、修改程序、重新驗證程序三個步驟有計劃、有針對性的進行修改工作。對整個源程序的全面、準(zhǔn)確、迅速地分析和理解,是判斷軟件維護工作質(zhì)量好壞的依據(jù)。而且,整個軟件程序的理解必須以軟件的可理解和文檔的較高質(zhì)量為基礎(chǔ),繼而加強對程序功能和目標(biāo)結(jié)果的理解;對程序中劃分出來的程序系統(tǒng)結(jié)構(gòu)、控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)和輸入輸出結(jié)構(gòu)等各類結(jié)構(gòu)信息的熟悉運用;對程序的相關(guān)數(shù)據(jù)流信息的來源、如何使用要及時掌握和廣泛了解;對每條路徑疏松的控制流信息的執(zhí)行結(jié)果要做到準(zhǔn)確掌握。只有如此,才能更一步提高對軟件程序進行系統(tǒng)行的理解與掌握。

      1概述

      許多程序設(shè)計語言的異常處理機制,多出現(xiàn)在對錯誤問題的解決處理時卻遇到健壯的程序,這種相對不匹配的情況。Java語言屬于目前主流型使用軟件,是具備異常處理機制的典型。它主要包括了對一個錯誤、異常信號的拋出和對獲得的拋出的錯誤信號的正確處理兩方面,即拋出異常和捕獲異常。Java的關(guān)鍵字與它本身的異常處理機制中三個組成部分都有較密切的聯(lián)系,下面就這些分別進行說明。

      Throws:即后面跟隨所有隱在的異常類型,是為方便客戶程序員對該方法的控制,對客戶程序員進行拋出異常這一環(huán)節(jié)。作為方法定義中的一部分,Java程序員必須將可以處理的潛在錯誤狀態(tài)進行明確的指出,并利用所有可以用得上的該方法中的代碼進行處理。這個新的方法的編寫必須經(jīng)Java編譯器強制性操作整個過程。

      Throw:即后面跟隨異常對象。判斷用戶自定義異常對應(yīng)錯誤在何種情況下算是產(chǎn)生的,這是throw語言的作用之一,屬于拋出這個異常新對象時對該方法的一種調(diào)試功能。在這個過程中,編程者必須在程序選擇較為合理的位置創(chuàng)建自定義異常的異常和對這個新的異常對象以throw語句形式進行拋出,以此作為系統(tǒng)不能識別和創(chuàng)建用戶自定義異常的一種處理辦法。

      Try-catch-finally:即try塊(警戒區(qū))中對全部可能拋出異常代碼部分的收集、處理。finally塊是可變化的,try塊中的catch 塊中緊跟著所有的異常及其應(yīng)該處理的部分,finally塊一經(jīng)確定,無論是否處于有異常產(chǎn)生的情況下都會執(zhí)行處理功能的。對關(guān)閉文件和流、釋放系統(tǒng)資源等方面的清理,必須在把控制權(quán)傳輸給其它程序之前通過這一方法進行處理。把系統(tǒng)恢復(fù)到原有狀態(tài),是finally塊的最終目的。

      依據(jù)研究發(fā)現(xiàn),總程序數(shù)中try和throw語句程序分別占據(jù)了23.4%和24.6%,是異常處理機制廣泛使用中的常用比例設(shè)計,這樣不僅可以降低程序代碼量,也是描述具體操作的代碼與專門糾正錯誤的代碼相分離的重要工具;但就異常處理機制的內(nèi)部結(jié)構(gòu)、內(nèi)容而言,過程內(nèi)部或過程之間的控制流極易受到continue、goto、exit 語句的類似結(jié)構(gòu)的影響,這會成為信息結(jié)果不準(zhǔn)確的誘因之一,從而造成在結(jié)構(gòu)測試、回歸測試、靜態(tài)程序切片、動態(tài)程序切片、程序理解等軟件工程任務(wù)應(yīng)用中的嚴重錯誤。

      上面內(nèi)容就是先進軟件的主流程序Java 程序中異常結(jié)構(gòu)對控制流、 數(shù)據(jù)流、 控制依賴在分析技術(shù)應(yīng)用的影響,是程序軟件普遍具備的一種特性,是我們保障軟件順利應(yīng)用必須時刻注意的問題。下面就此作出分析。

      2異常結(jié)構(gòu)對 Java程序靜態(tài)分析的具體影響

      所測試的程序在靜態(tài)分析程序中無需執(zhí)行就可掃描正文、直接分析程序的數(shù)據(jù)流和控制流、送出測試報告。

      2.1異常結(jié)構(gòu)影響控制流分析

      控制流圖以控制狀態(tài)為描述主體,通過對系統(tǒng)控制轉(zhuǎn)移路徑的刻畫和在特定數(shù)據(jù)驅(qū)動下具體狀態(tài)的反映,將程序控制流從控制角度進行詳細描述的一種圖示方法。在軟件應(yīng)用中,數(shù)據(jù)流分析、 控制依賴分析等許多程序分析技術(shù)和結(jié)構(gòu)測試、 回歸測試等軟件工程任務(wù)都在利用控制流圖的描述信息。程序所有可能的執(zhí)行路徑,用語句層次上的控制流圖表示;程序語句塊用控制流圖中的結(jié)點表示;程序語句塊之間可能的控制轉(zhuǎn)移用邊表示。將異常結(jié)構(gòu)引入語句層次的控制流圖可以促進控制流信息更加準(zhǔn)確地把握,換句話說,就是對控制流的整個程序分析必須對執(zhí)行 try 語句的所有路徑實行系統(tǒng)性研究。為了保障這一過程,控制流圖進行四種有效路徑的合理增加。一是當(dāng)異常在try 塊順利完成且被finally 塊拋出后沿調(diào)用棧傳播繼續(xù)傳播;二是當(dāng)異常被try塊拋出后該曾未經(jīng)處理或catch 塊拋出其它異常時,將繼續(xù)沿調(diào)用棧傳播;三是當(dāng)異常被try塊拋出后該曾的catch 塊將異常已經(jīng)進行了處理;四是當(dāng)異常被try塊拋出后由相應(yīng)的catch塊捕捉了后finally塊又拋出了另一異常。

      過程間的控制流圖,需要將所有過程按照下列方法連接。一是將每個調(diào)用結(jié)點和被調(diào)用方法的控制流圖中的入口結(jié)點連接起來;二是將控制流中的退出結(jié)點和調(diào)用方法相對應(yīng)的結(jié)點連接起來;三是當(dāng)異常被一個方法拋出后經(jīng)調(diào)用方法捕捉,將退出結(jié)點與調(diào)用方法中相應(yīng)的 catch 結(jié)點連接起來。異常被調(diào)用方法傳播同時也已捕捉;異常被調(diào)用方法傳播卻并未處理異常。這兩者均是異常處理機制在過程間的控制流圖中逐步加入的兩個路徑。

      2.2影響數(shù)據(jù)流分析的異常結(jié)構(gòu)

      數(shù)據(jù)變換是系統(tǒng)模型的主要功能作用。系統(tǒng)模型是一系列加工單元對軟件系統(tǒng)的抽象表現(xiàn),數(shù)據(jù)流促進各單元之間的相互關(guān)聯(lián)、讓加工單元傳輸并向其不斷轉(zhuǎn)化。程序中使用數(shù)據(jù)、 定義數(shù)據(jù)和數(shù)據(jù)依賴等信息的匯聚過程就是數(shù)據(jù)流分析。

      帶有異常結(jié)構(gòu)的數(shù)據(jù)流在現(xiàn)階段有兩種基本方法進行分析。一是數(shù)據(jù)流不斷加入異常結(jié)構(gòu);二是單獨表現(xiàn)異常結(jié)構(gòu)的數(shù)據(jù)流。數(shù)據(jù)流分析中受異常結(jié)構(gòu)的影響中, 程序信息被控制流圖表示出來,異常結(jié)構(gòu)的數(shù)據(jù)流逐漸加入到原數(shù)據(jù)流圖中。下面就用舉例法對數(shù)據(jù)流分析中異常結(jié)構(gòu)的影響作用進行分析。

      圖1中,調(diào)用結(jié)點和被調(diào)用方法的控制流圖中的入口結(jié)點用較粗的虛線連接,而異常退出結(jié)點和調(diào)用方法中相應(yīng)的 catch 結(jié)點用較細的虛線連接。考慮異常路徑影響到達-定值、活躍變量、定值-引用鏈的具體情況,是帶有異常結(jié)構(gòu)的控制流圖進行數(shù)據(jù)流分析的必要條件。變量的定值點到達的點會在異常路徑中有所變化,是到達-定值常出現(xiàn)的情況。新的到達點(8)(9)(10)在變量 x 的定值點增加后,必然導(dǎo)致到達點(5)的減少,某些變量的活躍點在異常路徑中明顯有所增加。一方面,異常結(jié)構(gòu)對定值- 引用鏈的影響,使定值-引用鏈無法沿異常路徑被發(fā)現(xiàn)。若(9)對變量x的引用被它在(1)的定值忽略,就會導(dǎo)致定值-引用鏈< 3,5>的丟掉。另一方面,新的定值-引用鏈在沿異常路徑中被增加。若(9)對變量x的引用被它在(1)的定值增加了,就會導(dǎo)致新的定值-引用鏈< 1,9>的增加。在用控制流圖表示數(shù)據(jù)流信息后,也會因此將數(shù)據(jù)流中異常對其產(chǎn)生的影響加以表示在該圖上面。

      2.3影響程序依賴性分析的異常結(jié)構(gòu)

      通常情況下會利用程序依賴圖表示程序的依賴性??刂埔蕾嚭蛿?shù)據(jù)依賴,是定義中程序依賴圖的結(jié)點之間存在的兩種有向邊。其中,程序中條件語句、循環(huán)語句等對嵌入其中的語句的控制關(guān)系是由控制依賴描述的,而賦值語句中左值對右值的數(shù)據(jù)依賴關(guān)系是由數(shù)據(jù)依賴進行描述的。由于控制依賴和數(shù)據(jù)依賴在異常的影響下表現(xiàn)類似,本文只對控制依賴在異常影響下的表現(xiàn)進行了論述。entry結(jié)點與程序的關(guān)系為控制依賴,屬于通常定義中程序的入口結(jié)點。如圖2所示,是圖1源程序的控制依賴圖中的控制依賴部分。

      一般情況下,程序控制依賴受異常的影響,主要產(chǎn)生了兩個方面的表現(xiàn)。一是經(jīng)常借助其他方法表示catch塊中的語句。如g( )方法中的(4),是main( ) 中的catch 塊中的語句(9)(10)經(jīng)常產(chǎn)生依賴的,而不是對方法 main( ) 的入口;二是某個方法在被調(diào)用的過程中可能會將異常拋出,從而導(dǎo)致有關(guān)調(diào)用方法的返回位置不能被確定,被調(diào)用方法中的語句可能被方法中的某些語句產(chǎn)生依賴。 若g()在main()的調(diào)用中將異常拋出,就將進行main()中(8)的執(zhí)行命令;若是沒有將異常拋出,就會在(7)的返回后進行執(zhí)行命令的繼續(xù)。事實上,g()中的(4)就會被該方法 main()中的(7)產(chǎn)生依賴?,F(xiàn)階段,有人為了實現(xiàn)傳統(tǒng)的程序依賴圖對程序語句之間的依賴信息準(zhǔn)確表達出來,逐漸開始了程序依賴圖新的表示方法的分析研究。

      3結(jié)語

      Java語言是現(xiàn)今主流軟件的典型代表,本文以此進行了傳統(tǒng)程序分析技術(shù)在異常結(jié)構(gòu)下的影響表現(xiàn)分析。許多軟件工具都在將控制流分析、 數(shù)據(jù)流分析、 控制依賴分析得到的信息進行了應(yīng)用。從實際情況分析,為了保障獲取信息的準(zhǔn)確度,必須將異常結(jié)構(gòu)對控制流分析、 數(shù)據(jù)流分析、 控制依賴分析三者的具體影響充分考慮進去。否則,一些不確定信息在軟件工具中的實際運用,只會造成軟件程序運行的一些嚴重性后果的產(chǎn)生。

      參考文獻

      [1]宋道遠,賁可榮.Java程序異常信息分析插件的研究與設(shè)計[J].計算機科學(xué),2014(08).

      [2]岳珍梅,張偉剛.Java程序分析工具在復(fù)雜網(wǎng)絡(luò)背景下的分析與設(shè)計[J].電子技術(shù)與軟件工程,2014(13).

      [3]時雷,虎曉紅,席磊,張浩.Java程序設(shè)計課程教學(xué)分析[J].計算機教育,2010(14).

      [4]杜延寧,趙銀亮,韓博,李遠成.一種數(shù)據(jù)結(jié)構(gòu)制導(dǎo)的線程劃分方法與執(zhí)行模型[J].軟件學(xué)報,2013(10).

      [5]李龍飛.基于復(fù)雜網(wǎng)絡(luò)的Java程序分析工具設(shè)計與實現(xiàn)思路淺談[J].電腦知識與技術(shù),2014(06).

      猜你喜歡
      Java語言
      Java語言圖形編程工具的設(shè)計及應(yīng)用
      科技傳播(2017年4期)2017-04-24 20:20:00
      基于Java語言和Image J平臺的數(shù)字圖像處理實驗教學(xué)方案
      高職《Java語言程序設(shè)計》課程的“微課”制作與應(yīng)用研究
      論開閉原則在JAVA程序設(shè)計中的應(yīng)用
      基于Android平臺的健康醫(yī)療APP設(shè)計與開發(fā)
      大學(xué)生創(chuàng)業(yè)平臺設(shè)計與實現(xiàn)
      計算機軟件開發(fā)中的JAVA編程語言分析
      用戶隱私保護之手機密碼保險箱
      Android手機三軸加速度傳感器使用
      科技資訊(2015年8期)2015-07-02 18:44:39
      基于Java語言的手機軟件開發(fā)技術(shù)分析
      霍邱县| 文成县| 林甸县| 汉川市| 犍为县| 岗巴县| 阳西县| 洞口县| 台东市| 图木舒克市| 武夷山市| 保靖县| 洛川县| 札达县| 湘潭县| 犍为县| 株洲市| 大英县| 波密县| 尉犁县| 古蔺县| 雷州市| 南宫市| 河源市| 读书| 绥宁县| 杭锦后旗| 湖北省| 白河县| 沿河| 潞西市| 岳阳县| 绥芬河市| 大庆市| 阜宁县| 普兰店市| 长汀县| 池州市| 龙山县| 石渠县| 海淀区|