공정工程
 [명사]
1 일이 진척되는 과정이나 정도.
  • 건물 신축 공사가 90%의 공정을 보이고 있다.
  • 투석 작업이 일단락 지어지고 난 다음 공정은 솟아오른 들 둑 위로 흙을 돋워 올리는 성토 작업이었다.≪이청준, 당신들의 천국≫
2 한 제품이 완성되기까지 거쳐야 하는 하나하나의 작업 단계. ‘공사 과정’, ‘작업 과정’으로 순화.
  • 공장 생산품의 불량률을 낮추기 위해서는 모든 공정을 기계화·자동화하는 것이 필요하다.

대학교 4학년때 잠간 마케팅 전공을 하려고 경영학을 공부한 적이 있다. 그때 공정이란 것이 있다는 것을 알게 되었는데 이것이 좋은 개발자가 되기 위해 무슨 관계가 있는 것일까?

요즘 익스트리밍 방법론에 관련된 여러 서적과 아티클이 많이 나온다. 얼마전부터 내가 읽고 읽는 책은 『린 소프트웨어 개발』이다. 이 책은 도요다 방식 즉, 낭비제거와 끊임없는 개선을 통해 이룬 경영/생산방식을 소프트웨어 개발에 접목시킨 책이다.

reform_img14.jpg

공정, 도요다 방식 등 경영학에 나오는 용어를 껴내는 이유는 나의 개발과정을 하나의 공정과정으로 생각해보았다. 매일 반복하는 행동을 지침으로 만들어 습관을 들이면 실수를 줄 일 수 있다고 생각했기 때문이다. 그래서 나의 하루 개발 공정(작업 과정)을 정리해 보았다.

  1. SVN 에서  sincronize를 통해 수정된 소스를 확인하고  update 받는다.
  2. 빌드(컴파일, 단위테스트, reporting)를 수행한다.
  3. 지라를 통해 내가 해야할 업무를 선택하고 주요 태스크 단위로 작업 목록을 작성한다.
  4. 추가해야될 로직의 테스트케이스부터 만들어 나간다.
  5. 테스트케이스를 바탕으로 프로그래밍을 한다.
  6. 하나의 로직이 완성되면(테스트를 통과하면) struts.xml과 applicationContext.xml 설정파일에 추가/수정한다.
  7. Reporting을 위한 빌드를 수행하여(ex. mvn clean site) 클래스간 디펜던시, 코드 커버리지, copy&paste 등 어긋나거나 부족한 것이 없는지 확인 한다.
  8. 모든 단위 테스트케이스를 수행 한다.
  9. 로컬 서버에서 통합테스트를 수행 한다.
  10. SVN에 commit 한다.
  11. ci툴 모니터링 한다.(빌드가 잘 수행하는지...)
  12. 지라(또는 업무일지)에 지금까지 작업한 내용을 기록한다.
  13. 퇴근한다.

오늘 이 목록을 작성하게 된 이유는 한 두개 체크를 빼먹음으로써 발생하는 문제들을 사전에 막을 수 있기 때문이다. 실제로 모든 단위테스트는 다 통과된 후 SVN에 commit를 했는데 실제 기능은 작동되지 않고 에러를 내고 있었다. 이유는 spring 설정파일인 applicationContext.xml에 추가시키지 않았기 때문이었다.

이런 실수를 줄 일 수 있는 다른 단위테스트를 만들어 문제를 막을 수도 있지만 일단 내가 개발하는 습관을 바꾸면 좋겠다는 생각을 하게 되었다.