본문 바로가기

Programming (IT)

2장 왜 애자일 인가 - 클린 애자일 정리

반응형

2. 왜 애자일 인가?

애자일 개발이 중요한 것은 더 깊은 철학적, 윤리적 이유 때문이다.
바로 직업의식과 고객의 당연한 기대 때문이다.

직업의식

애자일 개발은 (전문가가 되겠다는) 약속이다.
소프트웨어 개발 산업 전반에 전문가 다운 행동을 퍼트리겠다는 약속
내 수준을 올리겠다는 약속
과거에 실패가 많았다 → 소프트웨어가 이제 너무 많다 → 실패하면 안 된다

소프트웨어는 어느 곳에나 있다.

정말 많은 곳에 소프트웨어가 있다.

우리가 세상을 지배한다.

소프트웨어는 누가 만드는가?
여러분과 나다 우리가 세상을 지배한다.
테스트가 안돼서 엉망이다.
테스트 슈트가 소프트웨어의 정상 동작을 엄밀하게 증명한다고 말할 수 있는 프로그래가 얼마나 될까?
도요타 리콜 (브레이크 소프트웨어 결함)

재앙

프로그래머의 실수로 사람이 죽는 재앙
폭스바겐 연비 조작 소프트웨어 엔지니어

당연한 기대

관리자, 사용자, 고객이 우리에게 기대하는 것들, 이 기대를 부응하는 것도 애자일 개발의 주요 목표다.

우리는 쓰레기를 내보내지 않겠다!

관리자, 고객, 사용자가 품질이 높고 결함이 적은 시스템을 받으리라고 기대하는 것은 완벽하게 타당하다.
애자일이 강조하는 테스트, 리펙터링, 단순한 설계, 고객의 피드백이 나쁜 코드가 출시되지 않게 막는 확실한 해결 챔임을 알아 두자.

기술적 준비 상태 유지하기

시스템은 각 반복 주기가 끝날 때마다 기술적으로 배포 가능해야 한다.
→ 시스템이 배포해도 될 만큼 기술적으로 견고하다는 뜻.
→ 코드는 깨끗하고 모든 테스트가 성공해야 한다.
즉, 반복 주기 동안 스토리를 구현한다는 것은 스토리의 모든 코딩과 모든 테스트와 모든 문서와 모든 안정화를 다 끝낸다는 것이다.
반복 주기가 끝나기 전에 모든 배포 준비 작업을 완료할 수 있을 만큼 스토리를 조금 고르면 된다.

안정적인 생산성

기존 코드가 없을 때 아주 빠르게 달린다.
시간이 갈수록 엉망인 코드가 쌓여서 생산성이 낮아진다.
고객이나 관리자는 소프트웨어팀이 점점 느려질 것이라 생각하지 않는다.
개발자도 똑같이 생각해야 한다.
아키텍처, 설계, 코드를 가능한 한 계속해서 깨끗하게 관리하여 생산성을 높게 유지해야 한다.

낮은 수정 비용

소프트웨어는 바꾸기 쉬운 제품이라는 뜻
소프트웨어를 변경하기 어렵게 만들었다는 것은 소트웨어의 존재 이유를 훼손하는 것이다.
테스트 주도 개발, 리펙터링리 펙터 링, 단순한 설계를 통해서 바꾸기 쉽게 유지해야 한다.

지속적인 개선

사용자나 고객, 관리자는 지속적이고 꾸준히 개선이 이루어질 거라 기대한다.
애자일 실천 방법인 짝 프로그래밍, 테스트 누도 개발, 리펙터링, 단순한 설계를 통해서 기대에 부합한다.

두려움을 이기는 능력

수정에 대한 두려움 → 손대면 내가 책임져야 하는 코드가 된다.
고객과 사용자, 관지라는 두려움을 이기는 능력을 기대한다.
테스트 주도 개발을 실천해서 두려움을 이길 수 있다. (합/불을 계속 확인할 수 있다.)

QA는 아무것도 찾지 못해야 한다.

테스트를 돌릴 때마다 QA의 보고 내용을 모든 것이 요구사항에 따라 동작한다는 것
애자일 실천 방법인 인수 테스트, 테스트 주도 개발, 지속적 통합이 이런 기대에 부합한다.

테스트 자동화

테스트는 비용이다.
자동화할 수 있는 모든 세트는 자동화해야 한다.
자동으로 검증이 불가능한 것이나, 탐험적 테스팅 같이 창의력이 필요한 활동만 수동으로 한다.
테스트 주도 개발, 지속적 통합, 인수 테스트가 이런 기대에 부합한다.

우리는 서로를 대신한다.

소프트웨어팀의 구성원들은 필요할 때 서로를 대신해야 한다.
자신을 대신할 수 있는 사람을 만들어야 한다.
짝 프로그래밍, 전체 팀, 공동 소유가 이런 기대에 부합할 수 있도록 도와준다.

정직한 추정

아는 것과 모르는 것에 기반하여 추정해야 한다.
여러분이 모은 아는 것과 모르는 것을 관리자에게 필요한 정직한 확률로 바꿔준다.
계획 게임, 전체 팀이 이런 기대에 부합할 수 있도록 도와준다.

"아니요"라고 말해야 한다.

