완전한 재 작업의 가능성을 줄이는 방식으로 코드를 구현하는 방법 [폐쇄

StackOverflow https://stackoverflow.com/questions/937457

  •  06-09-2019
  •  | 
  •  

문제

나는 단일 사소한 사양 변경으로 인해 제대로 사소한 일이 없었습니다. 프로젝트가 시작될 때 바로 완료된 경우 그 대부분의 작업 처음에는 필요하지 않았을 것입니다.

이러한 일이 일어나지 않도록하는 좋은 팁/디자인 원칙은 무엇입니까?

또는 기능 요청 또는 설계 변경 중간 구현을 구현하기 위해 필요한 코드에 대한 재 작업량을 줄이려면?

도움이 되었습니까?

해결책

모듈화. 일을 잘하는 작은 코드 블록을 만드십시오. 그러나 그게 시작일뿐입니다. 일반적으로 코드에 기여하는 많은 요인 조합으로 인해 완전한 재 작업이 필요합니다. 매우 불안정한 요구 사항, 열악한 설계, 코드 소유권 부족, 목록은 계속됩니다.

다른 사람들이 제기 한 것에 추가 : 커뮤니케이션.
귀하와 고객, 귀하 및 관리, 귀하 및 다른 개발자, 귀하와 귀하의 QA 부서 간의 커뮤니케이션은 모든 사람 간의 커뮤니케이션이 중요합니다. 경영진이 합리적인 기간을 이해하고 귀하와 고객이 건물의 것이 무엇인지 정확히 이해하도록하십시오.

다른 팁

시간을내어 고객과의 커뮤니케이션을 개방하여 제품을 구축하는 제품을 개방하십시오. 이정표를 작성하고 각 이정표에서 고객에게 프로젝트를 표시 할 시간을 설정하십시오. 고객이 이정표를 보여줄 때 마일스톤에 완전히 실망하더라도, 당신은 당신이 가진 것을 긁고 마지막 이정표에서 다시 시작할 수 있습니다. 또한 Csunwold가 언급 한 것처럼 작업을 서로 독립적으로 작동하는 블록으로 구축해야합니다.

포인트들...

  1. 열린 의사 소통을 유지하십시오
  2. 제품 진행에 개방적이고 정직하십시오
  3. 제품 변경에 대한 고객 비즈니스 및 사양에 따라 매일 기꺼이 변경하십시오.

소프트웨어 요구 사항이 변경되며 고객과의 더 빈번한 상호 작용을 제외하고는 할 수있는 일이 많지 않습니다.

그러나 변화에 더 강력한 코드를 구축 할 수 있습니다. 더 이상 필요하지 않아야한다는 요구 사항을 충족시키는 코드를 던지는 것을 막을 수는 없지만 그러한 변경의 영향을 줄일 수 있습니다.

예를 들어, 적용 할 때마다 클래스 (또는 언어의 동등한) 대신 인터페이스를 사용하고 절대적으로 필요하지 않은 한 인터페이스에 작업을 추가하지 마십시오. 그런 식으로 프로그램을 구축하면 특정 구현에 대한 지식에 의존 할 가능성이 적고 필요하지 않은 것들을 구현할 가능성이 적습니다.

이 접근법의 또 다른 장점은 한 구현을 다른 구현을 쉽게 교체 할 수 있다는 것입니다. 예를 들어, 때로는 멍청한 (효율성)를 작성하는 것이기도하지만 프로토 타입을 작성하고 테스트하는 데 가장 빠르며 프로토 타입이 제품의 기초와 실제로 성능이있을 때 마침내 더 똑똑한 것으로 대체합니다. 문제. 나는 이것이 조기 최적화를 피하고 물건을 버리는 매우 효과적인 방법이라는 것을 알았습니다.

모듈성은 말한 것처럼 답입니다. 그러나 실제로 사용하는 것은 어려운 해답이 될 수 있습니다. 초점을 맞추는 것이 좋습니다.

  • 사전 정의 된 일을 잘 수행하는 작은 라이브러리
  • 모듈 간의 최소 의존성

먼저 인터페이스를 작성하는 것은 두 가지를 모두 달성하는 좋은 방법입니다 (종속성에 사용되는 인터페이스와 함께). 다음에 코드가 쓰기되기 전에 다음에 인터페이스에 대해 테스트를 작성하면 종종 모듈 식 디자인 선택을 강조합니다.

귀하의 앱이 UI- 집약적인지 여부는 모르겠습니다. 그것은 모듈 식이기가 더 어려워 질 수 있습니다. 여전히 노력의 가치가 있지만, 그렇지 않다면, 그것이 오래 전에 버려지고 빙산 원칙을 따를 것이라고 가정하면, 작업의 90%가 UI에 묶여 있지 않으며 모듈 식을 유지하기가 더 쉽다고 가정합니다.

마지막으로, 나는 Andrew Hunt와 Dave Thomas의 "The Pragmatic 프로그래머"를 팁으로 가득 찬 것으로 추천합니다. 내가 개인적으로 가장 좋아하는 것은 건식입니다 - "반복하지 마십시오" - 같은 것을 두 번 냄새 맡는 코드.

  • 작은 반복

  • 자주 반복하십시오

  • 반복 사이의 테스트

  • 고객이 입력 할 수 있도록 간단한 작업 제품을 최대한 빨리 얻으십시오.

기본적으로 가정합니다 물건이 버려지기 때문에 적절하게 코딩하십시오, 그리고 그것을 버리는 데 많은 시간이 걸리는 것에 충분히 멀리 떨어져 있지 않습니다.

g'day,

여기서 다른 답변을 살펴보면 모든 사람들이 다음 프로젝트를 위해 무엇을 해야하는지 언급하고 있음을 알 수 있습니다.

그래도 누락 된 것 같아 한 가지는 사양이 왜 왜 사양인지 알아내는 것입니다. 동기화되지 않았습니다. 고객이 필요한 실제 요구 사항으로.

이 작업을 수행하지 않으면 다음 프로젝트를 구현하는 방법에 관계없이 실제 요구 사항과 사양 사이에 여전히 불일치가 있다면 걱정됩니다. 다음 프로젝트의 경우 다시 한번 같은 상황에 처할 것입니다.

의사 소통이 좋지 않거나 고객 요구 사항이 크게 간단 할 수 있습니다.

그러나 적어도 원인을 알고 원인을 다시 알 수 있다면 다시 일어날 가능성을 최소화 할 수 있습니다.

다른 답변의 말을 두드리지 않고 거기에는 훌륭한 것들이 있지만, 당신이 그것을 반복하도록 정죄받지 않도록 무슨 일이 있었는지 배우십시오.

HTH

건배,

때로는 다시 쓰기가 최상의 솔루션입니다!
카메라 용 소프트웨어를 작성하는 경우 다음 버전이 비디오 또는 스테레오 비디오 또는 3D 레이저 스캔도 수행 하고이 모든 기능에 대한 모든 후크를 포함한다고 가정 할 수 있습니다. 제트 엔진을 포함한 다음 카메라에 대처하십시오. 그러나 돈, 자원 및 성능이 너무 많이 들기 때문에 그렇게하지 않는 것이 좋습니다.

새로운 역할에서 새로운 기능에 대한 완전한 재 작성이 항상 나쁜 생각은 아닙니다.

Csunwold가 말했듯이 코드 모듈화는 매우 중요합니다. 한 조각이 오류가 발생하기 쉬운 경우 시스템의 나머지 부분을 차지하지 않도록 작성하십시오. 이렇게하면 나머지 부분에 안전하게 의존 할 수있는 단일 버기 섹션을 디버깅 할 수 있습니다.

이 외에도 문서가 핵심입니다. 코드가 깔끔하고 명확하게 주석이 나면 미래에 재 작업하는 것이 당신이나 디버깅을하는 사람이 무한히 쉬워 질 것입니다.

소스 제어를 사용하는 것도 도움이 될 수 있습니다. 코드 조각이 제대로 작동하지 않는다면 항상 과거의 강력한 반복으로 되돌릴 수있는 기회가 항상 있습니다.

예제에 직접 적용되지는 않지만 코드를 작성할 때는 앞으로 소프트웨어가 진화하는 것을 볼 수있는 방법을 주시하려고합니다.

기본적으로 나는 소프트웨어가 어디로 갈지 예상하려고 노력합니다. 하지만 비판적으로, 나는 내가 상상할 수있는 일을 구현하려는 유혹에 저항합니다. 제가 후에는 API와 인터페이스가 이러한 기능을 구현하지 않고 가능한 미래를 지원하도록 노력하는 것입니다.

물론 항상 일하는 것은 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top