2011-01-31 2 views
2

나는 동일한 질문을 여러 번 물어 봤고 대부분의 스레드를 통과했습니다. 그러나 나는 여전히 만족스러운 답을 얻지 못하고 있으므로 지역 사회에 묻는 것을 생각했습니다.Java의 리버스 엔지니어링

나는 모듈에 리버스 엔지니어링을 다음과 같은 문제를 가지고 작업을 할당되는 오전 :

  1. 팀은 정확히 (모듈은 타사 솔루션) 기본 구성 요소 에 무엇인지 모르고있다가
  2. 팀은 테스트 부분에서만 작동하므로 흐름에 대한 정보를 에게 제공 할 수는 있지만 출발점은 무엇이며 어디서 무엇인지 모르겠습니다. 어떤이 어디 이제

그들은 나를 코드베이스를 통해 파고 클래스 다이어그램을 마련뿐만 아니라 순서로 등 내가 이런 상황에 내 직업 생활에서 일한 적이

흐름 싶지 아이디어를 어디에서 시작하고이 작업을 수행 할 것인가. 내가 가진 유일한 것은 소스 코드입니다.

내가 도움을 원하는 위치 나는 두 가지 질문이있다 : 소스 코드에서 자동으로 을 클래스 다이어그램을 생성 할 수 있습니다 이클립스에 대한 플러그인

  1. 을 있습니까?
  2. 이런 상황에있을 때 어떤 접근 방식이 필요합니까?

업데이트 : 소스 코드에 액세스 할 수 있습니다. 따라서 작업을 수행하는 최선의 접근 방식에 더 관심이 있습니다

+0

소스 코드가 있거나'.class' 파일/jars로만 작업하고 있습니까? –

+0

@Chris : 나는 소스 코드 –

+0

에 액세스 할 수있다. 예, 좋은 질문입니다. 소스 코드가 없다고 가정하고 있었지만 확실한 해결책이 있다면 ... –

답변

3

JD-Core과 같은 Java 디 컴파일러가 있으며 여기에는 이클립스 버전이 있습니다.

+0

신경 쓰지 마라. 소스 코드가 있다면 신경 쓸 필요가 없다. –

+1

새로운 코드 기반을 이해하는 것은 문서 및 클래스 다이어그램을 사용하는 경우에도 항상 어려운 작업입니다. 나는 항상 작은 것을 시작하는 것을 돕는다는 것을 안다. 이미 라이브러리의 작은 부분을 사용하고 있기 때문에 해당 API부터 시작할 것입니다. 이미 사용하고있는 클래스 목록을 가져 와서 먼저 이해하십시오. 클래스 라이브러리는 대개 같은 사람이나 팀이 작성하므로 코드를 구조화하는 방법에 대한 통찰력을 확보하면 전체 라이브러리를 이해하는 데 도움이됩니다. 이것은 도구를 사용하든 말든 사실입니다. –

0

질문 (2)에 대한 대답은 내 의견에 대한 귀하의 답변에 따라 다르지만 질문 (1)은 이클립스를 사용하여 소스에서 UML 클래스 다이어그램을 생성하는 방법에 대한 자습서를 제공하는 this page을 확인하십시오.

3

모듈을 디 컴파일하고 디 컴파일 된 코드를 작업 라이브러리로 다시 어셈블 할 수 있습니다. 예를 들어 JD을 사용할 수 있습니다. 이제 소스 코드를 얻었습니다.

먼저 컴파일 가능한 소스 코드를 얻는 것이 중요합니다. 탐색 할 때 주석과 javadoc을 추가해야하기 때문입니다. 더 이상 원래 바이너리로 작업 할 필요가 없습니다. 디 컴파일 된 소스 코드를 문서화 된 정상 코드로 취급하십시오. 로컬 변수와 메소드 매개 변수의 이름을 변경하여 코드를 읽기 쉽게 만드는 것도 좋은 생각입니다.

파일을 .java에서 생성하는 것은 쉽습니다.

흐름 이해는 수동으로 또는 프로파일 러를 사용하여 두 가지 방법으로 수행 할 수 있습니다. 두 가지 방법 모두에 대해 먼저 엔트리 포인트를 찾아야하지만, 이미 라이브러리를 사용하고 있다면 이러한 점이 상당히 분명해야합니다. 그런 다음 API 메소드를 호출하고 코드를 단계별로 실행하면됩니다. 항상 흥미로운 것을 메모하십시오. (여러 가지면에서 알 수없는 코드를 탐색하는 것은 좋은 오래된 어드벤처 게임에서 던전을 탐색하는 것과 유사합니다.) 이러한 노트를 javadoc 주석으로 변환하면 더 많은 정보를 제공하는 javadoc을 생성 할 수 있습니다.

프로파일 러 메소드는 일반적인 호출 패턴을 찾는 데 더 유용하지만 모든 프로파일 러에는 사용할 수있는 호출 스택 뷰가 있어야합니다.