Insight? Practice!

Road to myself. 자기자신에게로 이르는 길.

[책] 레거시 코드 활용 전략

레거시 코드 활용전략 Working Effectively with Legacy code 레거시코드로 효율적으로 일하기

한줄로 정리해본다면

실용적 예제로 설명해주는, test code 를 적용하기 쉽도록 비교적 안전하게 Legacy code 를 리팩토링 하는 방법 정도.

쓰고보니 책표지에 똑같은 내용이 있군요. -_- 손대기 두려운 낡은 코드, 안전한 변경과 테스트 기법

계속 레거시코드 만을 가지고 작업해온 제 경험때문인지는 몰라도 읽는동안 책 내용이 정말 빛난다는 느낌을 받았습니다.

간간히(라고하기엔 꽤 자주) 자연스럽지 못한 번역으로 이해못하는 부분이 생겨도 우리에겐 저자가 제공해주는 시기적절한 예제 코드가 있었기에 이해하는데는 무리가 없었습니다.

테스트하기 쉽게 코드를 변경시킨다는 것은 결국 기존 코드들에 얽히고 섥혀있는 책임들과 의존관계들을 찾아 뒷탈이 없도록 잘 달래서 적절히 나누어주는 리펙토링을 통해 조금 더 나은 구조로 개선하는것 이라고 생각합니다.

이과정중에 이책은 주로 뒷탈이 없도록 잘 달래서 적절히 나누어주는 리펙토링 방법 을 설명해주고 있습니다.

  • 레거시코드가 왜 변경될수밖에 없는것이고 그 변경을 단위테스트로 cover
  • 테스트코드를 작성하기 쉽도록 레거시코드를 어떻게 리펙토링하는가
  • 레거시코드에서 (비교적) 안전하게 의존관계를 제거하는 방법
  • 의존관계를 없애기 위한 실용적인 전략들
  • Extract 그리고 Extract 그리고 Extract
  • 변경에 따른 영향을 파악하기 위한 Effect Sketch
  • 학습을 위한 test code 작성
  • 일단 중요한 부분부터 테스트하자는 PinchPoint 전략
  • 레거시 코드를 이해하기 위한 구조 Sketch, CRC, 폐기용 리펙토링
  • 레거시 코드의 책임을 식별하고 분리하기위한 Feature Sketching 전략
  • 괴물메소드에 적절한 테스트 루틴을 적용하기 위한 전략
  • 의존관계를 없애기 위한 25가지 기법

특히 마지막 25가지로 정리해둔 기법들은 계속 연습하고 연습해서 체득화 해봐야할것 같습니다.

-> Updated - 정리완료! [발표자료] Dependency Breaking Techniques

좋았던점은 빛나는 내용과 쉬운 예제로 친절히 설명해준것.

아쉬웠던점은 역시나 번역입니다.

인상깊은 문구들이 유난히 많았습니다.

  • “뭐라고요? 그 부분을 위헤 메소드 하나를 더 생성하란 말입니까? 그렇게는 못합니다. 대신 기존 메소드안에 몇 줄의 코드를 추가할 수는 있습니다. 이렇게 하면 약간만 수정하면 되므로 훨씬 안전합니다”
  • 편집하고 기도하기 프로그래밍. 흠칫
  • 좋은코드와 나쁜코드의 차이를 느끼기 시작하는 시점
  • 중요한것은 좋은 설계란 테스트가 가능해야하고, 테스트가 불가능한 설계는 나쁜 것이라는 점이다
  • 테스트 루틴이 부족한 경우에 시스템이 실제로 어떤 일을 수행할지를 파악하는 유일한 방법은 마음 속으로 ‘컴퓨터를 돌리는’ 것이다
  • 당장 더 나은 설계 쪽으로 바로 갈 수는 없다. 하지만 책임을 식별해 내는 행위 그 자체만으로도 작업을 진행하는 데 있어서 더 나은 의사결정을 쉽게 내릴 수 있다. 그렇다 더 나은 설계란 그런 것이었다.
  • 여러팀이 저지르는 최악의 실수 가운데 하나는 개발 단계에서 일정 시점에 이르렀을 때 설계가 ‘끝났다’고 생각하는 것이다
  • 가장 쉬운 방법은 생각을 아주 많이 한 후에 시스템을 패치하고 변경이 올바르게 되었기를 바라는것이다.
  • 중요한것은 책임들을 찾아낼수 있어야하고 또 그것들을 잘 분리하는 법을 배워야 한다는 것이다.
  • Private 메소드를 테스트하고 싶은 욕구가 생긴다면 그 메소드는 결코 private 메소드이면 안된다는 것이다. 해당 메소드를 public 으로 만드는것이 마음에 걸린다면, 해당메소드는 다른 클래스 상에 있어야 한다.
  • 식별화 능력을 키울 수 있는 가장 좋은 방법은 좀 더 많이 읽어 보는 것이다.
  • 키보드로 무엇이든 입력할때에 어떻게 s/w 에 영향을 미치는지 아는 것이 버그를 줄이는데 도움을 준다
  • 레거시 코드에서 작업하는 것은 마치 외과수술과 같다. 의사들은 결코 혼자 수술하지 않는다.
  • 결국 우리가 작업할때의 마음가짐이 중요한 것이다. 좀 더 즐겁게 프로그래밍하라.

책을 읽고나면 레거시코드뿐만 아니라 지금 새로 작성하고있는 코드의 리펙토링에도 충분히 활용할수 있기 때문에 꼭 한번은 읽어보시길 추천드립니다.

25가지 기법들은 시간날때 따로 정리를 해봐야겠어요. ( 계속 보면서 체득화 할수있도록 )

덧말.

제자리테스트와 관련하여 ( test in place ) 제자리 테스트라는 단어가 생각보다 자주 나와서 놀라긴 했지만 나올때마다 적절한 테스트라고 의도하지 않아도 자연스레 이해하고 있는 자신에게 놀라게 되었네요. 아마도 역자들은 테스트관련 용어중에 제자리테스트라는 용어가 있을것이라고 생각했던건 아닌지 의문이 들었습니다. 그들이 일부러 번역을 틀리게 했을리는 없을테니까 말이죠. 책을 번역함에 있어서 그분야에 능통하지는 못해도 최소한 어색하지는 않을만큼의 지식을 가지고있는 사람이 번역을 해야한다는 생각이 더욱 들었습니다.

그래도 저는 감사하게 생각합니다. 원서를 읽는것보다는 훨씬 짧은 시간을 투자하여 많은것을 배울수 있었으니까요. 아무리 번역이 안좋다해도 투자한 시간대비 얻는 이해도는 원서보다 번역본이 훨씬 높다고 저는 아직 이렇게 생각하고 있습니다.

Comments