코드스멜, 클린코드, 유지보수성 향상, XP |
I. 코드스멜 제거를 통한 품질 향상 기법, 리팩토링의 개요
가. 리팩토링(Refactoring)의 정의
- 소프트웨어 모듈의 외부적 기능은 수정하지 않고, 내부 구조, 관계 등을 단순화 하여 유지보수성을 향상시키는 품질 향상 기법
나. 리팩토링의 목적
목적 |
설명 |
유지보수성 향상 |
복잡한 코드의 단순화, 소스의 가독성 향상 |
유연한 시스템 |
소프트웨어 요구사항 변경에 유연한 대응 |
생산성 향상 |
정제 및 최적화된 소스의 재사용 |
품질향상 |
소프트웨어 오류 발견이 용이하여 품질향상 |
II. 리팩토링의 주요기법 및 절차
가. 리팩토링의 주요기법
구분 |
기법 |
설명 |
메소드정리 |
Extract Method |
그룹으로 묶을 수 있는 코드 조각이 있다면 특성을 알 수 있도록 네이밍하여 메소드로 추출 |
Replace Temp With Query |
수식 결과값 저장을 위해 임시 변수를 사용한다면 수식을 메소드로 만들고, 임시 변수 참조를 메소드 호출로 수정 |
|
객체간 기능이동 |
Move Method |
메소드가 자신이 정의된 클래스보다 다른 클래스에서 메소드를 더 많이 사용한다면 메소드를 이동 |
Extract Method |
두개의 클래스가 해야 할 일을 하나의 클래스가 하고 있다면 분리 |
|
메소드 호출 단순화 |
Rename Method |
메소드 이름이 목적 표현을 못할 때 이름 변경 |
Remove Parameter |
불필요한 파라미터 제거 |
|
클래스/메소드 일반화 |
Full up field |
두 서브 클래스가 동일한 필드를 가지고 있다면 그 필드를 수퍼 클래스로 올림 |
Full up Method |
동일한 일을 하는 메소드를 여러 서브 클래스에서 가지고 있다면 이 메소드를 수퍼 클래스로 올림 |
|
기타 |
Encapsulation field |
Public 필드가 있는 경우 그 필드를 Private로 만들고 접근자 제공 |
Decompose Conditional |
조건 논리를 단순화하여 표현 |
나. 리팩토링의 절차
절차 |
설명 |
리팩토링 대상식별 |
|
테스트를 통한 적용 |
III. 리팩토링 고려사항 및 유사기법 비교
가. 리팩토링 고려사항
구분 |
내용 |
데이터베이스 |
- APP와 DB스키마가 밀접하게 결합되어 마이그레이션 어려움 |
인터페이스 변경 |
- 완전하지 않은 인터페이스로 시스템 불안정 초래 |
리팩토링이 어려운 디자인 변경 |
- 리팩토링에 적합하지 않은 디자인 존재 |
리팩토링 금지 |
- 마감이 임박할 경우 리팩토링 금지 - 코드를 처음부터 다시 작성해야 할 경우 리팩토링 금지 |
나. 리팩토링, 리엔지니어링 비교
구분 |
리팩토링 |
리엔지니어링 |
관점 |
모듈의 정제 |
현 시스템을 개선(기능) |
적용범위 |
클래스, 모듈 등 소단위 |
시스템, 기능 등 대단위 |
반복성 |
반복 많음 |
반복이 거의 없음 |
적용사례 |
특정 메소드에 대한 다형성 적용 |
시스템의 전반적 모듈화 |
'IT기술노트 > 소프트웨어공학' 카테고리의 다른 글
소프트웨어 테스트 프로세스 (0) | 2021.02.02 |
---|---|
소프트웨어 테스트(Software Test) (0) | 2021.02.02 |
SPA(Single Page Web Application) (0) | 2021.02.01 |
코드스멜, 클린코드 (0) | 2021.02.01 |
TDD(Test-Driven Development) (0) | 2021.02.01 |
웹 접근성(Web Accessibility) (0) | 2021.02.01 |
UX (User eXperience) (0) | 2021.02.01 |
클래스 재사용 (0) | 2021.01.31 |
댓글