2008-09-16 6 views
16

당신은 방금 압력을 가해 몇 가지 중요한 기능을 제공하는 코드 더미를 작성했습니다. 몇 가지 모서리를 자르고, SerialIndirectionShutoffManager와 같은 이름을 가진 과부화 된 클래스를 만들었습니다.페니 핀치 보스에게 리팩토링 작업을 어떻게 정당화합니까?

상사에게이 물건을 청소하려면 일주일이 필요하다고 말합니다.

"무엇을 정리하나요?"

"내 코드 - 그 돼지!"

"더 많은 버그 수정이 있다는 뜻입니까?"

"별로, 그 이상처럼 ..."

"넌 그것을 실행 속도가있어?"

는 "아마, 꾸물 거리지하지 이잖아 .."

당신은 기회가있을 때 "그럼 당신은 그것을 제대로 작성해야합니다. 지금은 당신이 여기 다행이야, 그래, 나는거야 가야 해요 앞서이 주말에 와서하도록 요청 ... "

내가 도착하게 파울러의 책을 읽었습니다,하지만 난이 문제에 그의 조언에 동의 확실하지 않다 :

  • 일반 코드 리뷰를 장려, 따라서 리팩토링 작업은 개발 프로세스의 자연스러운 부분으로 권장됩니다.
  • 당신은 개발자이자 의무의 일부라고 말하지 마십시오.

이 두 가지 방법 모두 관리자와 통신 할 필요가 없습니다.

상사에게 무엇을 말합니까?

답변

25

원래 추정치에 리팩토링 시간을 포함시키는 것이 중요합니다.당신이 제품을 배달 한 후에 당신의 상사에게 가서 당신이 실제로 끝나지 않았다는 말을하면 끝내는 것에 대해 거짓말을합니다. 실제로 배달 가능 기한을 마감하지 않았습니다. 그것은 외과 의사가 수술을 한 것과 같습니다. 그런 다음 수술을 마치기 전의 모든 것을 되돌려 놓지 않도록합니다.

원래 일정에 개발 (예 : 리팩토링, 사용성 연구, 테스트, 품질 보증, 수정)의 모든 부분을 포함하는 것이 중요합니다. 궁극적으로 이것은 프로그래머 문제로서의 관리 문제가 아닙니다.

그러나 만약 당신이 혼란을 물려 받았다면 사장에게 프로젝트를 서둘러 끝내는 마지막 프로그래머들이 모서리를 자르고 그 부분이 절름 거리는 것을 설명해야 할 것입니다. 잠시 동안 문제를 반창고 할 수는 있지만, 각 반창고는 문제를 지연시키고 궁극적으로 문제를 해결하는 데 훨씬 더 많은 비용을 부담하게됩니다.

사장님 께 솔직하게 말해서 프로젝트가 끝날 때까지 완료되지 않았 음을 이해하십시오.

+2

+1에 대해 "거짓말하는 것에 대해" –

6

거짓말. 새로운 기술에 대한 연구라고 말하십시오. 그런 다음 비용이 그 혜택을 정당화하지 않는다고 결정했다고 말하십시오. 그는 당신이 위대한 일을했다고 생각합니다.

lol @ people 다운 modding/marking 공세.

싼 소프트웨어에서 좋은 소프트웨어를 이해하지 못하는 보스를 꼬박 꼬박 싸우는 사람이라면 궁극적으로 그를 행복하게 만들 것입니다. 그것이 나라면, 나는 회사를 떠나 자신의 개발자가 훌륭한 코드를 작성하는 것을 존중하는 곳으로 갈 것입니다. 그러나 다시, 이것이 제가 고위직에있는 이유입니다.

+0

동의합니다 - 이것이 내가 어떻게 내 최고의 작업을 수행했는지입니다. 나는 내가하고있는 일을 내 상사에게 말하지 않고 시간이있을 때 천천히 나쁜/구식 코드를 대체합니다. 한 번 이상 내 엉덩이를 구 했어요. – Seibar

+1

나는 이것이 공세로 표시되었다고 생각하지 않는다. 이것은 정말로 진실입니다. – ljs

+0

예, 사장님이 더 이상 묻지 않습니다. 그는 내가하고있는 것에 대해 물어볼 것입니다. 나는 현재 초점이 무엇인지와 관련이없는 레거시 코드의 xx 조각에 있다고 이야기 할 것입니다. 그는 "소리가 좋아"좋아합니다. –

3

항상 리팩토링해야하므로 .... 정당화 할 필요가 없습니다. 큰 놨을 정리

가/재 설계가 ... 그러나, 통제를 얻기 위해이 아니 "리팩토링"

리팩토링이 순간의 문제이어야한다을 리팩토링을 포함하거나 수 있습니다 더 도구 지원이없는 경우, 분 .

2

나는 Martin Fowler가 "Refactoring"한 대답을 좋아합니다. 상사에게 당신이 알고있는 가장 빠른 방법으로 소프트웨어를 개발할 것이라고 말하십시오. 대부분의 경우 소프트웨어를 개발하는 가장 빠른 방법은 리팩터링하는 것입니다.

당신의 상사에게 말할 다른 것은 미래 개선을위한 비용을 줄이는 것입니다.

5

소프트웨어 프로젝트와 관련된 비용의 80 %가 라이프 사이클의 유지 관리 단계에 제공됩니다. 미래의 문제를 완화하고 몇 가지 예를 든다면 리팩토링은 나중에 코드를 유지해야 할 필요가있을 때 실질적인 비용 혜택을 얻을 것입니다.

이것은 프로그래머가 허영심이 아닌 이유로 리팩토링한다고 가정합니다.

7

그냥 정상적인 과정으로 일정을 잡고 예약하십시오. 리팩토링 시간을 예측하여 새로운 변경을 시작하거나 변경을 완료합니다 (이상적). 처음에는 새 코드 (추출 방법 등)를 탐색하는 동안 저는 항상 리팩토링을합니다.

+0

용서를 구하는 것보다 쉽습니다. 허가. - Grace Hopper –

22

그가 이해할 수있는 언어로 말하십시오.

리팩토링은 디자인 부채를 지불합니다.

사장에게 수집 고지가있을 때까지 매월 회사 신용 카드 청구서를 지불하는 대 대금을 지불하지 않는 이유를 상사에게 문의하십시오. 그에게 리팩토링은 월급을받는 것과 같다고 말하십시오.

+2

그것은 내가 읽은 최고의 유추들 중 하나입니다. – TerryP

+0

@TerryP : "기술 부채"로 검색하십시오. Brian은 개념을 발명하지 않았습니다. – Novelocrat

0

지금 나를 리팩토링 할 적은 돈 ...

또는 더 많은 돈을 나중에 잘못되면 어떤 수정과 나 리팩토링 할 수 있습니다.

3

로버트 글래스 (Robert Glass)의 최근 저서 중 하나 (나는 참고 문헌을 찾아보아야한다)에서 잘 유지 된 코드의 비용에 관한 연구를 언급했다. 그들이 발견 한 것은 유지 관리가 잘되어 있지 않은 코드보다 자주 유지 보수 된 코드가 편집되었다는 것입니다. 그것들은 직관력이 떨어지는 것처럼 들리지만, 더 깊게 파고 들었을 때 그 이유를 발견했습니다 :

잘 관리 된 코드는 유지 보수가 잘되지 않은 코드와 동일한 시간대에 더 많은 기능이 추가되었습니다.

보스와 같은 기능이 있습니까? 물론, 그들은 모두합니다. 코드 유지 관리 능력을 향상 시키면 제한된 예산으로 더 많은 기능을 제공 할 수 있습니다.

0

때로는 새로운 일자리를 구할 때입니다. 당신이 단지 "해내기를"원한다는 영예가있는 사람들이 있습니다. 당신이 그 상황 중 하나에 있다면, 나는 거기에 있었고, 그 후에 그냥 떠나십시오.

그래, 미래 비용에 관한 그 밖의 모든 것들은 좋은 생각입니다. 나는 단지 대부분의 상사가 자신이 원하는 것을 원하기 때문에 자신이 거짓말을한다고 생각하며, 미래에 어떤 일이 일어날지를 볼 수 없다.

여러분의 상사에게 행운을 빈다. 희망적으로 그 또는 그녀는 합리적입니다.

-1

해달라고 .... 그냥 가서 더 많은 장소에서 새로운 일자리를 구하십시오.

0

나는 상사에게 말하지 않고 작업을 시작해야한다고 생각합니다. 이것은 진정으로 내가 어떻게 최선을 다했는지입니다. 나는 내가하고있는 일을 내 상사에게 말하지 않고 시간이있을 때 천천히 나쁜/구식 코드를 대체합니다.

그것은 한 번 이상 내 엉덩이를 구해 줬습니다.

0

사장님이 코드를 리팩토링하거나 정리해야 할 필요성을 이해하지 못하면 엔지니어링 관리자가되기에 충분한 엔지니어링 지식이 있는지 궁금해 할 것입니다.

0

리팩토링 할 시간을 줄 수있는 보스를 찾는 것이 드뭅니다.

0

리팩토링을위한 가장 간단한 경우는 지나치게 복잡한 코드를 수정하는 것입니다. 문제의 소스 코드의 McCabe 순환 복잡도를 측정하십시오 (소스 모니터는 이러한 문제를 해결하는 훌륭한 도구입니다). 순환 복잡도가 높은 소스 코드는 강한 상관 관계 결함과 잘못된 수정 사항이 있습니다. 간단히 말해서 복잡한 코드는 수정하기가 어렵고 결함이있는 수정을 할 가능성이 더 큽니다. 이것이 관리자에게 의미하는 바는 제품의 품질이 악화되고 버그를 수정하기가 어려워지고 프로젝트 일정이 궁극적으로 더 나 빠진다는 것입니다. 그러나 복잡성을 리팩토링 할 때 코드의 투명성을 향상시키고 불분명하고 어려운 버그의 가능성을 줄이며 유지 관리를 쉽게 만듭니다 (예 : 유지 보수 프로그래머가이 때문에 더 큰 유지 관리 범위를 가질 수 있음).

또한 유지 관리주기에서 불필요한 제품이 아닌 경우 복잡성 감소로 인해 프로젝트에 새로운 요구 사항이 추가 될 때 응용 프로그램을 쉽게 확장 할 수 있습니다.

0

상사는 정확한 기술 결정 (리팩터링시기 포함)을 위해 개발자에게 신뢰해야합니다.

신뢰를 설정하거나 보스를 바꾸거나 dev를 바꿉니다.

0

또 다른 좋은 비유는 깔끔한 건물 사이트를 유지 관리하는 것입니다. 유일한 주목 포인트는 프로그래머가 건설 노동자를 대표하지 않으며 매니저가 감독을 대표하지 않는다는 것입니다. 그럴 경우, 유능하고 양심적 인 건설 노동자가 자신들의 작업 공간에서 좋은 질서를 유지할 책임이 있기 때문에, "처음부터 올바르게"할 것입니다.

실제로 코드 자체은 노동자를 나타내며 개발 프로세스는 감독입니다. 엉망진창은 서로 다른 비즈니스에서 진행되는 다양한 거래에 의해 생성됩니다 (즉, 서로 다른 코드 기능이 상호 작용하여 각 기능이 잘 작동하지만 그 사이의 솔기가 혼란 스럽습니다). 회사원이 회사의 손을 잡고 정리합니다. 무질서가 자리 잡고있는 곳을 주시하고, 그것을 정리하기 위해 행동하는 것 (즉, 리팩토링을 요구하는 소프트웨어 프로세스).

0

내가 방금 한 작업은 리팩토링 프로세스가 새로운 기능을 더 빠르게 개발하고 코드가 더 우수한 순서와 구조를 가지며 새 버그의 가능성을 줄이는 데 도움이된다는 것을 비즈니스 담당자에게 설명하는 것입니다. 이전보다 훨씬 쉽게 코드를 검사 할 수 있으므로 속도가 향상됩니다.

비즈니스 사람들이 똑똑하다면, 그들은 계속해서 공장 초기화 프로세스를 수행하도록 권장 할 것입니다.

건물 은유로 설명 할 수 있습니다. 리팩토링을하지 않으면 파이프, 창문, 문에 문제가 생길 수 있으므로 엉뚱한 코어로 엉성한 건물로 끝날 것입니다.