임시 솔루션이 영원히 지속되는 것을 어떻게 막습니까?


79

문제에 대한 두 가지 가능한 해결책이 있다고 가정 해 봅시다. 첫 번째는 빠르지 만 해키입니다. 두 번째가 바람직하지만 구현하는 데 더 오래 걸립니다. 문제를 신속하게 해결해야하므로 가능한 한 빨리 문제를 해결하고 나중에 더 나은 솔루션에 대한 작업을 시작할 계획입니다. 문제는 문제가 해결 되 자마자 할 일 목록이 급락한다는 것입니다. 어느 시점에서 더 나은 솔루션을 넣을 계획이지만 지금 구현하는 것을 정당화하기는 어렵습니다. 갑자기 완벽하지 않은 솔루션을 사용하여 5 년을 보냈고 그동안 저주를 받았습니다.

익숙한 것 같습니까? 내가 일하는 곳에서 한 번 이상 일어났다는 것을 알고 있습니다. 한 동료는 의도적으로 잘못된 GUI를 만들어 실수로 장기적으로 채택되지 않도록 설명합니다. 더 나은 전략이 있습니까?


좋은 질문입니다. 이러한 유형의 솔루션이 많은 프로젝트로 이동했습니다. 나는 간절히 답변을 기다리고 있습니다.
Chris Marasti-Georg

빠르지 만 해키는 영구적 인 경향이 있습니다. 개인 프로젝트 (작은 웹 사이트)에서 10 년 전에 작성한 "임시"솔루션이 오늘날에도 여전히 사용되고 있습니다.
Powerlord

답변:


37

해킹이 실패한 테스트 케이스를 작성하십시오.

해킹이 실패한 테스트를 작성할 수 없다면 결국 해킹에 문제가없는 것입니다. 그렇지 않으면 테스트 프레임 워크가 부적절합니다. 전자의 경우 불필요한 최적화에 인생을 낭비하기 전에 빨리 달아나십시오. 후자의 경우 다른 접근 방식을 찾으십시오 (핵 신고 또는 테스트 ...)


그것은 가능한 최선의 해결책입니다. 실패한 테스트는 종종 높은 우선 순위입니다.
Toon Krijthe

1
실패한 테스트가 우선 순위가 높기 때문에 이것은 문제에 대한 해결책이 아니라 팀 및 / 또는 관리자를 적대하는 좋은 방법입니다.
Michael Borgwardt

1
그것이 우리 팀에 반하는 것이라면 분명히 그들은 내 "더 나은 솔루션을 시작하려는 계획"에 동의하지 않는 것입니다. 그들이 맞다면 "빠른"버전은 해킹이 아니라 유효한 해결책입니다. 테스트 실패를 설계하는 것은 내 코드가 현재 상태로 충분한 지 확인하는 가장 좋은 방법입니다.
Steve Jessop

1
... 내 일반적인 요점은 "빠른"수정이 충분하면 문제가 잘못된 문제를 제기하고 해결해서는 안된다는 것입니다. "수행 할 필요가없는 작업을 어떻게해야합니까?". "빠른"수정이 출시하기에 충분하지 않다면 동료들은 그렇게 말하는 테스트에 반대하지 않을 것입니다.
Steve Jessop

1
또한 나는 어리석은 사람들이 한 번 읽고 무의식적으로 따라갈 수있는 은색 총알 개발 방법론을 8 단어로 제안하는 것이 아니라 모든 가능한 코드 결함을 추적하고 수정할 수 있다는 점에 유의하십시오 ;-) 가지고있는 메커니즘을 사용하십시오 (테스트 ), 지능적으로 결함을 측정 할 수 있습니다. 정말로 테스트를 작성할 수 없다면 코드에 결함이 있는지 확인하는 다른 방법을 찾으십시오. 코드가 결함과 함께 제공 될 수있는 경우 "선택적"테스트를 고려하십시오. 그러나 무엇보다도 문제를 객관적으로 정량화하십시오.
Steve Jessop

17

전략 1 (거의 선택되지 않음) : kluge를 구현하지 마십시오. 사람들에게 가능성을 알리지도 마십시오. 처음에는 올바른 방식으로 수행하십시오. 내가 말했듯이, 이것은 시간 제약으로 인해 거의 선택되지 않았습니다.

