8장. 특징, 어떻게 추가할까? 8.1. 테스트 주도 개발 테스트 주도 개발은 다음과 같은 순서로 진행한다. 1. 실패 테스트 케이스를 작성한다. 2. 컴파일되게 만든다. 3. 테스트에 통과하도록 만든다. 4. 중복을 제거한다. 5. 반복한다. TDD와 레거시 코드 한 번에 한 작업만 집중하도록 해주는 것은 TDD의 가장 중요한 역할 중 하나이다. TDD를 적용하면 코드 작성이나 리팩토링 과정에서도 두 작업을 함께 하는 경우는 결코 일어나지 않을 것이다. 레거시 코드에 있어서 분리는 특히 중요하다. 분리를 통해 새로운 코드를 작성할 때 다른 새로운 코드와의 독립성을 유지할 수 있기 때문이다. 새로운 코드를 작성하고 나면 리팩토링해서 새로운 코드와 이전 코드 사이에 있는 중복을 제거할 수 있다. 8.2. ..
7장. 코드 하나 바꾸는데 왜 이리 오래 걸리지? 제대로 유지되는 시스템과 레거시 시스템 간 차이점 적절히 유지된 시스템인 경우 어떻게 변경시키는지 알려면 오랜 시간이 걸릴지 모른다. 하지만 일단 어떻게 할지를 알고 나면 변경 자체는 매우 간단할 뿐만 아니라 변경 후 시스템이 휠씬 편안하게 느껴질 것이다. 레거시 시스템인 경우에는 무엇을 해야 하는지 이해하는데 오랜 시간이 걸릴 것이고 변경 자체도 힘든 과정이 될 것이다. 의존관계 깨기 의존관계를 깰수록, 그리고 클래스들을 새로운 패키지나 라이브러리로 이동시킬수록 시스템 전체 재빌드하는 비용은 늘어나지만, 빌드에 걸리는 평균 시간은 줄어들 것이다. Opportunity handling 클래스들 ConsultantSchedulerDB 클래스에 대한 구현체 ..
6장. 고칠 건 많고 시간은 없고 6.1. Sprout Method Sprout 메서드를 만드는 순서 어느 부분에 코드 변경이 필요한지 식별한다. 변경이 한 메서드 안의 한 부분에 있는 단일한 일련의 스테이트먼트라면, 관련 작업을 하는 새로운 메서드를 호출하는 코드를 작성한다. 그리고 주석을 표시한다. 소스 메서드에 어떤 지역 변수들이 필요한지를 결정하고 호출에 필요한 매개변수를 만든다. Sprout 메서드가 소스 메서드에 값을 반환해야 할지 결정한다. 값을 반환해야 한다면 호출을 변경시켜 반환된 값이 변수에 할당되도록 한다. 테스트 주도 개발 방법을 사용해 sprout 메서드를 개발한다. 호출이 동작하게 만들기 위해 소스 메서드에 있는 주석문을 제거한다. 6.2. Sprout Class Sprout 클..
코드가 얼마나 훌륭하게 작성되어 있는지 여부와는 상관없이 테스트 루틴이 없는 코드는 불량 코드다. 얼마나 멋지게 작성되어 있는가와 객체지향의 사용 여부, 그리고 캡슐화의 정도도 참작 요소가 전혀 되지 못한다. 테스트 루틴이 있으면 코드의 동작을 빠르고 검증 가능하게 변경시킬 수 있다. 하지만 테스트 루틴이 없으면 실제로 우리 코드가 더 나아지는지 더 나빠지는지를 알 수 없게 된다. 1장. 소프트웨어 변경 소프트웨어를 수정하는 네 가지 이유 1. 새로운 특징을 추가한다. 2. 버그를 제거한다. 3. 소프트웨어 설계를 개선한다. 4. 자원 이용률을 최적화한다. 특징 추가 버그 수정 리팩토링 최적화 구조 변경시킴 변경시킴 변경시킴 - 기능 변경시킴 변경시킴 - - 자원 이용률 - - - 변경시킴 위험한 변경 ..
- #EffectiveModernCpp
- Scott Meyers
- #클린코드
- #코드최적화
- #알고리즘
- #ndc
- Effective C++
- #임백준
- #ModernCPP
- #팀개발
- 책
- #scottmeyers
- #techdays2015
- #cplusplus
- Effective Modern C++
- 객체 지향 설계
- 상속
- #프로그래밍심리학
- #세미나
- #mva
- #레거시코드
- #마이클페더스
- #스콧마이어스
- #자녀교육
- #제럴드와인버그
- #로버트마틴
- #build2016
- #cpp
- #uwp
- #csharp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |