프로그램을 개발 중에서 릴리스로 어떻게 전환합니까?


67

어떤 시점에서 프로그램이 개발 중입니다. 기능이 항상 추가 또는 제거 또는 변경되고 있습니다. 모든 버전은 프로토 타입 일뿐입니다. 그래서 그 시점에서 슈퍼 클린 코드를 작성하는 데 많은 시간을 소비하지 않습니다. 물론 코드 표준을 특정 표준에 맞추려고하지만 시간은 항상 문제입니다.

그런 다음 프로그램이 완료되고 의사 결정자 (들)가 "그게 다"라고 말하는 시점이됩니다. 이 시점에서 작동하는 프로토 타입이 있지만 내부의 코드는 개발 단계에서 앞뒤로 약간 지저분합니다. 나는 테스트 / 최종 디버깅을 시작할 것으로 예상되지만 내 직감은 이제 어떻게 든 유지 보수 등을 쉽게하는 적절한 아키텍처를 제공하기 위해 물건을 정리하고 다시 작성해야한다고 말합니다.

일단 재료가 테스트되고 승인되면 다시 작성하는 것은 의미가 없습니다. 정기적으로 작업중인 '완료된'프로토 타입으로 서 있고 테스트 중에 버그가 발생하며 이것이 전체 개발 프로세스의 결과 인 스마트하지 않은 코딩의 결과임을 알 수 있습니다. 나는 테스트 중이며 버그 수정은 다시 작성 될 것입니다 ... 엉망입니다!

더 나은 / 교과서 방법이 있습니다. 그러나 모든 것이 교과서가 아닌 실제 작업 환경에서 일해야합니다.

그러면 작업 프로토 타입을 안정적인 코드 기반의 릴리스 버전으로 어떻게 전환합니까? 어쩌면 개발이 완료된 것을 고려하지 말아야하고 실제로는 정리 단계로보아야합니다 ... 잘 모르겠습니다. 여기에 도움이 필요합니다.

편집하다

몇 가지를 명확히하고 싶습니다.

  • 코드를 깨끗하고 읽을 수 있기 직전과 직후에 100 %하고 있습니다. 그러나 나는 또한 일을 끝내고 코드의 아름다움을 깨끗하고 반짝이는 꿈을 꾸지 못합니다. 타협을 찾아야합니다.

  • 종종 새로운 기능은 실제로 우리가 시도하고 싶은 것과 같은 것을 구현하는 것이 타당한 지 여부입니다. (예 : 실제 앱에서 실제 모양과 느낌을 얻기 위해 모바일 앱에서) 따라서 첫 번째 "보자"반복에서 너무 많은 작업을 정당화하지 않는 것은 작습니다. 그러나 때때로이 tech.debt를 언제 지불해야합니까? 이것이 바로이 질문에 관한 것입니다.

언젠가 기능의 절반이 삭제 될 것임을 알면 (지금까지 회사에서 충분한 경험을 쌓았음에도 불구하고) 내 문제에 접근하는 가장 좋은 방법은 그럼에도 불구하고 모든 것을 깨끗하게 작성하기 위해 여분의 시간을 투자하는 것임을 믿기가 어렵습니다. 그것의 대부분은 직후에 떨어질 것입니다. 일단 문제가 해결되면 큰 정리를 한 번하면 시간을 절약 할 수 있다고 생각합니다.


68
당신의 질문은 "나는 구멍에 파고, 어떻게 나가?" 표준 답변은 물론 1 단계입니다. 정지 탐지기. 귀하의 개발 프로세스는 "대량의 기술 부채를 생성 한 다음 적법한시기에이를 무시합니다"라고 요약 될 수 있습니다. 이것이 문제인 경우 개발 프로세스를 변경하십시오. 신중하게 작성된 사양을 충족하는 깨끗하고 작동하며 디버깅되고 신중하게 검토 된 코드 만 체크인하십시오. 빚에 빠지지 마십시오. 빚에서 벗어날 필요는 없습니다.
Eric Lippert