전략 2 (부정직) : 거짓말과 속임수. 경영진에게 해킹에 버그가 있으며 나중에 중대한 문제를 일으킬 수 있다고 말합니다. 불행히도 대부분의 경우 관리자는 버그가 문제가 될 때까지 기다린 다음 버그를 수정하라고 말합니다.

전략 2a : 실제로 버그가 있다는 점을 제외하면 전략 2와 동일합니다. 그래도 같은 문제입니다.

전략 3 (그리고 개인적으로 가장 좋아하는) : 가능할 때마다 솔루션을 설계하고 인턴 또는 코드 원숭이가 할 수있을만큼 충분히 잘 수행하십시오. 자신의 급여를 정당화하는 것보다 적은 양의 코드 원숭이 돈을 지출하는 것을 정당화하는 것이 더 쉽기 때문에 그냥 끝낼 수도 있습니다.

전략 4 : 재 작성을 기다립니다. 계속 기다리십시오. 조만간 (아마 나중에) 누군가가 그 일을 다시 작성해야 할 것입니다. 그때 바로 할 수있을 것입니다.


전략 4의 유일한 문제-마침내 재 작성을 수행 할 때 주요 시간과 예산 제약이 있습니다. 따라서 해킹이 복사되거나 다른 복잡한 솔루션이 재 작성에 포함됩니다.
Ken Ray

1
전략 4의 문제점은 5 년 간의 해결 방법 및 수정 후에 다시 작성할 준비가되었을 때 번역에서 무언가 손실된다는 것입니다.
Giovanni Galbo

바로 그거죠. 기본적으로 가지고 있던 것과 동일한 애플리케이션을 제공하지만 추가 버그가있는 6 개월의 재 작성 비용을 지불하는 것보다 비즈니스 이해 관계자를 화나게 만드는 것은 없습니다. Startegy 5 : 적절할 때 점진적으로 신중하게 리팩토링합니다.
Eric Z Beard

16

다음은 기술적 부채 에 대한 훌륭한 관련 기사입니다 .

기본적으로 그것은 당신이 내리는 모든 기술적 결정과 부채의 비유입니다. 좋은 부채와 나쁜 부채가 있습니다. 그리고 최소한의 장기 비용으로 원하는 목표를 달성 할 부채를 선택해야합니다.

최악의 빚은 신용 카드 빚과 유사한 작은 누적 지름길입니다 ... 각각은 다 치지 않지만 곧 가난한 집에있게됩니다.


훌륭한 기사입니다. 감사합니다. 제가 질문을했을 때 저는 II-A-2 (신용 카드)가 아닌 II-A-1 (자동차 대출 비유) 유형의 부채를 생각하고있었습니다. 나는 이제 그러한 부채가 좋을 수 있고 조직이 그들을 위해 명시 적으로 계획 할 수 있음을 알게되었습니다.
Tommy Herbert

14

이것은 마감일 중심의 작업을 할 때 중요한 문제입니다. 이 방법을 선택한 이유에 대한 자세한 설명과 코드 작성 방법에 대한 힌트를 추가하면 도움이됩니다. 이렇게하면 코드를 보는 사람들이 코드를보고 최신 상태로 유지할 수 있습니다.

작동 할 또 다른 옵션은 재 작업을 자세히 설명하는 추적 프레임 워크에 bug.feature를 추가하는 것입니다. 그렇게하면 볼 수 있고 어느 시점에서 문제가 발생할 수 있습니다.


동의합니다. 추적 시스템에 항목을 추가하십시오. 문제는 일반적으로 기능과 관련된 중대한 문제가없는 한 임시 솔루션이 해결되지 않는다는 것입니다. 유지 관리 할 수없는 코드를 유지 관리하지 않는 한 이것은 괜찮습니다. 그 문제를 어떻게 제기합니까?
s_t_e_v_e

예. 코드 조각이 실패 할 것이라는 것을 알고 있다면 아직 실패하지 않았더라도 버그이므로 하나로 추적해야합니다. 이것에 대한 또 다른 심리적 이점은 엉성한 수정을 할 때 프로젝트의 버그 수가 증가한다는 것입니다.
Robert Rossney

13

