테스트에 친숙한 개발

Posted by epicdev Archive : 2012. 6. 16. 02:20

테스트하기 어려운 코드의 특징과 이것이 설계와 관련된 문제에 미치는 영향

특징 

테스트 문제 

설계 문제 

전역변수를 사용한다 

테스트할 때마다 모든 전역 변수를 초기화해야 한다. 그렇지 않으면 테스트가 서로의 결과에 영향을 줄 수 있다.

어느 함수가 어떤 부수적인 효과를 가지는지 판별하기 어렵다. 각각의 함수를 별도로 고려할 수 없다. 모든 게 제대로 작동하는지 알려면 프로그램 전체를 생각해야 한다. 

코드가 많은 외부 컴포넌트를 사용한다 

처음에 설정할 일이 너무 많아서 테스트를 작성하기 힘들다. 따라서 테스트를 작성하는 일이 즐겁지 않아 테스트 작성을 회피한다.

이러한 외부 시스템 중에서 어느 하나가 제대로 작동하지 않으면 프로그램이 실패한다. 프로그램에 가한 수정이 어떤 효과를 낳을지 알기 어렵다. 클래스들을 리팩토링하기 어렵다. 시스템이 더 많은 실패 모드와 복구 경로를 가지게 된다. 

코드가 비결정적인(nondeterministic) 행동을 가진다 

테스트가 변덕스럽고 안정적이지 못하다. 가끔 실패하는 테스트가 그냥 무시된다. 

프로그램이 경합 조건이나 재생하기 어려운 버그를 가지고 있을 확률이 높다. 프로그램의 논리를 따라가기가 어렵다. 현장에서 발생한 버그를 추적해서 수정하기가 매우 어렵다.


테스트하기 좋은 코드의 특징

 특징

테스트 장점 

설계 장

클래스들이 내부 상태를 거의 가지고 있지 않다

메소드를 테스트하기 전에 설정할 일이 거의 없고 감추어져 있는 상태가 별로 없기 때문에 테스트 작성이 수월하다.

소수의 내부 상태를 가지는 클래스는 이해하기 더 간단하고 쉽다.

클래스/함수가 한 번에 하나의 일만 수행한다

더 적은 테스트 코드가 요구된다.

더 작고 간단한 컴포넌트는 더 잘 모듈화되어있고, 시스템이 서로 더 멀리 떨어져 있다

클래스가 다른 클래스에 의존하지 않고, 서로 상당히 떨어져 있다

각 클래스가 독립적으로 테스트된다 (여러 클래스를 동시에 테스트할 때에 비해서 훨씬 쉽다) 

시스템이 병렬적으로 개발될 수 있다. 클래스가 쉽게 수정될 수 있고, 혹은 시스템의 나머지 부분에 영향을 주지 않으면서 제거될 수도 있다.

함수들이 간단하고 잘 정의된 인터페이스를 가지고 있다 

테스트 대상이 잘 정의되어 있다. 간단한 인터페이스는 테스트를 위해서 더 적은 일을 요구한다. 

프로그래머가 인터페이스를 쉽게 배울 수 있어 해당 인터페이스는 재사용될 가능성이 더 높다. 




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


'Archive' 카테고리의 다른 글

MapReduce  (0) 2012.06.23
지나친 테스트  (0) 2012.06.16
자기 주변에 있는 라이브러리에 친숙해져라  (0) 2012.06.16
변수의 범위를 좁혀라  (0) 2012.06.15
쇼트 서킷 논리 (Short-Circuit Logic) 오용 말기  (0) 2012.06.15
  

변수의 범위를 좁혀라

Posted by epicdev Archive : 2012. 6. 15. 22:16


 변수가 적용되는 범위를 최대한 좁게 만들어라


많은 프로그래밍 언어는 모듈, 클래스, 함수, 블록 범위 같은 다양한 범위/접근 수준을 제공한다.

더 제한적인 접근을 이용하면 변수가 더 적은 줄 내에서만 '보이므로' 일반적으로 더 좋다.


왜 그럴까?

바로, 코드를 읽는 사람이 한꺼번에 생각해야 하는 변수 수를 줄여주기 때문이다.

모든 변수의 범위를 두 배로 축소시키면, 한 번에 읽어야 하는 변수의 수는 평균적으로 반으로 줄어든다.


많은 메소드를 static으로 만들어서 클래스 멤버 접근을 제한해라. 가급적 static 메소드는 코드를 읽는 사람에게

'이 코드는 저 변수들로부터 독립적'이라는 사실을 알려주는 매우 좋은 방법이다.


커다란 클래스를 여러 작은 클래스로 나누는 방법도 있다. 이 방법은 작은 클래스들이 서로 독립적일 때 유용하다.

만약 클래스를 두 개의 작은 클래스로 나누었는데 서로의 멤버를 참조한다면, 실제로 성취한 일은 아무 것도 없게 된다.




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰, 트레버 파우커 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


  
아래의 링크를 따라가시면 프로그래머 점수표(Programmer Competency Matrix)를 보실 수 있습니다.
http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm 

다양한 분야마다 다양한 항목이 있는데요, 저같은 경우는 대학원생이라 그런지 특정 분야만 2-3점이 나오고 나머지 분야는 0-1점이 엄청 많네요...
스스로 냉정하게 자신을 평가해 볼 수 있는 좋은 기회인 것 같습니다. 또한, 3점의 기준에 맞춰서 앞으로의 학습계획을 짜도 좋을 것 같습니다.

[업데이트 2013.03.27]
Programmer Competency Matrix의 한글 번역본은 아래의 주소에서 찾으실 수 있습니다.

 


  

