티스토리 뷰

 

코드가 얼마나 훌륭하게 작성되어 있는지 여부와는 상관없이 테스트 루틴이 없는 코드는 불량 코드다. 얼마나 멋지게 작성되어 있는가와 객체지향의 사용 여부, 그리고 캡슐화의 정도도 참작 요소가 전혀 되지 못한다. 테스트 루틴이 있으면 코드의 동작을 빠르고 검증 가능하게 변경시킬 수 있다. 하지만 테스트 루틴이 없으면 실제로 우리 코드가 더 나아지는지 더 나빠지는지를 알 수 없게 된다.

1장. 소프트웨어 변경

소프트웨어를 수정하는 네 가지 이유
1. 새로운 특징을 추가한다.
2. 버그를 제거한다.
3. 소프트웨어 설계를 개선한다.
4. 자원 이용률을 최적화한다.

 

 특징 추가

버그 수정

 리팩토링

최적화 

 구조

변경시킴

변경시킴

변경시킴

-

 기능

변경시킴

변경시킴

-

-

 자원 이용률

-

-

-

변경시킴

 

위험한 변경
소프트웨어 변경에 따른 위험을 줄이려면 다음 세 가지 질문에 대해 충분히 생각해 봐야 한다.
1. 어떠한 변경을 가해야 하는가?
2. 그러한 변경을 올바르게 했는지 확인하는 방법은 무엇인가?
3. 어떤 조건을 위반했는지를 알 수 있는 방법은 무엇인가?

2장. 효과적인 피드백 활용

단위테스트는 빠르게 실행된다. 빠른 속도로 실행되지 않는 단위테스트는 단위테스트가 아니다.
의존관계는 소프트웨어 개발에 있어서 가장 중요한 문제 중 하나이다. 대부분의 레거시 코드 작업은 이러한 의존관계를 깨뜨려서 소프트웨어를 좀 더 쉽게 변경할 수 있다.

레거시 코드 변경 알고리즘
1. 변경 지점을 식별한다.
2. 테스트 지점을 찾는다.
3. 의존관계를 깬다.
4. 테스트 루틴을 작성한다.
5. 변경시키고 리팩토링한다.

3장. 감지와 분리

가짜 객체(fake objects)

가짜 객체는 객체를 테스트할 때, 각자가 구현한 클래스의 협력자들을 흉내 내는 객체를 말한다. 가짜 객체를 사용하는 것을 볼 사람들은 "그것은 실제 테스트가 아니다"라고 말하곤 한다. 하지만 그 말은 사실이 아니다. 이러한 테스트는 '분할 정복'을 이용하여 오류를 지역화할 수 있게 도와준다.

display 클래스와 통신하는 Sale 클래스

 

display 계층을 가지는 Sale 클래스

 

4장. 봉합 모델

봉합(Seams)은 프로그램 안에서 동작을 변화시킬 수 있는 위치를 말한다. 이때 동작을 변화시키기 위해 코드를 편집할 필요는 없다. 모든 봉합은 하나의 가능 지점(Enable Point)을 가진다. 이 지점은 하나의 동작이나 다른 동작을 사용하기 위한 결정을 내리는 지점이다.

봉합의 종류
1. 전처리 봉합
2. 연결 봉합
3. 객체 봉합

5장. 자동화된 리팩토링 도구

자동화된 리팩토링을 사용하기 전에 코드 주위에 테스트 루틴을 두는 것은 좋은 방법이다. 테스트 루틴 없이도 자동화된 리팩토링을 수행할 수 있지만, 그 도구가 무엇을 검사하고 무엇을 검사하지 않는지는 알아야 한다.

모조 객체
모조 객체 라이브러리 무료 제공 Mock Objects

단위테스트 하니스
- JUint
- CppUnitLite
- NUnit

일반적인 테스트 하니스
- FIT(Framework for Integrated Tests)
- Fitnesse

 

- James Song

댓글