미리 계획을 시도했지만 코드를 망치기 전에는 모든 것을 실제로 예측할 수 없습니다.
완벽한 계획은 완벽한 소프트웨어 디자인 / 아키텍처를 제공 할 것이라고 생각하고 있지만, 이는 사실상 잘못된 것입니다. 이것에는 두 가지 큰 문제가 있습니다. 첫째, "종이에"와 "코드"가 거의 일치하지 않으며, 그 이유는 실제로 수행하는 것과 반대로 수행되어야하는 방법 을 말하기 가 쉽기 때문 입니다. 둘째, 예상치 못한 요구 사항의 변화는 개발 프로세스 후반에 명백 해져서 처음부터 추론 할 수 없었습니다.
애자일 운동에 대해 들어 보셨습니까? 그것은 "계획을 따르는 것"(다른 것들 중에서)과 달리 "변화에 반응하는 것"을 중요하게 생각하는 방법입니다. 다음은 선언문입니다 (빠른 읽기입니다). BDUF (Big Design Up Front)와 함정에 대해 읽을 수도 있습니다.
불행하게도, "Agile"회사 버전은 가짜 (인증 된 스크럼 마스터, "Agile"이라는 이름의 무거운 프로세스, 스크럼 강제, 100 % 코드 적용 강제 등)의 무리이며, 일반적으로 관리자 때문에 비정형 프로세스 변경을 초래합니다 애자일은 프로세스이자 은총 알이라고 생각합니다. 민첩한 선언문을 읽고 밥 삼촌과 마틴 파울러처럼이 운동 을 시작한 사람들의 말을 듣고 넌센스 버전의 "기업 민첩성"에 빠지지 마십시오.
특히 과학 코드 에서 TDD (Test Driven Development)를 수행하면 일반적으로 벗어날 수 있으며 , 소프트웨어 프로젝트가 상당히 훌륭하게 진행될 가능성이 높습니다. 성공적인 과학 코드는 주로 2 차적인 (때로는 경쟁적인) 관심사 인 성능을 가진 매우 사용 가능한 인터페이스를 가지고 있기 때문에 더 "욕심 많은"디자인으로 벗어날 수 있기 때문입니다. 소프트웨어 세력의 TDD 종류가되게합니다 울트라 사용할 수있는 당신이 어떻게 쓰기 때문에, 원하는 일이 (이상적)라고 당신이 실제로 구현하기 전에 할 수 있습니다. 또한 간단한 "입력"/ "출력"방식으로 신속하게 호출 할 수 있는 작은 인터페이스로 작은 기능 을 강제 실행 하며 리팩토링하기에 적합한 위치에 있습니다. 요구 사항이 변경되는 경우
나는 우리 모두 numpy
가 성공적인 과학 컴퓨팅 소프트웨어 라는 것에 동의 할 수 있다고 생각 합니다. 그들의 인터페이스는 작고 매우 유용하며 모든 것이 잘 어울립니다. 참고 numpy
: S 참조 가이드는 명시 적으로 TDD 권장 ' https://docs.scipy.org/doc/numpy-1.15.1/reference/testing.html을 . 나는 과거에 SAR (Synthetic Aperature Radar) 이미징 소프트웨어를 위해 TDD를 사용해 왔으며, 특정 도메인에서 매우 잘 작동한다고 주장 할 수도 있습니다.
주의 사항 : TDD의 디자인 부분은 분산 시스템과 같이 기본적인 리팩토링 (소프트웨어의 동시성이 필요하다고 결정하는 것과 같은)이 어려운 시스템에서는 잘 작동하지 않습니다. 당신은 동시 사용자의 수백만, TDD를하고있는 페이스 북과 같은 무언가를 설계했다 예를 들어, 만약 것 사용하는 것이 여전히 좋아 실수 ((디자인을 구동하기 위해) 후 당신은이 예비 설계를하고, 그냥 "테스트 첫번째 개발을 "). 코드로 들어가기 전에 응용 프로그램의 리소스와 구조에 대해 생각하는 것이 중요합니다 . TDD는 고 가용성, 분산 시스템으로 이어지지 않습니다.
프로그램을 처음부터 완전히 다시 빌드했을 때 항상 기분이 좋아지지 않게하려면 어떻게해야합니까?
위의 사항을 감안할 때 완벽한 디자인은 실제로 달성하기가 불가능하므로 완벽한 디자인을 추구하는 것은 바보 게임입니다. 당신은 정말로 가까워 질 수 있습니다. 처음부터 다시 디자인 할 수 있다고 생각 하더라도 아직 보이지 않는 숨겨진 요구 사항이있을 수 있습니다. 또한 재 작성 은 원래 코드를 개발하는 데 걸리는 시간보다 오래 걸립니다 . 새로운 디자인에는 예상치 못한 문제가있을 가능성이 높기 때문에 기존 시스템의 모든 기능을 다시 구현해야 할 가능성이 거의 없기 때문에 거의 확실하지는 않습니다 .
고려해야 할 또 다른 사항은 요구 사항이 변경 될 때 설계가 실제로 중요하다는 것 입니다.아무것도 변경되지 않으면 디자인이 얼마나 나쁘 든 중요하지 않습니다 (현재 사용 사례에서 완전히 작동한다고 가정). 22,000 줄 스위치 문이있는 기준선에서 작업했습니다 (기능이 더 길었습니다). 끔찍한 디자인 이었습니까? 그래, 끔찍했다. 우리가 고쳤나요? 아니요. 정상적으로 작동했으며 시스템의 일부에서는 실제로 충돌이나 버그가 발생하지 않았습니다. 프로젝트에 참여한 2 년 만에 한 번만 연락을 받았으며, 누군가는 그것을 추측하여 스위치에 다른 케이스를 삽입했습니다. 그러나 가끔 만지는 것을 고치기 위해 시간을내는 것은 가치가 없습니다. 불완전한 디자인을 그대로 유지하고 고장이 나거나 끊어지면 고치지 마십시오. 그래서 어쩌면 당신은 할 수 더 잘 할 ... 그러나 다시 쓸 가치가 있습니까? 무엇을 얻을 수 있습니까?
HTH.