제공 :
한빛 네트워크
저자 : Allen Downey
역자 : 김준환
원문 :
Software engineering practices for graduate students
최근 가을에 대학원생이 되는 한 학생과 이야기를 나누면서, 대학원에서 실천하면 좋을 몇 가지에 대해서 제안했다. 그리고 나서 생각을 글로 정리해 둘 필요가 있다고 생각했다. 이것이 모든 대학원생들이 활용하면 좋다고 내가 생각하는 소프트웨어 공학 기술들이다.
버전관리
당신의 모든 키 입력은 프로젝트를 처음 시작할 때부터 그만 둘 때까지 버전관리하에 있어야 한다. 여기 그 이유가 있다.
- 버전 관리는 당신이 하는 모든 것을 백업할 것이다. 날짜별로 백업을 구성하는 방식(대부분의 백업 시스템이 하고 있는) 대신에 리비전으로 구성된다. 예를 들면, 당신이 무언가를 망가뜨렸다면, 이전 작업 리비전으로 되돌릴 수 있다.
- 다른 사람들과 협업할 때, 저장소를 공유할 수 있다. 버전 관리 시스템은 이런 종류의 협업을 관리하기 위하여 잘 설계되어 있다. 만약 당신이 문서들을 메일을 통해 주고 받고 있다면, 그것은 잘못하고 있는 것이다.
- 프로젝트의 여러 다양한 단계에서, 저장소에 태그(tag)를 붙여서 저장할 수 있다. 예를 들어, 논문을 발표하기 위하여 제출 했을 때, 태그가 붙은 사본을 생성한다. 당신은 작업을 trunk에 보관하면서, 검토자의 평가(또는 5년 후에 질문)를 받았을 때, 이전 내용을 참고할 수 있다.
나는 주로 서브버전(SVN)을 사용한다. 그래서 나의 많은 프로젝트들을 Google Code (오픈소스이면) 또는 내가 소유한 SVN 서버에 보관하고 있다. 하지만 요즘의 트렌드세터들은 Git을 사용하는 것으로 보이며, 그들의 저장소를 GitHub에 유지하고 있다.
어느 쪽이든, 당신이 좋아하는 버전관리시스템을 찾아 어떻게 사용하는지 배우고, 당신의 저장소를 관리할 어딘가를 찾아야 한다.
빌드 자동화
이것은 버전 관리와 관련이 있다. 만약 누군가 저장소에서 당신의 프로젝트를 check out을 하면 그것을 하나의 명령으로 rebuild 할 수 있어야 한다. 즉, 당신의 결과를 필요로 하는 누군가가 저장소로부터 모든 것을 복제할 수 있어야 한다는 의미이며, 저장소에는 데이터를 처리하고, 그림과 표를 생성하고, 그것들을 논문, 슬라이드, 다른 문서들에 통합하는 스크립트가 있어야 한다.
빌드를 자동화하는 한 가지 간단한 툴은 Make다. 프로젝트에 있는 모든 디렉터리에 Makefile이 있어야 한다. 최상위 디렉토리에는 다른 모든 Makefile을 실행하는 Makefile이 있어야 한다.
만약 당신이 데이터 처리를 위해 GUI 기반의 툴을 사용한다면, 빌드를 자동화하는 것은 쉽지 않다. 하지만, 빌드 자동화는 그만한 가치가 있다. 논문을 제출하기 전날 밤에, 데이터 흐름 어딘가에서 버그를 찾을 지도 모른다. 만약 적절히 처리 했다면, 단순히 다섯 번의 키 입력(m-a-k-e, Enter)으로 논문을 다시 생성(rebuild) 할 수 있을 것이다.
또한, 최상위 디렉터리에 디렉터리 구조와 빌드 절차가 문서화된 README 파일을 넣어 두어야 한다. 만약 빌드가 다른 소프트웨어에 의존하는 경우, 현실적으로 가능하다면 의존하는 소프트웨어도 저장소에 포함시켜야 한다. 그렇지 않으면 요구되는 패키지들의 리스트를 제공해야 한다.
또는, 당신의 소프트웨어 환경을 복제하는 것이 쉽지 않다면, 전체 개발 환경을 가상 머신에 넣고 가상 머신을 내보내라.
애자일 플래닝
많은 사람들에게, 대학원 생활의 가장 도전적인 부분은 시간 관리이다. 만약 당신이 4~5 강좌를 수강하는 대학생이라면, 마감 시간에 의존한 일정관리를 할 수 있다. 즉, 당신은 어떤 작업이든 다음번 수업까지 할 수 있다. 그리고 아마 모든 것을 제시간에 끝냈을 것이다.
대학원에서는 어떻게 시간을 사용할 지와 더 적은 마감시간 가이드에 대해 더 많은 책임을 가진다. 자신이 무엇을 하고 있는지를 놓치고, 중요하지 않은 것에 시간을 낭비하고, 대학원의 목표를 향하여 가는 것을 등한시하기 쉽다.
애자일 플래닝 도구들의 목적 중의 하나는 사람들이 다음에 무엇을 할지 결정하도록 돕는 것이다. 도구들은 소프트웨어 개발 뿐만 아니라 대학원에서도 적용할 수 있는 여러 기능들을 제공한다.
- 계획자에게 큰 작업들을 명확하게 정의된 종료 조건을 갖는 더 작은 작업들로 나누도록 권장한다.
- 우선순위가 매겨진 작업들의 순위를 유지한다. 하나가 완료 되었을 때 다음 작업이나, 다른 몇 가지 중 하나를 시작할 수 있다.
- 팀과 협동하고, 조언자로부터 피드백을 얻는 방법을 제공한다.
- 적어도 계획에 두 가지 시간 척도를 포함한다. 일(daily) 단위 기준으로 백 로그의 작업들에서 해야 하는 작업을 선택한다. 주(weekly) 단위(또는 더 길게) 기준으로, 작업들을 만들거나 재정리한다. 그리고 다음 번 주기(cycle) 동안 어느 것들이 해야 할 작업인지 결정한다.
버전관리를 위해 GitHub나 Google Code를 사용한다면, 제공하는 이슈 트래커를 사용할 수 있다. 이슈 트래커를 애자일 플래닝에 사용할 수 있다. 하지만 Pivotal Tracker 처럼 애자일 방법론을 더 내장하고 있는 다른 도구들도 존재한다. 당신이 좋아하는 툴을 찾기 위해 몇몇 툴을 시험해 볼 수 있지만, 나는 Pivotal Tracker로 시작하는 것을 추천한다. 왜냐하면, Pivotal Tracker는 훌륭한 설명서를 가지고 있기 때문이다.
버전 관리, 빌드 자동화, 그리고 애자일 플래닝을 하라. 그러면 당신은 평균적인 시간 이내에서, 극적인 사건없이 대학원을 마칠 것이다.