본문 바로가기
Today I learned

2021 08 25 개발자를 위한 코드 분석 방법 (JICA) 강의 수강

by soheemon 2021. 8. 27.

 

기존 코드를 이해한다는 것의 의미

어떻게 하면 기존코드를 이해한다고 할 수 있을까?

1) 큰기능을 이해 할 수 있어야 한다.

우리가 파악해야 하는 기능은 크게 

독립적으로 실행이 가능하거나, 불가능한 모듈로 나뉜다.

 

독립적으로 실행의 가능한 모듈의 기능을 이해하는것은 어떻게 해야할까?

사용자 관점에서 기능을 먼저 동작시켜본다.

이때, 입력 A에 대해서 어떤 출력 B가 나오는지 기록한다.

이때 사용하면 좋은것이 Fit

 

Fit(Framework for Integrated Tests)

사업적 관점의 통합테스트를 수행하는 자동화 테스트 프레임워크

실질적 예제를 통해 구체적으로 소통할 수 있기 때문에 추측과 질문이 감소한다.

그렇다면 독립적으로 수행이 불가능한 모듈의 기능은?

API 문서부터 보기 시작한다. 만약 API문서가 없다면 사실상 불가능..

 

2) 전체적인 프로젝트의 구조를 이해할 수 있어야 한다.

- Implementation view를 파악하면서 시작한다. (클래스 or 패키지 구조 등...)

implementation View: 소프트웨어를 어떤 단위로 개발하고 테스트하고 패키징 할것인가...

UML Diagram: Component diagram, Package diagram, class diagram....

 

그러니까, 프로젝트 전체 Package, Class의 구조를 보면서 의존관계를 읽어내야 한다.

이때 정적분석도구를 활용한다.

범용적으로는 Understatnd가 쓰이고 구입할거면 Structure101가 좋다.

 

도구로 코드 구조를 어떻게 분석...?

요소와 요소의 관계를 바탕으로 형상정보를 분석한다.

 

구조를 파악하기 위해서는 

패키지 설계원칙 - SDP/SAP/ADP

객체지향 설계 원칙 - SOLID

들을 이해하고 있어야 가능하다.

 

도구로 

+ 형상관리 로그를 보면서 자주 바뀌는 부분을 확인하자.

+ 그리고 그 패키지(혹은 class)가 의존당하고 있는 부분이 많은지 확인하자. 그렇다면 고통의 시간이 이어질것이다. 추상화 등등 리팩토링 해야함.

 

도구로 파악할 수 없는 구조도 있다.

런타임에 관계가 맺어지는 구조는 도구로는 파악할 수 없다. (코드 바탕의 정적분석 도구이기 때문이다.)

예를들어, Spring Framework에서 의존성을 주입하는 경우가 이에 해당한다.

 

의존성 주입은 

의존관계가 컴파일에 일어나는것이 아니라 실행시에 이루어진다.

모의 객체를 사용한 단위테스트가 편리하다.

 

예를들어, 핸드폰 바탕화면을 바꾸는 기능을 구현한다고 가정하자.

만약 바탕화면 이미지가 하드코딩 되어있다면 이미지를 바꾸기 위해 코드 수정후 재컴파일 해야할것이다.

반면, 실행시에 이미지를 주입받는다면 코드수정를 수정하고 재컴파일 할필요가 없다.

 

3) 세부적인 로직을 이해한다

코드를 한줄한줄 읽어가면서 다이어그램으로 표현한다. 가장 이해가 잘되는 분석방법이라고 하심..

- 코드를 읽으면서 sequence diagram을 정리하고

- 이후 class diagram을 정리한다.

 

4) 끝으로.. 코드를 분석하기 위한 필수요소

기록의 중요성

- 궁금한점, 발견한내용, 왜 이렇게 했는지?

- 왜 이렇게 했는지에 대해서 배우고 싶다면 아키텍처 설계서가 잘 정의되어 있는곳으로 GARA....

 

분석을 잘하려면 프로그램 언어보다는

- 소프트웨어의 기본 지식이 갖춰줘야 한다

- UML에 익숙해 져야 한다.

 

곁다리

코드는 3년지나면 부식된다. (부식된다는 표현이 멋졌다..) 코드 부식은 사람이 바뀌면 더 빨리 진행됨

네이밍 잘하는법 -> 평소에 연습이 필요하다. 목적이 드러나게 표현하도록 노력해보기..

 

댓글