*코드 리뷰와 리팩토링

2010. 7. 13. 21:01 from Tip
반응형
한 조사 기관에서 수학을 잘하는,
정확하게 말해서 수학 시험 문제를 잘 푸는 학생들의 습관을 조사해 보았다고 한다.
그랬더니 놀랍게도 한결같이 자신이 푼 문제를 재검토(review)하는 습관을 가지고 있었다고 한다.
반면에 수학을 못하는 학생들은 문제 풀이에만 힘쓰고, 다시 검토해 볼 생각을 하지 않더라는 것이다.
프로그래밍은 수학 문제를 푸는 것과 여러 면에서 유사하다.
 
문제가 있고, 해결 방식을 설계하고, 그 설계안 대로 문제를 풀고, 답이 확실한지 검증하는 것이 수학이다.
문제가 있고, 알고리즘4)을 설계하고,
알고리즘대로 코딩하고, 제대로 동작하는지 테스트하는 것이 프로그래밍이다.
수학을 잘하는 학생들은 이 단계 이후에 답이 확실한지를 다시 한 번 검토한다.
자신의 풀이 과정을 확인해 보고, 다른 해결 방법은 없는지도 생각해 보아,
해결 방법이 있다면 그 방법으로 다시 한 번 문제를 풀어본다.
 
마찬가지로 프로그래밍을 잘하는 프로그래머들도 단위 테스트5) 이후에 검토 과정을 거친다.
자신이 코딩한 내용이나 알고리즘을 다시 한 번 검토해 보고, 더욱 효율적인 해결 방법이 있다면 개선한다.
전자를 코드 리뷰(code review)라고 부르고, 후자를 리팩토링(refactoring)이라고 부른다.
즉 코드 리뷰는 재검토이고, 리팩토링은 개선이다.
 
수학 문제 풀이 이후의 재검토가 학생의 사고력을 길러 수학 실력을 높여주듯이,
프로그래밍 이후의 코드 리뷰와 리팩토링 프로그래머의 사고력을 길러 프로그래밍 실력을 높여준다.
코드 리뷰와 리팩토링에는 또 다른 장점이 있다.
프로그램의 품질을 높여주는 것이다.
오류(error)를 잡아낼 수 있고, 효율을 개선할 수 있기 때문이다.
개별 프로그램에서 하는 이런 행위는 궁극적으로 개발 프로젝트6) 전체의 생산성을 대폭적으로 향상시켜 준다.
코드 리뷰로 잡아낼 수 있는 오류를,
코드 리뷰를 하지 않은 관계로 수 일에서 수 주일동안 잡아내지 못하는 경우도 있다.
코드 리뷰는 통합 테스트7)나 유지보수의 기간을 줄여준다.
 
단위 테스트 이후에 반드시 코드리뷰와 리팩토링을 하여 프로그래머의 사고력을 높임과 동시에
프로그램의 품질도 높이도록 하자.
 
4) 알고리즘(algorithm):어떤 문제의 '절차적'이고 '확정적'인 풀이 방법을 말한다.
상황에 따라 달라지는 해법은 알고리즘이 아니며, 알고리즘은 그 해법이 확정적인 만큼,
문제를 풀어가는 절차도 정해져 있다.
그래서 '절차적'인 특성을 가지고 있다.
프로그램이란 어떤 업무를 처리하는 해법 즉, 알고리즘을 표현한 것이라고 볼 수 있다.
5) 단위 테스트(module test):프로그램 '하나'를 제작하고 나서 그 프로그램이 제대로 작성되었는지를 시험해 보는 것을 말한다.
단위 테스트는 대개 프로그램을 직접 제작한 프로그래머에 의해서 이루어지며, 때로는 전문 테스터(tester)가 담당하기도 한다.
6) 프로젝트(project):사전적인 의미는 '일의 추진 과정' 이지만,
컴퓨터 업계에서는 하나의 개발 업무 단위를 의미한다.
예를 들면 '회계 업무 프로젝트'라고 하면, 회계 업무 전체를 전산화하는 일을 말하는 것이다.
7) 통합 테스트(system test):단위 테스트를 마친 프로그램들과 관련 업무를 하나로 묶어 현업에서 쓸 수 있는 것이 시스템(system)이다.
예를 들어 일계표 처리 프로그램, 대차대조표 작성 프로그램 등의 회계 관련 프로그램들을 모두 엮은 뒤에, 개선된 조직과 연관지어 하나의 업무 처리 단위가 되도록 하면 이것이 '회계 시스템'이 된다..
이런 시스템 단위는 하나의 통합적인 의무 처리 단위라고 할 수 있다.
그렇기 때문에 시스템의 문제점을 발견하기 위한 시험을 통해 테스트라고 부르는 것이다.
단위 테스트 과정에서는 발견할 수 없었던 프로그램 간의 연관성 문제라든가 하는 것이 통합 테스트 과정에서 나타난다.

06월 24일 18시 09분 41초
Posted by Mr.Martin :