11
@NikkyD 적절한 구현 시간이 없다면 소프트웨어 품질에 미치는 영향에 대해 관리자와 대화해야합니다. 여기에있는 모든 사람들이 당신에게 말하는 것을 이해하십시오. 선행 시간에 투자 하지 않으면 나중에 효율적으로 일할 수있는 능력이 손상됩니다. 또 다른 문제는 당신이 회사를 떠나야한다면 (또는 버스로 도망치게 된다면) 새로운 개발자들이 코드에 익숙해지는 데에는 매우 많은 비용 이들 것 입니다. 그들이 지금 절약하고 있다고 생각하는 돈은 나중에 비용이들 것입니다.
jpmc26

32
기능에 대해 제안 된 사용자 인터페이스를 조롱하기 위해 작은 기능 분기를 작성하는 경우 좋습니다. 원하는대로 빠르고 더티하게 만들고 클라이언트에 표시 한 다음 해당 분기삭제하십시오 . 자동차 제조업체가 새로운 디자인을 만들기 위해 찰흙과 종이로 자동차를 만들 때, 찰흙 모델에 엔진을 넣으려고하지 않습니다. 기능의 가치가 있는지 판단하는 프로세스는 저렴해야합니다. 이 기능을하기로 결정하면, 당신이 시작되어 있는지 확인 에서 깨끗한 코드를 항상 생성 하는 코드가 지금이기 때문에, 깨끗한 코드를 생산 코드 .
Eric Lippert

10
"코드의 아름다움이 모두 깨끗하고 반짝이는 것을 꿈꿀 수 없습니다"이것은 "깨끗한 코드"의 의미에 대한 근본적인 오해입니다. 깨끗한 코드는 오후에 탭을 정렬하여 코드를 인쇄하고 프레임을 만들 수 있다는 의미는 아닙니다. 깨끗한 코드 좋은 코드이고 좋은 코드 깨끗한 코드입니다. 클린 코드는 올바르게 작동하고 디버깅 할 수 있고 이해할 수있는 코드입니다. 당신이 처음부터 깨끗한 코드를 작성할 시간이 없다면, 당신은 확실히 지저분한 코드를 작성하는 시간이 없어 다음 나중에 고칠. 그것은 단지 시간이 걸리는 작업입니다.
GrandOpener

8
"나는 또한 일을 끝내야하고 코드의 아름다움이 깨끗하고 반짝이는 것을 꿈꿀 수 없다. 절충안을 찾아야한다." 타협은 양쪽에 "충분히 좋은"중간 지점을 의미합니다. 코드가 지저분하고, 특히 코드를 유지 관리하는 데 문제가 있다고 생각할 정도로 지저분 할 경우, "충분히"충분하지 않으며 더 나은 타협점을 찾아야합니다.
anaximander

답변:


98

그래서 그 시점에서 슈퍼 클린 코드를 작성하는 데 많은 시간을 소비하지 않습니다.

무언가가 얼마나 오래 지속되는지 알지 못한다면 결코 구식에 대한 변명이되어서는 안됩니다. 가장 깨끗한 코드는 IMHO입니다. 변경해야 할 때 방해가되지 않습니다. 그래서 내 추천 : 항상 당신이 할 수있는 깨끗한 코드를 작성하려고 - 특히 프로토 타입을 코딩 할 때. 무언가를 변경해야 할 때 (확실히 일어날 것입니다) 적용하는 것이 훨씬 쉬울 것입니다.

"가장 깨끗한 코드"에 대한 나의 이해는 아름다움을 위해 코드를 아름답게 만드는 것과는 아무 관련이 없습니다. 그것은 실제로 당신을 늦출 수있는 것입니다. 내 관점에서 볼 때 깨끗한 코드는 대부분 자체 설명하는 코드입니다 (많은 문서를 작성할 필요가 없습니다-속도 향상을 유발합니다), 이해하기 쉽습니다 (오류가 적으므로 디버깅이 덜 필요합니다-속도 향상, 올바른 시간을 찾는 데 필요한 시간이 적음) 변경해야 할 위치-속도 향상), 필요한 최소한의 코드로 주어진 문제 해결 (디코드 할 코드가 적음-명백한 속도 향상), DRY (무엇을 변경해야 할 때 변경해야 할 곳-속도 향상-도입 위험 감소) 두 번째 장소를 바꾸는 것을 잊어 버린 새로운 버그), 코딩 표준 (생각하기에 성가신 일이 적음)을 따르고 작은 것을 사용합니다.

