스프린트간에 작업을 빌드하는 것 이외의 민첩한 관행에 이점이 있습니까?


9

나는 최근에 소프트웨어 개발의 민첩한 관행에 관심을 가지게되었으므로이 관행이 전체 비용을 절감 할 수 있다는 많은 기사를 보았습니다.

그 뒤에 숨겨진 논리는 일반적으로 다음과 같습니다. 요구 사항이 변경되면 다음 스프린트 백 로그에이 변경 사항을 반영 할 수 있으며 이는 새로운 기능을 디자인하고 구현하는 데 시간이 걸리기 때문에 비용 절감으로 이어질 것입니다. 유명한 규칙에 따르면, 나중에 요구 사항을 변경해야할수록 그 요구 사항을 충족시키는 것이 더 비싸다는 유명한 규칙에 따라 비용이 줄어 듭니다.

그러나 중대형 소프트웨어 프로젝트는 복잡합니다. 요구 사항이 갑자기 변경되었다고해서 해당 요구 사항을 충족시키기 위해 시스템의 다른 부분을 만질 필요는 없습니다. 많은 경우 아키텍처를 매우 크게 수정해야하므로 이전 아키텍처에 의존했던 모든 기능을 다시 구현해야합니다. 따라서 비용 절감의 요점은 여기서 사라집니다. 물론 새로운 요구 사항이 시스템의 새로운 독립적 인 부분을 요구하는 경우 문제가되지 않고 기존 아키텍처가 커지면 다시 생각하거나 다시 구현할 필요가 없습니다.

그리고 그 반대입니다. 폭포를 사용하고 있고 새로운 요구 사항이 도입되어야한다는 사실을 갑자기 깨닫게되면 디자인을 변경할 수 있습니다. 기존 아키텍처를 변경해야하는 경우 다시 설계하십시오. 그것이 실제로 그것을 엉망으로 만들지 않고 시스템의 새로운 부분을 소개한다면, 모든 일을하고 문제없이 여기에서하십시오.

즉, 민첩한 개발이 가진 유일한 장점은 스프린트 사이에 기능을 완벽하게 구축하는 것 같습니다. 많은 사람들과 prjects에게는 이것이 중요하지 않습니다. 또한 애자일은 전체적으로 소프트웨어 아키텍처가 나빠지는 것처럼 보입니다. 기능이 서로 겹치기 때문에 애자일 팀은 기능이 작동하는 방식이 아니라 기능 만 관리하기 때문입니다. 시스템이 시간이 지남에 따라 복잡해지면 민첩한 개발 관행이 실제로 전체 제품 아키텍처에서 혼란을 증가시켜 결국 변경을 도입하기가 점점 더 어려워 지므로 더 높은 비용을 초래하는 반면 폭포는 아키텍처를 완벽하게 만들 수 있습니다 당신이 아무것도 풀기 전에.

분명히 많은 사람들이 프로덕션 환경에서 민첩성을 사용하므로 어딘가에 잘못해야하기 때문에 누군가 내가 여기서 잘못 가고 있다고 지적 해 줄 수 있습니까?


당신은 요점이 있습니다. '폭포'라는 용어는 (IT의 다른 많은 용어와 마찬가지로) 보편적 인 정의가 하나도 없다고 지적하고 싶습니다. 대부분의 사람들은 2000 페이지의 전체 요구 사항을 작성하고 서명하지 않으면 코드를 작성할 수 없다고 생각합니다. 반드시 그런 것은 아닙니다.
NoChance

예, "폭포"란 스프린트가 아닌 마일스톤 사이에서 (가장 기본적으로) 기능 사양-> 디자인-> 코드의 선형 프로세스를 의미합니다. 그리고 2000 페이지의 페이지 요구 사항과 기술 사양이 반드시 필요한 것은 아니며, 클래스의 기본 책임과 서로의 관계가 종종 최상위 디자인으로 충분합니다.
tux91

3
@ EmmadKareem : 실제로 폭포에서 적절한 경우입니다. 디자인의 모든 세부 사항이 완성 될 때까지 코딩을 시작하지 않습니다. 다행히 실제 워터 폴은 소프트웨어 개발에 거의 적용되지 않습니다. 대부분 실제로 작동하지 않기 때문입니다.
tdammers