이러한 문제를 수정하는 것을 정당화 할 수있는 유일한 경우 (실제로 손상되지 않았기 때문에 추악하기 때문)는 동일한 코드 섹션에 영향을주는 또 다른 기능이나 버그 수정이 있고이를 다시 작성하는 것이 좋습니다.

개발자의 시간 비용에 대해 계산해야합니다. 소프트웨어 요구 사항이 충족되고 있고 유일한 잘못된 것은 코드가 내부적으로 난처하다는 것입니다. 실제로 수정할 가치가 없습니다.

열성적인 엔지니어가 불안 해지면 매년 재건축을 고집하기 때문에 기업 전체가 사업을 중단 할 수 있습니다.

버그가없고 요구 사항을 충족하면 완료된 것입니다. 그것을 발송하십시오. 움직여.

[편집하다]

물론 저는 모든 것이 항상 해킹 당한다고 주장하는 것은 아닙니다. 정상적인 개발 과정에서 신중하게 코드를 설계하고 작성해야합니다. 그러나 신속하게 수행해야하는 해킹이 발생하면 코드를 정리할 가치가 있는지 여부에 대한 비용 편익 분석을 수행해야합니다. 응용 프로그램의 수명 동안 문제를 해결하는 것보다 복잡한 해킹을 코딩하는 데 더 많은 시간을 할애한다면 당연히 고쳐야합니다. 그러나 그렇지 않은 경우 소스를 보면 질병이 발생하기 때문에 버그가없는 작동하는 애플리케이션 을 다시 코딩하는 것은 너무 비싸고 위험합니다 .


1
"버그가없고 요구 사항을 충족하면 완료된 것입니다. 배송하십시오. 계속 진행하십시오." 동의하지 않습니다. 저는 현재 매우 복잡한 코드베이스로 작업하고 있으므로 간단한 변경에는 몇 시간이 아닌 며칠이 걸립니다. "버그"는 없지만 구조가 좋지 않아 지속적인 비용이 발생합니다.
Kristopher Johnson

글쎄, 당신은 모든 것을 해킹하고 싶지는 않습니다 . 그러면 당신은 엉망으로 끝납니다. 비용 측면에서 이점이 있습니다. 속도가 너무 느려진다면 다시 코딩해야합니다. 앱 수명 동안 절약 할 시간이 재 설계없이 긴 버그 수정보다 더 중요하다면 다시 코딩해야합니다.
Eric Z Beard

당신의 말이 맞다고 생각 해요, 에릭. 답변을 수정하여 반영 할 수 있습니까?
Tommy Herbert

7

중간 솔루션을 수행하지 마십시오.

가끔은 프로그래머에게이 말만하면된다고 생각합니다.

미안하지만 심각하게 해키 솔루션은 쓸모가 없으며 첫 번째 반복에서도 솔루션의 일부를 올바르게 수행하는 것보다 더 오래 걸릴 수 있습니다.

유지를 위해 쓰레기 코드를 남기지 마십시오. 항상 올바르게 코딩하십시오. 얼마나 오래 걸리고 누가 당신에게 소리를 지르 든 상관 없습니다.

다른 사람들이 어리석은 해킹을 디버깅하는 동안 일찍 배달 한 후 엄지 손가락을 빙빙 돌리고 앉아있을 때 고마워 할 것입니다.

자신이 훌륭한 프로그래머라고 생각하지 않더라도 항상 최선을 다하기 위해 노력하고 지름길을 사용하지 마십시오. 제대로하는 데 시간이 걸리지 않습니다. 당신이 나를 믿지 않는다면이 진술을 정당화 할 수 있습니다.


해킹이 옳은 몇 가지 드문 경우가 있습니다. 일반적으로 Gantt 차트에서 올바르게 수행하는 동안 23 명의 다른 사람들이 아무것도하지 않고 앉아있을 것이라고 말합니다. 또한 토론은 IMO 해킹만큼 프로토 타입에도 적용됩니다.
Steve Jessop

프로토 타입은 없습니다. 프로토 타입은 프로덕션 코드의 또 다른 이름입니다.
Greg D

