簡易檢索 / 詳目顯示

研究生: 莊為任
論文名稱: 軟體元件錯誤診斷-基於軟體切片技術
Software Crash Diagnosis based on Program Slicing over Software Component
指導教授: 鄭永斌
學位類別: 碩士
Master
系所名稱: 資訊工程學系
Department of Computer Science and Information Engineering
論文出版年: 2007
畢業學年度: 95
語文別: 中文
論文頁數: 100
中文關鍵詞: 軟體錯誤診斷軟體切片技術軟體元件
英文關鍵詞: software crash diagnosis, program slicing, software component
論文種類: 學術論文
相關次數: 點閱:190下載:9
分享至:
查詢本校圖書館目錄 查詢臺灣博碩士論文知識加值系統 勘誤回報
  • 軟體由於程式設計不當而發生錯誤在現實生活中常常發生。然而一般的使用者若碰到這種情況對軟體本身的處理相當有限。若軟體發生錯誤,使用者往往只能選擇中斷程式執行,對於避免軟體再次發生相同錯誤並沒有太大幫助。本論文希望提供一種新的想法對於使用者在軟體發生錯誤之後,能對軟體進行診斷。並且利用軟體元件圖(component diagram)將診斷的結果呈現給使用者,未來讓使用者透過網路上或其他方式找尋功能相同的元件來替換可能造成軟體發生錯誤之部份。很多其他工程領域都發展出診斷系統或診斷程式,來幫助診斷有問題的零件。找出錯誤的零件後,可以用相同功能的零件進行替換。軟體在這方面,則相對的沒有什麼進展。
    本論文希望當軟體發生錯誤之後,能夠使用與硬體上類似的處理方式解決問題,因此提出了軟體錯誤診斷的概念。軟體因為內部程式設計不當發生錯誤的原因相當多變且複雜,所以我們並不打算用單一演算法來診斷軟體。本論文設計了許多規則(rule)作為分析方法用以分析軟體內部程式碼,不同的錯誤由相對應的規則分析,因此本論文設計軟體診斷的架構是一種rule-based的架構。透過這種架構,不但可以針對軟體發生特定錯誤的情況來診斷,也提昇了分析方法的擴充性。分析的過程中,本系統使用了program slicing做為主要的技術,然後用更精確的規則縮小診斷範圍,找出會造成軟體發生錯誤的部份。最後我們探討了部份Java程式當中發生錯誤的軟體案例,利用這些案例來解釋我們設計的軟體錯誤診斷架構的流程。

    Software crash occurs frequently in our daily life due to poor programming of software. However, when users encounter software crash, an user’s choices are limited. When software crashed, the only choice is to terminate the program. Nevertheless, this choice is not helpful if the same problem occurs again. This thesis propose an idea to diagnose the software after it crashed and display the diagnosis through a component diagram showing that which component would be the major culprit for such a crash. Users can search the internet to look for components with identical functions to replace the problematic components. This concept is widely used in other engineering fields. In other engineering fields, many automatic diagnosis systems have been developed to identify problems quickly. These problematic parts can then be replaced.
    This thesis proposes to utilizing the trouble shooting concepts in other engineering fields and applying it to software crash. The causes of software crash are varied and complicated. Therefore, we propose a framework that does not use one algorithm to diagnose the crash. The framework contains a rule-based inference engine. to read a crash analysis profile for each kind of crash. It allows us to tune or extend the precision of the analysis continuously. The major analysis technique we use is program slicing. Finally, we demonstrate some case studies in Java programs.

    第一章 緒論 1 1.1 前言 1 1.2 研究動機 2 1.3 研究目標 4 1.4 論文架構 4 第二章 研究背景 6 2.1 Java基礎技術簡介 6 2.1.1 類別載入器 6 2.1.2 Java exception 8 2.2 程式中的依存性 9 2.3 Program slicing 10 2.3.1 Static program slicing 11 2.3.2 Dynamic program slicing 12 2.4 ProGrammar 14 第三章 軟體錯誤診斷 16 3.1 以類別載入器來攔截Runtime Exception 18 3.2 Slicing Engine 19 3.2.1 Indus-Java Program Slicer 19 3.2.2 Slicing Engine 22 3.3 Rule Engine 23 3.3.1 Rule Engine概述 23 3.3.2 使用程式範例說明Rule Engine 26 3.3.4 Rule Processing Engine 之演算法 37 3.3.5 Rule 39 第四章 案例探討 51 4.1 以案例說明物件數值造成之錯誤 52 4.2 以案例說明物件存在與否所造成之錯誤 61 4.3 以案例說明物件型態造成之錯誤 74 第五章 結論與未來展望 87 5.1 結論 87 5.2 未來研究方向以及應用 88 參考文獻 89

    [1] J. Gosling, B. Joy, G. Steele, and G. Bracha. the Java Language Specification, 3rd, Addison-Wesley, 2005.
    [2] Ganeshan Jayaraman, Venkatesh Prasad Ranganath, and John Hatcliff. Kaveri: Delivering the Indus Java Program Slicer to Eclipse. Department of Computing and Information Sciences, Kansas State University, 2005.
    [3] Janusz Laski, William Stanley and Jim Hurst. Dependency Analysis of Ada Programs, SofTools, Inc, 1998.
    [4] Jean-Francois Bergeretti and Bernard A. Carre. Information-Flow and Data-Flow Analysis of while-Programs, University Of Southampton, 1985.
    [5] ProGrammar Parser Development Toolkits. Users Guide, 2000.
    [6] Frank Tip. A survey of program slicing techniques. Journal of programming languages, 1995.
    [7] Java Gossip:簡介ClassLoader (無日期)。取自:http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/IntroduceClassLoader.htm
    [8] 謝金雲,“Agile Exception Handling: Process, Refactoring, and Architecture”,National Taipei University of Technology ,Department of Computer Science and Information Engineering ,2007.
    [9] Mark Weiser. Program slicing. In Proceeding of the Fifth International Conference on Software Engineering, pages 439-449, May 1981.
    [10] Mark Weiser. Program slicing. IEEE Transactions on Software Engineering, 10:352-357, July 1984.
    [11] Mark Weiser. Programmers use slices when debugging. CACM, 25(7):446-452, July 1982.
    [12] Hiralal Agrawal, Joseph R. Horgan, Dynamic Program Slicing .Conference on Programming Language Design and Implementation, 1990.
    [13] Mark Harman and Robert M. Hierons. An Overview of Program Slicing, Department of Information Systems and Computing, Brunel University, 2001.
    [14] S. Horwitz, T. Reps, and D. Binkley. Interprocedural slicing using dependence graphs.ACM Transactions on Programming Languages and Systems,12(1):35-46, January 1990.
    [15] D. Binkley K. Gallagher. Program Slicing. Advances in Computers, Volume 43, 1996. Marvin Zelkowitz, Editor, Academic Press San Diego, CA.
    [16] Software Componentry, http://en.wikipedia.org/wiki/Software_componentry
    [17] D. Binkley. Precise executable interprocedural slices. ACM Letters on Programming Languages and Systems 2, (1-4) (1993), 31-45.
    [18] Venkatesh Prasad Ranganath , John Hatcliff. Pruning Interference and Ready Dependence for Slicing Concurrent Java Programs. Department of Computing and Information Sciences, Kansas State University, 2006.
    [19] Venkatesh Prasad Ranganath , John Hatcliff. Slicing Concurrent Java Programs using Indus and Kaveri Department of Computing and Information Sciences, Kansas State University, 2006.
    [20] The Java Language Enviroment , http://java.sun.com/docs/white/langenv/Security.doc3.html

    QR CODE