1
귀하의 의견에 감사드립니다. 그러나 이것은 몇 번 일어났습니다. 폭포 방법에는 소유자가 없으며 다르게 적용하고 해석 할 수 있습니다. 너는 .... 또는 다른 ...까지 코드를 작성하지 않는다고 말하는 규칙이 없다. 이것은 방법론이 아니기 때문이다. 좋은 방법론에 싸여있을 때, 사용자가 시스템에서 필요한 것의 핵심을 알고있는 프로젝트에서 특히 의미가 있다고 생각합니다.
NoChance

@Emmad Kareem : 동의합니다. 민첩한 방법이 요구 사항이 명확하지 않고 최종 요구 사항을 얻기 위해 많은 프로토 타입과 사용자 피드백이 필요한 프로젝트에 더 적합하다고 생각합니다. 반면에 핵심 요구 사항이 처음부터 분명한 경우가 있습니다. 이 경우에는 민첩한 방법보다 폭포와 더 유사한 개발 방법을 채택하려고합니다. 나는 그것이 실제로 작업중 인 프로젝트의 종류에 달려 있다고 생각합니다.
조르지오

답변:


7

우선 "폭포"모델은 항상 소프트웨어 개발 프로젝트를 실행하지 않는 방법을 설명하는 짚맨이었습니다. 찾아 봐

어쨌든 대부분의 "폭포"SDLC 프로젝트는 사람들이 사양에 기록 된 가정이 더 이상 유효하지 않다는 것을 발견 할 때 "변경 관리"프로세스를 수반합니다 (이는 항상 대규모 복잡한 프로젝트에서 발생 함). 불행히도 변경 관리 프로세스는 예외 처리 수단으로 구축되었으며 어리석은 비용이 발생하여 프로젝트가 늦거나 품질이 떨어질 수 있습니다.

애자일 방법론의 기본 개념은 변화가 주어진다는 것입니다. 따라서 예외 처리가 아닌 "변경 관리"표준 작업을 수행해야합니다. 쉽지는 않지만 많은 훌륭한 디자인 방법을 사용하면 가능하다는 것을 알게되었습니다.

프런트로드 디자인의 또 다른 주요 문제는 요구 사항을 수집하고 디자인, 개발 및 테스트하는 데 많은 시간이 소요된다는 것입니다. 또한 테스트가 마지막 단계이고 심각한 문제가 발견되면 시간 내에 수정 될 가능성이 거의 없습니다.

아마도 애자일 접근 방식의 가장 좋은 기능 중 하나는 솔루션을 개발하는 팀과 솔루션을 필요로하는 고객 간의 지속적인 상호 작용 (즉, 실제 커뮤니케이션)이 필요하다는 것입니다. 우선 순위가 가장 높으므로 우선 순위가 가장 높은 항목이 먼저 수행됩니다 (시간이 지나면 우선 순위가 낮은 항목이 삭제됨). 피드백이 빨리 온다.

극적인 변화에 대한 질문으로 돌아가서 변화를 완화시키는 방법을 사용해야합니다. 우수한 SOLID OO 사용자는 소프트웨어를 회귀 테스트 할 수 있도록 견고한 자동 테스트 스위트를 구축 할 수 있으므로이 부분에서 큰 역할을 할 수 있습니다. 방법론에 관계없이 이러한 작업을 수행해야하지만 민첩하게 행동하려는 경우에는 반드시 필요합니다.


큰 감사합니다. 애자일에서 디자인이 작동하는 방식과 왜 그렇게 나쁘지 않은지에 대한 주제를 읽으려는 모든 사람들에게 http://jamesshore.com/Agile-Book/incremental_design.html
tux91

8

글쎄, 몇 가지 장점이 있습니다. 첫 번째는 고객이 사양 문서를 읽지 않는다는 것입니다. 이제까지. Waterfall은 모든 사람들이 처음에 사양에 동의 할 것이라고 가정하고 1 년 후 일치하는 사양에 소프트웨어를 고객에게 제공하면 만족할 것입니다. 실제로 고객은 실제로 필요한 모든 것을 발견하고 실제로는 필요하지 않으며 소프트웨어 자체를 적극적으로 사용할 때 실제로 다른 것이 필요합니다. 애자일은 고객에게 실용 프로토 타입을 제공하므로 이러한 연결 해제가 즉시 포착됩니다. 애자일은 변화하는 요구 사항에만 대응하는 것이 아닙니다. 또한 변경 비용이 높을 때 변경 비용이 낮을 때가 아니라 변경 비용이 일찍 발생하도록하는 것도 중요합니다.