특히 해킹을 먼저 수행하는 데 총 시간이 오래 걸리지 만 올바르게 수행하면 프로젝트 시간이 단축 될 수 있습니다. 다른 모든 사람들은 적어도 당신의 해킹에 대해 자신의 코드를 테스트 할 수 있습니다. 예를 들어 기능적으로는 완전하지만 허용 할 수없는 성능을 보일 수 있습니다.
Steve Jessop

@Greg D : 프로토 타입은 제품 만은 아니다 제품입니다. 물론 질문자가 막고 자하는 것을 막을 방법이없는 한, 이것이 IMO의 문제가 유사한 이유입니다.
Steve Jessop

프로토 타입을 만들지 말고 스파이크를 만드십시오. 스파이크는 기능을 구현하는 프로덕션 코드의 수직 부분이며 프로토 타입 코드보다 더 많은 시간이 걸리지 않아야합니다. 해킹이 더 빠르다는 것은 단기간이라도 완전한 환상입니다.
Bill K

7

갑자기 완벽하지 않은 솔루션을 사용하여 5 년을 보냈고 그동안 저주를 받았습니다.

저주하는 경우 TODO 목록의 맨 아래에있는 이유는 무엇입니까?

  • 그것이 당신에게 영향을 미치지 않는다면, 왜 저주하고 있습니까?
  • 그것이 당신에게 영향을 미치고 있다면, 지금 해결해야 할 문제입니다.

종종 비즈니스의 요구가 귀하의 고통과 일치하지 않습니다. IT는 비즈니스를 지원합니다. 우리가하는 일이 그들의 목표를 발전시키지 않으면 위험한 단절 위험이 있습니다. 때때로 우리는 IT 전용 프로젝트를 수행 할 수있는 기회를 얻지 만 그 후에도 ...

1
동의합니다. 경영진은 비즈니스 모델이 계속 작동하는 한 그것이 우리에게 영향을 미치는지 상관하지 않습니다. 왜 지금 고쳐야하는지에 대한 비즈니스 케이스를 생각해 내야합니다. 그렇지 않으면 고통스러운 통곡이 귀머거리에 떨어질 것입니다.
Adam Bellaire

비즈니스 요구가 귀하의 고통과 일치하지 않는 경우, 해킹을 적절한 버전으로 대체해서는 안되며,이 질문은 "어떻게 내 고용주의 목적을 전복시켜 내 자신을 위해 봉사 할 수 있습니까?"로 귀결됩니다. 답 : 노조를 형성하십시오.
Steve Jessop

5
  • 나는 단기 수정이 들어간 후에 특히 장기 수정의 우선 순위에 대해 목소리를 낸다.
  • 나는 그것이 해킹이고 장기적인 해결책이 아닌 이유를 자세히 설명하고 이해 관계자 (관리자, 클라이언트 등)가 왜 수정해야하는지 이해하도록하는 데 사용합니다.
  • 경우에 따라 최악의 시나리오에 대한 두려움을 약간 주입 할 수도 있습니다. "안전하게 선이 끊어지면 다리 전체가 무너질 수 있습니다!"
  • 나는 장기적인 솔루션을 내놓을 책임을지고 그것이 배포되도록합니다.

4

힘든 전화입니다. 가끔 당신이 완료 해킹 개인적 원인이 가질 문 밖으로 고객의 손에 해당 제품을 얻을 수 있습니다. 하지만 내가 처리하는 방법은 그냥하는 것입니다.

프로젝트 책임자 나 상사 또는 고객에게 다음과 같이 말합니다. 정리하고 더 잘 코딩해야하는 부분이 있습니다. 나는 그것을하기 위해 일주일이 필요하고 지금 그것을하기 위해 더 적은 비용이들 것이다. 그러면 우리가 서브 시스템에 확장을 구현해야 할 때 지금부터 6 개월 후에 그것을 할 것이다.


프로그래밍 경험에서 잘못 프로그래밍 된 솔루션이 잘 프로그래밍 된 솔루션보다 구현, 테스트 및 출시가 더 빠르다고 믿게하는 것은 무엇입니까? 진지하게. 나는 사람들이 일반적으로 올바른 방법을 모를 때 그것을 말하는 것을 보았습니다.
Bill K