테스트 / 최종 디버깅을 시작할 것으로 예상되지만 내 직감에 따라 유지 관리 등을 쉽게하는 적절한 아키텍처를 제공하기 위해 물건을 정리하고 다시 작성해야한다고 말합니다.

"정리"후에는 작동하지 않습니다. 새 기능을 구현 하기 전에 또는 구현을 시작할 때는 정리 하지만 나중에는 정리 하지 마십시오. 예를 들어, 기능에 대한 방법을 터치 할 때마다 10 줄을 초과하는 것을 발견 하면 기능을 완성하기 전에 즉시 더 작은 방법으로 리팩토링하는 것을 고려 하십시오. 기존 변수 또는 함수 이름을 감지 할 때마다 그것이 의미하는 바를 정확히 알지 못하면, 변수가 무엇인지 알아 내고 다른 것을 하기 전에 이름을 바꾸십시오 . 이 작업을 정기적으로 수행하면 최소한 "충분히 깨끗한"상태로 코드를 유지해야합니다. 그리고 당신은 시작 시간을 절약 - 디버깅을위한 더 적은 시간이 필요하기 때문이다.

테스트 중이며 버그 수정은 다시 작성됩니다.

... 위에서 작성한 내용의 실제 증거입니다. "더러운"상태가되면 코드 디버깅을 시작할 때 즉시 돌아와서 속도가 느려집니다.

정리를 즉시 수행하면 거의이를 피할 수 있습니다. 그러면 버그 수정은 코드의 작은 변경을 의미하지만 주요한 아키텍처 변경은 아닙니다. 테스트하는 동안 아키텍처 개선에 대한 증거를 실제로 발견 한 경우이를 지연시키고 문제 추적 시스템에 배치 한 후 다음 번에 해당 변경으로 인한 기능을 구현 해야 할 때 ( 해당 기능을 시작 하기 전에 ) 구현하십시오.

물론 약간의 훈련과 코딩 경험이 필요합니다. "테스트 중심 개발"이라는 아이디어와 비슷한 아이디어로, 나중에 이러한 작업을 수행하는 대신 이러한 작업을 미리 수행합니다 (TDD도 도움이 될 수 있지만 TDD를 사용하지 않더라도 내가 작성한 내용은 작동합니다). 결과적으로 이렇게하면 릴리스하기 전에 특별한 "정리 단계"가 필요하지 않습니다.


40
@NikkyD Doc Brown의 제안은 실제로 걸리는 시간을 줄이고 습관적으로 매우 현실적인 습관입니다. 코드 를 변경해야때마다 코드를 끊지 않는 방법을 알아 내기 위해 코드를 검사 할 필요가 없다면 얼마나 많은 시간을 절약 할 수 있는지 생각해보십시오 . 이득은 "헌트 앤 펙"타이핑에서 터치 투 학습 유형으로 변경하는 것과 유사합니다. 배우는 동안 처음에는 시간이 더 걸릴 수 있지만 일단 습관이 있으면 더 나아질 수 있으며 나머지 직업에 도움이 될 것입니다. 시도하지 않기로 선택하면 절대 거기에 가지 않습니다.
Daniel

44
@ NikkyD : 그것은 시간대를 팽창시키지 않습니다. 기간은 이미 부풀었다. 당신은 당신이 소프트웨어를 작성하고 예산으로 책정되지 않은 기술 부채에 들어갔을 때 팽창을 설명 하지 않았습니다 .
Eric Lippert

7
@ NikkyD : 나는 당신에게 클레이의 발기술 부채 의 개념을 가진 우상을 제시합니다 . 전자는 흔들리는 기초에 사운드 소프트웨어를 구축 할 수 있음을 의미하고, 후자는 구조가 사운드가 아닐 때 다루려고하는 기능에 의해 경험되는 "흥미로운"(추가 비용)에 관한 것입니다.
Matthieu M.

10
@NikkyD : 아니요, 당구 전문가가 자신의 공을 재생하는 방식과 유사한 코드를 작성하는 것이 좋습니다. 샷 후에 공이 새 "간단한 샷"위치에서 멈추기 때문에 각 샷은 외부인에게 단순 해 보입니다. 그리고 당구 또는 코딩에서, 연습하는 데 몇 년이 걸립니다 ;-)
Doc Brown

