////
Search
Duplicate
🕓

Chapter 23. 기존 동작을 건드리지 않았음을 어떻게 확인할 수 있을까?

다른 공학과는 달리 소프트웨어 공학의 재료인 코드는 시간이 지나도 일부러 위해를 가하지 않는 이상 전혀 손상되지 않는다.
즉, 코드는 죄가 없다. 대부분의 버그는 개발자로부터 기인된다. 그리고 그들이 버그를 일으키는 대부분의 이유는 변경이다.
이번 장에서는 코드를 변경할 때, 위험을 줄일 수 있는 다양한 기법들을 논의한다.
기계적인 기법과 심리적인 기법으로 나눌 수 있으며 레거시 코드에 테스트 루틴을 배치하기 위해 의존 관계를 덜어낼 때 이런 기법들이 중요하다.

초집중 모드에서 편집하기

인텔리제이는 집중 모드(Zen 모드)를 지원한다.
사실 뭐 이런 툴을 쓰라는 것은 아니고 외부 세계와 차단되어 코드 작업에 몰입하라는 의미의 심리적 초집중 모드이다.
특히나 이런 작업에서 테스트 루틴은 피드백을 제공해주므로써 그 모드가 활성화되는데 도움을 줄 수 있다.
코드 변경 시점의 목표를 달성했는지 파악하고 결과에 따라 추가적인 작업을 수행할 수 있게끔 도와주기 때문이다.

단일 목적 편집

우리는 보통 한 번에 큰 부분을 건드리기 쉽다. 이는 리팩토링을 추상적인 수준에서 결과를 확인하는데 그치게 만든다.
문제를 쪼개 작게부터 해결해나가는 문제 해결 방법론들이 즐비한데는 이유가 있다.
우리의 인지 능력을 과신하지 말고 범위를 제한하여 문제를 차근히 풀어내나가자.

시그니처 유지

테스트를 위해 의존 관계를 제거할 때는 주의를 기울여야 한다.
이때 사용할 수 있는 기법이 시그니처 유지다. 시그니처가 바뀌는 것을 피해야 할때는 전체 메소드 시그니처를 잘라 붙여서 오류 가능성을 줄일 수 있다.

컴파일러 의존

구조적 변경을 가하기 위해 컴파일러에 의존하는 방법이다.
컴파일 오류를 야기하기 위해 선언을 변경하고 그 오류들을 찾아 변경한다.
즉 컴파일러에게 문법적 오류를 검증해달라고 하는 방법이다.

짝 프로그래밍

팀 내에 지식을 퍼뜨리고 코드의 품질을 향상시키기에 무척 좋은 방법이다.
실수를 저지르기 쉬운 소프트웨어에서 작업자인 나를 빼고도 눈 둘과 뇌 하나가 추가되는 것은 큰 메리트다.