배고픈 개발자 이야기

2.Code Complete (23-26장) 본문

전산학/코드컴플리트

2.Code Complete (23-26장)

이융희 2019. 9. 8. 12:12
728x90

Chapter23 디버깅

  • 디버깅은 소프트웨어 개발의 성공과 실패를 좌우한다. 가장 좋은 접근 방법은 결함을 처음부터 피하기 위해 이 책에서 소개하고 있는 다른 기법들을 사용하는 것이다. 하지만 디버깅 기술을 향상시키는 데 시간을 투자할 가치가 있다. 왜냐하면 디버깅을 잘하는 사람과 못하는 사람 간의 수행 능력이 적어도 10배 정도 차이가 나기 때문이다.

  • 오류를 찾고 수정하는 체계적인 접근 방법은 성공에 매우 중요하다. 각 테스트가 한 걸음 나아갈 수 있도록 디버깅에 초점을 맞춘다. 과학적인 디버깅 방법을 사용하라.

  • 문제를 수정하기 전에 문제의 원인을 이해하라. 오류의 원인에 대해서 임의로 추측하고 수정하면, 프로그램은 수정을 시작했을 때보다 더 나쁜 상태가 될 것이다.

  • 컴파일러의 경고를 가장 까다로운 수준으로 설정하고 컴파일러가 보고하는 오류들을 수정하라. 분명한 오류들을 무시하면 미묘한 오류들을 수정하기가 어려워진다.

  • 디버깅 도구들은 소프트웨어 개발에 있어서 강력한 도구들이다. 그러한 도구들을 찾아서 사용하되, 동시에 자신의 두뇌를 사용하는 것을 기억하라.

초기 오류 감지과정(테스트) -> 오류의 근본원인 규명 및 수정(디버깅)

가설, 테스트케이스를 전체 데이터를 설명할 수 있을때까지 계속 개선한다.

여러가지 오류를 일으켜 보다 정확한 오류의 원인을 규명할 수 있다.(여러개테스트)

프로그램 -> 단위 테스트까지 좁혀가면서 : 출력문, 로그 또는 Trace?

여러개의 작은 루틴을 사용한다면 루틴에 대한 호출을 주석처리함으로 간단히 제거가능하다 - 코드기능 분할을 많이 하는게 좋은거 같습니다.

이전버전에서 실행해보고 문제가 없다면 버전간 차이점 분석 - Github

 

다른 사람과 이야기 - 설명하다가 해결되는 경우

문제와 떨어져 휴식 - 집에 가는길에 해결

점진적인 통합 - 한번에 합치면 해결하기 어려움

구문 오류 - 컴파일러가 보고한 오류를 그대로 믿지 말고 라인이나 원인에 대하여 왜 그렇게 보고 했는지 이해해야 할 필요가 있다.

 

디버깅을 보다 쉽게 만드는 방법

결함을 수정하는 방법이 아니라 결함을 피하는 방법을 배워야함

결함을 통해 프로그램을 이해할 수 있다

프로그램을 완벽하게 알고 있다면 결함이 없을 것이다?

디버깅 - 가독성, 설계, 코드 품질을 스스로 발전하게 만듬

  • 결함을 찾고 싶다면 프로그램내에 출력 명령을 넣어라 정도였음(불충분)

  1. 출력 명령문을 마구잡이로 뿌려 살펴본다

  2. 프로그램의 원본을 백업하지 않는다

  3. 변경사항에 대해 기록하지 않는다. - Github의 필요성

과학적인 디버깅방법

  1. 반복적인 실험을 통한 데이터 수집

  2. 관련된 자료들을 설명하기 위한 가설을 세운다.

  3. 그러한 가설을 증명하거나 반증하기 위한 실험을 구상한다.

  4. 그러한 가설을 증명하거나 반증한다.

  5. 필요한 만큼 반복한다.

일반적인 예측 불가능한 오류

  • 초기화 오류, 시간 문제, 허상 포인터 문제

  • 만약 포인터 사용중 오류가 생기면, 초기화 되지 않거나 해제된 메모리를 가리키는 포인터를 사용하고 있을 확률이 높음

  • 테스트 케이스의 단순화(불필요 요소 반증으로) -> 오류 분류의 세분화

Chapter24 리팩토링

  • 프로그램이 초기 개발 시와 초기 릴리즈 후에 변경될 수 있다는 것은 엄연한 인생의 현실이다.

  • 소프트웨어는 변경될 때 향상되거나 손상될 수 있다. 소프트웨어의 진화의 기본 원칙은 코드가 진화할 때 반드시 내부적인 품질이 향상되어야 한다는 것이다.

  • 리팩토링을 성공적으로 수행하기 위한 핵심 요건은 다양한 경고 표시나 리팩토링이 필요하다는 것을 암시하는 냄새에 주의를 기울이는 것이다.

  • 리팩토링을 성공적으로 수행하기 위한 또 다른 핵심 요소는 수많은 리팩토링들을 학습하는 것이다.

  • 리팩토링을 성공적으로 수행하기 위한 마지막 핵심 요소는 리팩토링을 안전하게 수행하기 위한 전략을 갖는 것이다. 어떤 리팩토링 접근 방법은 다른 것들보다 더 좋다.

  • 개발중에 리팩토링하는 것이 프로그램을 향상시키고 여러분이 처음부터 만들고자 했던대로 변경할 수 있는 가장 좋은 기회이다. 개발중에 그러한 기회를 활용하도록 한다.

Chapter25 코드 최적화 전략

  • 성능은 소프트웨어 품질 전체의 한 측면일 뿐이며, 일반적으로 가장 중요하지도 않다. 또한, 정밀하게 최적화된 코드는 전체적인 성능의 한 측면일 뿐이며, 일반적으로 그 효과가 현저하지도 않다. 프로그램 아키텍처, 상세 설계, 자료 구조와 알고리즘 선택이 일반적으로 코드의 효율성보다 프로그램의 수행 속도와 크기에 더 큰 영향을 미친다.

  • 양적인 측정은 성능의 최대화에 있어서 가장 중요하다. 성능 향상이 실제로 중요한 영역을 찾기 위해서 필요하고 최적화가 소프트웨어의 성능을 향상시켰는지를 검증하기 위해서 다시 한 번 사용된다.

  • 대부분의 프로그램들은 작은 부분에서 대부분의 시간을 보낸다. 그러나 코드를 측정하기 전까지는 어떤 코드인지를 알 수 없을 것이다.

  • 코드 최적화를 통해서 원하는 만큼의 성능을 개선하기 위해서는 일반적으로 여러 번 반복해야 한다.

  • 초기 코드 작성 시 성능 작업을 준비하는 가장 좋은 방법은, 이해하고 수정하기 쉬운 분명한 코드를 작성하는 것이다.

Chapter26 코드 최적화 기법

다음 포스팅에서 기술 (C/C++ 최적화 기법)

'전산학 > 코드컴플리트' 카테고리의 다른 글

1.Code Complete (1-17장)  (0) 2019.09.08
0.Development Common Sense  (0) 2019.09.08
Comments