두 번째 장점은 애자일이 가시적 인 결과물을 자주 볼 수 있기 때문에 프로젝트가 철로를 벗어날 가능성이 적다는 것입니다. 큰 Waterfall 프로젝트를 사용하면 실현하지 않고도 너무 쉽게 빠져 나갈 수 있습니다. 폭포는 프로젝트가 끝날 때 여러 달에 걸쳐 죽음을 행진합니다. Agile을 사용하면 몇 주마다 고객에게 제품을 제공하기 때문에 모든 사람이 프로젝트의 위치와 슬립을 신속하게 파악 (및 조정) 할 수 있습니다. 내 경험상, Waterfall은 마지막에 100 시간의 주 또는 몇 개월을 생산합니다. 민첩성은 스프린트가 끝난 후 12 시간 동안 며칠을 기다려야 할 수도 있음을 의미합니다.

세 번째 장점은 애자일 프로젝트가 더 동기 부여되는 경향이 있다는 것입니다. 사람들이 1 년 동안의 프로젝트에서 어떤 종류의 추진력을 갖는 것은 매우 어렵다. 마감일이 너무 멀어 보이고 즉시 성이 부족하다는 것은 사람들이 미루고 과도하게 디자인하는 경향이 있고 그렇지 않으면 매우 생산적으로 일하지 않는 것을 의미합니다. 스펙 문서와 같이 사람들이 원하지 않는 일에 초기 개월이 소비되기 때문에 특히 그렇습니다. 애자일은 항상 가까운 시일 내에 매우 즉각적이고 구체적인 마감일을 가지기 때문에 사람들은 더 동기를 부여하는 경향이 있습니다. 다음 주에 예정된 일련의 과제에 대해 구체적인 마감일을 미루는 것이 훨씬 어렵다.


첫 번째 주장은 바로 그것이 민첩한 인상을주는 것입니다. 끊임없이 변화하는 요구 사항을 처리합니다. 또한 요구 사항을 조기에 변경하더라도 아키텍처를 망칠 가능성이 여전히 존재하므로 기존 코드를 많이 구현할 수 있습니다. 두 번째 주장은 왜 폭포 프로젝트가 죽음의 행진을 일으키는 지 자세히 설명해 주시겠습니까? 간결한 기술 사양과 결합 된 작은 원칙처럼 여기에서 놀라운 일을 할 수 있습니다. 셋째, 폭포 프로젝트를 아래에서 위로 만들고 한 번에 한 번에 빌드 할 수있는 문제는 무엇입니까?
tux91

2
Waterfall 프로젝트에 대한 나의 경험은 계획된 시간의 처음 90 % 동안 항상 제 시간에 맞춰져 있다는 점입니다. 모든 스프린트마다 데모를 주장하는 애자일의 모델은이 가능성을 훨씬 낮게 만듭니다. 사람들이 일주일 반에 책임을 질 것이라는 것을 알면 대개 9 개월 안에 책임을 질 때보 다 더 나은 동기 부여를받습니다. 그것은 단지 인간의 심리학입니다.
로봇 고트

1
글쎄, 나는 경험이 약간 다르지만 경험과 논쟁 할 수는 없다고 생각합니다. 수동 코딩의 좋은 디자인으로 많은 문제가 발생하지 않으며 추정치도 꽤 좋았습니다. 폭포를 사용하면 결과 아키텍처가 더 견고하다고 생각합니다.
tux91

2
고객 사양을 매우 신중하게 읽는 몇 가지 영역 (주로 안전 신호, 철도 신호, 항공 전자 공학 등)이 있습니다 . 그것들은 매우 드물며 어쨌든 매우 다른 개발 방법론으로 이어지는 경향이 있습니다.
Donal Fellows

4

반 민첩한 반대자들에 대한 근본적인 오해 인 질문의 인용에 응답하여

"... 폭포를 사용하면 아무 것도 해제하기 전에 아키텍처완벽하게 만들 수 있습니다 ." 오류입니다. 문제를 해결하겠습니다. "... 폭포를 사용하면 아키텍처완벽하게 만들 수 있으므로 아무 것도 해제 하지 않아도 됩니다. "

Waterfall이 어떻게 고품질 아키텍처를 제공하는지에 대한 암시는 근본적으로 거짓이며 경험적 역사적 증거에 의해 완전히 반증됩니다.

Facebook이 5 억 명의 사용자를 어렵고 빠른 요구 사항으로 폭포수 방식으로 설계하고 완벽하게 지원할 수있을 때까지 출시되지 않은 오늘날 아무도 그 소식을 듣지 못했습니다.

YouTube, Twitter 및 수많은 다른 회사와 동일합니다.

