•
다른 공학과는 달리 소프트웨어 공학의 재료인 코드는 시간이 지나도 일부러 위해를 가하지 않는 이상 전혀 손상되지 않는다.
•
즉, 코드는 죄가 없다. 대부분의 버그는 개발자로부터 기인된다. 그리고 그들이 버그를 일으키는 대부분의 이유는 변경이다.
•
이번 장에서는 코드를 변경할 때, 위험을 줄일 수 있는 다양한 기법들을 논의한다.
•
기계적인 기법과 심리적인 기법으로 나눌 수 있으며 레거시 코드에 테스트 루틴을 배치하기 위해 의존 관계를 덜어낼 때 이런 기법들이 중요하다.
초집중 모드에서 편집하기
•
인텔리제이는 집중 모드(Zen 모드)를 지원한다.
•
사실 뭐 이런 툴을 쓰라는 것은 아니고 외부 세계와 차단되어 코드 작업에 몰입하라는 의미의 심리적 초집중 모드이다.
•
특히나 이런 작업에서 테스트 루틴은 피드백을 제공해주므로써 그 모드가 활성화되는데 도움을 줄 수 있다.
•
코드 변경 시점의 목표를 달성했는지 파악하고 결과에 따라 추가적인 작업을 수행할 수 있게끔 도와주기 때문이다.
단일 목적 편집
•
우리는 보통 한 번에 큰 부분을 건드리기 쉽다. 이는 리팩토링을 추상적인 수준에서 결과를 확인하는데 그치게 만든다.
•
문제를 쪼개 작게부터 해결해나가는 문제 해결 방법론들이 즐비한데는 이유가 있다.
•
우리의 인지 능력을 과신하지 말고 범위를 제한하여 문제를 차근히 풀어내나가자.
시그니처 유지
•
테스트를 위해 의존 관계를 제거할 때는 주의를 기울여야 한다.
•
이때 사용할 수 있는 기법이 시그니처 유지다. 시그니처가 바뀌는 것을 피해야 할때는 전체 메소드 시그니처를 잘라 붙여서 오류 가능성을 줄일 수 있다.
컴파일러 의존
•
구조적 변경을 가하기 위해 컴파일러에 의존하는 방법이다.
•
컴파일 오류를 야기하기 위해 선언을 변경하고 그 오류들을 찾아 변경한다.
•
즉 컴파일러에게 문법적 오류를 검증해달라고 하는 방법이다.
짝 프로그래밍
•
팀 내에 지식을 퍼뜨리고 코드의 품질을 향상시키기에 무척 좋은 방법이다.
•
실수를 저지르기 쉬운 소프트웨어에서 작업자인 나를 빼고도 눈 둘과 뇌 하나가 추가되는 것은 큰 메리트다.