@Bill K : 내 성명서에는 제대로 프로그래밍 된 적이 없었습니다. 아마도 덜 바람직한 솔루션입니다. 그것은 빚에 관한 것입니다. 당신은 빚을지지 않습니다. 나는 내가 빨리 갚을 수있는 작은 빚을집니다. 나중에 언제든지 리팩터링 할 수 있지만 고객은 신경 쓰지 않지만 한 시간 안에 보드에 필요한 보고서에 관심이 있습니다.
MagicKat

@Bill K :이 경우 코드베이스가 DRY가 아닌지 확인하십시오. 그러나 당신은 고객의 영웅입니다. 그런 다음 고객의 손에 들어가면 코드를 쉽게 리팩터링 할 수 있습니다. LONG TERM에서 더 중요한 것은 1 시간 동안 비 DRY 코드베이스이지만 행복한 고객 또는 DRY 코드베이스와 불행한 고객입니다.
MagicKat

4

일반적으로 이와 같은 문제는 경영진 또는 고객과의 잘못된 의사 소통으로 인해 발생합니다. 솔루션이 고객에게 적합하면 변경을 요청할 이유가 없습니다. 따라서 빠른 솔루션을 구현 한 후 문제를 해결하기 위해 추가 시간을 계획 할 수 있도록 사전에 트레이드 오프에 대해 알려 주어야합니다.

그것을 해결하는 방법은 그것이 왜 나쁜 해결책인지에 달려 있습니다. 변경 또는 유지 관리가 어렵 기 때문에 솔루션이 나쁘면 처음에 유지 관리를 수행하고 시간이 조금 더 있으면 더 나은 솔루션으로 업그레이드 할 수있는 적절한시기입니다. 이 경우 고객이나 상사에게 처음부터 지름길을 사용했다고 말하면 도움이됩니다. 이렇게하면 다음 번에 빠른 솔루션을 기대할 수 없다는 것을 알 수 있습니다. UI를 깨우는 것은 고객이 문제를 해결하기 위해 다시 방문하도록하는 좋은 방법입니다.

위험하거나 불안정하여 해결책이 나쁘면 계획을 수행하는 사람과 이야기하고 최대한 빨리 문제를 해결할 수있는 시간을 계획해야합니다.


4

행운을 빕니다. 제 경험상 이것은 거의 불가능합니다.

압박을 받고 있기 때문에 해킹을 구현하는 미끄러운 슬로프를 따라 내려 가면 항상 그것에 익숙해 질 수 있습니다. 내부적으로 아무리 나쁘게 구현 되더라도 이미 작동하는 것을 재 작업 할 시간은 거의 없습니다. "나중에"해킹을 고칠 시간이 마법처럼 더 많을 것이라고 생각하는 이유는 무엇입니까?

이 규칙에 대해 제가 생각할 수있는 유일한 예외는 해킹으로 인해 고객이 필요로하는 다른 기능을 구현하지 못하는 경우입니다. 그러면 재 작업을 할 수밖에 없습니다.


"무엇이 마법처럼 '나중에'해킹을 고칠 시간을 더 많이 가질 것이라고 생각합니까?" 나는 이제이 질문에 답하는 방법을 알고 있습니다. 기술 부채를 수리하는 데 드는 비용이 수리 비용보다 클 때 기업은 기술 부채를 상환하기로 결정할 수 있습니다. Mike Stone이 링크 한 기사를 참조하십시오.
Tommy Herbert

2

가능한 한 고통없이 장기적으로 마이그레이션 할 수 있도록 해키 솔루션을 구축하려고합니다. 가장 강력한 DB 인 SQL Server에서 데이터베이스를 구축하는 사람이 있지만 귀사의 표준은 Oracle입니다. 전송 불가능한 기능 (예 : Bit 데이터 유형)을 가능한 한 적게 사용하여 db를 빌드하십시오. 이 예에서는 비트 유형을 피하는 것이 어렵지 않지만 나중에 전환하는 것이 더 쉬워집니다.


2

해키 방식이 장기적으로 나쁜 이유를 최종 결정하는 책임자에게 교육하십시오.

  • 관련 될 수있는 용어로 문제를 설명하십시오.
  • 비용, 생산성 및 수익 곡선의 그래프를 포함합니다.
  • 그들에게 기술적 부채 에 대해 가르쳐주십시오 .
  • 앞으로 나아갈 경우 정기적으로 리팩토링하십시오.
  • 비 기술적 인 사람들 앞에서 "리팩토링"또는 "돌아가서 정리"라고 부르지 마십시오. 대신, "새로운 기능"을 처리하도록 시스템을 "적응"이라고합니다.

