Reverse Engineering 무엇인가요?

제품의 유지보수, 개선 또는 교체를 돕기 위해 제품에 대한 설계 수준의 충분한 이해 를 얻는 프로세스.
재문서화, 설계 복구

 

Reengineering 무엇인가요?

리엔지니어링은 일반적으로 일부 형태의 리버스 엔지니어링(보다 추상적인 설명을 달성하 기 위해)에 이어 일부 형태의 순방향 엔지니어링 또는 구조 조정을 포함합니다. 

 

Reengineering  방식은?

새로운 형태로 재구성하고 새로운 형태의 후속 구현.
모놀리식 시스템을 별도로 판매할 수 있는 부품으로 분할
디자인 개선 ‒ 유지보수성, 이식성 등을 개선합니다.
신기술의 활용

리팩토링 대상을 선정한다
선정된 대상을 테스트 코드 작성한다.
코드를 분해한 후 재조립한다.
재조립 코드를 테스트한다.
위 과정을 반복한다.

 

Test Driven Refactoring 무엇인가요?

1 실패한 단위 테스트를 만듭니다.
2. 해당 테스트를 통과하는 프로덕션 코드를 작성합니다
3. 방금 만든 혼란을 정리하십시오.

 

Golden Master Test

프로세스를 수행한 다음 저장된 "골드 마스터"와 향후 실행을 비교하여 예기치 않은 변경 사항을 발견합니다.

 

Smell

Long Method 


Large Class 


Primitive Obsession 객체를 처음 접하는 사람은 보통 숫자와 통화를 연동하는 돈 관련 클래스나 전화번호와 우편번호 같은 특수 문자열 클래스 등의 사소한 작업에 작은 객체를 잘 사용하지 않으려는 경향이 있다.
우물 안 개구리가 되지 않으려면 데이터 값을 객체로 전환해보자.


Long parameter lists


Data Clump 여러 다른 클래스 안에 동일한 변수 그룹이 존재함


Switch Statements 


Temporary Field 메서드 범위 안에 있어야할 변수가 클래스 안에 있음


Refused Bequest 하위 클래스가 원치 않는 상위 클래스의 메서드를 상속


Alternative Classes with Different Interfaces 동일한 기능의 클래스인데 다른 이름일 경우


Divergent Change 클래스가 다른 방식으로 계속 변경된다


Shotgun Surgery 


Parallel Inheritance Hierarchy 클래스에 대한 하위 클래스를 만들 때마다 다른 클래스에 대한 하위 클
래스를 만들어야 하는 자신을 발견하게 됩니다


Duplicate Code


Lazy Class 클래스를 이해하고 유지하려면 항상 시간과 비용이 듭니다


Data Class 필드와 Getter/Setter만 있는 클래스


Dead Code 


Speculative Generality 사용하지 않는 클래스, 메서드, 필드 또는 매개변수가 있습니다. • 때
때로 지원을 위해 "만약에 대비하여" 코드가 생성됩니다.


Feature envy 자기가 속한 클래스보다 다른 클래스에 관심을 가지고 있는 경우이다


Inappropriate Intimacy 두 개 이상의 클래스가 서로의 필드에 너무 많이 관여


Message Chains 


Middle Man 너무 많은 위임


Incomplete Library Class

 

치료 방법

Long Method - Extract Method


Large Class - Extract Class, Extract Subclass


Primitive Obsession - consider turning it into a class


Long parameter lists - Replace Parameter With Method


Data Clump - Extract Class, Introduce Parameter Object, Preserve Whole Object


Switch Statements - Extract Method, Move Method, Replace Type Code


Temporary Field - Extract Class, Replace Method with Method Object.


Refused Bequest - Create a new subclass and use Push Down Method and Push Down Field on the unused methods


Alternative Classes with Different Interfaces - Rename Method, Move Method, Add Parameter and Parameterize Method


Divergent Change -  Extract Class


Shotgun Surgery - Move Method and Move Field


Parallel Inheritance Hierarchy - Merge Class


Duplicate Code - Extract Method


Lazy Class - Collapse Hierarchy


Data Class - Encapsulate Field, Encapsulate Collection


Dead Code - Collapse Hierarchy


Speculative Generality - Collapse Hierarchy, 사용하지 않는 클래스, 메소드, 필드


Feature envy - Extract Method


Inappropriate Intimacy - Move Method, Move Field, Extract Class,  Replace  Inheritance With Delegation


Message Chains - Hide Delegate


Middle Man - Remove Middle Man, Inline Method


Incomplete Library Class - Introduce Foreign Method

 

CC = Cyclomatic Complexity

CC는 정량적 수치를 기반으로 여러 설계를 직접 분석할 수 있는 등 설계 단계에서 사용이 유용하다.
Threshold = 10

 

NPath

조건부 * 조건부 * 조건부 … Threshold = 200

728x90
1234567···51
반응형

+ Recent posts