문제

내가 쓴 코드를 유지하려면 변수의 이름을 잘 지정하고, 코드를 문서화하고, 아무것도 반복하지 않도록하고, 추상화가 작동하지 않도록 해킹이 필요하지 않도록해야합니다. 암호.

그러나 내가 본 다른 많은 코드베이스는 소용돌이와 비슷합니다. 변수 이름은 foobar이며, 필요하지 않더라도 물건이 계산되고, 많은 해킹과 패치가 적용되고, 추상화가 실패하고, 배포 스크립트가 실패합니다 ... 코드는 이해할 수없고 거의 사용할 수없는 수프입니다.

그래서! 궁금해. 품질이 좋지 않은 코드베이스를 어떻게 유지합니까?

도움이 되었습니까?

해결책

규율

다른 팁

일정한 리팩토링; 코드 파일을 열고 이상한 것을 볼 때 기존 코드의 설계를 향상시키기 위해 몇 분 동안 투자 할 수 있습니다.

단위 테스트 제품군을 갖추면 변경으로 인해 변경된 코드가 여전히 작동하는지 또는 파손되는지 여부에 대한 확신을 갖기 때문에 도움이 될 수 있습니다.

그것은 집에 창문이 부러진 이야기와 비슷합니다. 깨진 창이 보이면 고정해야합니다. 당신이 그것을 고치지 않으면, 상황이 거기에서 으르렁 거리기 시작하고, 그것은 엉망이 될 수없는 혼란을 초래할 것입니다.

내 프로젝트의 대부분은 또한 연속적인 인물을 켜고 있습니다. UnitTests를 구축하고 실행하는 것 외에도 정적 코드 분석 (FXCOP)도 수행됩니다. 이제 결과를 살펴보고보고 된 위반 사항을 수정하려고합니다.

일반적으로 설명하는 것은 모든 코드베이스가 엔트로피를 증가시키는 자연스러운 경향입니다. 그것은 모든 프로젝트에서 개발되고 유지되기 때문에 발생합니다. 이 꾸준한 증가를 막기 위해 다음을 제안 할 것입니다.

  1. 충분한 권한을 가진 팀의 누군가가 돌봐야합니다. 이것은 가장 중요한 부분입니다. 아무도 신경 쓰지 않으면 끝나지 않을 것입니다. 이 점은 분명해 보이지만 그렇지 않습니다.

  2. 표준 및 모범 사례를 설정합니다. 대부분의 언어에는 모범 사례에 대해 누군가가 쓴 책이 있습니다. 예를 들어, Perl에는 Damain Conway의 매우 좋은 Perl 모범 사례 책이 있습니다. 이렇게하지 않는 한, 팀의 모든 사람은 코드, 이름 변수, 댓글 등을 작성하는 자신의 방법이 있습니다.

  3. 코드 리뷰. 코드 검토를 위해서는 체크리스트가 필요합니다. 변경만으로도 충분하지 않으며 모범 사례 목록도 준수해야합니다. 우리는 두 개의 계층 코드 리뷰를 설정했으며, 첫 번째 계층은 피어 코드 리뷰이며, 두 번째 계층은 코드 품질에 관심이있는 릴리스 관리자입니다.

  4. 디자인 리뷰. 버그 또는 향상이 버그 추적 시스템에 채워지면 변경 제어 보드에서 검토하는 것이 중요합니다. 이는 작업 예약 및 작업 설계를 검토 해야하는 사람에 대해서도 결정합니다. 여기에서 코드 추상화를 유지하고 변경이 프로젝트의 디자인 문서 및 목표를 준수 할 것입니다. 팀의 소프트웨어 아키텍트 또는 리드 디자이너는 CCB의 일부 여야합니다.

  5. Code Code 품질 트리거를 확인하십시오. 일부 모범 사례는 코드로 직접 시행 될 수 있습니다. 형식, 탭/공간 사용 등과 같은 것들이 코드를 확인하는 작은 스크립트를 작성하십시오. 이것은 다른 방식으로 코드 품질에 대해 생각하는 데 도움이됩니다.

약간 독서 참조를 위해.