회사가 당신을 채용한 것은 당신의 코딩 능력보다 '아니요'라고 말하는 능력 때문이다.
진짜 대답이 '아니요' 일 때는 '아니요'라고 말해 줄 것을 기대한다.
전체 팀이 이런 기대에 부합한다.

지속적이고 적극적인 학습

나는 당신이 계속 공부 하리라 기대한다.
전체팀이 이런 기대에 부합한다.

멘토링

나는 당신이 가른 치는 것도 기대한다.
전체 팀


권리장전

고객의 권리와 개발자의 권리가 상호 보완적이다.

고객 권리 장전

  • 전체적인 계획을 알 권리가 있다. 무엇을, 언제, 얼마의 비용으로 완성할 수 있는지 알 권리가 있다.
  • 반복 주기마다 가능한 한 많은 가치를 얻을 권리가 있다.
  • 작동하는 시스템을 통해 진척도를 알 권리가 있다. 개발자는 고객이 제공한 테스트로 계속해서 시스템을 검사하여 동작을 증명해야 한다.
  • 과도한 비용 추가 없이 기능이나 우선순위를 바꿀 권리가 있다.
  • 일정이나 추정이 바뀐 경우 제때 알림을 받고, 목표 일자에 맞추기 위하여 업무 범위를 어떻게 줄일지 결정할 권리가 있다. 언제든지 프로젝트를 취소할 수 있다. 이 경우 해당 시점까지 지불한 비용이 반영된 유용한 시스템을 받을 수 있다.

개발자 권리 장전

  • 명확하게 정의된 우선순위와 함께 무엇이 필요한지를 알 권리가 있다.
  • 언제나 높은 품질의 결과물을 만들 권리가 있다.
  • 동료나 관리자, 고객에게 도움을 요청하고 받을 권리가 있다.
  • 자신만의 추정치를 만들고 갱신할 권리가 있다.
  • 담당 업무를 할당받는 게 아니라 수락할 권리가 있다.

고객

보통 사업 부서 사람을 가리킨다.

  • 전체적인 계획을 알 권리가 있다. 무엇을, 언제, 얼마의 비용으로 완성할 수 있는지 알 권리가 있다. → 확률에 기반한 계획을 알 권리가 있다.
  • 반복 주기마다 가능한 한 많은 가치를 얻을 권리가 있다. → 반복 주기마다 활용 가능한 사업 가치를 최대한 많이 만들어 내야 한다. → 고객은 개발자가 추산한 스토리 중 투자 수익률이 가장 높은 스토리를 골라야 한다.
  • 작동하는 시스템을 통해 진척도를 알 권리가 있다. 개발자는 고객이 제공한 테스트로 계속해서 시스템을 검사하여 동작을 증명해야 한다. → 진행 사항을 알고, 지정한 조건에 맞는지 빠르게 확인할 권리이다.
  • 과도한 비용 추가 없이 기능이나 우선순위를 바꿀 권리가 있다. → 소프트웨어의 존재 이유는 기계의 동작을 쉽게 바꾸기 위함이다.
  • 일정이나 추정이 바뀐 경우 제때 알림을 받고, 목표 일자에 맞추기 위하여 업무 범위를 어떻게 줄일지 결정할 권리가 있다. 언제든지 프로젝트를 취소할 수 있다. 이 경우 해당 시점까지 지불한 비용이 반영된 유용한 시스템을 받을 수 있다. → 일정에 맞출 것을 요구할 권리가 없음 → 고객의 권리는 업무 범위를 바꾸어 일정을 관리하는 것으로 한정한다.

개발자

코드 개발에 참여하는 모든 사람 (프로그래머, QA, 테스터, 업무 분석가)

  • 명확하게 정의된 우선순위와 함께 무엇이 필요한지를 알 권리가 있다. → 요구 사항과 요구 사항의 중요도를 정확히 따질 권리. → 고객의 요구사항과 우선순위는 반복 주기 내에서는 바뀌지 않는다. 반복 주기 밖에서 바뀐다.
  • 언제나 높은 품질의 결과물을 만들 권리가 있다. → 경력에 오점을 남기거나 직업윤리를 어기도록 강요할 권리가 없다.
  • 동료나 관리자, 고객에게 도움을 요청하고 받을 권리가 있다. → 도움을 요청할 수 있고 도와주어야 하는 책임도 있다.
  • 자신만의 추정치를 만들고 갱신할 권리가 있다. → 스스로 추정을 만들어야 한다. (추정은 추측이다.)
  • 담당 업무를 할당받는 게 아니라 수락할 권리가 있다. → 전문가는 일을 수락하지, 할당받지 않는다. → 개인적인 이유나 양심 때문에 과제를 거절할 수 있다.

결론

애자일은 프로세스가 아니다.
윤리적인 직업의 기반을 이루는 권리, 기대, 규율을 한데 모은 것이다.


애자일을 제대로 하려면.

  • 테스트를 먼저 쓰고,
  • 리팩터링도 하고,
  • 단순한 설계에 전념해야 한다.
  • 짧은 주기로 일해야 하고,
  • 주기마다 작동하는 결과물을 내놓아야 한다.
  • 사업 부서와도 정기적으로 끊임없이 이야기해야 한다.