16
@ NikkyD : 내 경험에 따르면, "작은 기능을 추가하려면 많은 리팩토링이 필요합니다"라는 코드는 이미 엉망이며 "많은 리팩토링"의 필요성은 당신이 한 기능이나 클래스를 변경해야한다는 사실에서 비롯됩니다. 과거에는 충분히 깨끗하게 유지하지 마십시오. 지금까지 일을 못하게하십시오. 그러나 그러한 상황에 처해 있다면 타협점을 찾으십시오. 최소한 "boyscout 규칙"을 따르고 기능을 추가하기 전보다 더 나은 상태로 코드를 남겨 두십시오. 따라서 다음 주에 기능이 제거 되더라도 코드는 이전보다 나은 모양이어야합니다.
Doc Brown

22

동일한 증상 (느슨한 코드)을 가진 두 가지 별도의 문제가 있습니다.

문제 # 1 : 불충분 한 요구 사항 제어 이해 관계자가 요구 사항을 너무 자주 변경한다는 의미는 아닙니다. 버그 수정 / 테스트주기 동안 요구 사항을 변경할 수 있다는 의미입니다. 민첩한 방법론조차도이를 지원하지 않습니다. 당신은 빌드하고, 테스트하고, 제공하고, 새로운 요구 사항을 주입합니다.

문제 # 2 : 작성하는 내용이 "지금 당장"이라고 생각합니다 . 소프트웨어 개발에서 "지금 당장"코드는 매우 드 rare니다. 사용자 요구 사항을 충족하면 공급과 수요가 엄격 해져서 되돌아 가서 "완료"기능을 다시 구현하는 것을 정당화하기가 매우 어려워집니다. 그래서 어떻게해야합니까? 항상 생산 코드를 작성하십시오. 기능적으로는 이해 관계자에 대한 추정치가 상당히 커야하므로 제대로 할 수 있습니다.

또한 개발자로서 가장 어려운 위치에서 작업하고 있음을 이해하십시오. Joel Spolsky의 사내 개발자의 삶에 대한 내용을 읽어보십시오 . 따라서 온전함을 그대로 유지하려면 각별히주의해야합니다.


21

일반적으로 소프트웨어 시험 풍선 을 만들 때 일반적으로 발생하는 문제 입니다.

도움이 될 수있는 여러 가지 방법이 있습니다. 첫째, TDD 접근법은 코드 기반을 엄격히 요구되는 수준으로 줄이는 데 도움이 될 수 있습니다. 테스트가 코드와 함께 진행된다면 최소한 코드가 정상적으로 동작한다는 확신을 가질 수 있습니다.

시간을내어 리팩토링하십시오. 프로토 타입을 가지고 있고 고객이 손에 들고 싶어하는 경우, 완성 된 제품을 연마 할 시간이 필요하다고 말하는 것은 어려운 일입니다. 나는 매일 체크인하고 리 팩터 체크인을하지만 YMMV를 체크인하고 싶습니다.

코드를 빠르게 작성하는 개발자는 종종 수요가 많습니다. 우리는 마지막 부서에 그러한 개발자를 두었습니다. 모든 팀은 그를 매우 빨리 일했기 때문에 그를 원했습니다. 그러나 코드를 테스트하고 릴리스 할 때가되면 바퀴가 빨리 빠졌습니다. 하드 코딩 된 물건, 해킹 및 바로 가기. 그의 주식은 곧 크게 떨어졌습니다.

처음부터 생산 코드를 자르는 것은 드래그처럼 보일 수 있지만 환경에 따라 GhostdocStylecop 와 같은 개발 과정에서 벗어날 수있는 많은 도구가 있습니다 .

처음부터 올바른 개발 마인드를 얻는 것이 좋습니다. 스톱 갭 솔루션으로 여겨 졌던 백 오브 패킷 (back-of-fag-packet) 시스템이 얼마나 중요한 응용 프로그램이되는지 놀라실 것입니다.


당신은 의미 모든 권리, 지금까지 기록 된 정지 간격 솔루션을?
RubberDuck

4
고객에 대한 정당성에 대한 좋은 점. GUI가 완료되면 응용 프로그램도 완료되었다고 생각하는 고객에 대한 풍부한 경험이 있습니다. 백그라운드의 코드가 아직 준비되지 않은 상태에서 GUI가 불완전하게 보이도록하는 법을 배웠으므로 결과적으로 코드 (및 비즈니스 논리)가있을 때 고객이 보는 것만 세련되게 보이게합니다. 고객에게 완성 된 디자인이 실제로 제공 되려면 한두 달이 걸릴 것이라고 설명하기는 매우 어렵습니다.
Luaan