Peer Review는 종이에서 정량화하기 어려운 코드 품질 표준을 신속하게 설정합니다. 단위 테스트를 통해 거의 두려움없이 코드를 변경할 수 있습니다. 징계, 많은 것.

관련 질문 : 사람들은 품질이 좋지 않은 코드를 작성하는 데 어떻게 도망 칩니까?

여기에 답이 있습니다.

우리 산업의 무능한 사람들을위한 좋은 전략은 다음과 같습니다.

  1. 특히 비 기술적 및 반 기술적 인 사람들에게 인상적으로 들릴 수있는 능력을 개발하십시오. 기술인에게 충분히 그럴듯하게 들릴 수 있으며, 균형을 유지하기에 충분합니다.

  2. 터치하는 코드를 완전히 엉망으로 만들어보십시오.

  3. 이제 이것은 중요한 부분입니다. 당신이 발견하기 직전에 다른 곳에서 더 나은 직업을 찾으십시오. 최상의 타이밍은 특정 상황에 따라 다릅니다.

몇 년 전에 들었던 용어를 소개하고 싶습니다. 기술 부채. 여기에 있습니다 (1) 위키 백과 진입 그리고 Martin Fowler의 또 다른 (2) 웹 사이트.

본질적으로, 나는 사람들이 끔찍한 소프트웨어를 구축하기 시작한다고 생각하지 않습니다. 일반적으로 발생하는 것은 시간대가 압축되고, 요구 사항이 수정되거나 중간 개발 및 대체되며 품질 개발 및 설계의 핵심에 다른 상업적 현실이 물린 것입니다.

파울러에서 :

"빠르고 더러운 방식으로 일을하는 것은 금융 부채와 유사한 기술 부채로 우리를 만들어냅니다. 빠르고 더러운 디자인 선택으로 인해 향후 발전. "

Wikipedia에서 :

"연기 될 수있는 활동은 문서화, 테스트 작성, 토론에 참석하고 컴파일러에 참석하고 컴파일러 및 정적 코드 분석 경고를 포함합니다. 다른 기술 부채의 다른 사례에는 조직 주위에 공유되지 않는 지식과 너무 혼란스러운 코드가 포함됩니다. . "

