關于反向工程的合法性條件有哪些,反向工程這個問題很多朋友還不知道,今天小六來為大家解答以上的問題,現(xiàn)在讓我們一起來看看吧!
1、首先聲明是轉(zhuǎn)來的,因為我回答你這個問題帶了個網(wǎng)址,就一直提示"敏感"回答不上0?引言??? 隨著計算機技術的迅速發(fā)展,計算機技術應用的領域也逐漸擴大,人們希望計算機這一智能體能夠解決各個領域的更多、更復雜的問題,從而也對計算機軟件產(chǎn)品的功能、質(zhì)量、開發(fā)成本和時間提出了越來越多的要求,軟件技術受到了前所未有的挑戰(zhàn)。
2、傳統(tǒng)的軟件工程主要關注新軟件的分析與設計,但隨著軟件系統(tǒng)的規(guī)模和復雜度日益增長,軟件的生命周期越來越長,軟件開發(fā)的很大一部分工作集中于維護和改造現(xiàn)有的軟件系統(tǒng),而這些現(xiàn)有系統(tǒng)的需求、設計決策、業(yè)務規(guī)則、歷史數(shù)據(jù)等統(tǒng)稱為遺產(chǎn)系統(tǒng)(LS,Legacy System),LS是一種巨大的、長期的投資,因為如何充分利用這些有用的資產(chǎn)對新系統(tǒng)的開發(fā)顯得尤其重要。
3、另一方面,隨著Internet技術的普及,Web用戶增多,很多軟件廠商需要將系統(tǒng)移植到Web上,進一步加劇了對軟件維護的需求。
4、實踐研究表明,軟件資源預算的50%~80%消耗在對現(xiàn)有系統(tǒng)的維護上,而軟件維護者理解程序源代碼的時間要占整個軟件維護的47%~62%。
5、軟件維護已經(jīng)成為軟件工程面臨的重要課題之一,而正確和全面地理解軟件系統(tǒng)是對軟件進行維護的前提,軟件逆向工程應運而生,成為軟件工程領域的一個新興分支,其目標就是開發(fā)幫助人們理解已有軟件系統(tǒng)的方法、工具,為軟件系統(tǒng)的維護和演化提供支持。
6、??? 文中主要介紹逆向工程的基本概念、主要步驟、分析方法、研究現(xiàn)狀、存在的問題以及發(fā)展方向。
7、1 逆向工程的基本概念??? “逆向工程”這個名詞最早出現(xiàn)在對硬件產(chǎn)品的分析中,人們分析硬件產(chǎn)品以便改進自己的產(chǎn)品。
8、M.G.Rekoffir將逆向工程定義為:對一個復雜的硬件系統(tǒng)實施有條理的檢查,以開發(fā)出關于這個系統(tǒng)的一組規(guī)范說明的過程。
9、在把這個概念應用到軟件系統(tǒng)過程中,研究人員發(fā)現(xiàn)利用其中的許多方法可以獲得對系統(tǒng)以及系統(tǒng)結構的理解。
10、然而,對一個硬件系統(tǒng)實施逆向工程,一般是為了得到這個系統(tǒng)的復制品,對一個軟件系統(tǒng)實施逆向工程,一般是為了獲得對這個系統(tǒng)在設計層次上的理解,以便于系統(tǒng)的維護、鞏固、移植、改進。
11、??? 軟件逆向工程的基本原理是抽取軟件系統(tǒng)的主要部分而隱藏細節(jié),然后使用抽取出的實體在高層上描述軟件系統(tǒng)。
12、在軟件工程領域,迄今為止沒有統(tǒng)一的逆向工程定義,較為通用的是Elliot Chikofsky和Cross1990年定義的逆向工程的相關術語。
13、軟件工程通常被認為是開發(fā)一個新的系統(tǒng),盡管軟件工程也包括逆向工程和再工程,為了避免對軟件工程含義的誤解,引進了正向工程的概念。
14、??? (1)正向工程(Forward Engineering):從系統(tǒng)的高層抽象和邏輯上獨立于實現(xiàn)的設計到系統(tǒng)的物理設計的傳統(tǒng)過程,具體地說是從用戶的需求到高層設計,再到底層設計,最后到實現(xiàn)的過程。
15、??? (2)逆向工程(Reverse Engineering):對系統(tǒng)進行分析,以確定系統(tǒng)的組件和組件之間的相互作用,以其他形式表示系統(tǒng),或在較高的抽象層次上表示系統(tǒng)的過程。
16、值得說明的是,在對一個系統(tǒng)實施逆向工程時,并不改變這個系統(tǒng)本身,也不包括在此系統(tǒng)上構建新的系統(tǒng)的過程。
17、??? (3)重構(Restructuring):保持系統(tǒng)外部行為(功能和語義)的前提下,在統(tǒng)一抽象層次上改變表示形式。
18、??? (4)再工程(Reengineering):通過逆向工程、重構和正向工程對現(xiàn)有系統(tǒng)進行審查和改造,將其重組為一種新形式。
19、??? (5)設計恢復(Design Recovery):結合目標系統(tǒng)、領域知識和外部消息認定更高層次的抽象。
20、其中,再工程、設計恢復不改變系統(tǒng),重構改變了系統(tǒng)。
21、但不改變其功能,再工程涉及到正向工程與逆向工程的聯(lián)合使用,逆向工程解決程序的理解問題,正向工程檢驗哪些功能需要增加、保留和刪除,再工程改變了系統(tǒng)的功能和方向,是最根本和最有深遠影響的擴展。
22、??? 圖1顯示這些概念之間的關系。
23、2 主要步驟和分析方法??? 由逆向工程定義可知:軟件逆向工程的任務包括分析系統(tǒng)、抽象系統(tǒng)和展現(xiàn)系統(tǒng),從而實現(xiàn)協(xié)助用戶理解系統(tǒng)的目的。
24、??? 分析系統(tǒng)是指分析系統(tǒng)的結構及運行過程,但不管目標系統(tǒng)面向何種應用領域,分析系統(tǒng)不外乎是分析系統(tǒng)的靜態(tài)信息和動態(tài)信息。
25、目標系統(tǒng)面對不同的應用領域,要實現(xiàn)抽象目標系統(tǒng)的任務,需要領域知識和專家的經(jīng)驗。
26、展現(xiàn)系統(tǒng)最好的方式是使系統(tǒng)可視化。
27、圖1 關系圖??? 現(xiàn)有的逆向工程分析方法主要有以下4種:??? (1)詞法分析和語法分析。
28、??? 該方法主要是對程序源碼進行分析,得到程序信息的多種有用表示,其中最常用的就是交叉引用列表。
29、通過語法分析可以得到兩類表示:分析樹(parse tree)、抽象語法樹AST(abstract syntax tree),其中AST是更復雜的程序分析工具基礎,包含了和程序的實際內(nèi)容相關的細節(jié)。
30、??? (2)圖形化方法。
31、??? 圖形化方法包括控制流分析、數(shù)據(jù)流分析以及程序依賴圖。
32、控制流分析是在確定程序語法結構之后進行。
33、數(shù)據(jù)流分析關注于解決程序中從定義到使用的過程的相關的問題,比控制流分析要復雜得多。
34、程序依賴圖是數(shù)據(jù)流分析的進一步改進,比數(shù)據(jù)流分析更復雜。
35、在程序依賴圖中,控制流和數(shù)據(jù)流依賴放在一起處理,程序依賴圖還具有這樣的結構特性:一個程序依賴圖描述了一個控制依賴的區(qū)域。
36、??? (3)程序切片。
37、??? 切片技術來源于數(shù)據(jù)流分析方法,已經(jīng)成為很多程序理解工具的基礎。
38、一個程序切片是由程序中的一些語句和判定表達式組成的集合。
39、這些語句和判定表達式可能會影響在程序的某個位置上所定義或使用的變量的值。
40、利用切片技術可以將關注點確定在一個較小范圍而不是關注整個程序。
41、??? (4)動態(tài)分析。
42、??? 靜態(tài)分析是對程序源碼進行分析。
43、動態(tài)分析則是在程序運行時進行分析,基本方法是對程序進行植入。
44、植入是在一種在全局范圍內(nèi)更改源代碼以添加額外操作的過程。
45、這種方法的基本原理是:利用代碼的結構信息,依據(jù)固定的規(guī)則,將軟件觸發(fā)器添加到代碼中。
本文分享完畢,希望對大家有所幫助。
標簽:
免責聲明:本文由用戶上傳,如有侵權請聯(lián)系刪除!