SWExpert 2022. 10. 14. 00:09

I. 구조개선을 통한 SW 품질향상, 리팩토링 개요

-. 코딩 오류 가능성을 최소화하기 위해 프로그램 내에서 이해하기 어렵고, 수정하기 힘들며, 확장하기 어려운 코드를 원래 기능을 그대로 두면서 내부구조를 개선하는 활동

-. 소프트웨어 모듈의 외부적 기능은 수정하지 않고 내부적 구조관계 등을 단순화하여 소프트웨어의 유지 보수성을 향상시키는 품질 향상 기법

-. 소프트웨어를 보다 쉽게 이해할 수 있고 유지보수를 용이하게 할 수 있도록 겉으로 보이는 동작의 변화 없이 내부 구조를 변화시키는 활동 

-. 소프트웨어의 이해성 및 유지보수성을 높이기 위해 code smell을 제거하여 동작의 변화없이 내부구조를 변경하는 활동

-. 결과의 변경 없이 코드의 구조를 재조정하여 가독성을 높이고, 유지보수를 편하게 하는 유지보수 행위

-. 소프트웨어의 행위(behavior)를 보전하면서 프로그램의 가독성, 구조, 성능, 유지보수성 등을 향상시키는 품질향상 기법

-. 목적: 유지보수성 향상, 유연한 시스템, 생산성 향상, 품질향상

 

II. 리팩토링 기법 및 절차

가. 리팩토링 기법

구분 기법 설명
메소드 정리 Extract Method 그룹으로 묶을 수 있는 코드 조각이 있다면 특성을 잘 드러내도록 네이밍하여 메쏘드로 추출
Replace Temp
With Query
어떤 수식의 결과값을 저장하기 위해 임시 변수를 사용한다면 수식을Method로 만들고, 임시 변수를 참조하는 곳을 모두method 호출로 수정    
객체간 기능이동 Move Method Method가 자신이 정의된 클래스보다 다른 클래스에서Method 더 많이 사용하고 있으면Move 해야 함
Extract Method 두개의 클래스가 해야 할 일을 하나의 클래스가 하고 있다면 클래스 분리
메소드 호출 단순화 Rename Method Method name이 그 목적을 드러내지 못할 때 메소드 이름 변경
Remove Parameter 불필요한 파라미터를 제거
클래스/메소드 일반화 Pull up field 두 서브클래스가 동일한 필드를 가지고 있다면 그 필드를 수퍼클래스로 올림
Pull up Method 동일한 일을 하는 메소드를 여러 서브 클래스에서 가지고 있다면 이 메소드를 수퍼클래스로 올림
기타 Encapsulation field Public 필드가 있는 경우 그 필드를private로 만들고 접근자를 제공
Deompose Conditional 조건 논리를 단순화하여 표현

나. 리팩토링 절차

-. 리팩토링 대상 식별: 메소드 파라미터, 리턴 값, 입력 값 처리 내부 버퍼 범위 확인

-. 테스트를 통한 적용:소규모 변경 후 정상 작동 여부를 확인하여 다음 단계로 넘어가고 그렇지 않으면Undo 후 리팩토링 

-. 중복, 의미 불명확, 복잡한 코드에서 나타나는 징후가 Bad Smell

 

III. 리팩토링시 고려사항

구분 내용
데이터베이스 대부분 비즈니스 어플리케이션과DB 스키마가 밀접하게 결합되어 있고, 데이터 마이그레이션도 어려움이 있음
인터페이스 변경 완전하지 않은 인터페이스로 인해 시스템 불안정 초래
리팩토링이 어려운 디자인 변경 리팩토링에 적합하지 않은 디자인 존재

-. 마감이 임박할 경우 리팩토링 금지, 코드를 첨부터 다시 작성해야 하는 경우 리팩토링 금지

 

IV. 리팩토링과 리엔지니어링 비교

구분 리팩토링 리엔지니어링
관점 모듈의 정제 현 시스템을 개선(기능)
적용범위 클래스, 모듈 등 소단위 시스템, 기능 등 대단위
반복성 반복 많음 반복이 거의 없음
적용사례 특정 메소드에 대한 다형성 적용 시스템의 전반적 모듈화