내가 본 것 (그리고 여러 개발 팀을 지시 한 것은 일반적으로 새로운 작업이 개발되기 전에 처음부터 개발 반복으로 코드 기반을 리팩터링하고 정리하는 것입니다.

동료 검토, 단위 테스트 및 전문 소프트웨어 테스터는 모두 좋은 예측 (및 우수한 코드 재사용)뿐만 아니라 그 기술 부채 중 일부를 상환하는 데 도움이됩니다.

예산이있는 경우, 자동 테스트는 유지 관리 (시간, 노력)를 기꺼이 지불하는 한 건전한 투자가 될 수 있습니다.

오늘날 FXCOP (및 좋아하는 사람들)와 같은 양질의 도구가 많이 있지만 즐겁게 할 접근 방식을 신중하게 선택해야합니다.

설계 및 코드 기반의 품질을 유지하려는 노력을 설명해야하므로 개발 팀/제품/회사/고객에게 가장 효과적이고 유용한 방법에 대해 신중하게 생각해보십시오.

[ (1) http://en.wikipedia.org/wiki/technical_debt ]
[ (2) http://martinfowler.com/bliki/technicaldebt.html ]

이것은 단지 경우입니다 당신은 코드를 작성합니다 및 기타 사람들은 그것을 읽습니다
1. 떠났다 나쁜 습관
2. 의미있는 사용 절차, 기능, 변수 이름
3. 문서를 사용하십시오 그것이 어떻게 (프로 시저/기능/계산/등) 작동하는 방법과 그 결과로 인해 불필요한 의견을 제시하지 마십시오.
4. 시도하십시오 코딩에 스타일을 제공하십시오 그래서 사람들은 그것을 알 수 있습니다 (예 : GNU 스타일 코드 사용과 같은)
또는
이를 위해 Code Beautifier를 사용하십시오
5. 팀으로 일한다고 생각하십시오 (당신이 혼자 였더라도) 코드를 읽을 수있는 당신뿐만 아니라 (그랬더라도)
6. 리팩터 코드 또한 좋을 것입니다
7. 팀원과 상담하십시오 당신이 쓴 코드에 대해, 그들은 그것을 읽을 수 있습니까?
8. OpenSource 커뮤니티에서 배우십시오, 그들이 어떻게 작동하고 코드 및 패치를 공유하는지
9. 가능하다면 사용하십시오 SVN 또는 CVS 코드를 유지하기 위해

그리고 기억하십시오 키스 원칙 (케이EEP 에스충돌, 에스푸드)

그리고 물론 단순하고, 마른, 의미 및 아름다운

그것이 바뀌면 (다른 사람들이 글을 쓰고, 읽습니다) 나는 무엇을 말할지 몰랐습니다.

문서화, 소스 제어, 단위 테스트 및 훌륭한 프로그래머가됩니다.

기존 코드를 위반하는 것에 대해 걱정하지 않고 변경 및 리팩토링을 허용하는 포괄적 인 단위 테스트 제품군.

Michael Feather의 "레거시 코드를 사용하여 효과적으로 작업"사본을 선택하는 것이 좋습니다.

Fridgemagnet은 다음과 같이 말합니다.

매우 작을 때 (단일 프로젝트에서 10-20 명 미만) 개발 팀이 될 때 코드베이스를 잘못 유지 하면서만 멀어 질 수 있습니다. 프로젝트가 커지고 팀이 성장하면 연습이 확장되거나 실패합니다.

당신이 요구하는 변화는 본질적으로 해킹에서 프로그래밍 및 최종적으로 소프트웨어 엔지니어링으로의 전환입니다.

소프트웨어 엔지니어링을 통해 팀의 모든 사람이 완벽한 것은 아니라는 것을 알고 있습니다. 코드를 검토하고 다른 사람들이 테스트하고 서로를 교차 확인하도록합니다.

고객이 원하는 건축가가 원하는 건축가의 필요성을보기 시작하여 디자인 문서로 번역 할 수 있습니다. 이것은 다른 사람이 프로젝트에 추가되기 전에 한 달의 시간을 쉽게 먹을 수 있습니다 (그러나 개발 시간 동안 몇 달 또는 몇 년을 절약 할 수 있습니다!). 그는 모든 것이 합리적이며 합리적으로 잘 어울릴 것입니다.

팀의 다른 부분이 통합 지점을 이해할 수 있도록 일반적으로 UML 기반의 디자인 문서가 있습니다. 당신은 행해진 모든 일을 알고 있으면, 그것을 한 사람들없이 다시해야 할 수도 있으므로 문서화하십시오.

품질 프로세스는 훨씬 더 엄격 해지고 테스트 중 특정 버그를 해결하는 변경 사항 만 확인하는 것과 같은 규칙을 시행하기 시작합니다.

테스트, 리팩토링 등은 분명히 핵심이며 동료 및 팀 검토에 의해 강화됩니다.

나는이 유형의 물건이 항상 필요하다고 말하는 것이 아니라 분명히 그렇지는 않지만, 당신의 질문에 따르면, 당신은 crufty 코드베이스에 대해 논의하며, 이러한 모범 사례는 종종 그 문제에 대한 해결책입니다.

일반적으로 이러한 모범 사례는 코드베이스가 너무 나빠서 완전히 실패한 거대한 프로젝트 후에 구현됩니다. 그런 다음 그들은 비난을 피할 수없는 사람을 해고하고, 더 큰 프로젝트에 대한 경험이 희망적인 일부 관리자를 고용하고 (돈이 부족한 경우) Ground Zero에서 다시 시작합니다.

적어도 그것은 내 경험입니다. ymmv

당신은 단지 나쁜 습관을 깨고 배우는 연습, 좋은 도구와 능력과 의지가 필요합니다.

코딩은 필기와 매우 흡사합니다. 누구나 고유 한 스타일을 가지고 있습니다. 레거시 코드를 유지하면서 내가 직면 한 가장 큰 과제 중 하나는 무슨 일이 일어나고 있는지 알아 내려고 노력하는 것입니다. 일반적으로 코드베이스의 일관성이 부족합니다.

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