기본적으로 소프트웨어를 이해하지 못하는 사람들은 이미 작동하는 것을 다시 살펴 보는 개념을 이해하지 못합니다. 그들이 보는 방식에서 개발자는 누군가가 기능을 추가하고 싶을 때마다 전체 자동차를 분해하고 재 조립하려는 기계공과 같습니다.

일상적인 일에 비유하는 데 도움이됩니다. 중간 해결책을 만들었을 때 어떻게 안정적이고 유지 보수가 용이 한 것이 아니라 신속하게 건축하는 데 적합한 선택을했는지 설명하십시오. 목재는 절단하기 쉽기 때문에 강철 대신 목재로 건축하는 것과 같습니다. 임시 솔루션을 더 빨리 구축 할 수 있습니다. 그러나 나무는 단순히 20 층 건물의 기초를 지탱할 수 없습니다.


2

지속적인 통합을 위해 Java와 Hudson을 사용합니다. '임시 솔루션'에는 다음과 같이 주석을 달아야합니다.

// TODO: Better solution required.

Hudson이 빌드를 실행할 때마다 각 TODO 항목에 대한 보고서를 제공하여 개선이 필요한 미해결 항목에 대한 최신의 가시적 인 기록을 제공합니다.


1

좋은 질문입니다. 이것도 저를 많이 괴롭 힙니다. 대부분의 경우 제 프로젝트 (예, 소규모 기업)에서 문제의 우선 순위를 정하는 유일한 사람입니다.

수정해야하는 문제는 일반적으로 문제의 일부에 불과하다는 것을 알았습니다. 긴급 수정이 필요한 고객 인 IOW는 전체 문제를 해결하는 데 필요한 것이 아니라 그 일부만 해결할 필요가 있습니다. 이를 통해 전체 문제에 대한 해결책이 아니라 고객의 하위 집합에 대한 해결 방법을 만들 수 있으며 더 큰 문제를 문제 추적기에서 열어 둘 수 있습니다.

물론 작업 환경에 전혀 적용되지 않을 수도 있습니다.


1

이것은 "CTool"의 이야기를 생각 나게합니다. 처음에 CTool은 개발자 중 한 명에 의해 제시되었으며, 우리가 겪고있는 문제를 해결할 수있는 한 가지 방법으로 그를 Don이라고 부를 것입니다. 열심히 일하는 유형 인 Don은 플러그를 꽂아 작동하는 프로토 타입을 전달했습니다. 당신은 내가 이것으로 어디로 가는지 알고 있습니다. 하룻밤 사이에 CTool은 전체 부서가 이에 의존하는 회사 작업 흐름의 일부가되었습니다. 둘째 나 셋째 날에는 CTool의 단점에 대한 불만이 쏟아져 나오기 시작했습니다. 사용자는 Don의 능력, 헌신 및 IQ에 의문을 제기했습니다. 이 앱이 프로덕션 앱이 아니어야한다는 Don의 항의는 귀머거리가되었습니다. 이것은 계속되었다 몇 년 동안. 마침내 돈이 떠난 직후 누군가가 앱을 다시 작성했습니다. 이 무렵, CTool이라는 이름에 너무 많은 혐오감이 붙었고 CTool 버전 ​​2라는 이름은 의문의 여지가 없었습니다. Office Space 의 복사기 (또는 프린터였습니까?) 실행 장면을 연상시키는 CTool에 대한 공식적인 장례식도있었습니다. .

어떤 사람들은 Don이 CTool을 고치는 일을 제대로하지 못해 슬링과 화살을받을 자격이 있다고 말할 수 있습니다. 내 유일한 요점은 솔루션을 해킹 해서는 안된다는 말 은 현실 세계에서 정당화 할 수 없다는 것입니다. 그러나 당신이 그것을 할 사람이라면 조심스럽게 밟으십시오.


