on
"소프트웨어 장인" 중 인상 깊었던 내용 발췌
최근에 "소프트웨어 장인"이라는 책을 읽었다. 요즘 환경이 왜 개발자에게 프로페셔널리즘을 요구하는지, 어떻게 하면 프로페셔널한 개발자가 될 수 있는지를 이야기하는 책이다. 단정하는 듯한 어투가 좀 거칠지만, 평소 내 철학에 비춰 볼 때 대체적으로 공감하는 내용이 많아서 재미있게 읽었다.
책 곳곳에 흥미로운 내용이 많았는데 그 중에 인상 깊었던 대목을 몇 개만 추렸다. 테스트에 고민이 많은 요즘이라 주로 테스트와 관련있는 내용이다.
A.
우리는 전혀 프로답지 못했다. 한번도 ‘아니오’라고 말하지 않았기 때문이다.
B.
이러한 압박 속에서 여유있게 테스트 코드를 작성할 사람은 아무도 없다. 매우 작은 팀이었음에도 코드는 엉망이었고 수정을 살짝만 해도 정말 고통스러운 상황이 벌어졌다. 테스트를 한번 하려면 모든 것을 수동으로 다시 돌려보아야 하기에 대단히 어려웠다.
C.
너무 바쁜 : 너무 바빠서 뭔가를 할 시간이 전혀 없는 사람들이다. 어떤 일의 장기적인 비용을 보지 못하고 근시안적인 판단을 한다. 무언가 일을 올바르게 할 시간은 없지만 똑같은 일을 계속해서 반복할 시간은 있다. 이들에게 있어서 TDD 같은 실행 관례는 시간이 너무 오래 걸리고, 별도로 시간을 내야만 하는 일이다. 하지만 전체 시스템을 매번 수동으로 테스트하고 문제를 분석하고 버그를 수정하는 시간은 보지 못한다. 특히 시스템이 망가질까 두려워 큰 규모의 개선은 엄두도 못 낸다는 사실이 얼마나 큰 비용인지 알지 못한다. 이들의 눈에 보이는 것은 너무 바빠서 일하는 방식을 바꿀 시간이 없다는 것뿐이다. - 262쪽
D.
고객은 개발자에게 높은 품질의 소프트웨어, 훌륭한 솔루션을 기대한다. TDD, 페어 프로그래밍, 연속된 통합 등의 실행 관례들은 모두 그러한 것들을 달성하도록 돕기 위함이다. 누군가에게 물어볼 것 없이 그냥 실행하면 된다. 공식적인 작업 항목에 ‘단위 테스트 코드 작성’이라고 올릴 필요도 없다. 단위 테스트가 되지 않았다면 그 어떤 작업이건 간에 완료되었다고 말할 수 없다. 작업을 구현과 테스트로 나누어서는 안 된다. 한 시간은 서비스 클래스를 구현하고 다른 한 시간은 테스트를 작성하더라도 둘은 서로 독립된 작업이 아니다. 두 시간 분량의 한 가지 작업일 뿐이다. 서비스 클래스의 구현 작업 하나다. 테스트는 형태에 상관없이 한 코딩 작업의 요소일 뿐 별개의 작업이 아니다. - 274쪽