시니어 프로그래머, 행복한 프로그래밍 (3)

Posted by epicdev Archive : 2011. 12. 3. 13:09
한 프로그래머가 작성한 코드를 다른 프로그래머가 함께 검토하는 것을 의미하는 코드리뷰는 결코 형식적인 절차가 아니다. 버그를 미리 잡아내기 위한 것도 아니고, 코딩스타일이나 편집스타일을 강제하기 위한 것도 아니다. 코드리뷰를 수행하면 누구든지 자신이 작성한 코드의 내용을 다른 누군가에게 설명해야 한다. 그러한 설명은 일차적으로 코드를 작성한 사람이 스스로 작성한 코드의 내용을 정확히 이해하게 만들고, 이차적으로 코드를 검토하는 사람이 다른 사람이 작성한 코드의 내용에 친숙해지게 만든다. 그것이 핵심이다. 믿기 어렵겠지만 자기가 작성한 코드의 내용을 충분히 이해하지 못하는 프로그래머가 세상에는 생각보다 많다. 표창던지기 초식이나 베끼기 초식을 구사하는 프로그래머는 물론이고, 정상적인 방법으로 코드를 작성하는 사람조차도 유닛테스트를 작성하지 않거나 코드리뷰를 수행하지 않으면 자기가 작성한 코드의 내용을 순식간에 잊어버린다. 그런 사람들은 코드리뷰를 통해서 누군가에게 자기 코드의 내용을 상세히 설명하는 기회를 갖는다면 도움이 될 것이다. 바둑에서도 방금 두었던 바둑의 내용을 다시 검토하는 복기가 바둑실력을 향상하는 데 큰 도움을 주는 것처럼 프로그래밍에서도 코드리뷰는 많은 도움을 준다.


프로그래머그다음이야기프로그래머의길을생각한다
카테고리 컴퓨터/IT > 컴퓨터공학
지은이 임백준 (로드북, 2011년)
상세보기
 
  

시니어 프로그래머, 행복한 프로그래밍 (2)

Posted by epicdev Archive : 2011. 12. 3. 13:04
그렇지만 개발현장에서 유닛테스트 코드를 습관적으로 작성하는 프로그래머를 만나는 일은 쉽지 않다. 대부분의 프로그래머는 유닛테스트를 작성하는 데 거의 시간을 들이지 않는다. 그들은 요구사항의 윤곽이 대충 드러나면 곧바로 코딩을 시작한다. 코딩을 하다가 길이 막혀서 길이 보이지 않으면 처음으로 돌아가서 설계 자체를 검토하거나 리팩토링을 통해서 근본적인 문제를 해결하려고 노력하지 않는다. 대신 불리언 타입의 글로벌 변수를 선언한 다음, 꽈배기처럼 비비 꼬인 if-else 문장을 표창처럼 흩뿌린다. 그렇게 임시변통을 하고 길을 걷다가 길이 막히면 더 많은 불리언 변수와 더 많은 if-else 표창을 뿌리며 길을 헤쳐나간다. 그러다가 마침내 코드가 동작하는 방식이 요구사항이 설명하는 것과 대충 비슷한 것으로 보이면 손을 털고 일어선다. 프로그래밍이 끝난 것이다. 이렇게 작성된 코드는 당연히 수많은 논리적 오류와 버그를 내포하고 있을 수 밖에 없다. 하지만 걱정 없다. 버그가 보고되면 더 많은 if-else의 표창으로 버그를 잡아 버리면 되기 때문이다. 그리하여 코드는 버그가 하나씩 보고될 때마다 더욱 복잡해지고 난해해진다. 그러다가 마침내 프로그램은 코드를 작성한 프로그래머 자신조차 이해할 수 없는 누더기가 되어 버린다.

 
프로그래머그다음이야기프로그래머의길을생각한다
카테고리 컴퓨터/IT > 컴퓨터공학
지은이 임백준 (로드북, 2011년)
상세보기
  

시니어 프로그래머, 행복한 프로그래밍 (1)

Posted by epicdev Archive : 2011. 12. 3. 12:58
프로그래밍은 바둑과 닮은 구석이 많다. 고수와 하수의 관계는 그런 닮은 부분 중의 하나다. 고수인 바둑 1급이 하수인 바둑 5급의 수를 보면 너무 속내가 뻔히 들여다 보여서 웃음이 나온다. 그런데 바둑 5급은 1급의 수를 보면 숨이 막힐 뿐 상대방의 속내를 짐작하기 어렵다. 그렇지만 초절정고수인 프로기사가 바둑 1급이 놓은 수를 보면 어이가 없어서 한숨이 나오는 수가 한둘이 아닐 것이다.

이와 같은 실력의 상대성이 프로그래밍 세계에도 그대로 적용된다. 실력이 뛰어난 프로그래머가 실력이 부족한 사람이 작성한 코드를 보면 답답하고 안타까워서 한숨이 나온다. 리팩토링을 수행하고 싶은 욕구가 절로 일어난다. 실력이 떨어지는 사람은 자기보다 실력이 뛰어난 사람이 신묘한 방법을 동원해서 어려운 문제를 척척 해결하고 깔끔하게 코드를 작성하는 것을 보면 숨이 막히고 탄성이 나온다. 그렇지만 실력이 훨씬 더 뛰어난 사람이 보기에는 그런 뛰어난 프로그래머가 작성한 코드에서조차 마음에 들지 않는 부분이 많을 것이다.

 
프로그래머그다음이야기프로그래머의길을생각한다
카테고리 컴퓨터/IT > 컴퓨터공학
지은이 임백준 (로드북, 2011년)
상세보기
  
 «이전 1  다음»