1
  • 서면 (이메일)으로 받으십시오. 따라서 나중에 문제가 될 때 경영진은 그것이 일시적이라는 것을 "잊지"않습니다.

  • 사용자에게 표시되도록합니다. 더 눈에 띄는 것은 사람들이 위기가 끝났을 때 돌아가는 것을 잊고 올바른 방식으로하는 것을 잊을 가능성이 적다는 것입니다.

  • 프로젝트, 리소스 및 일정에 대한 임시 솔루션이 마련되기 전에 협상하여 실제 수정 사항을 가져옵니다. 실제 솔루션에 대한 작업은 임시 솔루션이 완료되는 즉시 시작되어야합니다.


1

자신의 "수정"에 대해 두 번째 매우 설명적인 버그를 제출하고 영향을받는 영역에 바로 "이 영역에는 많은 작업이 필요합니다. 결함 # 555 참조"(올바른 수를 사용)라는 작업 주석을 바로 추가합니다. . "핵에 넣지 마"라고 말하는 사람들은 질문을 이해하지 못하는 것 같습니다. 지금 가동하고 실행해야하는 시스템이 있다고 가정하고, 해킹이 아닌 솔루션은 8 일 작업이고, 해킹은 38 분 작업이며, 해킹은 작업을 수행 할 시간을 벌고 돈을 잃지 않을 것입니다. 당신은 그것을하고 있습니다.

이제 고객이나 경영진이 문제를 해결하는 데 지금 필요한 N 분 외에 실제 문제를 해결하는 데 필요한 N * 100 분의 시간을 예약하는 데 동의해야합니다. 그러한 동의를 얻을 때까지 해킹 구현을 거부해야한다면 그게 당신이해야 할 일일 수 있지만, 그 점에서 이해하는 사람들과 함께 일했습니다.


1

빠른 수정을 도입하는 실제 대가는 다른 사람이 두 번째 빠른 수정을 도입해야 할 때 자신의 빠른 수정을 기반으로이를 도입한다는 것입니다. 따라서 빠른 수정이 더 오래 적용 될수록 더 확고 해집니다. 꽤 자주, 해킹은 첫 번째 해킹을 빌드하는 두 번째 해킹을 만날 때까지 제대로 일을하는 것보다 조금 더 오래 걸립니다.

따라서 분명히 빠른 수정을 도입하는 것이 필요할 때가 있습니다.

버전 제어가 지원한다고 가정 할 때 가능한 한 가지 해결책은 이러한 해킹을 할 때마다 소스에서 포크를 도입하는 것입니다. 사람들이이 특별한 "완료"포크 내에서 새로운 기능을 코딩하는 것을 피하도록 장려한다면, 결국에는 해킹을 제거하는 것보다 새로운 기능을 포크와 통합하는 것이 더 많은 작업이 될 것입니다. 그러나 "좋은"포크는 버려 질 가능성이 높습니다. 그리고 당신이 그러한 포크를 만드는 것이 실용적이지 않을 정도로 릴리즈에서 멀리 떨어져 있다면 (위에서 언급 한 이중 통합을 할 가치가 없기 때문에), 어쨌든 해킹을 사용해서는 안됩니다.

매우 이상적인 접근 방식입니다.

보다 현실적인 솔루션은 프로그램을 가능한 한 많은 직교 구성 요소로 분할하고 때때로 일부 구성 요소를 완전히 다시 작성하는 것입니다.

더 좋은 질문은 해키 솔루션이 나쁜 이유입니다. 유연성을 떨어 뜨리기 때문에 나쁘면 유연성이 필요할 때까지 무시하십시오. 그것이 프로그램 동작에 영향을 미치기 때문에 나쁜 경우 무시하고 결국 버그 수정이되어 해결 될 것입니다. 보기 흉해서 나쁘다면 해킹이 현지화되어있는 한 무시하세요.


1

내가 과거에 본 몇 가지 솔루션 :

  • HACK코드에 주석 으로 표시 (또는와 같은 유사한 체계 XXX)
  • 자동 보고서를 실행하고 매주 몇 번이나 HACK댓글이 표시
  • 올바른 솔루션의 줄 번호와 설명과 함께 버그 추적 시스템에 새 항목을 추가합니다 (그러면 해킹을 작성하기 전에 연구에서 얻은 지식이 손실되지 않습니다).
  • 해킹이 어떻게 실패 하는지를 보여주는 테스트 케이스를 작성하고 (가능한 경우) 적절한 테스트 스위트에 체크인합니다 (즉, 누군가가 결국 정리하고 싶어하는 오류가 발생하도록)
  • 해킹이 설치되고 압력이 사라지면 즉시 올바른 솔루션을 시작하십시오.