11

연달아

개발 속도는 깨끗하고 읽기 쉽고 테스트 가능한 코드를 작성하는 주요 이유입니다. 아름다움이나 다른 추상적 인 가치를 위해 이루어지지 않았습니다. 내가 왜 그 자신을 거부하고 나중에 미래의 프로그래머를 위해서만할까요?

물론 외관상의 변화가 필수적 일 수 있습니다. 나는 개발 중에 지금 당장 엉망이되고 나중에 완벽하게 만들기를 희망하는 것보다 적당히 좋은 코드를 갖는 것이 훨씬 더 유용하다고 주장했다. 시간).


6
+1 그리고 개인적인 관점에서, 나는 집에서 개인 프로젝트를 해킹하고 하루 종일 생산 코드를 작성하는 것에서 기어를 바꾸는 것이 너무 어렵다는 것을 알았습니다. 내 취미 프로젝트에서 전문 코드를 작성하면 즉시 배당금을 지불했습니다. 코드를 쉽게 읽을 수 있었고 버그가 훨씬 적었습니다.
Robbie Dee

결코 일어나지 않을 한 가지 이유는 시간이 지남에 따라 더 잘하는 것입니다. 따라서 반년 동안 무언가를 "정리"할 때까지 기다리면 안전하게 정리하는 데 필요한 모든 분을 잊을 수있을뿐만 아니라 이전보다 더 나은 프로그래머가 될 수 있습니다. 모든 것을 버리고 다시 시작합니다. 그리고 그것은 많은 작업 (그리고 종종 나쁜 생각)이기 때문에 정리를 다시 건너 뛸 것입니다.
Luaan

"왜 저 자신에게 그것을 거부하고 나중에 미래의 프로그래머를 위해서만할까요?" 시현! 그리고 무엇을 추측합니까? 당신은 때때로 (때로는 종종) 미래의 프로그래머입니다.
radarbob

@RobbieDee, 최고의 관찰! 인터뷰에서 "10,000 시간 규칙"을 대중의 인식 ( Outliers 책에서)으로 가져간 Malcom Gladwell 은 그것이 "심의 한 연습"이어야한다고 말하거나 시간을 낭비하고 있다고 말했다. 개선에 중점을두고, 기술의 특정 측면을 향상시키려는 의도로 실습에 중점을 둡니다.
radarbob

@ThanosTintinidis, "좋은 행동은 처벌되지 않습니다"문제가 있습니다. 그러한 깨끗한 코드를 작성하면 누군가는 필연적으로 그것을 강화시킵니다. 다른 사람이 깨끗한 코드를 만질 때 코드 검토 자인지 확인하십시오. 간단한 추가 방법 중 하나 는 인라인으로 문서화 된 캡슐화와 일관성 불었습니다 . 나는 일주일 동안 분노했다. 그리고 1 년 후, 그 코드를 볼 때마다.
radarbob

4

"이것이 어떻게 작동하는지 보려고 노력하고 있습니다"코드와 "제품으로 향하고 있습니다"코드를 구분하여이 작업을 수행합니다. 여러 가지 방법이 있습니다.

하나는 분기 또는 소스 제어 시스템에있는 단어입니다. 새 보고서 또는 새 가져 오기 레이아웃 등을위한 분기를 만듭니다. 사람들이 그것을 좋아한다면, 메인 지점으로 다시 가져 오는 작업은 별도의 추적 가능한 작업입니다. 다른 사람에게 할당되어보고 될 수 있으며 해당 기능이 제품에 속하는 날 관리 (또는 영업)가 동의 한 것처럼 마술처럼 일어날 것으로 예상되지는 않습니다.

다른 하나는 스파이크입니다. 제품에서 그러한 변경을 수행하지 마십시오. 당신은 코드를 넣을 수있는 장소에 대해서만 존재하는 매우 간단한 별도의 앱으로 이동합니다. 새로운 API 등을 탐색하기 때문에 원하는만큼 지저분해질 수 있습니다. 그리고 다시 돌아와서 "예, 우리는 그렇게 할 수 있습니다. 어떻게해야하는지 알아 냈습니다."제품에 코드를 작성하여 제품에 코드를 작성하여 원하는 것을 수행 할 수있는 추적 가능하고보고 가능하며 할당 가능한 작업이 무엇인지 알아 냈습니다.

