Akashic Records

Lean Software Development - 2 본문

오래된글/소프트웨어공학

Lean Software Development - 2

Andrew's Akashic Records 2018. 4. 18. 13:29
728x90

2. 배움을 증폭하라

  • 소프트웨어 개발에서의 품질

소프트웨어 개발에서 품질은 인식 통합성과 개념 통합성 차원에서 생각 있다. 인식 통합성이란 제품이 기능, 사용성, 신뢰성, 경제성 전체적인 면에서 균형을 이루어 고객을 만족시킨다는 의미다. 반면 개념 통합성이란 시스템의 중심 개념이 유연하면서 응집력 있게 작동한다는 의미다.


  • 소프트웨어 개발에 관한 가지 주장

하나는 처음부터 모든 설계와 코드가 완벽해야 한다고 개발자들이 확신하도록 독려하는 것이다. 다른 하나는 설계와 코드가 처음부터 정확하도록 하는 것보다는 소규모로 신속하게 빌드하는 사이클을 만드는 편이 좋다는 것이다. 처음부터 제대로 신중한 검토를 하고 진행하는 접근법은 구조화가 문제에는 좋지만, 구조화되지 않은 문제에는 대게 신속한 빌드하는 접근방법이 좋을 것이며 , 테스팅 비용이 매우 높다면 신중한 검토를 통해 지식을 얻는 편이 나을 것이다.


  • 학습주기

리팩토링을 수반한 반복, 시스템을 개발해 가면서 설계를 개선하는 방법은 지식을 생성하고, 조기에 해답을 찾고, 통합성 있는 시스템을 만드는 가장 효과적인 방법 하나라고 밝혀졌다. 그것은 이러한 접근법이 문제가 잘못 정의된 경우에 가장 효과적으로 지식을 생성하기 때문이다. 개발에서 가장 중요한 질문은어떻게 해야 가장 효과적으로 배울 있는가?” 이고, 대답은 짧은 학습 주기를 여러 거치면 된다는 것이다.


  • 피드백

대부분의 상황에서 소프트웨어 개발 프로젝트가 문제에 부딪힐 환경을 개선하는 가장 효과적인 방법은 피드백을 줄이는 것이 아니라 늘리는 것이다.

    • n 결함을 쌓아두지 말고, 코드를 작성하는 대로 바로 테스트하라

    • n 문서나 상세계획서를 만들지 말고, 코드를 작성해서 아이디어를 확인하도록 시도하라

    • n 사용자에게서 요구사항을 모으지 말고, 나중에 사용하게 사용자 화면 가지를 보여주고 의견을 수집하라.

    • n 사용할 도구를 고르는 너무 많은 노력을 들이지 말고, 현재 도구 가운데 제일 나은 개를 골라 테스트해 보라

    • n 한번에 전체 시스템을 바꿀 방법을 찾으려 애쓰지 말고, 기존 시스템에 기반의 화면을 만들어 여기에서 새로운 아이디어를 얻도록 노력 하라

개발자는 그들의 직접적인 고객이 누구인지와 그들에게 정기적인 피드백을 제공하는 방법을 알아야 한다. 문제가 발견되면 제일 먼저 일은 피드백 루프가 모두 완전한지 확인하는 것이다. 말은 자신의 직접적인 고객이 누구인지 모두 알아야 한다는 의미다.


  • 반복(Iterations)

반복이란 짤게 정해진 기간 내에 설계, 프로그램, 테스트, 통합, 배포하여 소프트웨어의 유용성을 증가시키는 것을 말한다. 이것은 최종 제품의 일부로 실제 사용된다는 사실을 제외하고는 제품 개발 과정에서 만드는 프로토타입과 매우 유사하다. 소프트웨어는 향후의 계속적인 반복을 통해 개선되기는 하지만, 처음 만들어질 때부터 작동되는 테스트를 거친 통합된 코드다.

반복은 순차적 소프트웨어 개발에서 엄청난 피드백을 발생시키므로 고객과 개발자, 시스템에 관심 있는 다양한 사람들 간에 훨씬 폭넓은 의사소통을 가능하게 한다.

반복의 3가지 원칙

    • 작은 단위 작업은 자원 활용도를 높임으로써 작업자 사이의 의사소통을 향상시키고 품질을 높인다. 작은 단위의 작업은 피드백 루프가 짧아서 다루기가 쉽다.

    • 반복 주기가 짧아지면, 시스템은 예측보다 사실에 반응하게 된다.

    • 반복은 작업자 개인이나 여러 팀과 고객 간의 의견을 동기화하는 접점이다. 반복은 기능을 완성하여 시스템을 릴리즈 또는 선적할 있는 상태가 바로 지점이다.

반복 주기의 초기에는 개발팀이 개발할 기능들의 난이도를 추정하고, 고객이나 고객 대표로 하여금 예상 비용을 감안하여 기능의 우선순위를 결정하게 하는 계획 세션을 수행한다. 가장 높은 비즈니스 가치를 먼저 제공하려면 가장 중요한 기능을 먼저 개발해야 한다. 위험성이 높은 항목들도 나중으로 미루지 말고 일찍 시작하는 것이 좋다.


728x90
Comments