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
'Architecture' 카테고리의 다른 글
[ENG][아키텍처]기본 베이스 (0) | 2022.08.31 |
---|---|
[ENG][아키텍처]Architectural Evaluation (0) | 2022.08.31 |
[ENG][아키텍처]Applying Tactics for NRF (0) | 2022.08.31 |
[ENG][아키텍처]Applying Viewpoints (0) | 2022.08.31 |
[ENG][아키텍처]Skeleton/Core Architecture (0) | 2022.08.31 |
[ENG][아키텍처]Architecture Styles (0) | 2022.08.31 |
[ENG][아키텍처]Requirement Engineering (0) | 2022.08.31 |
[ENG][아키텍처]Design Patterns - Pattern (0) | 2022.08.31 |