두 경우 모두, 제품 준비는 읽기 쉬운, 깔끔한, 명명 표준을 따르고, 테스트와 함께 코드 스타일 및 성능 목표를 준수 함을 의미합니다. 두 경우 모두 해당 작업을 표시합니다. 다른 사람이 제품에서 기능을 다시 사용할 가능성이 높을 때마다 모든 작업을 수행하고 싶지는 않다는 데 동의합니다. 그러나 그 작업이 보이지 않게하고 싶지는 않습니다. 별도의 제품 사본 또는 테스트 하네스보다 거의 관련이없는 관련 제품에서 작업하면 누군가가 원하는 것을 결정하면 제품 준비 코드를 작성하는 작업을 수행 할 수 있습니다.

단점은 내일 무언가를 원한다는 결정을 내릴 수 없다는 것입니다. (반 증명, 지저분한, 테스트되지 않은, 문서화되지 않은, 아마도 반 증상을 의미합니다.) 그들은 당신이 그 정면에서 푸시 백을 할 때, 단지 당신이 매번 길고 (더 비싼) 방법을 사용 해야하는지 묻기 만하면 거부 된 기능으로의 경로가 느려집니다. 올바르게 요청하면 "아니오"가 표시됩니다.


1

실제로 나는 당신이 이미 문제를 이해하고 있다고 생각합니다. 문제는 코딩 스타일이 너무 많은 재 작업을 요구한다는 것입니다. 재 작업이 너무 많이 필요한 이유는 (a) 불충분 한 예측 및 계획과 함께 (b) 개발 과정에서 정기적으로 투입되는 증분 단기 패치가 조합하여 필요한 재 작업의 복잡성을 증가시키기 때문입니다.

따라서 대답은

(a) 개발 스타일을 폭포쪽으로 조금 더 민첩하게 옮기십시오. 클래식 폭포에는 자체 함정이 있기 때문에 계속 가지 마십시오. 건강 균형이 있어야합니다. 개발이 완료되지 않은 것처럼 때로는 며칠 동안 물건에 대해 생각하는 것과 관련이 있다는 것을 알고 있지만 프로세스를 신뢰해야합니다. 엔지니어링에서는 물건을 모은 다음 맨 위에 못을 박을 수 없으며 우아한 솔루션이 나오기를 바랍니다. 아키텍처와 더 높은 수준의 기술 설계를 수행하는 사람이 없다면 바로 그 일을 의미합니다. 그 일을 소홀히하는 대가를 치르고 있습니다.

(b) 패치하는 것을 피하십시오. QA를해야 할 때에 만 장기적으로 생각하지 마십시오. 실제로, 당신은 항상 당신이 만드는 모든 작은 조각을 테스트하고, 행복한 길에 있지 않은 모든 입력 사례를 다루어야합니다. 패치 / 해킹은 정의 상으로는 단기적인 수정이며, 장기적인 비용이 발생할 수 있으며 시스템의 총 소유 비용을 고객에게 부딪칩니다. 다시 말하지만, 코드를 꺼내야한다는 압력이 가중되어 균형이 맞아야합니다. 그러나 단기 수정 프로그램을 제자리에 두지 마십시오. 실제로 느슨하게 결합되어야하는 구성 요소를 단단히 결합하는 구성 요소. 시간이 지남에 따라 올라가고 관리하기 어려운 해킹과 패치를 피하기 위해 재 작업이 가능 해져서 훨씬 쉽게 만들 수 있습니다.


2
민첩성이 "생각없이 빈번한 변경"또는 "디자인이 적음"을 의미하지는 않습니다. 실제로 민첩성은 사람들이 일반적으로 폭포라고 부르는 것보다 훨씬 더 많은 디자인이 필요하다는 것을 알았습니다. 좋은 디자인의 부족은 실제로 폭포가 제대로 작동하지 않는 이유 중 하나입니다. 실제로 디자인에 제대로 투자하면 제대로 작동합니다. 또한 민첩성보다 훨씬 비쌉니다. 애자일에서 디자인 부분을 건너 뛰면 코드를 함께 쓸어 버릴 것입니다. 디자인을 피하는 다른 연습보다 더 잘 작동하지 않습니다.
Luaan