그들은 고객이 작업에 반응하고 대응할 수있는 것을 얻었고 가능한 빨리 그것을 발표했습니다. 그들은 피드백을 받고 그것을 다듬어 다시 발표했습니다. 반복하십시오. 이러한 세 가지 예에서 고객이 가치를 거의 또는 전혀 알지 못하는 것에 대해 가능한 한 적은 시간을 고객이 수용하고 원하는 기능으로 만 응답하는 방식입니다.

소프트웨어 개발 경험이 풍부한 사람이라면 완벽한 아키텍처 와 같은 것은 없다는 데 동의 할 것입니다 . 다른 대안보다 엔트로피와 큰 진흙 공에서 시작하는 것입니다. 애자일은 이것을 인정하고 그것을 고려합니다. 기술 부채, 빠른 우선 순위 지정 및 리팩토링과 같은 프로세스를 구축합니다.


3
"never"라는 단어를 사용하면 Waterfall을 사용하여 수행 된 소프트웨어 제품이 없다고 말하는가? 또한 성공적으로 구현 된 특정 이정표에 대한 일련의 요구 사항이있는 경우 왜 "아무 것도"릴리스하지 않는 이유는 무엇입니까?
tux91

1
@ tux91 당신은 나를 위해 내 요점을; 아무것도 이제까지됩니다 완벽하게 요구 디자인 종이에 넣어 즉시 변경하고 한 줄의 코드가 기록되기 전에 사용되지 않는 것을 제공합니다. 따라서 내가 인용 한 진술은 잘못된 것이므로 아키텍처를 완벽하게 완성하지 못하므로 아무것도 발표하지 않습니다.

1
@ tux91은 여전히 ​​이해력을 읽었으며, 지사 아키텍처가 없으며 인용문이있을 때까지 릴리스하지 않으면 아무것도 릴리스되지 않습니다. 나는 당신이 주장하는 것을 말하지 않았습니다. 기간, 이것은 당신의 머리와 해석에 있습니다. 내가 말한 것은 폭포가 어떻게 든 더 나은 품질의 아키텍처를 제공한다는 주장 은 오류이며 근본적으로 결함이 있다는 것입니다. 그리고 NASA와 폭포에 대한 이러한 주장들과 그렇지 않은 것들; 프로그래머 와 관련이없는 것 외에도 빛나는 성공 스토리가 아닌 그 문제로 인해 3 명의 우주 비행사가 사망했습니다.

1
@ tux91 "결코"의 사용 WRT, 내가 여기 재로드와 함께 오전 : 질문 말한다 "폭포는 당신이 할 수 있도록 완벽하게 ..." - 단어 "결코"(이 비현실적 "완벽한"상황에서) 완전히 적절한에있는 그가 카운터. 내가지지하지 않는 유일한 이유는 건설적인 질문에 대한 답변에 대한 투표를 피하려고하기 때문입니다.
gnat

1
@gnat 그래 내가 단어를 사용할 때 내가 생각하지 않았다 추측 완벽 그게 내가 실제로 의미하지거야,
tux91

3

스크럼 자체는 일반적인 프레임 워크이므로 기술 관행을 규정하지 않습니다.

민첩한 소프트웨어 개발에는 팀의 기술 우수성이 필요합니다. 이것은 XP (익스트림 프로그래밍)의 다음 기술 관행 에서 비롯됩니다 . 예를 들어 리팩토링, tdd, 전체 팀, 페어 프로그래밍, 증분 디자인, CI, 협업 등에 대해 배워야합니다.

그렇게하면 빠르고 안전하게 변경을 처리 할 수있게되는데, 이는 애자일 개발을 처음 사용하는 주된 이유이기도합니다.

중요한 민첩성 측정 중 하나는 정기적으로 (매주, 격주마다) 귀중한 작동 소프트웨어를 고객에게 공개하는 경우입니다. 그렇게 할 수 있습니까? 그럼 당신은 내 책에 민첩합니다.


내가 얻지 못한 것은 폭포 기반 프로젝트가 변경하기가 더 어렵 기 때문에 "변경을 빠르고 안전하게 처리 할 수있다"는 것입니다. 왜 그런 겁니까? 그것은 단지 코드베이스입니다. 변경해야 할 사항, 설계 및 기존 아키텍처, 코드, 테스트 및 릴리스에 적합한 방식을 지정하십시오. 스프린트라고 부르지 말고 마일스톤이라고 부르십시오. 시간이 오래 걸리거나 민첩한 것보다 더 많은 어려움이있는 것 같지 않습니다. 차이점은보다 신중한 계획을 세우지 만 엄격하게 XP 작업을 수행 할 필요는 없다는 것입니다.
tux91