이것은 훌륭한 질문입니다. 내가 더 많은 경험을 쌓으면서 알아 차린 한 가지는 해킹으로 인해 매우 짧은 시간을 벌고 종종 엄청난 비용이 듭니다. 밀접한 관련이있는 것은 문제라고 생각하는 것을 해결하는 '빠른 수정'입니다. 문제가 아님을 폭파했을 때만 찾을 수 있습니다.


1

당신이 그것을해야하는지에 대한 논쟁을 제쳐두고, 당신이 그것을해야한다고 가정합시다. 이제 트릭은 장거리 영향을 최소화하고 나중에 쉽게 찢어지고 스스로를 성가 시게하여 수정하는 것을 기억하는 방식으로 수행하는 것입니다.

성가신 부분은 간단합니다. 클러지를 실행할 때마다 경고를 표시합니다.

찢어진 부분은 쉬울 수 있습니다. 저는 서브 루틴 이름 뒤에 kludge를 넣는 것을 좋아합니다. 코드를 구분하므로 업데이트하기가 더 쉽습니다. 영구적 인 솔루션을 얻을 때 서브 루틴은이를 구현하거나 작동하지 않을 수 있습니다. 때때로 하위 클래스도 이것에 대해 잘 작동 할 수 있습니다. 하지만 다른 사람들이 당신의 빠른 수정에 의존하게하지 마십시오. 상황을 보지 않고 특정 기술을 추천하는 것은 어렵습니다.

나머지 코드가 괜찮다면 장거리 효과를 최소화하는 것은 쉬울 것입니다. 항상 게시 된 인터페이스를 통과합니다.


1

비즈니스 사람들에게 해킹 비용을 분명히 밝히십시오. 그런 다음 어느 쪽이든 정보에 입각 한 결정을 내릴 수 있습니다.


1

의도적으로 지나치게 제한적이고 목적이있는 방식으로 작성할 수 있으며 수정하려면 다시 작성해야합니다.


0

우리는 이것을 한 번해야했습니다. 우리가 유지하고 싶지 않다는 것을 알고있는 단기 데모 버전을 만들어야했습니다. 고객이 winTel 박스에 담기를 원했기 때문에 SGI / XWindows에서 프로토 타입을 개발했습니다. (우리는 둘 다에 능통했기 때문에 문제가되지 않았습니다.)


0

고백:

다른 코드 레이어에서 데이터를 읽기 위해 C ++에서 '#define private public'을 사용했습니다. 그것은 해킹으로 들어 갔지만 잘 작동하며 수정하는 것이 우선 순위가 아닙니다. 3 년이 지난 지금 ...

해킹이 제거되지 않는 주된 이유 중 하나는 해킹을 수정하는 동안 새로운 버그가 발생할 위험입니다. (특히 TDD 이전 코드베이스를 다룰 때.)


0

내 대답은 다른 사람들과 조금 다릅니다. 내 경험에 따르면 다음 사례는 민첩성을 유지하고 hackey 첫 번째 반복 / 알파 솔루션에서 베타 / 프로덕션 준비로 전환하는 데 도움이됩니다.

  1. 테스트 주도 개발

  2. 리팩토링의 작은 단위

  3. 지속적인 통합
  4. 좋은 구성 관리
  5. 애자일 데이터베이스 기술 / 데이터베이스 리팩토링

그리고 이러한 작업을 올바르게 수행하려면 이해 관계자의 지원을 받아야합니다. 그러나 이러한 제품을 사용하면 확신을 가지고 주요 방식으로 제품을 신속하게 변경할 수있는 올바른 도구와 프로세스를 갖게됩니다. 때때로 당신의 변화 능력은 변화의 위험을 관리하는 능력이고 개발 관점에서 이러한 도구 / 기술은 당신에게 확실한 기반을 제공합니다.

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