짧은 반복에 민첩 초점은, 스프린트는 등, 빠른 프로토 타입을 받고, 반드시 앞까지 충분한 설계를 무시에 더 압력을 넣는다
브래드 토마스

아니요, 더 작은 부품 설계에 중점을 둡니다. 그러나 전반적 으로 많은 것을 디자인 해야합니다 . 그렇지 않으면 끔찍한 제품을 생산할 것입니다. 핵심은 사물을 작고 잘 설계하고 상호 교환 가능하게 만드는 것입니다. 민첩하게 디자인 하지 않으면 자신과 고객에게 장애를 겪게됩니다. 짧은 반복은 전제 조건이나 프로세스의 일부가 아닌 민첩성을 사용 하는 이점 입니다. 일단 모든 것을 충분히 얻으면 갑자기 짧은 반복을 감당할 수 있습니다 .
Luaan

더 큰 그림이 일반적으로 재 작업의 가장 중요한 원인 일 때 작은 부품을 디자인하는 데 더 중점을 두는 것은 중요한 문제입니다. 나는 비즈니스에 많은 돈이 낭비되었다는 것을 보았습니다. "하지만 우리는 이것을하기 위해 필요합니다." 작은 느슨하게 결합 된 구성 요소
Brad Thomas

예, 그러나 그 시점까지 이미 길을 잃었습니다 (민첩한지 또는 폭포인지 여부에 관계없이). "큰 그림"이 상대적으로 고립 된 많은 작은 부분으로 구성되어있는 경우, 거의 모든 것을 교체해야하는 경우에만 광범위한 검사를 수행 할 수 있습니다. 어떤 접근 하지 않습니다 당신은 처음부터 다시 시작해야 할 때 당신이 모든 것을 잃는? NASA 수준의 설계조차도 한 번에 "모든 것을 바꿔야합니다"로 이어집니다. 유연하고 적응력을 유지함으로써 작거나 큰 변화를 수용 할 수있는 더 많은 기동 공간을 확보 할 수 있습니다.
Luaan

0

당신은 쓰기:

모든 버전은 프로토 타입 일뿐입니다. 그래서 그 시점에서 슈퍼 클린 코드를 작성하는 데 많은 시간을 소비하지 않습니다. ...

그런 다음 프로그램이 완료되고 의사 결정자 (들)가 "그게 다"라고 말하는 시점이됩니다. 이 시점에서 작동하는 프로토 타입이 있지만 내부의 코드는 개발 단계에서 앞뒤로 약간 지저분합니다.

체크인 된 버전은 "시제품"일 수 있습니다. 기능이 누락되었거나 일부 기능이 완성되지 않았지만 체크인 된 모든 코드는 반드시 정리할 필요가없는 생산 품질 코드 여야합니다.

"정리"를 많이 연기한다고 생각합니다.

내 경험 법칙은 다음과 같습니다.

  • (하위) 기능으로 시작
  • 불완전하고 불완전한 내용을 자유롭게 작성하십시오. 어쩌면 구현중인 것에 대해 느끼거나 코딩의 마지막 시간을 긁어 야하는 c & p가있을 수 있습니다 ( TDD / 테스트와 함께 할 수 있음에 유의하십시오 , 내가 탐색하고있는 구현 공간에 대한 빠른 피드백을 얻기 위해 모든 것이 조금씩 줄어 들었습니다.)
  • 하위 기능 "현재 작동"
  • 이제 SCC 커밋 전에 정리를 수행하십시오 .
    • 코드를 살펴보고 명백한 내용을 확인하십시오.
    • 변경 사항을 검토하고 문제를 발견하기 위해 diff vs last commit을 수행하십시오.
    • 스크래치 패드에 적어 둔 내용 수정
  • 이제 커밋을 수행합니다.이 코드 품질 은 선적 준비가되었습니다.

이 시점에서 커밋 된 코드에는 여전히 정리가 좋을 몇 가지 해결 방법이나 "기술 부채"가 포함될 수 있으며 다음 하위 기능에 대해 자연스럽게해야 할 때 정리할 것입니다. 해당 코드가 그대로 릴리스되면 괜찮습니다.

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