@ tux91 내 답변을 업데이트했습니다. 건축에 관해서는 필자 가 "증분 설계"라고하는 것에 대해 이것을 거나 26:20이것을 보는 것이 좋습니다 .
Martin Wickman

2

저에게 애자일의 주요 이점은 프로젝트의 위험을 줄이는 것입니다.

반복적으로 제공하고 사용자 기반에서 많은 피드백을 받으면 실제로 원하는 것을 제공 할 가능성이 높아지고 가능한 한 빨리 가장 중요한 기능을 실용적으로 제공하여이를 수행 할 수 있습니다. 이론적으로는 더 나은 추정 및 계획으로 수행됩니다. 이것은 단순히 릴리스 가능한 빌드보다 훨씬 더 비즈니스 관점에서 매우 매력적입니다.

이 끊임없는 변화가 시스템을 손상시키고 품질을 떨어 뜨린다 고 주장 할 수 있지만 두 가지를 말씀 드리겠습니다. 1) 이러한 변화는 어쨌든보다 전통적인 소프트웨어 제공 프로젝트에서 발생합니다. 프로젝트에서 나중에 설명되지 않고 나중에 발생하기 때문에 변경이 더 어렵고 비용이 많이 듭니다. 2) 애자일은 경험이 많은 동기 부여 된 사람들과 TDD, 페어링 및 코드 검토와 같은 관행을 사용하는 관점에서 이러한 변화를 다루는 것에 대해 많은 이야기를합니다. 품질과 지속적인 개선에 대한 사고 방식이 바뀌지 않으면 민첩한 변화가 문제를 일으킬 수 있음을 암시합니다.


그래, 이것이 폭포의 유일한 장점이라고 생각하는 것입니다. 그러나 개발 단계에있는 동안 누군가에게 제품을 보여주고 싶지 않은 경우가 있습니다. 아직 준비가되지 않았기 때문에 아직 판매 포인트가 없기 때문입니다. 또는 결국 당신이 원하는 것을 아주 확고하게 생각한다면. 테스트, 페어 프로그래밍 및 코드 검토는 전반적인 제품 아키텍처가 우수하다는 것을 보장하지는 않지만 새로운 기능이 제대로 작동하도록 보장하기 위해서만 수행됩니다.
tux91

1

많은 경우 아키텍처를 매우 크게 수정해야하므로 이전 아키텍처에 의존했던 모든 기능을 다시 구현해야합니다.

요구 사항 변경으로 인해 아키텍처를 크게 수정해야하는 경우 아키텍처가 잘못되었거나 요구 사항이 잘못되었습니다. 좋은 아키텍처를 사용하면 가능한 한 많은 의사 결정을 연기하고 시스템 구성 요소를 분리 할 수 ​​있습니다. 좋은 (사용자) 요구 사항은 "다른 데이터베이스 사용"과 같은 것이 아닙니다.

따라서 우리는 훌륭한 작업 아키텍처를 가지고 있다고 가정합니다. 이 경우 민첩한 개발 방법론은 초기 설계 방법론으로이 "세척"을 잃습니다. 결국 민첩한 개발 방법론의 핵심 기능은 코드에서 느슨하게 커플 링을 촉진하는 TDD와 같은 관행으로, 프로젝트가 시작에 가까우거나 성숙하더라도 프로젝트를 고속으로 계속 진행할 수 있습니다.


0

많은 경우 아키텍처를 매우 크게 수정해야하므로 이전 아키텍처에 의존했던 모든 기능을 다시 구현해야합니다. 따라서 비용 절감의 요점은 여기서 사라집니다.

민첩한 프로세스를 수행하면 너무 많은 소프트웨어가 개발되기 전에이 요구 사항을 파악할 가능성이 높아집니다 (변경해야 함). 클라이언트와 작업하지 않고 몇 달 동안 보지 않고 살펴보면 제공 할 준비가 된 "생각"한 후에 만 ​​이러한 주요 아키텍처 문제가 발생합니다.

오히려 컴파일조차하지 않는 거대한 코드 더미보다 테스트 범위가있는 작동중인 응용 프로그램에서 이러한 변경 사항을 구현하려고합니다. 기술 지원을 담당하는 동안 몇 달 동안 개발되어 설치되지 않은 응용 프로그램의 CD를 받았습니다. 우리는 첫 주에 그 문제를 발견 할 수 있었지만, 긴 밤이어서 식당을 주문할 시간이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.